본문 바로가기
Unreal Engine/Shader

[Shader] 카툰 렌더링 #3 - 빛의 반사 영역과 정반사 이론편

by HungryK 2025. 6. 12.

공부용으로 작성되는 페이지입니다. 틀린 부분이나 환경에 따라 오류가 발생할 수 있습니다. 

 


 

정반사의 원리 

 

정반사(Specular)는 빛이 표면에서 반사되는 현상을 의미한다. 정반사 또한 빛과 반응하는 재질이 가진 속성이라고 보면 된다.

난반사(Diffuse)가 물체의 빛을 흡수한 뒤 고르게 반사시키는 현상이라면, 정반사는 빛을 흡수하지 않고 반사시킨다. 

즉, 난반사는 빛을 흡수하고 고르게 반사시켜 물체의 색상을 정해주(는 것 처럼 보임)지만 정반사는 빛을 반사시키기에 '하이라이트'를 만들어낸다.\

 

하이라이트는 들어온 빛이 특정 영역에 집중되면서 발생하는 현상이다.

 

Specular 자체가 '광택이 나는' 정도의 뜻으로 쓰이는 단어기도 함

 

정반사는 반사된 빛의 방향과 관찰자나 카메라의 시선 방향에 따라 다른 결과가 나오는 게 특징이다.

따라서 Specular BRDF를 구현할 때에는 관찰작의 시선 정보가 추가로 요구된다. 

또한 정반사가 강해지는 조건이 있는데 바로 표면의 매끄러운 정도이다.

 

표면은 실제로는 굴곡진(Roughness) 형태임

 

일반적으로 표면의 러프니스가 높으면 거칠다, 낮으면 매끄럽다고 말한다.

표면의 러프니스가 높으면 정반사로 반사된 빛이 사방으로 펴지는 반면, 낮을수록 반사된 빛이 한 지점에 집중되는 현상을 보인다.

이러한 하이라이트 현상은 눈부심 현상이 동반된다. 

Specular Lobe BRDF

퐁 스펙큘러

퐁 스펙큘러는 노멀을 기점으로 빛이 반산된 반사벡터를 구하는 것에서 시작한다.

반사벡터(R vector)는 내적을 사용하여 2(N * L)N -L로 계산한다.

V Vector는 표면->시선 방향의 벡터를 의미한다

 

즉, 거듭제곱에 따라 결과물이 달라진다는 것을 의미한다. 해당 예시에서는 자체발광하는 느낌을 내기 위해서는 50번정도 곱해줘야하는데,

이 때는 pow()를 사용하여 계산한다. 거듭제곱 횟수를 알기 쉽게 수치가 적혀있지만 요즘 게임엔진이나 그래픽 툴에서는 보통 0~1 값으로 표현된다.

 

퐁 모델은 반사 벡터와 뷰 벡터 사이의 내적을 기반으로 하고 있는 특성상 두 벡터의 사잇각이 90도가 넘어가는 경우 0보다 작아지게 되는데,

간혹 표면의 거칠기가 지나치게 높은 경우 스펙큘러 로브의 크기가 90도를 넘어가는 경우가 발생한다.

이런 경우에는 퐁 모델은 전부 0으로 처리해버리기 때문 제대로 작동하지 못 한다.

 

블린-퐁 스펙큘러

퐁 모델의 개량판으로 하트벡터라는 새로운 벡터가 도입되어있다.

하프벡터란 빅 벡터 L과 카메라 벡터의 V 사이의 중간 방향을 가진 크기 1 단위 벡터를 의미한다.

이전의 퐁 모델과는 달리 반사 벡터를 별도로 구할 필요 없이 두 벡터를 더하고 크기만큼 나눠주는 것으로 구할 수 있다.

 

노말 벡터를 기준으로하므로 노말벡터와 H 벡터의 사잇각이 90도를 넘어갈 일이 없음

 

GGX

앞서 언급한 모델들은 고전에 속하는 대신, GGX는 2007년도에 고안된 최신 모델이다.

 

 

 

참고자료