什么可以导致OpenGL中的条带纹理?

时间:2014-01-05 00:27:54

标签: opengl textures rendering deferred visual-glitch

我最近在一个我正在研究的项目中重写了照明引擎,并注意到我正在对纹理进行划分,并且每个面部只有一个方向。

照明引擎现在是延迟渲染,因此它由作为场景数据处理的3个纹理组成。这可能是纹理条带的原因吗?

以下是截图: Banding texture

它似乎只发生在灯光接近的地方。

如果有帮助,我的3个纹理采用以下格式:

World fragment position: GL_RGBA16F - GL_FLOAT
World normal direction: GL_RGBA16F - GL_FLOAT
Fragment diffuse texture: GL_RGBA - GL_UNSIGNED_INT

1 个答案:

答案 0 :(得分:1)

感谢棘手的怪物和Andon M. Coleman。

棘轮怪指出,它可能是光线撞击表面的角度的圆角误差(导致正常和方向之间的低点积)。

原因是法线方向纹理的内部格式设置为GL_RGBA16F - 16位浮点数导致舍入。将格式设置为GL_RGBA32F通过保持32位浮点数来修复舍入。

Andon M. Coleman指出我应该停止使用GL_RGBA作为内部格式,因为它不明确且GL_RGBA8是合适的