顶点着色器和片元着色器的基本结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| Shader "Lesson20/NewUnlitShader" { Properties {
} SubShader {
Pass { CGPROGRAM #pragma vertex myVertex float4 myVertex(float4 v:POSITION):SV_POSITION {
return UnityObjectToClipPos(v); } #pragma fragment myfragment; fixed4 myfragment():SV_TARGET { return fixed4(0,1,0,1); }
ENDCG } } }
|
顶点片元着色器传递更多参数
1.顶点着色器获取更多的数据信息
主要方式:通过使用结构体对数据进行封装,在结构体中成员变量加语义的方式来定义想要获取的信息
2.片元着色器获取更多的数据信息
主要方式:通过使用结构体对数据进行封装,在结构体中成员变量加语义的方式来定义想要获取的信息 注意 :
片元着色器中获取的数据结构基本上都是由顶点着色器传递过来的 所以我们封装的结构体,还需要作为作为顶点着色器的返回值类型
3.例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
Shader "Lesson20/NewUnlitShader" { Properties {
} SubShader {
Pass { CGPROGRAM #pragma vertex vert; #pragma fragment frag; struct a2v { float4 vertex:POSITION; float3 nomal:NORMAL; float2 uv:TEXCOORD0; } struct v2f { float4 position:SV_POSITION; float3 nomal:NORMAL; float2 uv:TEXCOORD0; } v2f vert(a2v data) { v2f v2fData; v2fData.position = UnityObjectToClipPos(data.vertex); v2fData.nomal = data.nomal; v2fData.uv = data.uv;
return v2fData;
} fixed4 frag(v2f data):SV_TARGET { return fixed4(0,1,0,1); }
ENDCG } } }
|