最近在做个《MInecraft》,但是出了个奇怪的问题:
图为单一区块在平面上的投影
可以看到,方块的面之间像是有条缝似的,在平面上留下了六边形的图案,可以说是非常奇特和诡异了
一开始,我想说不定是浮点运算不精确的问题导致的,直接把面稍微放大一点就好了,但是放大一点并没有解决,再放大方块都明显不是立方体了……
后来查文档(Unity 用户手册 (2019.4 LTS)/图形/光照/阴影/阴影故障排除),有这么一段话:
反正我是没看懂啥叫光渗……
必应一下,搜到了这个:Layered-->Variance-->Shadow Map - lookof - 博客园 (cnblogs.com)
好,一堆数学公式和看不懂的术语,但是图还是看得懂的:
这不是和我碰到的问题几乎一模一样嘛,可以确定上文的六边形网格图案就是“光渗”了。
解决方法也很简单,如文档所述,Mesh Renderer里面把“照明-投射阴影”改为“双面”就行了。
后来又发现,把光源的法线偏移量设置成0也可以解决这个问题。
那么,“法线偏移”又是干什么的呢?
如图是初学者经常碰到的一个现象:光源方向有条纹状图案(其实也就是错误的阴影),调整距离图案会呈圆形/椭圆形消失掉
这就是阴影瑕疵(Shadow Acne),见:关于Shadow Mappin*生的Shadow Acne,我的理解是不是有问题? - 知乎 (zhihu.com)
刚才提到的Unity文档中也有说到:
法线偏移正是修正阴影瑕疵的一种手段,但是可能会引起上文的光渗现象
至此,我碰到的两种阴影问题就讲完了。
收获则是,影子的问题去光源里找解决办法。