Light Pre-Pass(或Deferred)Pipeline Bug

时间:2013-06-06 11:17:26

标签: c# graphics xna

我和一些人正在XNA 4.0中创建一个简单的游戏(是的,我知道MS不再支持它,但它是我们的导师给出的要求)。最近我根据J. Coluna's one编写了Light-Pre Pass Renderer。它工作正常,直到我们添加一些网格与凹凸和反照率地图。现在我们有了奇怪的错误。以下是示例:

Renderer bug Renderer bug Renderer bug

我不知道是什么导致这些文物(绿色/紫色)。有时类似的文物发生在地板上,它们是黑色的。你知道渲染器中可能存在什么问题吗?

如果我的帖子不够清楚,请告诉我,我会尝试澄清它。

1 个答案:

答案 0 :(得分:2)

您尚未提供任何代码,因此我必须仅根据观察结果作出答案。

我认为问题来自于与对象几何体的创建方式相关的翻转法线。

如果你仔细观察图像#3 - 你会发现紫色神器也可以在物体的左侧看到,但在较窄的区域。根据这是我提供的理论:

你的动画师创造了这个物体并且不喜欢锋利的边缘 - 所以为了摆脱它们,他或她旋转了边缘顶点,并以一种与形状外部重叠的方式将它们移动到内部。

如果我试图以某种方式说明它看起来像这样:

原始对象:

+ ------- +
| ===== |
| ===== |
| ===== |
+ ------- +

VS。修补对象:

-------
| X === X |
| ===== |
| X === X |
-------

'+'转换为'x' - 表示顶点旋转并在形状内进一步移动。这可能会反转影响从物体反射回来的光线的法线。

我们在图像#3中看到左边有一个带有伪影的狭窄区域的原因可能是因为艺术家同时旋转了所有角落 - 如果是这种情况我相信如果你旋转形状,现象将是对称的意思是你会再次看到物体右侧的更宽的神器并且向左更窄 - 但是如果你翻转形状(在Y 180度上旋转),现象就会随之翻转。

测试此选项的另一个选择是将新的简单框形状放入场景中,并检查工件是否消失。