【发布时间】:2016-06-03 21:26:57
【问题描述】:
我最近在我的引擎中实现了 SSAO(延迟着色),但我对如何将 SSAO 与全局光和局部光(点光)结合起来非常不安全。
我应该这样做吗:
//Global light pass.
vec3 sceneColor = DiffuseBRDF + SpecularBRDF;
float luminance = dot(sceneColor, vec3(0.2126, 0.7152, 0.0722));
sceneColor *= mix(texture(ssaoTexture, texCoord).r, 1.0, luminance);
//Local light pass.
//Use additive blending in this pass, i.e. glBlendFunc(GL_ONE, GL_ONE).
//The final result would be:
vec3 finalColor = sceneColor + pointLight0 + pointLight1 + ... + pointLightN;
或者这个:
//Global light pass.
vec3 sceneColor = DiffuseBRDF + SpecularBRDF;
//Local light pass.
//Use additive blending in this pass, i.e. glBlendFunc(GL_ONE, GL_ONE).
vec3 finalColor = sceneColor + pointLight0 + pointLight1 + ... + pointLightN;
//Composite pass.
float luminance = dot(finalColor, vec3(0.2126, 0.7152, 0.0722));
finalColor *= mix(texture(ssaoTexture, texCoord).r, 1.0, luminance);
【问题讨论】:
-
嗯,
ssaoTexture是什么意思?我的印象是 SSAO 发生在屏幕空间中,基于找到场景中的角落并基于此移除环境光。我不知道适合该模型的ssaoTexture中的内容。 -
ssaoTexture 包含为当前帧计算的 SSAO。
标签: opengl glsl shader deferred-rendering ssao