포스트

[ Graphics ] 라이팅

라이팅


라이팅(lighting or illumination) : 빛과 물체 간 상호작용 처리


1. 퐁 모델

  • 점 광원(point light source) : 3차원의 한 점으로부터 전방위로 빛이 발산

  • 방향성 광원(directional light source) 물체 표면의 여러 점에 입사하는 빛의 빛의 방향이 서로 평행하며, 광원의 색상과 입사 방향 고려

점 광원, 방향성 광원


물체 표면에서 감지되는 색상을 디퓨즈(diffuse), 스페큘러(specular), 앰비언트(ambient),발산광(emissive light)로 분리, 계산


1) 디퓨즈 - 난반사

빛벡터(light vector)로 정의된 빛의 방향에 따라, 표면의 빛은 모든 방향을 따라 같은 강도로 반사되고, 카메라의 시선에 무관하다.

디퓨즈의 빛의 강도 계산
  • $p$ : 물체 표면의 점
  • $n$ : $p$의 노멀(noraml)
  • $l$ : 빛 벡터
  • $∂$ : $n$과 $l$사이의 각도, 입사각(incident angle)

$cos∂$($n$과 $l$의 내적)을 사용하여 $p$에 들어오는 빛의 양을 결정, $∂$가 작을수록 $p$는 더 많은 빛을 받고 $n · l$이 음수가 되는 경우, 0을 선택하여 $p$에 들어오는 빛의 양을 0으로 설정한다.

디퓨즈의 색상 계산


  • $s_d$ : 광원의 RGB 색상
  • $m_d$ : 물체의 디퓨즈 계수(diffuse reflectance)

※ $s$ : 광원(light source)
※ $m$ : 재질(material)

광원의 RGB 색상과 물체의 디퓨즈 계수를 통한 색상을 결정하고, 두 식을 결합하여 계산.

식을 결합, 렌더링


2) 스페큘러 - 정반사

시선 벡터(view vector)와 반사 벡터(reflection vector)를 활용, 물체 표면에 하이라이트(hightlight) 생성

스페큘러 반사 벡터


  • $v$ : 시선 벡터, $p$와 카메라를 연결하는 벡터, 실제 카메라 시선과 반대 방향으로 정의
  • $r$ : 반사 벡터, 정반사($p$에 들어온 빛이 입사각 $∂$와 동일한 각도를 이루며 반사)에 따른 벡터
  • $s$ : $l$과 $ncos∂$를 연결하는 벡터


카메라의 위치에 따른 하이라이트 영역 계산


  • $sh$ : shininess, 표면의 매끈함 정도


$cosp (=r·v)$을 통해 카메라의 위치에 따라 하이라이트를 볼 수 있는 영역을 계산한다. $r$과 $v$가 같으면 $sh$값에 관계없이 1이 되어 최대의 하이라이트가 카메라에 보인다. 하지만 $r$과 $v$가 다르면 $sh$가 커질수록 하이라이트는 급격히 감소한다.

식을 결합, 렌더링


  • $s_s$ : 광원의 색상
  • $m_s$ : 물체의 스페큘러 계수(specular reflectance)

$m_s$는 $m_d$와 달리 회색조(gray-scale)로 표현, 물체 표면의 하이라이트가 광원의 색을 반영하도록 하기 위함으로, 따라서 $s_s$가 반사되는 정도를 조절한다.


3) 앰비언트

공간 내 다양한 물체로부터 반사된 빛, 간접 조명으로, 특정한 방향이 아닌 모든 방향을 따라 $p$점에 들어온다. 따라서 이는 $p$에서 모든 방향을 따라 반사된다.

※ $p$에 들어오는 빛의 양은 $p$의 노멀에 무관
※ $p$에서 반사되는 빛의 양은 카메라 시선에 무관.

앰비언트
  • $s_a$ : 앰비언트 빛의 RGB 색상
  • $m_a$ : 물체의 앰비언트 계수(ambient reflectance)

광원으로부터의 빛이 직접 닿지 않는 부분에도 조명 효과 생성 가능하나, 실제 간접 조명에 비해 단순화


4) 이미시브

물체 자신이 빛을 발산하나 광원으로 취급하지 않아, 같은 공간의 다른 물체의 라이팅에 기여하지 못한다.(퐁 모델의 한계)

이미시브


퐁 모델은 다음과 같이 정의된다.

퐁 모델 정의

※ 빛을 발산하지 않는 물체의 경우, 발산광 $m_e$를 삭제
※ 물체 표면이 램버시안 표면에 가깝다면 $m_d$를 크게, $m_s$를 작게 설정
※ 금속성 물체를 표현하기 위해서는 $m_s$를 크게 설정



출처: OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.