1、简单顶点/片元着色器
Shader "Unity Shaders Study/Day One/Simple Shader"
{Properties{//声明一个Color类型的属性_Color ("Color Tint", Color) = (1.0, 1.0, 1.0, 1.0)}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag//在CG代码中,我们需要定义一个与属性名称和类型都匹配的变量fixed4 _Color;//使用一个结构体来定义顶点着色器的输入struct a2v{//POSITION 用模型空间的顶点坐标填充vertex变量float4 vertex : POSITION;//NORMAL 用模型空间的法线方向填充normal变量float3 normal : NORMAL;//TEXCOORD0 用模型的第一套纹理坐标填充texcood变量float4 texcood : TEXCOORD0;}; //使用一个结构体来定义顶点着色器的输出struct v2f{//SV_POSITION pos里包含了顶点在裁剪空间中的位置信息float4 pos : SV_POSITION;//COLOR0 存储颜色信息fixed3 color : COLOR0;};//顶点着色器 输出结构中必须包含一个变量 SV_POSITION//SV_POSITION 顶点着色器的输出是裁剪空间中的顶点坐标v2f vert(a2v v){//声明输出结构v2f o;//把顶点坐标从模型空间转换到裁剪空间o.pos = UnityObjectToClipPos(v.vertex);//v.normal包含了顶点的法线方向,其分量范围在[-1.0,1.0]//下面的代码把分量范围映射到了[0.0,1.0]//存储到o.color中传递给片元着色器o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);return o;}//片元着色器//SV_Target 把输出颜色存储到一个渲染目标中fixed4 frag(v2f i) : SV_Target{fixed3 c = i.color;//使用_Color属性来控制输出颜色c *= _Color.rgb;//将插值后的颜色显示到屏幕上return fixed4(c, 1.0);}ENDCG}}
}
2、假彩色图像可视化模型数据
Shader "Unity Shaders Study/Day One/FalseColor"
{SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct v2f{float4 pos : SV_POSITION;fixed4 color : COLOR0;};v2f vert(appdata_full v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);//可视化法线方向o.color = fixed4(v.normal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);//可视化切线方向o.color = fixed4(v.tangent.xyz * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);//可视化副切线方向fixed3 binormal = cross(v.normal,v.tangent.xyz) * v.tangent.w;o.color = fixed4(binormal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);//可视化第一组纹理坐标o.color = fixed4(v.texcoord.xy, 0.0, 1.0);//可视化第二组纹理坐标o.color = fixed4(v.texcoord1.xy, 0.0, 1.0);//可视化第一组纹理坐标的小数部分o.color = frac(v.texcoord);if(any(saturate(v.texcoord) - v.texcoord)){o.color.b = 0.5;}o.color.a = 1.0;//可视化顶点颜色o.color = v.color;return o;}fixed4 frag(v2f i) : SV_Target{return i.color;}ENDCG}}
}