Phong reflection model

worbswo·2022년 6월 29일
0

OPENGL

목록 보기
1/2
post-thumbnail

Phong reflection model

  • phong reflection model은 OpenGL에서 가장 널리 사용되는 조명
  • 퐁모델은 빛을 계산하기 위해 Ambient, diffuse, specular 성분으로 구성

Ambient reflection

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

위의 그림과 같이 직접적으로 빛에 노출되지는 않지만 주변의 물체에 의해 반사되어 들어온 빛에 의해 밝기가 생긴다.

  • 주변 반사에 의해 물체면으로 입사되는 빛은 거의 모든 방향으로 들어오기 때문에 빛의 양을 계산하기가 매우 복잡하다.
  • 주변광은 시점의 위치에 무간하게 모든 물체면에 똑같은 밝기를 증가시키는 것으로 대신한다. 즉 주변관에 의한 효과는 모든 면을 상수로 밝힌다.

KaIaK_aI_a

KaK_a : 주변광 계수

IaI_a : 광원에서 물체면에 입사되는 입사광의 세기

Diffuse reflection

  • 주변 반사만 사용하면 물체의 모든 부분은 동일한 밝기로 보이기 때문에 물체의 3차원적인 입체감을 부여하기 어렵다.
  • 물체의 명암을 부여하기 위한 것이 확산 반사이다.
  • 확산 반사는 광원에서 나온 빛이 직접 물체면에 부딪혀 여러반향으로 확산되는 난반사에 해당

  • 확산광의 세기는 물체면에 서 있는 방향에 따라 달라짐
  • 광원에 정면으로 노출된 물체면이 가장 밝다.
  • 광원에서 정면으로 노출된 면은 광원 벡터와 법선 벡터의 방향이 일치는 면이다. 이 상태에서 물체면을 기울어질 경우 램버시안 법칙이 적용된다.
  • 램버시안 버칙에 의하면 면의 밝기는 광원 벡터와 법선 벡터가 이루는 각 → 입사각의 코사인에 정비례

KDID(N^L^)K_DI_D(\hat{N}\cdot\hat{L})

N^\hat{N} : 표면 법선 벡터

L^\hat{L} : 광원 벡터

KDK_D: 확산광 계수

IDI_D : 입사광의 세기

Specular reflection

  • 반질반질한 표면에서 반사되는 빛을 경면광이라고하고, 경면광에 의해 물체면에 형성된 반짝이는 이미지를 하이라이트라 한다.
  • 경면광에 의한 물체면의 색은 물체의 자체의 색이 아니라 광원에서 나오는 빛의 색이 그대로 우리 눈에 들어온다.

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

  • 일반적으로 물체면이 완벽하게 매끄러울 수는 없으므로 경면광도 약간은 다른 방향으로 흩어진다.

  • 시점이 약간 비껴 나있어도 반사광의 일부가 시점에 도달한다.
  • 반사광을 중심으로 하는 Lobe는 시점과 반사 벡터가 일치할때 가장크다.
  • Phong의 경우 Lobe를 코사인 함수로 모델링한 것으로 경면반사의 양을 cosθ 로 간주

  • cosθ 에 가해지는 승수 n에 의해 물체면의 매끄러운 정도를 반영, 이 승수를 광택 계수(shineness Coefficient)라 한다.

KsIs(R^V^)nK_sI_s(\hat{R}\cdot\hat{V})^n

KsK_s : 경면광 계수

IsI_s : 입사광 세기

Combine reflection

I=AmbientReflection+DiffuseReflection+SpecularReflection=KaIa+KdId(N^L^)+KsIs(R^V^)nI = AmbientReflection + DiffuseReflection + SpecularReflection \\ = K_aI_a + K_dI_d(\hat{N}\cdot\hat{L}) + K_sI_s(\hat{R}\cdot\hat{V})^n

profile
코딩은 내가 생각하는 모든것을 가능하게 해준다

0개의 댓글