通过使用平滑阴影(即法线插值),尽管多边形数量较少,对象仍可以具有平滑外观。投射阴影光线时可能会发生的令人讨厌的伪影是“阴影线伪影”。由于阴影射线是从某个位置发出的,通常不考虑法线,因此平滑对象上的完整脸部将被阴影化或不被阴影化,从而再次露出硬边缘:



阴影可以说是“正确的”,而奇怪的外观是由法线贴图“作弊”引起的。然而,它在视觉上分散了注意力。上面的链接文章写于2009年,建议去除显示这种伪像的对象上的阴影或自阴影,这(不是非凸形对象)不是令人满意的解决方案。

这是光线跟踪算法固有的一个非常普遍的问题。我想知道是否有比将网格划分为平面阴影的高多边形或完全消除阴影更好的解决方案。

#1 楼

阴影终结器问题(众所周知)在光线跟踪中仍然是一个未解决的问题。如您所说,禁用自阴影并不是一个很好的解决方法,因为非凸网格通常需要自阴影。该方法可能有所改进。除了丢弃与同一对象的所有阴影射线相交之外,您仅可以丢弃相交的对象(如果它与同一对象相交并且通过三角形的反面)(即,如果$ d \ dot \ N> 0 $,则丢弃该相交) ,其中$ N $是相交多边形的几何法线,而$ d $是阴影射线的方向。

我成功使用的另一种方法是抵消阴影射线a的原点沿表面法线短距离。这样,阴影射线不会起源于网格的几何表面(仅是近似值),而是起源于真实对象的假设表面。

理论上,您应该选择沿着根据该点与该多边形顶点之间的距离而定为法线,因此原点位于近似曲面上,但实际上,较小的固定偏移量几乎适用于所有情况。

还应确保使用使用法线而不是几何表面来确定光线是否在表面“后面”。也就是说,如果$ N \ dot \ L <0 $,则阴影点在阴影中(不需要投射光线),其中$ N $是插值法线和阴影法线。

评论


$ \ begingroup $
只要关闭对象并且所有面都具有连贯的方向,第一段中的方向技巧就可以完美发挥作用。这是我最喜欢的解决方案。
$ \ endgroup $
–奥利维尔
17年4月12日17:32