unityshader入门精要第五章代码注释

本文介绍了ShaderLab的基本格式,通过一个示例展示了如何编写简单的顶点和片元着色器。关键点包括定义Properties、使用CGPROGRAM块、声明顶点和片元着色器,以及理解POSITION、NORMAL、TEXCOORD和SV_POSITION等语义。文章还强调了fixed、half和float的精度差异,以及减少流程控制语句和使用系统语义的重要性。
摘要由CSDN通过智能技术生成

如以下代码所示,这章主要知识点是熟悉shaderlab的格式。

其中语义比较难理解。

Shader "Unity Shaders Book/Chapter 5/Simple Shader"
{

		Properties
		{
			_Color ("Color Tint",Color) =	(1.0,1.0,1.0,1.0)  
//不要加分号MD  声明一个属性_Color,类型是Color,初始值对应白色
		}

		SubShader
		{
			Pass
			{
				CGPROGRAM  //CG代码起始位置

				#pragma vertex vert  
//声明一个顶点着色器,作用于每个顶点,通常是处理从世界空间到裁剪空间(屏幕坐标)的坐标转换,后面紧接的是光栅化。

				#pragma fragment frag   
//声明一个片元着色器,作用于每个屏幕上的片元(这里可近似理解为像素),通常是计算颜色。


				fixed4 _Color;

				struct a2v 
				{
					float4 vertex : POSITION;   //POSITION,全部大写的是CG/HLSL提供的语义
					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);	

//v.normol包含了顶点的法线方向,分量范围在【-1,1】  
//乘0.5之后变成【-0.5,0.5】  和后面的向量相加   color分量变成【0,1】

					return o;  //输出一个记录了顶点数据的结构体
				}

				fixed4 frag(v2f i) : SV_Target   //片元着色器:将顶点中的颜色数据插值后输出
				{
					fixed3 c = i.color;
					c *= _Color.rgb;
					return fixed4(c,1.0);
				}

//SV_target:片元着色器输出时Unity支持的常用语义,输出值会被存储到渲染目标中(render target)

			ENDCG
		}
	}
}

//PS:在片元函数中输出的只能是 COLOR语义的数据(SV_Target SV开头的是系统语义,渲染器要用他们来完成特定事情,这里等同于COLOR语义
//顶点函数输出的必须包含 POSITION语义的数据,当然也可以包含是其他数据类型,不过一旦涉及输入输出都是需要语义的

效果如图

知识点补充:

1.fixed是CG中最低精度的浮点值,还有half,float都表示浮点值。

2.减少在shader中流程控制语句的使用。

3.在某些平台上只支持SV开头的系统语义变量输出,所以尽量使用系统语义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值