表面著色器一

2021-08-14 07:12:55 字數 2648 閱讀 1244

在su***ce shader當中不需要編寫pass通道,su***ce shader就是對vertex shader和fragment shader的一種包裝。它主要可以用來生成**,所以生成的過程不需要進行干預,因此pass通道也能夠幫我們自動生成,不需要去新增pass通道。

一、建立的shader的**

shader "custom/su***ce_shader_one" 

//計算高光的光澤度,是乙個浮點值

_glossiness ("smoothness", range(0,1)) = 0.5

//也是乙個浮點值,用來計算材質的金屬光澤

_metallic ("metallic", range(0,1)) = 0.0

} subshader

lod 200

cgprogram

// physically based standard lighting model, and enable shadows on all light types

#pragma su***ce surf standard fullforwardshadows

// use shader model 3.0 target, to get nicer looking lighting

#pragma target 3.0

sampler2d _maintex;

struct input ;

half _glossiness;

half _metallic;

fixed4 _color;

// add instancing support for this shader. you need to check 'enable instancing' on materials that use the shader.

// see for more information about instancing.

// #pragma instancing_options assumeuniformscaling

unity_instancing_cbuffer_start(props)

// put more per-instance properties here

unity_instancing_cbuffer_end

void surf (input in, inout su***ceoutputstandard o)

endcg

} fallback "diffuse"

}

一、

//屬性

properties

//計算高光的光澤度,是乙個浮點值

_glossiness ("smoothness", range(0,1)) = 0.5

//也是乙個浮點值,用來計算材質的金屬光澤

_metallic ("metallic", range(0,1)) = 0.0

}

//如果某一種特性不能使用,會回滾到diffuse

fallback "diffuse"

一、_glossiness:高光的光澤

調整smoothness的大小,可以調節高光的大小,實際上是調節的shader中glossiness的值

二、metallic:金屬質感

金屬質感如果置為1,會得到乙個非常強烈的金屬質感

三、#pragma target 3.0

使用的硬體能力是3.0,值越高代表可以使用的硬體的功能越高,如果沒有使用這句話,預設使用的是2.0

四、sampler2d _maintex;

二維紋理

五、struct input ;

是乙個結構體,用於描述uv的紋理座標。

uv的座標必須以「uv」或者「uv2」開頭,否則會得不到紋理取樣

六、繼續對屬性的宣告

half _glossiness;

half _metallic;

fixed4 _color;

七、tags

描述的是渲染型別,意思是描述的是乙個不透明的物體

八、lod 200

層級細節

九、cgprogram**塊,說明從該句開始,使用的是cg語法,一直到endcg結束

十、#pragma su***ce surf standard fullforwardshadows

#pragma:是乙個編譯指令,總是以#開頭

#pragma su***ce:說明該shader要按照su***ce shader的指令進行編寫

surf :就是下面所定義的函式的名稱

void surf (input in, inout su***ceoutputstandard o)

standard:光照模型,實際上也是乙個函式

fullforwardshadows:描述的一些其它的選項,這個詞描述的是關於陰影的

表面著色器

設計目的 頂點 幾何 片元著色器處理方式比較適合gpu去理解,但是對人理解而言就顯得比較晦澀。所以unity提供了一種適合人類理解的處理方式,也就是表面著色器 光照模型 光照著色器。它是在頂點 幾何 片元著色器上面進行的一層抽象封裝,最終還是會被unity翻譯成頂點 幾何 片元著色器的處理方式。表面...

表面著色器

除了幾乎從頭開始編寫著色器之外,unity還允許我們定義一些引數,並讓unity生成執行複雜光照計算的 這些著色器稱為 表面著色器 之前的basic shader轉換到表面著色器 使用表面著色器時,我們不必做其他的事情,因為unity會為我們生成它們。為了轉換為你表面著色器,可以完全刪除頂點著色器。...

表面著色器二

一 surf函式 void surf input in,inout su ceoutputstandard o 二 該函式是無返回值的,第乙個引數input in就是我們定義的乙個結構體 struct input 在這個函式中,只是使用了乙個主紋理的紋理座標,這個紋理座標必須要以uv小寫開頭 三 第...