스페큘러 표현 공식은 여러 가지가 있지만 가장 유명하고 전통적인 표현 방식은 퐁 반사 (Phong Reflection) 입니다.
“Illumination for computer generated pictures” Bui Tuong Phong. Utah University. 1975.
이 공식의 기본 원리는, ‘내가 보는 방향으로부터 반사된 방향에 조명이 있으면 그 부분의 하이라이트가 가장 높다’ 에서 출발합니다
이 공식은 스페큘러가 흰 공으로 표현됩니다. 물론 실제 물리적으로 스페큘러가 언제나 동그라미일리는 없지만, 기본적으로 태양을 상정한 간략화된 표현이기 때문에 이렇게 만들어졌지요.
압도적으로 밝은 광원이 있을 경우 스페큘러는 흰 동그라미 모양(하이라이트)으로 보일 수 있습니다
(실제 세상의 스페큘러는 주변의 다양한 광원 모습에 반응하므로 리플렉션이라고 부르는게 더 정답에 가깝습니다만...)
그리고 이 하이라이트를 수학적으로 표현한 퐁 공식의 원리는 다음과 같이 설명할 수 있습니다.
‘내 시선벡터(V)를 노말 방향(N)을 기준으로 반사하는 반사벡터(R)와, 조명벡터(L)의 내적으로 스페큘러가 표현됩니다’
즉 R · L 이 기본 공식입니다.
요걸 일반인의 언어로 분석하면 다음과 같지요.
' 내 시선이 표면에 튕겨진 반사방향에 조명이 정확히 뙇 있다면 거기가 가장 정반사가 되어 밝은 표면일거 아녀?
그리고 내 시선이 표면에 튕겨진 반사방향과 조명이 각도차이가 나면 날수록 좀 어두울거 아녀?'
그렇지만 이 공식을 계산하기 위해서는 R 벡터(반사벡터) 를 연산해 내야 하는데, V 벡터를 기반으로 R 벡터를 계산해 내려면 R = 2N(L ∙ N) - L 이라는 공식으로 계산해 내야 하지요.
이렇게 구해놓은 R 벡터와 조명의 L 벡터의 차이를 계산하면 스페큘러가 되는거라, R과 L 벡터를 dot 해 주면 됩니다. (너무 큰 동그라미가 나와서 범위를 좁히기 위해 pow를 많이 해줘야 하지만)
댓글