엉뚱하고 기발하게

Phong reflection model(Phong lighting model) 본문

Graphics/OpenGL

Phong reflection model(Phong lighting model)

songsmir 2020. 10. 19. 17:07

본 블로그는 개인적인 공부를 목적으로 작성되었습니다. 

작성된 블로그의 내용은 다른 사이트, 블로그를 참고하였으며, 저작권 문제가 있다면 수정하겠습니다.

또한 잘못된 내용으로 인한 불이익은 사용자에게 있습니다.


Phong reflection model(or Phong lighting model, 퐁 모델)은 OpenGL에서 가장 널리 사용되는 조명 모델이다. (간혹, Phong Shading과 혼동하는 경우가 있으나 다른 것이다.)

퐁 모델은 빛을 계산하기 위한 모델로, Ambient reflection, Diffuse reflection, Specular reflection 성분으로 구성되어 있다.

 

[그림 1] Phong reflection model


1. Ambient reflection

주변 반사는 광원에 직접 노출되지 않는 면에 밝기를 부여하기 위해 사용한다. 지역 조명 모델에서 전역 조명 모델 효과를 근사적으로 부여하기 위해 사용된다.

 

[그림 2] 주변 반사

 

[그림 2]에서 B면은 직접적으로 빛에 노출되지 않지만 주변의 다른 물체면으로 부터 반사되어온 빛에 의해 밝기가 생긴다. 이렇게 주변 반사에 의해 우리 눈으로 반사되는 빛을 주변광(Ambient light)라고 한다.

 

주변 반사에 의해 물체면으로 입사되는 빛은 거의 모든 방향으로부터 날아들기 때문에 어디서 얼마만 한 세기로 날아오는지 계산하기가 매우 복잡하다. 따라서 주변광은 시점의 위치에 무관하게 모든 물체면에 대해 일정 크기로 밝기를 증가시키는 것으로 대신한다. 즉, 주변광에 의한 효과는 모든 면을 상수로 밝히는 것이다.

 

식은,

 

$ K_a  I_a $

 

이다. 여기서, $K_a$는 주변광 계수, $I_a$는 광원에서 물체면에 입사되는 입사광의 세기로 광원에 세기에 비례한다.

 

2. Diffuse reflection

주변 반사만 사용하면 물체의 모든 부분은 동일한 밝기로 보인다. 즉, 광원의 위치에 따른 명암 차이가 전혀 드러나지 않기 때문에 물체의 3차원적인 입체감을 부여하기 어렵다. 물체의 명암을 부여하기 위한 것이 확산 반사이다.

 

확산 반사는 광원에서 나온 빛이 직접 물체면에 부딪쳐 여러방향으로 확산되는 난반사에 해당된다.

 

[그림 3] 완벽 확산체

 

[그림 3]과 같이 매우 거친 면으로부터 반사되는 빛은 거의 모든방향을 향한다. 이러한 물체를 완벽 확산체(Perfect Diffuser)라 한다.

 

[그림 4] 방향성 확산체

 

[그림 4]과 같이 부드러운 표면이라면 반사광은 거의 일정한 방향을 향하며, 이러한 물체를 방향성 확산체(Directional Diffuser)라고 한다.

 

[그림 5] 확산 반사광 분포

 

대부분의 물체면은 [그림 5]과 같이 반 원구 형태로 완벽 확산체이거나 방향성 확산체 이 두 가지 사이에 존재한다.

 

지역 조명모델에서 그래픽 처리를 단순화하기 위해서 반 원구 형태의 완벽 확산체를 가정한다.

 

[그림 6] 확산광의 세기

 

확산광(Diffuse light)의 세기는 물체면이 서 있는 방향에 따라 달라지며, 광원에 정면으로 노출된 물체면이 가장 밝다. [그림 6]처럼 광원에 정면으로 노출된 면은 벡터로 말하자면 광원 벡터와 법선 벡터의 방향이 일치하는 면이다. 이 상태에서 만약 물체면이 기울어질 경우 램버시안 법칙(Lambertian Law)이 적용된다. 램버시안 법칙에 의하면, 면의 밝기는 광원 벡터와 법선 벡터가 이루는 각 즉, 입사각의 코사인에 정비례한다.

 

식은,

 

$ K_d I_d (\hat{N} \cdot \hat{L}) $

 

이다. 여기서, $\hat{N}$는 표면 법선 벡터, $\hat{L}$은 광원 벡터, $K_d$는 확산광 계수, $I_d$는 광원에서 물체면에 입사되는 입사광의 세기로 광원에 세기에 비례한다.

 

3. Specular reflection

새로 산 플라스틱 받침 또는 잘 닦은 사과와 같이 어떤방향에서 바라볼 때엔 매우 반짝이는 것을 볼 수 있다. 이처럼 반질반질한 표면에서 반사되는 빛을 경면광(Specular light)이라 하고, 경면광에 의해 물체면에 형성된 반짝이는 이미지를 하이라이트(Highlight)라 한다.

 

경면광에 의한 물체면의 색은 물체 자체의 색이 아니라 광원에서 나오는 빛의 색이 그대로 우리 눈에 들어온다.

 

[그림 7] 경면 반사

 

[그림 7]과 같이 경면 반사는 빛의 정반사에 의한 것이다. 확산광이 공간상의 모든 방향으로 반사되는데 비해 경면광은 하나의 평면을 따라서 반사된다, 즉, 시점이 정확히 반사광의 진행방향에 놓여 있을 때만 반사광을 볼 수 있다.

 

[그림 8] 경면광 분포

 

일반적으로 어떤 물체면이 완벽하게 매끄러울 수는 없으므로 경면광도 약간은 다른 방향으로 흩어진다. [그림 8]의 오른쪽 그림과 같이 시점이 약간 비껴 나 있어도 반사광 일부가 시점에 도달한다. 왼쪽의 경우 경면광의 세기를 그림으로 표현한 것으로, 반사광을 중심으로 하는 로우브(Lobe)는 시점과 반사 벡터가 일치할 때 가장 크다.

 

Phong의 경우 로우브를 코사인 함수로 모델링한 것으로 경면반사의 양을 $\cos\theta$로 간주한다.

 

[그림 9] 코사인 법칙

[그림 9]에서 $\cos\theta$에 가해지는 승수 $\text{n}$에 의해 물체면의 매끄러운 정도를 반영한다. 이 승수를 광택 계수(Shineness Coefficient)라 한다.

 

식은,

 

$  K_s I_s (\hat{R} \cdot \hat{V})^{n} $

 

이다. 여기서 $K_s$는 경면광 계수, $I_s$는 광원에서 물체면에 입사되는 입사광의 세기, $^{n}$은 광택 계수이다.

 

4. combine reflection

주변 물체에 의한 반사광(Ambient light)인 주변 반사(Ambient reflection), 물체 자체의 거칠기에 의한 반사광(Diffuse light)인 확산 반사(Diffuse reflection), 물체 자체의 매끄러움에 의한 반사광(Specular light)인 경면반사(Specular reflection)를 합한 공신은 아래와 같다.

 

$ \begin{align*}
I &= Ambient Reflection + Diffuse Reflection + Specular Reflection\\
&= K_a I_a + K_d I_d (\hat{N} \cdot \hat{L}) + K_s I_s (\hat{R} \cdot \hat{V})^{n} 
\end{align*} $

 


en.wikipedia.org/wiki/Phong_reflection_model

learnopengl.com/Lighting/Basic-Lighting

ally10.tistory.com/23

zamezzz.tistory.com/154

en.wikipedia.org/wiki/Lambertian_reflectance

slidesplayer.org/slide/14047746/

'Graphics > OpenGL' 카테고리의 다른 글

Lambertian reflectance  (0) 2020.10.19
Blinn-Phong reflection model  (0) 2020.10.19
Vertex Buffer Object(VBO)  (0) 2020.10.11
Comments