如何摆脱Unity中的“影子牙齿”?

时间:2017-01-14 09:08:11

标签: unity3d graphics shadow

我尝试了一切,但没有什么能影响到这一点。唯一的问题是,当我将阴影分辨率更改为“低”时,它变得更加平滑(显然),但仍然不是最好的。如果视角不那么尖锐,那些阴影看起来也会更好。质量设置是最好的,光源是一个聚光灯。这些东西的材料使用标准着色器。我做错了什么?

图像被放大。

Shadow teeth

2 个答案:

答案 0 :(得分:1)

你......能'吨。 :(

问题在于投射的阴影基本上只是一个纹理。纹理点(又名"像素")是方形的。然后,这个阴影纹理被#14;施放"来自光源(想想光是一个相机:它可以看到的每个像素都是一个物体,在光照贴图中变成一个"黑暗的像素;它比这更复杂,但是不是很多)。

您的物体和灯光绝对彼此不正方形。事实上,永远可以将你的立方体彼此旋转五到十度形成一条曲线。这意味着在某个地方,某些边缘会变得松懈。这也解释了为什么将光的位置和方向更改为不同的角度会影响结果:这些边缘更接近(或更不紧密)与光照贴图像素的位置对齐。

你可以尝试各种设置,例如Stable Fit或更高质量的阴影(这真的只是"使用更大的纹理"所以那些锯齿变小,因为相同的体积被更多的阴影像素覆盖)但从根本上说,你不会得到更好的结果。

除非......

您使用烘焙照明。打开“照明”窗口(“窗口” - >“照明”),将灯光设置为烘焙而不是前进/延迟(这意味着它们不是实时并且可能无法移动或以其他方式更改)然后在照明窗口,烘烤你的灯。

这实质上创建了第二个纹理,它围绕着你的对象,并为它们提供阴影和像素不同的排列方式,当对象的面部与阴影投射边缘对齐时,通常会给出更平滑的阴影边缘(例如你的堆积的立方体)。纹理也比运行时光纹理大得多,因为它不必每帧重新计算(实时灯光受到限制,因此它们不会消耗千兆字节的视频RAM)。

烘烤需要一段时间,让它做它的事情。

答案 1 :(得分:0)

您是否尝试使用稳定版(在质量设置下)?