Posts Lighting Models
Post
Cancel

Lighting Models

Vectors


  • L (Light) : 정점에서 광원을 향하는 방향의 벡터
  • N (Normal) : 정점의 노멀 벡터
  • V (View) : 정점에서 카메라를 향하는 방향의 벡터
  • R (Reflect) : 노멀벡터를 법선으로 하여 계산한 L의 반사 벡터 ( 2N(NdL)-L )
  • H (Half) : 블린퐁에서 사용, L와 V의 중간 벡터 ( normalize(L + V) )

  • NdL = dot(N, L) : 기본 램버트 공식
  • NdV = dot(N, V) : 림라이트에서 사용
  • RdV = dot(R, V) : 퐁 스페큘러에서 사용
  • NdH = dot(N, H) = dot(N, normalize(L + V) : 블린퐁 스페큘러에서 사용


Lighting Models


Lambert

  • 조명 모델의 기본
    1
    
    Diffuse = saturate(NdL)
    


Half Lambert

  • 램버트의 계산 결과 범위를 [-1.0, 1.0]에서 [0.0, 1.0]으로 옮긴 것
    1
    
    Diffuse = NdL * 0.5 + 0.5
    


Specular


Phong

  • Phong Reflection의 기본 원리 : 보는 방향으로부터 반사된 방향에 조명이 있으면, 그 부분의 하이라이트가 가장 높다
  • 반사 벡터 R = 2N(NdL) - L
  • 또는 R = reflect(-L, N);
  • RdV = dot(R, V)
  • RdV를 기본으로, 연산을 다양하게 커스터마이징하여 스페큘러를 계산할 수 있다.
    1
    
    Specular = pow( saturate(RdV), 10) * 0.5
    


Blinn Phong

  • Phong 스페큘러에서 R 벡터 계산은 비싸기 때문에, 비슷하지만 더 저렴한 하프 벡터를 이용한다.
  • 하프 벡터 H = normalize(L + V)
  • NdH = dot(N, H)
    1
    
    Specular = pow( saturate(NdH), 100 )
    


Rim Light


  • 프레넬 현상 : 물체를 바라볼 때 정면보다 측면일 수록 더 많은 빛을 반사하는 현상
  • 노멀 벡터와 뷰 벡터의 도트 연산을 이용한다.
  • 프레넬 공식
    1
    
    Fresnel = pow(1 - NdV, 3)
    

라이팅 함수 공식


1
Diffuse * LightColor * distanceAtten * shadowAtten + Specular + RimLight
This post is licensed under CC BY 4.0 by the author.