本部分是对《Unity Shader入门精要》的学习记录和总结反思,之后更新的更多部分也是如此
1、基础框架和结构体概念
Shader "Unlit/Shader/Test01"{SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment fragstruct a2v {float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;};float4 vert(a2v v) : SV_POSITION {return UnityObjectToClipPos(v.vertex);}fixed4 frag() : SV_Target {return fixed4 (1.0, 1.0, 1.0, 1.0);}ENDCG}}}
在此先不考虑开放属性Properties模块,由Shader、SubShader、和其中的pass作为基础模块,而核心的代码部分在CGPROGRAM-ENDCG之间,其中包括了上面的struct结构体,通过声明一个额外的结构体,可以让vertex(顶点着色器)和fragment(片元着色器)读取,这便是结构体的作用
2、顶点和片元着色器之间的通信
Shader "Unlit/Shader/Test01"{SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment fragstruct a2v {float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;};struct v2f {float4 pos : SV_POSITION;fixed3 color : COLOR0;}v2f vert(a2v v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);return o;}fixed4 frag(v2f i) : SV_Target {return fixed4(i.color, 1.0);}ENDCG}}}
这里通过v2f这个结构体来储存顶点、片元着色器的信息传递。
通过这个思路,再加上properties就能够看到之前模拟挑战中代码的整体结构了
基本框架大概了解后就能更方便的看懂其他人的代码了,之后比较基础的地方就不再更新,应用在Shader测试部分都有记录
