Shader-片元函数调用顶点函数

本文深入探讨了Unity Shader编程中CGPROGRAM结构的应用,包括从应用程序到顶点函数的语义传递,如POSITION、NORMAL等,以及从顶点函数到片元函数的语义使用,例如SV_POSITION和COLOR0。通过具体实例解析了如何在Shader中正确使用这些语义,为读者提供了一个清晰的Shader编程流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

Shader "LXC/03 StructShader"
{
	SubShader
	{
		Pass{
		CGPROGRAM
		
#pragma vertex vert		
#pragma fragment frag

		struct a2v {	//application to vertex
		float4 vertex:POSITION;		//把模型空间下的坐标填充给vertex
		float3 normal:NORMAL;		//把模型空间下的法线方向填充给normal
		float4 texcoord:TEXCOORD0;	//把第一套纹理坐标填充给texcoord
		};
		
		struct v2f {
		float4 position:SV_POSITION;
		float3 temp:COLOR0;		//这个语义可以自己定义,一般存储颜色,把法线作为颜色传递进去
		};
			
		v2f vert(a2v v) {
		v2f f;	
		f.temp = v.normal;
		f.position = UnityObjectToClipPos(v.vertex);		//f.position = mul(UNITY_MATRIX_MVP,v.vertex);
		return f;
		}


		fixed4 frag(v2f f) :SV_Target{
		return fixed4(f.temp,1);
	}
		ENDCG
	}
	}
		Fallback "VertexLit"
}

从应用程序传递到顶点函数的语义有哪些a2v
POSITION 顶点坐标(模型空间下的)
NORMAL 法线( 模型空间下)
TANGENT 切线(模型空间)
TEXCOORD0 ~n 纹理坐标
COLOR 顶点颜色

从顶点函数传递给片元函数的时候可以使用的语义
SV_POSITION 剪裁空间中的顶点坐标(一般是系统直接使用)
COLOR0 可以传递一组值 4个
COLOR1 可以传递一组值 4个
TEXCOORD0~7 传递纹理坐标

片元函数传递给系统
SV_Target 颜色值,显示到屏幕上的颜色

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值