본문 바로가기

WebGL

[WebGL] Ambient light

 

 

 

Ambient Light란?

 

Ambient Light, 주변광은 일반적으로 Scene의 전체적인 밝기와 색상을 정의하는데 사용합니다. 실세계의 빛을 컴퓨팅하기엔 굉장히 많은 변수들이 존재하고, 또 이를 구현한다하더라도 소모되는 컴퓨팅 자원이 굉장히 부담스럽기 때문에, 실세계와 상당히 근사한 조명 모델을 사용하여 조명을 구현합니다.

 

일반적으로 나무의 색상은 갈색이지만, 위 사진에선 거의 검정색으로 보입니다.

 

그 이유는 나무의 색상, 즉 나무에 의해 반사된 빛 뿐만 아니라 흙, 물, 등 수많은 광원들에 의해 산란된 빛의 영향을 받고, 애당초 흔히 가정하는 빛의 색상(#ffffff)이 구름에 의해 반사되어, 상당히 어둡습니다.

 

뿐만 아니라 여러 요인들이 더 있지만, 이정도만 해도 컴퓨팅하는데 있어서 꽤나 많은 자원들이 소모됩니다. 

 

따라서 각 광원에 의해 산란된 빛의 조합을 이용하기 보단, 아예 전체적인 빛의 값을 주어 빛의 산란에 근사시킵니다. 

 

빛의 값은 상수값이기에 fragment shader에 넣기 쉽습니다.

 

다음과 같이 말이죠.

void main(){
 
  vec3 baseColor = vec3(1.0);
  vec3 ambient=vec3(.5);
  vec3 lighting = vec3(0.0);
  
  lighting=ambient;
  vec3 color=baseColor*lighting;
  
  gl_FragColor=vec4(color,1.);
}