欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity Shader------顶点函数和片元函数

程序员文章站 2024-03-23 08:19:13
...

顶点和片元函数实现一个白色的效果

Shader "Custom/Shader01"{
	SubShader{
		Pass{
		    CGPROGRAM
			// 声明了顶点函数的函数名
            #pragma vertex vert
		    //声明了片元函数的函数名
            #pragma fragment frag
			//顶点函数(系统调用)
			/*基本作用:将顶点坐标从模型坐标系转换为剪裁面坐标系(从游戏环境转换到视野摄像机屏幕上) 每个顶点都参与计算*/
			float4 vert(float4 v: POSITION) : SV_POSITION {
		    //语义:告诉系统参数的作用
		    //POSITION语义:让系统把顶点左边传递给参数v,SV_POSITION语义:表示float4类型的返回值是剪裁空间的顶点坐标
			    return UnityObjectToClipPos(v); //矩阵相乘函数
		    }
		    //片元函数(系统调用) 
		    /*基本作用:计算并返回每一个像素的颜色值,模型对应在屏幕上的每个像素都参与计算*/
		    fixed4 frag() : SV_Target{
		    	return fixed4(1,1,1,1);
		    }
		    ENDCG
	    }
	}
	FallBack "Diffuse"
}

通过结构体传递参数,NORMAL和TEXCOORD0语义

struct s1 {
    float4 vertex : POSITION;  //告诉unity把模型空间下的顶点坐标传给vertex
    float3 normal : NORMAL;    //告诉unity把模型空间下的法线方向传递给normal
    float4 texcoord : TEXCOORD0;//告诉unity把第一套纹理坐标传递给texcoord
 };
 float4 vert(s1 v1) : SV_POSITION {
    return mul(UNITY_MATRIX_MVP,v1.vertex);
}

在顶点函数和片元函数之间传递数据(使用顶点的法线坐标作为RGB值进行渲染)

Shader "Custom/Shader01"{
	SubShader{
		Pass{
		    CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag
			struct s1 {
				float4 vertex : POSITION;  //告诉unity把模型空间下的顶点坐标传给vertex
				float3 normal : NORMAL;    //告诉unity把模型空间下的法线方向传递给normal
				float4 texcoord : TEXCOORD0;//告诉unity把第一套纹理坐标传递给texcoord

            };
	        struct s2 {
				float4 position : SV_POSITION;
				float3 temp : COLOR0;
			};
			s2 vert(s1 v1){
				s2 s;
				s.position = mul(UNITY_MATRIX_MVP,v1.vertex);
				s.temp = v1.normal;
				return s;
		    }
		    fixed4 frag(s2 s) : SV_Target{
		    	return fixed4(s.temp,1);
		    }
		    ENDCG
	    }
	}
	FallBack "Diffuse"
}

Unity Shader------顶点函数和片元函数

语义

从应用程序传递到顶点函数的语义:
POSITION 顶点坐标(模型空间)
NORMAL 法线(模型空间)
TANGENT 切线(模型空间)
TEXCOORD0~n 纹理坐标
COLOR 顶点颜色
从顶点函数到片元函数的语义:
SV_POSITION 裁剪空间的顶点坐标(一般是系统自动使用)
COLOR0 传递一组值 4个
COLOR1 传递一组值 4个
TEXCOORD0~7 传递纹理坐标
片元函数传递给系统
SV_Target 显示到屏幕上的颜色

相关标签: UnityShader