[UnityShader2]頂點片段著色器基礎
阿新 • • 發佈:2019-02-06
官方文件:http://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
1.語義
SV_Traget:如果頂點/片段程式只輸出一個值,那麼可以使用這個
fixed4 frag (v2f i) : SV_Target
SV_POSITION:儲存裁剪空間中的位置,float4型別,這個是頂點程式必須輸出的一個值
TEXCORD0,TEXCORD1:儲存高精度資料,例如紋理座標、位置等
COLOR0,COLOR1:低精度,0到1範圍(對於顏色,使用低精度的fixed4就足夠了)
VPOS:螢幕空間中的畫素位置
2.變數
a.型別
_MyColor ("Some Color", Color) = (1,1,1,1) _MyVector ("Some Vector", Vector) = (0,0,0,0) _MyFloat ("My float", Float) = 0.5 _MyTexture ("Texture", 2D) = "white" {} _MyCubemap ("Cubemap", CUBE) = "" {}
fixed4 _MyColor; // low precision type is usually enough for colors
float4 _MyVector;
float _MyFloat;
sampler2D _MyTexture;
samplerCUBE _MyCubemap;
對應關係:
Color & Vector :float4、half4、fixed4
Range & Float :float、half、fixed
2D :sample2D
CUBE:sampleCUBE
b.特殊的紋理屬性:
{TextureName}_ST:float4型別,x存tiling的x值、y存tiling的y值、z存offset的x值、w存offset的y值(tiling和offset是紋理的兩個屬性)
例如,如果shader有一個屬性_MainTex,那麼tiling和offset的資訊就會存放在_MainTex_ST中。
3.
struct appdata_base { float4 vertex : POSITION; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; }; struct appdata_tan { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; }; struct appdata_full { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 texcoord3 : TEXCOORD3; #if defined(SHADER_API_XBOX360) half4 texcoord4 : TEXCOORD4; half4 texcoord5 : TEXCOORD5; #endif fixed4 color : COLOR; };
對於一個四元數,w預設值為1。對於一個2D的紋理座標,如果用一個float4來接收,那麼值為(x,y,0,1)
法線x,y,z三個變數的範圍為(-1,1),紋理座標x,y兩個變數的範圍為(0,1)