【发布时间】:2018-05-19 15:40:13
【问题描述】:
我正在尝试在我的简单 OpenGL 渲染器中实现 PBR,并尝试使用多个光照通道,我使用每个光照一个通道进行渲染,如下所示:
1- 第一遍 = 深度
2- 第二遍 = 环境
3- [3 .. n] 用于场景中的所有灯光。
我将混合函数 glBlendFunc(GL_ONE, GL_ONE) 用于通道 [3..n],并且在每个片段着色器的末尾进行 Gamma 校正。
但我的输出图像仍然存在问题,当我使用纹理贴图时,它看起来很嘈杂。
这些步骤有什么问题吗?或者这个过程有什么改进?
【问题讨论】:
-
"我在每个片段着色器的末尾进行 Gamma 校正。" 你不应该这样做。伽玛校正将线性值转换为非线性的伽玛空间值。您不应该在伽马空间中进行混合;混合只能应用于线性值。
-
所以@NicolBolas 你有解决这个问题的想法吗?好像我没有进行伽玛校正一样,输出图像很暗。
-
最后做一次伽玛校正,很明显。我看不出有任何理由让结果变得嘈杂。你能分享一个示例图像吗?您的渲染器中没有任何随机因素,对吧?
-
您可以做的一些改进是将深度预传递与环境传递相结合,使其成为一次传递。接下来根据材料将材料放入队列中。所以你有不透明的物体,投射阴影的物体和透明的物体。然后为最后渲染透明队列的所有灯光渲染每个队列。