【随随随随笔】Unity中的光渗(Light Bleeding)现象和阴影瑕疵(Shadow Acne)

最近在做个《MInecraft》,但是出了个奇怪的问题:

图为单一区块在平面上的投影

可以看到,方块的面之间像是有条缝似的,在平面上留下了六边形的图案,可以说是非常奇特和诡异了

一开始,我想说不定是浮点运算不精确的问题导致的,直接把面稍微放大一点就好了,但是放大一点并没有解决,再放大方块都明显不是立方体了……

后来查文档(Unity 用户手册 (2019.4 LTS)/图形/光照/阴影/阴影故障排除),有这么一段话:

反正我是没看懂啥叫光渗……

必应一下,搜到了这个:Layered-->Variance-->Shadow Map - lookof - 博客园 (cnblogs.com)

好,一堆数学公式和看不懂的术语,但是图还是看得懂的:

这不是和我碰到的问题几乎一模一样嘛,可以确定上文的六边形网格图案就是“光渗”了。

解决方法也很简单,如文档所述,Mesh Renderer里面把“照明-投射阴影”改为“双面”就行了。

后来又发现,把光源的法线偏移量设置成0也可以解决这个问题。

那么,“法线偏移”又是干什么的呢?

如图是初学者经常碰到的一个现象:光源方向有条纹状图案(其实也就是错误的阴影),调整距离图案会呈圆形/椭圆形消失掉

这就是阴影瑕疵(Shadow Acne),见:关于Shadow Mapping产生的Shadow Acne,我的理解是不是有问题? - 知乎 (zhihu.com)

刚才提到的Unity文档中也有说到:

 法线偏移正是修正阴影瑕疵的一种手段,但是可能会引起上文的光渗现象

至此,我碰到的两种阴影问题就讲完了。

收获则是,影子的问题去光源里找解决办法。

原文地址:https://www.cnblogs.com/MirrozSigmaMax/p/14820540.html