在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小寫開頭 三 第...