공부용으로 작성되는 페이지입니다. 틀린 부분이나 환경에 따라 오류가 발생할 수 있습니다.
이번 강의에서는 쉐이더를 공부하다보면 자주 접하게되는 함수 Lerp(), Step() , smoothstep()가 메인이다.
색과 그라데이션
디지털 기기에서는 색을 관리하기 위해 RGB 색상 모델을 사용한다.
RGB 색상 모델은 색을 합칠수록 밝아져 최종적으로는 흰 색이 된다는 특성을 가지고 있다.
RGB 모델 또한 세 원색을 혼합하는 처리, 즉 연산으로 결과값이 도출되기 때문에 무채색을 곱하면 명도와 채도가 낮아지는걸 확인할 수 있다.
그라데이션이라는 말은 한 번쯤은 들어봤을텐데, 검 -> 흰색으로 점진적으로 밝아지는 명암을 일컫는 말이다.
따라서 준비된 색에 흑백 그라데이션(H Gradient)을 곱한다면 그 색을 바탕으로 점진적으로 어두워지는 음영 표현이 가능하다.
그라데이션의 변형
그라데이션은 검 -> 흰색으로 점진적으로 밝아지는 명암이라고 설명했다.
수치로 표현하자면 0 -> 1로 일정하게 증가하는 그래프가 된다.
그래프에서 x축이 그라데이션의 위치값(0~1) , y축이 Color Value(0~1) 를 나타낸다고 가정했을 때
x축이 증가하면 y축도 함께 대응되는 것을 알 수 있다. 쉽게 말하자면 위치값이 1이 되면 색상 값도 1이 된다는 의미다.
따라서 그라데이션 색상 그래프는 y =x 값이 된다.
색상 관련 함수들
- 올림 함수 : 0을 제외하고 전부 1로 만듦
- 내림 함수 : 1을 제외하고 전부 0으로 만듦
- 반올림 함수 : 0~ 0.5는 0으로, 0.5~1은 전부 1로 만듦
색상이 있는 그라데이션 : Lerp
색상이 있는 그라데이션을 만들려면 곱해주기만 하면 되는구나~ 라고 생각하고 넘어가면 좋겠지만 색상이 어두워진다는 문제가 있다.
그냥 값을 곱해주면 수가 증가하고 수가 증가하면 당연히 색이 어두워질수밖에 없다. Black은 1이니까!
이 문제를 해결하기 위해서 Lerp, Step, SmoothStep 세 가지 함수를 골라서 사용할 수 있다.
선형 보간 함수 Lerp
Lerp() 함수는 이름대로 최종 값으로 균일하게 적용되도록 보정해주는 역할을 한다.
시작값과 목표값을 기준으로 비례값이 정해져 기울기가 결정되기 때문에 중간값을 빠르게 예측할 수 있다.
그라데이션 영역 변경 : step()
Round()를 적용한 경우에는 영역을 절반만 나누어주기 때문에 어두운 영역이 다소 크다는 문제가 있다.
그라데이션 영역을 변경하기 위해서 우선 Step()에 대해서 알아보자.
step() 특이하게도 y가 먼저 오는 인자이며, y보다 크거나 같은 x는 white - y보다 작은 x는 black으로 만든다.
즉, y를 기준점으로 작동한다는 것을 의미한다. y가 0.5보다 큰 수를 가지면 어두운 영역이 증가할 것이고 작은 수를 가지면 줄어들 것이다.
그라데이션 영역 변경 : Smoothstep()
Smootstep은 step() 을 부드럽게 보간해주는 함수이다.
게임 캐릭터에 적용한 결과
Lamp Texture Shading
하나의 색에서 다른 색으로 서서히 이동하는 램프 텍스쳐를 사용해 쉐이딩 하는 기법을 말한다.
앞서 배웠던 함수들은 수식의 일종에 해당하지만 이것은 '텍스쳐'를 의마한다는 점에서 차이가 있다.
이런 텍스쳐들은 한국에서는 보통 '손맵'이라고 불린다. 3D 모델러들의 주요 노가다 중 하나다.....
참고자료
'Unreal Engine > Shader' 카테고리의 다른 글
[Shader] 카툰 렌더링 #3 - 빛의 반사 영역과 정반사 이론편 (0) | 2025.06.12 |
---|---|
[Shader] 카툰 렌더링 #1 렌더링의 기본 원리 (0) | 2025.06.09 |