2016-06-03 3 views
1

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); 
+0

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. –

+0

ssaoTexture contient le SSAO calculé pour la trame actuelle. – karl88

Répondre

3

L'occlusion ambiante est une valeur qui décrit la quantité de lumière ambiante peut frapper un point sur la surface. La lumière ambiante est une lumière qui provient de toutes les directions, plutôt que d'une seule source de lumière, et qui contient généralement un éclairage du ciel, un éclairage basé sur l'image, un éclairage global ou une simple couleur plate. La bonne façon d'appliquer AO est de le multiplier avec l'éclairage ambiant. Autrement dit, l'occlusion ambiante est à l'éclairage ambiant, car les ombres sont à l'éclairage direct. Donc, si vos lumières ponctuelles sont des lumières «atmosphériques» et sont censées représenter un éclairage ambiant doux sans reflets spéculaires, alors vous devez appliquer l'AO uniquement sur ces lumières ponctuelles, sans échelle de luminance. Si les lumières ponctuelles sont des lumières avec une source bien définie et que vous n'avez pas d'éclairage ambiant significatif, vous devez être cohérent et appliquer l'AO à toutes les lumières de manière égale, avec une échelle de luminance simulant l'aspect produit par l'application AO correcte.

+0

Merci! Maintenant, je sais comment appliquer cet effet :) – karl88