수학 노드 활용
Lerp, Clamp, Power, Fresnel 등 핵심 수학 노드와 시간 기반 애니메이션 구현 기법.
보간과 매핑 노드
Lerp, Clamp, Remap의 활용
| 노드 | 수식 | 용도 |
|---|---|---|
| Lerp | A + (B - A) * Alpha |
두 값 사이 보간. 마스크 기반 블렌딩의 핵심 |
| Clamp | max(min, min(max, X)) |
값을 특정 범위로 제한 |
| Saturate | clamp(X, 0, 1) |
0~1 범위로 제한 (무료 인스트럭션) |
| LinearInterpolate | Lerp와 동일 |
Lerp의 풀네임 |
| InverseLerp | (X - A) / (B - A) |
값이 A~B 범위에서 어디인지 0~1로 반환 |
| SmoothStep | 3t^2 - 2t^3 |
부드러운 계단 함수. 날카로운 경계를 부드럽게 |
// 높이에 따라 눈/풀 블렌딩
WorldPosition.Z // 월드 높이 (cm)
→ InverseLerp
Min: 5000 // 풀 끝나는 높이
Max: 7000 // 눈 시작 높이
→ Saturate
→ SmoothStep // 부드러운 전환
→ Lerp
A: 풀 머티리얼
B: 눈 머티리얼
GPU에서 Saturate(0~1 클램프)는 추가 인스트럭션 없이 출력 수정자로 처리됩니다. Clamp(0,1)보다 항상 Saturate를 사용하세요.
거듭제곱과 대비 조절
Power, CheapContrast로 마스크 다듬기
// Power: 값의 분포를 조절
Power(X, Exp)
Exp < 1 → 밝은 영역 확장 (부드러운 전환)
Exp = 1 → 원본
Exp > 1 → 어두운 영역 확장 (날카로운 전환)
// 마스크 다듬기 예시:
TextureSample (마스크)
→ Power (Exp: 3.0) // 대비 강화
→ Saturate
→ Lerp Alpha에 연결
// CheapContrast: 중간점 기준 대비 조절
CheapContrast(X, Contrast)
// 내부: pow(X, Contrast) 기반
// Contrast = 1 → 원본
// Contrast > 1 → 대비 강화
Power는 원점(0) 기준으로 곡선을 조절하고, CheapContrast는 중간값(0.5) 기준으로 대비를 조절합니다. 마스크의 밝은/어두운 영역 비율을 조절할 때는 Power, 전체적인 명암 대비를 높일 때는 CheapContrast가 적합합니다.
Fresnel과 방향 기반 노드
시선 각도와 표면 방향 활용
Fresnel 노드
// Fresnel: 시선 각도에 따른 마스크 생성
Fresnel
ExponentIn: 5.0 // 높을수록 가장자리만 밝음
BaseReflectFraction: 0.04
// 내부 수식:
result = pow(1 - dot(N, V), Exponent)
// 활용:
// - 림 라이팅 효과
// - 에너지 실드/포스필드
// - 가장자리 글로우
// - 투명도 제어 (가장자리에서 더 불투명)
VertexNormalWS / PixelNormalWS
| 노드 | 설명 | 활용 |
|---|---|---|
| VertexNormalWS | 월드 스페이스 정점 노말 | 눈 쌓임 (Z 방향 마스크), 이끼 성장 |
| PixelNormalWS | 월드 스페이스 픽셀 노말 (노말맵 포함) | 정밀한 방향 기반 효과 |
| CameraDirectionWS | 카메라 시선 방향 | 시선 기반 효과, 패럴랙스 |
| ReflectionVectorWS | 반사 벡터 | 가짜 큐브맵 반사, 매트캡 |
// 위를 향한 면에 눈 쌓임
VertexNormalWS
→ ComponentMask (B만 = Z) // 위 방향 성분
→ Power (Exp: 2) // 대비 강화
→ Saturate
→ Lerp Alpha
A: 바위 머티리얼
B: 눈 머티리얼
시간 기반 애니메이션
Time, Sine, Frac으로 동적 효과 생성
| 노드 | 출력 | 활용 |
|---|---|---|
| Time | 경과 시간(초). 계속 증가 | 모든 시간 기반 효과의 기본 |
| Sine / Cosine | -1~1 사이 진동 | 맥동, 호흡, 진동 효과 |
| Frac | 소수 부분만 (0~1 반복) | 톱니파, 주기적 리셋 |
| Floor / Ceil | 내림/올림 | 단계적(디스크리트) 애니메이션 |
// 부드럽게 맥동하는 발광 효과
Time
→ Multiply (2.0) // 속도 2배
→ Sine
→ Multiply (0.5) // -0.5~0.5
→ Add (0.5) // 0~1로 변환
→ Lerp
A: 1.0 // 최소 밝기
B: 5.0 // 최대 밝기
→ Multiply (Emissive Color)
→ Emissive Color 출력
Sine(Time) * 0.5 + 0.5는 매우 자주 사용되는 패턴입니다. Sine의 -1~1 출력을 0~1로 변환하여 Lerp Alpha나 Emissive 강도로 사용합니다. 속도는 Time에 곱하는 값으로 제어합니다.
핵심 요약
- Lerp는 두 값 사이를 보간하는 가장 핵심적인 노드이며, SmoothStep으로 부드러운 전환을 만듭니다.
- Power로 마스크의 대비를 강화하고, Saturate(무료 인스트럭션)로 0~1 범위를 보장합니다.
- Fresnel 노드로 시선 각도 기반 마스크(림 라이트, 실드)를 생성합니다.
- VertexNormalWS의 Z 성분으로 위를 향한 면을 마스킹(눈, 이끼 효과)합니다.
- Time + Sine 조합으로 맥동, 호흡 등 주기적 애니메이션을 구현합니다.
도전 과제
배운 내용을 직접 실습해보세요
Lerp 노드로 두 색상 사이를 보간하고, Step과 SmoothStep 노드로 날카로운 경계와 부드러운 경계의 차이를 비교하세요. Heightmap으로 지형 색상을 고도별로 분리하세요.
1-dot(CameraVector, Normal)을 직접 계산하여 수동 프레넬을 구현하고, Power 노드로 감쇠 커브를 조절하세요. 내장 Fresnel 노드와 결과를 비교하세요.
수학 노드만으로(텍스처 없이) 체커보드, 동심원, 격자 패턴을 생성하세요. Frac, Floor, Fmod, Sin 노드를 조합하고, 파라미터로 패턴의 크기와 색상을 제어하세요.