我目前在计算延迟渲染器的光体积半径时遇到问题。在低光强度下,体积大小看起来是正确的,但是当光强度(以及因此半径)增加时,光体积似乎越来越小。
我正在计算光体积半径(在世界空间中),如下所示:
const float LIGHT_CUTOFF_DEFAULT = 50;
mRadius = sqrt(color.length() * LIGHT_CUTOFF_DEFAULT);
然后我使用这个值来缩放一个盒子。
然后在我的着色器中计算衰减,如下所示:
float falloff = 5;
float attenuation = max(0, 1.0 / (1+falloff*(distance*distance)));
所以很明显我在搞乱数学。衰减应该是线性的,对吧?但是我现在如何正确计算光量的世界比例值?
PS,因为我打算使用 HDR 渲染,所以灯光颜色可以超过 (1,1,1)。