【Unity】Shader 基础入门

Unity Shader入门

Shader代码基本结构

Shader "MyShaderName" {
	Properties{
		//  属性
	}

	SubShader{
		// 针对显卡A的SubShader
		Pass{
			// 设置渲染状态和标签
			// 开始Cg代码片段
			CGPROGRAM
			// 该代码片段的编译指令,例如:
			#pragma vertex vert
			#pragma fragment frag

			// Cg代码写在这里
			ENDCG

			// 其他设置
		}
		// 其他需要的Pass
	}

	SubShader{
		// 针对显卡B的SubShader
	}

	// 上述SubShader都失败后用于回调的Unity Shader
	Fallback "VertextLit"
}

具体类似代码

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "MyCustom/SimpleShader" {
	Properties{
		_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语义告诉Unity,用模型空间的顶点坐标填充vertex变量
				float4 vertex : POSITION;
				// NORMAL语义告诉Unity,用模型空间的法线方向填充normal变量
				float3 normal : NORMAL;
				// TEXCOORD0语义告诉Unity,用模型的第一套纹理坐标填充texcoord变量
				float4 texcoord : TEXCOORD0;
			};

			// 使用一个结构体来定义顶点着色器的输出
			struct v2f{
				// SV_POSITION语义告诉Unity,pos里面包含了顶点在裁剪空间中的位置信息
				float4 pos : SV_POSITION;
				// COLOR0语义可以用于存储颜色信息
				fixed3 color : COLOR0;
			};

			// POSITION告诉Unity把模型的顶点坐标填充到输入参数v中
			// SV_POSITION告诉Unity,顶点着色器的输出是裁剪空间中的顶点坐标
			// float4 vert(float4 v : POSITION) : SV_POSITION{
			// 	return UnityObjectToClipPos(v);
			// }

			// float4 vert(a2v v) : SV_POSITION{
			// 	// 使用v.vertex来访问模型空间的顶点坐标
			// 	return UnityObjectToClipPos(v.vertex);
			// }

			// // SV_Target等同于告诉渲染器,把用户的输出颜色存储到一个渲染目标(render target)中
			// // 这里将输出到默认的帧缓存中
			// fixed4 frag() : SV_Target{
			// 	return fixed4(1.0, 1.0, 1.0, 1.0);
			// }

			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 {
				fixed3 c = i.color;
				c *= _Color.rgb;
				return fixed4(c, 1.0);
			}

			ENDCG
		}
	}
}

猜你喜欢

转载自blog.csdn.net/u013246113/article/details/94891451