Shader学习笔记(四)

本文详细介绍了Unity Shader中如何使用结构体来封装变量,包括结构体的声明和使用方式。并通过实例展示了如何定义和使用结构体来提高Shader代码的清晰度和便捷性。

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

Unity Shader中的结构体

用法:

1.结构体的声明以关键字Struct开始,然后紧跟结构体的名字,然后是大括号和代码块,最后大括号后以分号结尾

2.使用时“.引用结构体中的成员变量”

相当于是将一些变量进行了封装,比如在shader代码中用到的语义对参数进行解释说明时,提前在结构体中封装好,将会使结构变得清晰,方便。

代码演示

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

Shader "MyShader/Demo3"{
	Properties{

	}
	SubShader{
		Pass{
			CGPROGRAM
#pragma vertex vert
#pragma fragment frag
			struct a2v {
				float4 vertex:POSITION;//语义:把模型空间下的顶点坐标填充给vertex
				float3:normal:NORMAL;//语义:吧模型空间下的发现方向填充给normal
				float4 texcoord:TEXCOORD0;//语义:告诉unity把第一套纹理坐标填充给texcoord
			};
			float4 vert(a2v v):SV_POSITION{
				return UnityObjectToClipPos(v.vertex);
			}
			fixed4 frag() :SV_Target{
				return fixed4(0.5,1,1,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、付费专栏及课程。

余额充值