关于UnityShader中的V2F_SHADOW_CASTER内置宏

本文解析了Unity中用于阴影计算的宏V2F_SHADOW_CASTER的作用原理。通过逐步实验与分析,明确了该宏在不同场景下的定义及应用方式,并揭示了其与SV_POSITION参数的关系。

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

在学习阴影的时候,遇到了这个宏,并不知道这是干什么的,只知道它用在v2f结构体中,

可以在UnityCG.cginc中找到这个宏的唯一一处定义

在其他位置(UnityCG.cginc include的三个其他三个cginc

#include "UnityShaderVariables.cginc"
#include "UnityShaderUtilities.cginc"
#include "UnityInstancing.cginc"
)中都不能找到这定义个宏的定义,百度了一下,查不到详细的说明,Unity的手册上也搜不到这个宏的说明。

那么只能自己在UnityCG.cginc中找一些线索

 

回到定义V2F_SHADOW_CASTER的那一行,可以看到在声明的时候,又使用了另外两个宏,V2F_SHADOW_CASTER_NOPOS和UNITY_POSITION(pos)

在其他地方可以找到V2F_SHADOW_CASTER_NOPOS的定义

虽然目前还不知道什么是SHADOWS_CUBE,和SHADOWS_CUBE_IN_DEPTH_TEX,但是目前应该没用到,所以目前这个宏是下面的那个,是空的。

再来搜第二个宏UNITY_POSITION,同样没有其他地方的声明。那么只能靠删除V2F_SHADOW_CASTER这个宏来看看会有什么错误。

关注第二个错误,第一个错误应该是Unity2018的一个bug,先暂时不管。可以看到Invalid subscript 'pos' 的错误,那也就是说我们没有在v2f结构体中声明pos这个变量。那接下来声明出这个变量

可以看到没有错误了,不过目前还有一个问题,没看到阴影。一般来说SV_POSITION是v2f结构体中重要的参数,那么改成它试试

嗯,可以看到阴影正常显示了,那么基本上可以得出一个结论:

在没有使用SHADOWS_CUBE,或者使用了SHADOWS_CUBE_IN_DEPTH_TEX(虽然目前并不知道这两个是干什么的)时,V2F_SHADOW_CASTER等于float4 pos:SV_POTISION;而在使用SHADOWS_CUBE并且不使用SHADOWS_CUBE_IN_DEPTH_TEX时,V2F_SHADOW_CASTER等于float4 pos:SV_POTISION;float3 vec : TEXCOORD0;

也同时可以得出一个额外的结论,UNITY_POSITION(pos)等于 float4 pos:SV_POTISION;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值