u3d shader着色器学习笔记(二)——顶点函数,片元函数

从应用程序传递到顶点函数的语义有 a2v:

POSITION 顶点坐标 (模型空间下)

NORMAL 法线 (模型空间下)

TANGENT 切线 模型空间下

TEXCOORD0~n 纹理坐标

COLOR  顶点颜色

从顶点函数传递给片元函数时候可以使用的语义:

SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)

COLOR0 可以传递一组值 4个 颜色

COLOR1 可以传递一组值 4个

TEXTCOORD0~7 传递纹理坐标

片元函数传递给系统:

SV_Target 颜色值,显示到屏幕上的颜色值

一些着色器的简单写法:

Shader"ff"{

	SubShader{
		Pass{
			CGPROGRAM
			//顶点函数 这里只是声明了顶点函数的函数名  确定位置
			//基本作用是完成顶点坐标从模型空间到剪裁空间(从游戏环境转换到视野相机屏幕上)
#pragma vertex vert
			//片元函数 处理像素 返回颜色值
		    //基本作用 返回模型对应屏幕上的每一个像素的颜色值
#pragma fragment frag
		float4 vert(float4 v : POSITION) :SV_POSITION{//通过语义告诉系统参数的用处 , 比如POSITION是告诉系统我需要顶点坐标
		//SV_POSITION 这个语意是返回给剪裁空间下的顶点坐标
		     return	UnityObjectToClipPos(v);//把模型空间下的顶点信息转换到剪裁空间下
		}
		fixed4  frag():SV_Target{
			return fixed4(1,1,1,1);
		}


			ENDCG

		}
	}
	Fallback "VertexLit"
}

第二种:

Shader"ff3" {
	SubShader{
		Pass{
			CGPROGRAM


	#pragma vertex vert
	#pragma fragment frag
			struct a2v {
				float4 vertex:POSITION;//告诉unity把模型空间下的顶点坐标填充给 vertex
				float3 normal:NORMAL;//告诉unity 把模型空间下的法线方向填充给normal
				float4 texcoord : TEXCOORD0;//告诉UNITY把第一套纹理坐标填充给texcoord
			};
			
			struct v2f {
				float4 position : SV_POSITION;
				float3 temp:COLOR0;//这个语义可以由用户自己定义,一般用来存储颜色		};

			v2f vert(a2v v) {//效果的计算放在顶点函数里 顶点之外的点是通过插值来计算的 性能高 但是效果一般
				v2f f;
				f.position = UnityObjectToClipPos(v.vertex);
				f.temp = v.normal;
				return f;
			}
			fixed4 frag(v2f f) : SV_Target{
				return fixed4(f.temp,0);
			}
			ENDCG
		}
	}
		Fallback "VertexLit"
}

猜你喜欢

转载自blog.csdn.net/nihao561/article/details/80451126
今日推荐