8

我和一些人正在 XNA 4.0 中创建一个简单的游戏(是的,我知道 MS 不再支持它,但这是我们的导师给出的要求)。最近我写了基于J. Coluna 的Light-Pre Pass Renderer 。在我们添加一些带有凹凸和反照率贴图的网格之前,它工作正常。现在我们有一个奇怪的错误。下面给出例子:

渲染器错误 渲染器错误 渲染器错误

我不知道是什么导致了这些伪影(绿色/紫色)。有时地板上会出现类似的伪影,它们是黑色的。您知道渲染器中可能存在什么问题吗?

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

4

1 回答 1

2

您没有提供任何代码,所以我只能根据观察来回答。

我相信问题出在与对象几何体的创建方式相关的翻转法线。

如果您仔细查看图像 #3 - 您会注意到在对象的左侧也可以看到紫色伪影,但区域较窄。据此,这是我提供的理论:

您的动画师创建了对象并且不喜欢尖锐的边缘 - 因此为了摆脱它们,他或她旋转边缘顶点并将它们向内移动,以与外部形状重叠的方式。

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

原始对象:

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

与修补对象:

  -------
|x===x|
|=====|
|x===x|
  --------

其中“+”被转换为“x”——意味着顶点被旋转并在形状内进一步移动。这可能会反转影响从物体反射回来的光的法线。

我们在图像 #3 中看到左侧有伪影的狭窄区域的原因可能是因为艺术家同时旋转了所有角 - 如果是这种情况,我相信如果你旋转形状,现象将是对称的,这意味着你将再次看到对象右侧较宽的伪影,左侧较窄 - 但如果您翻转形状(在 Y 轴上旋转 180 度),现象将随之翻转。

对此进行测试的另一个选项是将新的简单盒子形状放入场景中并检查工件是否消失。

于 2013-07-29T01:14:00.493 回答