【发布时间】:2023-04-05 08:05:01
【问题描述】:
我正在尝试应用从Nvidia GPU Gems 3 中提取的体积散射后处理,现在我有这样的东西:
float4 main(float2 texCoord : TEXCOORD0) : COLOR0
{
// Calculate vector from pixel to light source in screen space.
half2 deltaTexCoord = (texCoord - ScreenLightPos.xy);
// Divide by number of samples and scale by control factor.
deltaTexCoord *= 1.0f / NUM_SAMPLES * Density;
// Store initial sample.
half3 color = tex2D(frameSampler, texCoord);
// Set up illumination decay factor.
half illuminationDecay = 1.0f;
// Evaluate summation from Equation 3 NUM_SAMPLES iterations.
for (int i = 0; i < NUM_SAMPLES; i++)
{
// Step sample location along ray.
texCoord -= deltaTexCoord;
// Retrieve sample at new location.
half3 sample = tex2D(frameSampler, texCoord);
// Apply sample attenuation scale/decay factors.
sample *= illuminationDecay * Weight;
// Accumulate combined color.
color += sample;
// Update exponential decay factor.
illuminationDecay *= Decay;
}
// Output final color with a further scale control factor.
return float4( color * Exposure, 1);
}
但是这个着色器需要统一的灯光位置,我在想是否可以使用后期处理材料检测屏幕中灯光的位置以及如何做到这一点。有什么想法吗?
【问题讨论】:
-
我不能在我的图形引擎中使用 HDR 纹理,这就是我要求这样做的原因。
-
您尝试解决的问题与尝试确定用于照亮照片中场景的光源的位置没有区别。对于某些设置是可能的(多次镜面反射),对于其他设置是不可能的(仅平面表面的漫射照明)。无论如何,你要解决的问题是计算机视觉的一个难题,也是一个正在进行的研究课题。在任何情况下,它都需要大量计算,并且绝对不是您在渲染场景时想要采用的方法。
-
换个角度看:目前CV上解决这个问题的方法是用概率的方法在一张图片中重新创建场景,用现代的全局光照方法渲染,对比一下photo 并迭代它,直到达到接近匹配。
标签: algorithm opengl graphics glsl shader