我最近在一个我正在研究的项目中重写了照明引擎,并注意到我正在对纹理进行划分,并且每个面部只有一个方向。
照明引擎现在是延迟渲染,因此它由作为场景数据处理的3个纹理组成。这可能是纹理条带的原因吗?
以下是截图:
它似乎只发生在灯光接近的地方。
如果有帮助,我的3个纹理采用以下格式:
World fragment position: GL_RGBA16F - GL_FLOAT
World normal direction: GL_RGBA16F - GL_FLOAT
Fragment diffuse texture: GL_RGBA - GL_UNSIGNED_INT
答案 0 :(得分:1)
感谢棘手的怪物和Andon M. Coleman。
棘轮怪指出,它可能是光线撞击表面的角度的圆角误差(导致正常和方向之间的低点积)。
原因是法线方向纹理的内部格式设置为GL_RGBA16F - 16位浮点数导致舍入。将格式设置为GL_RGBA32F通过保持32位浮点数来修复舍入。
Andon M. Coleman指出我应该停止使用GL_RGBA作为内部格式,因为它不明确且GL_RGBA8是合适的