셰이딩 수식의 직관적 이해: 수학이 어떻게 예술이 되는가
셰이딩 수식의 직관적 이해: 수학이 어떻게 예술이 되는가
그래픽스에서 사용하는 셰이딩 수식은 단순한 계산식이 아니다. 이 수식은 픽셀의 밝기를 결정하는 직접적인 함수이며, 결과적으로 화면에 보이는 이미지를 만들어내는 디자인 도구다.
따라서 수식을 단순히 “공식”으로 보는 것이 아니라, 입력 값이 어떻게 변할 때 출력이 어떻게 변하는지, 즉 “그래프의 형태”로 이해하는 순간부터 우리는 결과를 예측하고, 나아가 의도적으로 설계할 수 있게 된다.
이 관점에서 대표적인 셰이딩 모델들을 살펴보자.
1. Lambert vs Half Lambert: 그림자가 만들어지는 방식
먼저 디퓨즈(Diffuse) 셰이딩을 보자.
- Lambert (왼쪽): 그림자가 강하게 떨어지며 어두운 영역의 형태가 묻힌다
- Half Lambert (오른쪽): 명암이 부드럽게 이어지며 형태가 더 잘 드러난다
이 차이는 단순한 취향의 문제가 아니라, 수식의 구조에서 바로 나온다.
두 모델의 수식은 다음과 같다:
\[\text{Lambert} = \max(\text{dot}(N, L), 0)\] \[\text{Half Lambert} = (\text{dot}(N, L) \times 0.5) + 0.5\]이 두 수식을 하나의 그래프로 보면 차이가 훨씬 명확해진다.
(빨간색: Lambert, 파란색: Half Lambert)
그래프를 그대로 해석해보자.
- x축:
dot(N, L)(빛과 표면의 각도) - y축: 최종 밝기
여기서 핵심은 0 이하 영역을 어떻게 처리하느냐다.
-
Lambert (빨간선)
- 0 이하를 모두 잘라낸다 (clamp)
- 그래프가 0에서 갑자기 평평해진다
-
Half Lambert (파란선)
- 값을 [0, 1] 범위로 재매핑한다
- 0 이하 영역도 부드럽게 이어진다
즉,
Lambert는 밝기가 특정 지점에서 “끊기고”, Half Lambert는 같은 구간에서도 “계속 이어진다”.
이 차이가 그대로 이미지로 나타난다.
- Lambert → 경계가 강한, 대비가 큰 그림자
- Half Lambert → 부드럽게 이어지는 자연스러운 명암
2. Phong vs Blinn-Phong: 하이라이트의 퍼짐
이번에는 스페큘러(Specular), 즉 하이라이트를 보자.
- Phong: 하이라이트가 작고 날카롭게 집중됨
- Blinn-Phong: 하이라이트가 넓고 부드럽게 퍼짐
이 역시 수식의 형태에서 비롯된다.
\[\text{Phong} = (\text{dot}(R, V))^n\] \[\text{Blinn-Phong} = (\text{dot}(N, H))^n \quad (H = \text{normalize}(L + V))\]이 두 수식도 그래프로 함께 보면 차이가 명확하다.
(빨간색: Phong, 파란색: Blinn-Phong)
그래프를 기준으로 해석하면 다음과 같다.
-
Phong (빨간선)
- 반사 벡터와 시선 벡터를 직접 비교
- 조건이 매우 엄격함
- 그래프가 좁고 뾰족하게 솟는다
-
Blinn-Phong (파란선)
- 빛과 시선의 평균 방향(H)을 사용
- 조건이 더 완화됨
- 그래프가 넓고 완만하게 퍼진다
즉,
Phong은 “정확히 맞아야 밝고”, Blinn-Phong은 “대충 맞아도 꽤 밝다”.
그래서 결과적으로:
- Phong → 날카롭고 집중된 하이라이트
- Blinn-Phong → 넓고 부드러운 하이라이트
핵심 정리: 수식의 형태가 결과를 만든다
지금까지의 내용을 한 줄로 요약하면 다음과 같다:
셰이딩 결과는 물리 법칙이 아니라 수식의 형태가 만든다
그래프 관점에서 보면:
- 값을 잘라내면 → 경계가 생긴다 (Lambert)
- 값을 재배치하면 → 부드러워진다 (Half Lambert)
- 조건이 엄격하면 → 결과가 집중된다 (Phong)
- 조건이 완화되면 → 결과가 퍼진다 (Blinn-Phong)
결론
수식을 그래프로 이해하기 시작하면, 셰이딩은 더 이상 “정해진 모델을 사용하는 것”이 아니다.
- 그림자를 부드럽게 만들고 싶다면 → 값을 재매핑하고
- 하이라이트를 날카롭게 만들고 싶다면 → 조건을 더 엄격하게 만들고
- 특정 스타일을 만들고 싶다면 → 수식을 직접 변형하면 된다
결국 셰이딩은
원하는 이미지를 만들기 위한 함수 설계의 문제다
GitHub 계정으로 댓글을 작성합니다.
현재 추천 수: 조회 중...
GitHub 이슈의 👍 반응을 집계합니다.
추천(👍) 남기기
이 문서 작업실에서 편집하기