书上关于阴影部分虽然篇幅不多,但实际上有非常多的内容,尤其是相当多的宏与函数,而且官方文档也少得可怜,再翻下一章之前,我决定把这些用到的宏能弄明白的先弄明白,要不然就像狗熊掰棒子一样什么都落不下,在后续的博客中记录一下,当做笔记,如果有哪里说得有错误,还望批评指正。
再UnityCG.cginc中可以找到TRANSFER_SHADOW_CASTER_NORMALOFFSET唯一的一处定义
也就是说这个宏等价于后面的宏,TRANSFER_SHADOW_CASTER_NOPOS
可以找到TRANSFER_SHADOW_CASTER_NOPOS的两处声明,目前未用到第一处的使用条件,所以直接看第二处,第二处实际上是两个函数,UnityClipSpaceShadowCasterPos(),与UnityApplyLinearShadowBias(),
第一个函数:翻译过来就是剪裁空间下的阴影位置,
float4 UnityClipSpaceShadowCasterPos(float4 vertex, float3 normal)
{
float4 wPos = mul(unity_ObjectToWorld, vertex);
if (unity_LightShadowBias.z != 0.0)
{
float3 wNormal = UnityObjectToWorldNormal(normal);
float3 wLight = normalize(UnityWorldSpaceLightDir(wPos.xyz));
// apply normal offset bias (inset position along the normal)
// bias needs to be scaled by sine between normal and light direction
// (http://the-witness.net/news/2013/09/shadow-mapping-summary-part-1/)
//
// u