Light Pre-Pass(或Deferred)Pipeline Bug

Sho*_*hot 8 c# graphics xna

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

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

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

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

G.Y*_*G.Y 2

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

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

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

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

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

原始对象:

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

与修改对象相比:

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

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

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

测试此问题的另一个选项是将一个新的简单盒子形状放入场景中并检查伪影是否消失。