2016-06-03 4 views
1

Недавно я реализовал SSAO в своем двигателе (отложенное затенение), но я очень не уверен, как объединить 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); 
+0

Ум, что означает 'ssaoTexture'? У меня создалось впечатление, что SSAO произошло на экране, основываясь на поиске углов в сценах и устранении окружающего света на основе этого. Я не знаю, что будет в 'ssaoTexture', который вписывается в эту модель. –

+0

ssaoTexture содержит рассчитанный SSAO для текущего кадра. – karl88

ответ

3

Окклюзия это значение, которое описывает, сколько окружающий свет может попасть в точку на поверхности. Окружающий свет - это свет, который исходит из всех направлений, а не из одного источника света, и обычно содержит освещение неба, освещение на основе изображения, глобальное освещение или простой плоский цвет. Правильный способ применения АО - это умножить его на окружающее освещение. Проще говоря, окружающая окклюзия - это окружающее освещение, поскольку тени предназначены для прямого освещения.

Итак, если ваши точечные огни являются «атмосферными» огнями и должны представлять собой мягкое окружающее освещение без зеркальных бликов, тогда вы должны применять AO только к этим точечным лампам без масштабирования яркости. Если точечные огни - это источники света с четко определенным источником, и у вас нет значительного окружающего освещения, тогда вы должны быть последовательными и равномерно применять AO ко всем лампам с масштабированием яркости, чтобы имитировать внешний вид, созданный с помощью правильного приложения AO.

+0

Спасибо! Теперь я знаю, как применить этот эффект :) – karl88

 Смежные вопросы

  • Нет связанных вопросов^_^