그래픽스
Height Mask 쉐이더 그래프
유니티세상
2025. 6. 30. 16:13
분석 목적
“이 샘플을 이해해서, 내 프로젝트에서 비슷한 머티리얼 블렌딩 효과를 직접 구현할 수 있도록 한다.”
전체 개념 요약
- 기본 아이디어:
돌 조약돌 텍스처 위에 금속 재질이 U 좌표(가로 방향) 기준으로 점점 올라오듯이 덮이는 효과를 만든다. - 적용 대상:
알베도, 노멀, 메탈릭/스무스니스/오클루전(MOHS) 등 전체 PBR 요소에 블렌딩 적용
Shader Graph 구조 분석
1. [Height Mask] – 블렌딩 범위 결정
UV → Split → Smoothstep | U 좌표값 기준으로 0~1 사이에서 부드럽게 전환되는 마스크값 생성 |
HeightMask 노드 | 최종적으로 마스크 + 두 개의 높이값 전달 |
결과 | U값이 증가할수록 금속 재질이 점점 위로 퍼짐 |
기억할 포인트:
U 좌표 기반 마스킹 → 방향성 있는 전이 가능
주석
우리는 U 텍스처 좌표를 부드러운 그라디언트 마스크로 사용합니다.
금속(금) 머티리얼은 자갈 사이의 낮은 부분에 먼저 적용되고, 점차 위로 올라가면서 자갈의 윗부분만 보이게 되다가 결국 금 머티리얼로 완전히 대체됩니다.
2. [Albedo] – 텍스처 색상 블렌딩
Sample Texture 2D | 돌 텍스처 (기본 재질) |
Color | 금속 색상 (고정값) |
Lerp | HeightMask.Mask 값으로 두 색상을 부드럽게 섞음 |
기억할 포인트:
Mask 값이 0 → 돌색상, 1 → 금속색상
3. [Normal] – 표면 요철 블렌딩
Sample Texture 2D | 조약돌 노멀맵 |
Vector3(0,0,1) | 금속 평면 노멀값 (기본값) |
Lerp | HeightMask.Mask를 기준으로 부드럽게 보간 |
기억할 포인트:
돌의 거친 느낌 → 금속의 매끄러운 표면으로 점진적으로 전환
주석
우리는 HeightMask를 사용하여 자갈(normal map)과 금속 머티리얼의 평평한 노멀(normal) 사이를 블렌딩합니다.
- Normal Map: 표면의 미세한 굴곡을 표현하는 텍스처로, 조명에 반응하는 표면 디테일을 만듭니다.
- 자갈은 요철이 많은 복잡한 노멀맵을 가지고 있고,
- 금속은 매끄럽고 평평한(normal이 거의 일정한) 표면을 가집니다.
- HeightMask를 이용한 블렌딩은,
- 자갈 틈처럼 낮은 곳부터 금속으로 바뀌기 시작해서,
- 점차 높은 곳(자갈 윗면)까지 부드럽게 금속으로 전환되도록 도와줍니다.
시각적으로 더 자연스러운 재질 전환 효과를 주기 위한 방식이에요.
4. [MOHS] – 금속/거칠기/오클루전 블렌딩
Sample Texture 2D (Packed) | RGBA 채널에 MOHS 데이터가 들어 있음 |
Vector4 값 | 금속 재질의 고정 MOHS 값 (Metal=1, Occlusion=0.5, Smoothness=1 등) |
Lerp | 마스크 기반으로 기존 조약돌의 MOHS 값과 금속 값을 보간 |
Split | 각각 R(Metal), G(Occlusion), A(Smoothness)를 출력으로 전달 |
기억할 포인트:
Packed 텍스처 사용 → 최적화된 리소스 관리 + 전체 PBR 요소 일괄 처리
주석
이 효과가 제대로 작동하려면, 두 재질 중 하나 또는 둘 다에 양질의 높이(Height) 데이터가 있어야 합니다.
이러한 전환 방식은 자갈처럼 높낮이가 다양한 재질에서 가장 잘 작동합니다.
대부분 평평한 재질에서는 이 기법으로 흥미로운 효과를 만들기 어렵습니다.
MOHS
이 텍스처는 Metalic(금속도), Occlusion(음영), Height(높이), Smoothness(매끄러움) 정보를 서로 다른 채널에 나눠서 저장한 텍스처입니다.
MOHS 텍스처란?
- 일반적으로 하나의 RGBA 텍스처에 다음과 같이 데이터를 압축합니다:
- R 채널: Metallic
- G 채널: Occlusion
- B 채널: Height
- A 채널: Smoothness
- 이는 성능 최적화를 위한 방식이며, Unity나 Unreal Engine에서도 자주 사용됩니다.
5. [Fragment Output] – 화면 출력
- 위에서 준비한 결과들을 Unity 표준 PBR 슬롯에 할당:
슬롯 연결된 데이터
Base Color | 알베도 보간 결과 |
Normal | 노멀 보간 결과 |
Metallic | MOHS R |
Smoothness | MOHS A |
Ambient Occlusion | MOHS G |
학습 & 실전 적용 포인트
핵심 사고 흐름
[U좌표 기반 마스킹] → [각 재질 속성 보간] → [PBR 슬롯에 전달] → [최종 머티리얼 표현]
내가 집중해야 할 부분은?
마스크 생성 방식 (Smoothstep, Split, UV) | 다양한 조건 기반 효과 만들 때 반복 활용 가능 |
Lerp로 속성 보간하기 | 거의 모든 재질 전이 효과의 핵심 |
PBR 슬롯과 연결 구조 | 실제 렌더링에 어떤 값이 영향 주는지 알게 됨 |
MOHS Packed 텍스처 활용 | 고급 쉐이더 최적화 기법으로 실무에서 매우 유용 |
앞으로 활용 예시 (응용 아이디어)
불타는 표면 → 재나 금속으로 변하는 효과 | 높이 기반 or 시간 기반으로 마스크 생성 |
젖어드는 바닥 | 월드 위치 + 오브젝트 포지션으로 마스크 만들기 |
얼음이 덮히는 바닥 | 카메라 거리 기반 or 기울기 기반 마스킹 |
요약 정리
목표 | 돌 + 금속 머티리얼의 부드러운 전환 효과 |
기준값 | U 좌표 기반 마스크 (Smoothstep) |
핵심 처리 | 알베도, 노멀, MOHS 정보를 Lerp로 보간 |
구조 특징 | 기능별 블록화 + PBR 최종 출력 일관성 |
학습 포인트 | 마스크 설계, 속성 보간, Packed 텍스처 활용 |