在学习阴影的时候,遇到了这个宏,并不知道这是干什么的,只知道它用在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;