이득우 유튜브 채널 원본 영상 : https://www.youtube.com/watch?v=6qCYaGne8H8
이 포스팅은 이득우 님의 위 영상을 보고 학습한 내용을 정리해 보는 목적이며, 카툰 랜더링에 관한 것이다.

위 이미지는 맨 왼쪽이 원본 이미지로 Blender의 수잔이라는 원숭이 model의 가장 기본적인 랜더링을 시작으로, 이를 변형한 랜더링과 맨 오른쪽 카툰 랜더링의 결과물이다.
Rendering 이란 CG 관련 포스팅에서 다뤘듯이 디지털 데이터를 화면 이미지로 출력하는 일련의 과정을 말한다. Pixel 로 정의되는 이미지는 일례로 Full HD, FHD 영상은 1920 X 1080의 resolution을 통해 총 2,073,600 개의 pixel로 구성된다.
Material 은 말 그대로 재질로, 물체 object가 특정 파장의 빛을 반사하고 흡수하는 특성에 대한 것이다. 이는 사실 그래픽스에서의 Lighting 과 깊이 관련해서 볼 수 있다.
고전적인 Phong's Light model 에서, Lighting은 Ambient, Diffusive, Specular 광의 합으로 계산한다.

빛과 물체의 상호작용을 수식으로 정리한 BRDF는, 표면에 입사하는 빛의 특정 방향에 대한 반사광의 특정 방향으로의 비율을 나타내는 함수에 기반한다. 이는 간단히 말해, 특정 방향에서 들어온 빛이 표면의 어떤 방향으로 얼마나 많이 반사되는지 를 설명한다.
빛의 입사 벡터, 반사 벡터 모두에 의존적.
특정 입사 방향에 대해 모든 가능한 반사 방향으로의 반사율 분포를 나타낸다.
빛의 입사 방향과 반사 방향을 바꿔도 BRDF 값은 동일하며 이는 물리적으로 타당한 BRDF의 중요한 속성이다.
표면에서 반사되는 에너지의 총량은 입사하는 에너지의 총량을 초과할 수 없습니다. 이는 BRDF를 모든 반사 방향에 대해 적분했을 때 1보다 작거나 같아야 함을 의미한다.
BRDF 값은 항상 0보다 크거나 같아야 한다.
현실 세계의 다양한 Material을 묘사하기 위해 다양한 BRDF 모델들이 개발되었으며, 특히나 영상에서는 가장 보편적인 Diffuse Lighting 즉 난반사에 대한 BRDF의 가장 원론적인 모델인 Lambert Diffuse Model 에 대해서 다룬다. 이외에도 다음과 같은 모델이 존재한다.
램버트 모델은 가장 기본적이고 단순한 난반사를 나타내며, Material이 모든 방향으로 균일하게 빛을 반사한다는 가정 하에 이루어진다.
빛이 비스듬히 들어올 수록 반사량이 약해지는데, 이는 표면에 입사되는 빛의 양인 Illuminance가 약해지기 때문이다.

즉, 입사각 cos Theta에 비례한다는 점으로, 굉장히 단순해 보이나, 초창기 컴퓨터의 coordinate 기반하에 굉장히 많은 pixel 연산량을 요구하므로 램버트 BRDF는 한계에 부딪혔다.
이를 해결하기 위해, normal vector와 light vector 간의 사이각인 점을 활용해, Dot product 연산을 통해 해결되었다.
하프 램버트 모델은 기존의 램버트 난반사 모델을 개선하여 카툰 렌더링에서 특히 유용하게 사용되는 조명 모델이다.
램버트 모델은 표면의 법선 벡터(N)와 빛의 방향 벡터(L)의 내적(N⋅L)을 사용하여 계산되는 만큼, 빛이 표면의 옆면이나 뒷면을 비출 때 음영이 급격하게 어두워져 밋밋하고 입체감이 부족한 경험을 주게 된다. 이를 위해선 간접광 에 대한 표현이 필요하나, 이를 더하는 데에 필요한 계산량은 실시간 게임에 적절하지 못하다.
하프 램버트 모델은 램버트 모델의 결과값을 0.5로 스케일링하고 0.5를 더하여 0에서 1 사이의 범위로 조정한다. 이러한 조정을 통해서, 어두운 영역은 밝기가 증가하여 완전히 검게 되는 것을 방지하여 자연스러운 명암 표현이 가능해진다.
카툰 렌더링은 3D 그래픽스로 마치 손으로 그린 2D 애니메이션과 같은 스타일을 표현하는 렌더링 기법이다.

영상에서의 예시: 젤다의 전설
특히나 저사양 기기인 닌텐도 스위치에서 높은 수준의 최적화를 보여주는 젤다의 전설에 적용된 카툰 랜더링을 살펴보면, Lambert 모델과 같이 부드러운 변화 과정이 아니라 특정 영역 기준으로 확 변화는 형태이다.
이러한 부분은 필자가 학부 강의 중 전산학특강에서 디지털 이미지 처리에 공부한 내용을 생각한다면, 특정 threshold값 기준으로 마스킹을 통해 discrete 하게 처리된다고 이해했다.

영상에서의 위 슬라이드 이미지가 이를 잘 표현한다.
이러한 기본적인 로직을 응용하여, 여러 차례의 ceil function을 적용하는 것으로 Band shading 을 적용하여 좀 더 사실적인 묘사가 가능하다.
