我和一些人正在 XNA 4.0 中创建一个简单的游戏(是的,我知道 MS 不再支持它,但这是我们的导师提出的要求)。最近在写基于J. Coluna's one的Light-Pre Pass Renderer .它工作正常,直到我们添加了一些带有凹凸和反照率贴图的网格。现在我们有一个奇怪的错误。以下是示例:
我不知道是什么导致了这些伪像(绿色/紫色)。有时地板上会出现类似的伪影,它们是黑色的。您知道渲染器中可能存在什么问题吗?
如果我的帖子不够清楚,请告诉我,我会尽力澄清。
最佳答案
您没有提供任何代码,所以我只能根据观察来回答。
我认为问题出在与对象几何体的创建方式相关的翻转法线。
如果您仔细观察图像 #3 - 您会注意到在对象的左侧也可以看到紫色伪像,但在较窄的区域中。据此,这是我提供的理论:
您的动画师创建了对象并且不喜欢锋利的边缘 - 因此为了摆脱它们,他或她旋转了边缘顶点并将它们以与形状外部重叠的方式向内移动。
如果我尝试以某种方式说明它,它看起来像这样:
原始对象:
+------+
|=====|
|=====|
|=====|
+--------+
对比修补对象:
--------
|x===x|
|=====|
|x===x|
------
'+' 转换为 'x' - 意味着顶点被旋转并进一步移动到形状内部。这可能会反转影响光线从物体反射回来的法线。
我们在图像 #3 中看到左侧有一个带有伪像的狭窄区域的原因可能是因为艺术家同时旋转了所有角 - 如果是这种情况,我相信如果你旋转形状,现象将会是对称意味着您将再次看到对象右侧更宽的伪影和左侧更窄的伪影 - 但如果您翻转形状(在 Y 轴上旋转 180 度),现象将随之翻转。
对此进行测试的另一种选择是将一个新的简单盒子形状放入场景中并检查工件是否消失。
关于c# - 轻度预通过(或延迟)管道错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16960749/