J'ai récemment mis en œuvre SSAO dans mon moteur (ombrage différé), mais je suis très incertain de la façon dont je dois combiner SSAO avec la lumière globale et les lumières locales (lumière ponctuelle).Combiner SSAO avec la lumière globale et les lumières locales
dois-je faire ceci:
//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;
ou ceci:
//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);
Euh, que signifie 'ssaoTexture'? J'avais l'impression que SSAO se passait dans l'espace de l'écran, basé sur la recherche de coins dans les scènes et la suppression de la lumière ambiante basée sur cela. Je ne sais pas ce qui serait dans 'ssaoTexture' qui correspond à ce modèle. –
ssaoTexture contient le SSAO calculé pour la trame actuelle. – karl88