C# 轻预传递(或延迟)管道错误

C# 轻预传递(或延迟)管道错误,c#,graphics,xna,C#,Graphics,Xna,我和一些人正在XNA4.0中创建一个简单的游戏(是的,我知道MS不再支持它,但这是我们导师给出的要求)。最近,我编写了基于的灯光预渲染器。在我们添加一些带有凹凸和反照率贴图的网格之前,它工作得很好。现在我们有了奇怪的虫子。以下是示例: 我不知道是什么导致了这些文物(绿色/紫色)。有时类似的人工制品出现在地板上,它们是黑色的。您知道渲染器中可能存在什么问题吗 如果我的帖子不够清晰,请告诉我,我会尽力澄清。您没有提供任何代码,因此我只能根据观察结果来回答 我认为问题在于翻转的法线与对象几何体的创

我和一些人正在XNA4.0中创建一个简单的游戏(是的,我知道MS不再支持它,但这是我们导师给出的要求)。最近,我编写了基于的灯光预渲染器。在我们添加一些带有凹凸和反照率贴图的网格之前,它工作得很好。现在我们有了奇怪的虫子。以下是示例:

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


如果我的帖子不够清晰,请告诉我,我会尽力澄清。

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

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

如果你仔细观察图像#3,你会注意到紫色的伪影也可以在物体的左侧看到,但是在一个更窄的区域。根据我提出的理论:

您的动画师创建了对象,但不喜欢锐利的边缘,因此为了消除锐利的边缘,他或她旋转了边缘顶点,并以与外部形状重叠的方式将其向内移动

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

原始对象:

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

与修补过的对象相比:

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

其中,“+”转换为“x”-表示顶点在形状内进一步旋转和移动。这可能会反转法线,从而影响从对象反射回来的光线

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


另一种测试方法是在场景中放置一个新的简单长方体形状,并检查伪影是否消失。

如果没有一些代码,很难判断。我猜你的漫反射贴图是完全灰色的?那可能是灯光问题。尝试关闭一些灯光组件(环境光、漫反射光、镜面反射光)并查看问题所在。可见缓冲区(位于左上角)分别为:法线、深度和灯光缓冲区。我一回到家就会试着把灯的部件打开。感谢您的建议:)关闭灯光组件没有帮助。仍然得到相同的工件。我注意到,在我的一位同事更换相机后,这些伪影开始出现,但他只处理相机的位置,其他什么都不做……请添加像素着色器代码,好吗?您的方法似乎与通常的延迟照明有点不同。不幸的是,我不能说是什么导致了你的问题(也许是阴影,也许不是)。我要做的是关闭设备,直到问题消失,然后进一步调查。如果您有图形去毛刺器(PIX或VS 2012调试器),则可以检查颜色的计算方式。