그래픽스

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 텍스처 활용