凹凸
//法線
Shader"Custom/MyCustomSufaceShader2"{
Properties{
_MainTex("主紋理",2D)="white"{}
_NormalMap("法線紋理",2D)="white"{}
}
SubShader{
Tags{"RenderType"="Opaque"}
LOD200
CGPROGRAM
//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes
#pragmasurfacesurfStandardfullforwardshadows
//Useshadermodel3.0target,togetnicerlookinglighting
#pragmatarget3.0
sampler2D_MainTex;
sampler2D_NormalMap;
structInput?{
float2uv_MainTex;
float2uv_NormalMap;
};
voidsurf?(Input?IN,inoutSurfaceOutputStandard?o)?{
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
float4uv_n=tex2D(_NormalMap?,?IN.uv_NormalMap);
o.Normal=UnpackNormal(uv_n);
}
ENDCG
}
FallBack"Diffuse"
}
透明
Shader"Custom/MyCustomSufaceShader"{
Properties{
_Alpha("Alpha",Range(0,1))=1
}
SubShader{
Tags{"RenderType"="Transparent"}
LOD200
CGPROGRAM
//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes
#pragmasurfacesurfStandardfullforwardshadowsalpha
//Useshadermodel3.0target,togetnicerlookinglighting
#pragmatarget3.0
structInput{
float4_clolor:COLOR;
};
half_Alpha;
voidsurf(Input?_in,inoutSurfaceOutputStandard??o){
o.Albedo=(0.5,0.5,0.5);
o.Alpha=_Alpha;
}
ENDCG
}
FallBack"Diffuse"
}
邊緣發(fā)光
//RimShader
Shader"Custom/MyCustomSufaceShader3"{
Properties{
_MainTex("主紋理",2D)="white"{}
_NormalMap("法線紋理",2D)="white"{}
_RimColor("邊緣光的顏色",Color)=(1,1,1,1)//白色
_RimPower("邊緣光的強度",float)=1
}
SubShader{
Tags{"RenderType"="Opaque"}
LOD200
CGPROGRAM
//PhysicallybasedStandardlightingmodel,andenableshadowsonalllighttypes
#pragmasurfacesurfStandardfullforwardshadows
//Useshadermodel3.0target,togetnicerlookinglighting
#pragmatarget3.0
sampler2D_MainTex;
sampler2D_NormalMap;
fixed4_RimColor;
half_RimPower;
structInput?{
float2uv_MainTex;
float2uv_NormalMap;
fixed3viewDir;
};
voidsurf?(Input?IN,inoutSurfaceOutputStandard?o)?{
o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
float4uv_n=tex2D(_NormalMap?,?IN.uv_NormalMap);
o.Normal=UnpackNormal(uv_n);
float3dotV=dot(normalize(IN.viewDir),o.Normal);
floattemp=saturate(dotV);
floatrim=1-temp;
o.Emission=_RimColor*pow(rim,_RimPower);
}
ENDCG
}
FallBack"Diffuse"
}
* "Queue"標(biāo)簽。定義渲染順序。預(yù)制的值為
* "Background"蝠嘉。值為1000隆夯。比如用于天空盒松却。
* "Geometry"池充。值為2000躯保。大部分物體在這個隊列往扔。不透明的物體也在這里贩猎。這個隊列內(nèi)部的物體的渲染順序會有進一步的優(yōu)化(應(yīng)該是從近到遠,early-z test可以剔除不需經(jīng)過FS處理的片元)萍膛。其他隊列的物體都是按空間位置的從遠到近進行渲染吭服。
* "AlphaTest"。值為2450蝗罗。已進行AlphaTest的物體在這個隊列艇棕。
* "Transparent"。值為3000串塑。透明物體沼琉。
* "Overlay"。值為4000桩匪。比如鏡頭光暈打瘪。
* 用戶可以定義任意值,比如"Queue"="Geometry+10”
* "RenderType"標(biāo)簽吸祟。Unity可以運行時替換符合特定RenderType的所有Shader瑟慈。Camera.RenderWithShader或Camera.SetReplacementShader配合使用。Unity內(nèi)置的RenderType包括:
* "Opaque":絕大部分不透明的物體都使用這個屋匕;
* "Transparent":絕大部分透明的物體济锄、包括粒子特效都使用這個捻浦;
* "Background":天空盒都使用這個;
* "Overlay":GUI、鏡頭光暈都使用這個;
* 用戶也可以定義任意自己的RenderType這個標(biāo)簽所取的值。
* 應(yīng)注意,Camera.RenderWithShader或Camera.SetReplacementShader不要求標(biāo)簽只能是RenderType,RenderType只是Unity內(nèi)部用于Replace的一個標(biāo)簽而已绞惦,你也可以自定義自己全新的標(biāo)簽用于Replace。
比如洋措,你為自己的ShaderA.SubShaderA1(會被Unity選取到的SubShader济蝉,常為Shader文件中的第一個SubShader)增加Tag為"Distort"="On",然后將"Distort"作為參數(shù)replacementTag傳給函數(shù)菠发。此時王滤,作為replacementShader實參的ShaderB.SubShaderB1中若有也有一模一樣的"Distort"="On",則此SubShaderB1將代替SubShaderA1用于本次渲染滓鸠。
* 具體可參考Rendering with Replaced Shaders
float3 viewDir 包含了視角的觀察方向雁乡,主要用于計算視差效應(yīng)(Parallax effects ),邊緣光照糜俗,等等踱稍。
float4 COLOR 包含了經(jīng)過內(nèi)插值(interpolated )的每個頂點的顏色值。
float4 screenPos 包含了用于反射效果的屏幕坐標(biāo)系的位置信息悠抹。例如珠月,在Unity專業(yè)版的WetStreet shader中使用了它。
float3 worldPos 包含了世界坐標(biāo)系中的位置楔敌。
float3 worldRefl 包含了世界坐標(biāo)系中的反射向量桥温,如果Surface Shader沒有重寫o.Normal。參考Reflect-Diffuse shader梁丘。
float3 worldNormal 包含了世界坐標(biāo)系中的法線向量,如果Surface Shader沒有重寫o.Normal旺韭。
float3 worldRefl;
INTERNAL_DATA 包含了世界坐標(biāo)系的反射向量氛谜,如果Surface Shader重寫了o.Normal。為了得到基于逐像素的法線貼圖的反射向量区端,請使用WorldReflectionVector (IN,o.Normal) 值漫。參考Reflect-Bumped shader。
float3 worldNormal;
INTERNAL_DATA 包含了世界坐標(biāo)系的發(fā)現(xiàn)向量织盼,如果Surface Shader重寫了o.Normal杨何。為了得到基于逐像素的法線貼圖的法線向量,請使用WorldNormalVector (IN,o.Normal) 沥邻。參考Reflect-Bumped shader危虱。