본문으로 건너뛰기
VFX Diary
VFX Diary
교육자료

Unreal Material에서 Dissolve 이펙트 구조를 이해하는 법

Dissolve는 Unreal Material을 배울 때 가장 자주 만나는 이펙트 중 하나다. 캐릭터가 사라지거나, 마법 장벽이 부서지거나, 오브젝트가 소환될 때 거의 항상 응용할 수 있다.

겉으로 보면 "텍스처가 서서히 사라지는 효과"처럼 보이지만, 구조를 나눠 보면 생각보다 단순하다.

Dissolve의 핵심은 마스크 비교다

Unreal Material에서 Dissolve 이펙트 구조를 이해하는 법
Noise + Amount = Mask – Material Graph Panel. 이미지 출처: Epic Games 공식 Unreal Engine 문서.

Dissolve는 보통 노이즈 텍스처와 진행 값을 비교해서 만든다.

가장 기본 구조는 이렇다.

  • Noise Texture: 어느 부분이 먼저 사라질지 정하는 지도
  • Dissolve Amount: 현재 얼마나 사라졌는지 나타내는 값
  • Mask / Clip: 보일 부분과 사라질 부분을 나누는 기준
  • Edge: 사라지는 경계선에 색이나 발광을 더하는 영역

노이즈 값이 `Dissolve Amount`보다 작으면 사라지고, 크면 남는 식으로 생각하면 된다. 즉 Material 안에서 픽셀마다 "너는 아직 남아 있을지, 사라질지"를 판정하는 것이다.

1. Noise Texture는 사라지는 패턴을 결정한다

깨끗한 선으로 사라지면 기계적인 느낌이 강하다. 반대로 노이즈가 들어가면 불규칙한 에너지, 부식, 마법, 불꽃 같은 느낌을 만들 수 있다.

노이즈를 고를 때는 세 가지를 본다.

  • 큰 덩어리가 있는가?
  • 작은 디테일이 너무 많지 않은가?
  • 이펙트의 스케일과 맞는가?

캐릭터 전체가 사라지는 Dissolve라면 너무 작은 노이즈만 쓰면 화면이 지저분해진다. 큰 덩어리 노이즈와 작은 디테일 노이즈를 섞으면 훨씬 자연스럽다.

2. Dissolve Amount는 외부에서 조절하는 값이어야 한다

Material Fresnel Preview screenshot for Dissolve Material Structure
Amount Control – Material Fresnel Preview. 이미지 출처: Epic Games 공식 Unreal Engine 문서.

Dissolve는 대부분 시간이나 게임플레이 이벤트와 연결된다. 그래서 Material 안에 숫자를 고정하기보다 Scalar Parameter로 빼는 것이 좋다.

예를 들어 `DissolveAmount`라는 Scalar Parameter를 만들고, Blueprint나 Niagara Dynamic Parameter에서 0에서 1까지 움직이게 할 수 있다.

  • 0: 거의 사라지지 않음
  • 0.5: 절반 정도 진행
  • 1: 대부분 사라짐

이 값을 외부에서 제어할 수 있어야 소환, 피격, 사망, 스킬 종료 같은 이벤트에 맞춰 Dissolve를 정확히 연출할 수 있다.

3. Edge는 Dissolve를 이펙트처럼 보이게 만드는 부분이다

Material Editor Viewport screenshot for Dissolve Material Structure
Edge Band – Material Editor Viewport. 이미지 출처: Epic Games 공식 Unreal Engine 문서.

단순히 Opacity Mask만 바꾸면 오브젝트가 잘려 나가는 것처럼 보인다. 여기에 Edge 영역을 더하면 VFX 느낌이 생긴다.

Edge는 보통 노이즈 값과 Dissolve Amount의 차이가 작은 영역이다. 이 얇은 경계에 색을 넣거나 Emissive를 더하면 사라지는 부분이 빛나는 것처럼 보인다.

실무적으로는 Edge를 너무 두껍게 잡지 않는 것이 좋다. 경계가 넓으면 전체가 번쩍이는 느낌이 되어 형태가 읽히지 않을 수 있다.

4. Opacity Mask와 Translucent를 구분해야 한다

Dissolve를 만들 때 Blend Mode를 무엇으로 쓸지도 중요하다.

Masked 방식은 픽셀이 보이거나 사라지는 경계가 분명하다. 비용이 상대적으로 예측하기 쉽고, 게임 오브젝트가 깔끔하게 잘리는 느낌에 좋다.

Translucent 방식은 부드럽게 투명해질 수 있지만 정렬, 깊이, 오버드로우 문제가 생기기 쉽다. 연기나 에너지 막처럼 반투명 표현이 꼭 필요할 때 더 적합하다.

초보자라면 먼저 Masked Dissolve로 구조를 익히고, 그 다음 Translucent나 Additive 연출로 확장하는 편이 안전하다.

5. Niagara와 연결하면 이펙트가 훨씬 좋아진다

Dissolve Material만으로도 효과를 낼 수 있지만, Niagara와 같이 쓰면 훨씬 설득력 있는 연출이 된다.

예를 들어 캐릭터가 사라질 때:

  • Material은 몸체를 Dissolve로 지운다
  • Niagara는 경계 주변에 작은 파티클을 뿌린다
  • Ribbon이나 Sprite로 에너지 흐름을 추가한다
  • 마지막 프레임에 약한 잔광을 남긴다

이렇게 역할을 나누면 Material 하나에 모든 것을 넣는 것보다 수정이 쉽고, 화면도 더 풍부해진다.

체크리스트

Dissolve Material을 만들 때는 아래를 확인하면 좋다.

  • `DissolveAmount`가 Parameter로 빠져 있는가?
  • 노이즈 스케일이 오브젝트 크기와 맞는가?
  • Edge 색이 배경과 충분히 구분되는가?
  • Emissive가 너무 강해서 형태를 망치지 않는가?
  • Masked와 Translucent 중 목적에 맞는 방식을 선택했는가?
  • Niagara나 Blueprint에서 타이밍을 제어할 수 있는가?

정리

Dissolve는 단순한 투명도 변화가 아니라, 노이즈 마스크와 진행 값을 비교해 픽셀의 생존 여부를 결정하는 구조다. 여기에 Edge, Emissive, Niagara 파티클을 더하면 게임 VFX에서 자주 쓰는 소환, 소멸, 피격, 마법 장벽 연출로 확장할 수 있다.

처음 연습할 때는 복잡한 그래프보다 "Noise, Amount, Mask, Edge" 네 가지를 정확히 이해하는 것이 더 중요하다.

직접 만드는 Masked Dissolve

검증 상태: UE 5.8에서 샘플 구조를 검증하고 제공 장면을 Metal로 촬영했다. 다른 플랫폼의 외관과 성능은 사용하는 환경에서 확인한다.

UE 5.8 Metal의 Manual 노출 샘플 장면에서 발광 경계를 남기며 Dissolve된 구체
UE 5.8 Metal, 제공 샘플의 Manual 노출 장면. Dissolve 구체의 남은 표면과 발광 경계, 바닥 그림자를 확인할 수 있다.

준비

  1. Content Browser에서 Material M_Dissolve_Practice를 만들고 연다.
  2. Details에서 Blend Mode를 Masked로, Opacity Mask Clip Value를 0.5로 설정한다. Masked는 중간 투명도가 아니라 픽셀을 보이거나 버리는 방식이다.
  3. 경계가 사라졌을 때도 표면 조명이 필요하므로 이 실습에서는 기본 Lit 설정을 유지한다.

그래프 연결

  1. 흑백 노이즈 텍스처를 가져와 TextureSampleParameter2D로 바꾸고 이름을 DissolveNoise로 지정한다. R 채널을 사용한다.
  2. ScalarParameter DissolveAmount를 만든다. 기본값은 0, Slider Min/Max는 0/1로 둔다.
  3. 가시성용 If 노드를 만든다. A = Noise.R, B = DissolveAmount, A > B = 1, A == B = 0, A < B = 0으로 설정하고 결과를 Opacity Mask에 연결한다. 아래에서는 이 결과를 VisibleMask라고 부른다.
  4. Subtract로 Diff = Noise.R - DissolveAmount를 만든다. 경계용 두 번째 If는 A = Diff, B = EdgeWidth, A > B = 0, A == B = 0, A < B = 1로 설정한다.
  5. 두 번째 If 결과에 VisibleMask를 곱한다. 따라서 이미 잘린 쪽은 발광하지 않고, 보이는 쪽의 0 < Diff < EdgeWidth 구간만 EdgeMask로 남는다.
  6. EdgeMask × EdgeColor × EdgeIntensity를 Emissive Color에 더한다. Base Color는 기존 표면 입력을 유지한다.
  7. 저장 후 Material Instance MI_Dissolve_Practice를 만들고 테스트 메시 하나에 적용한다.
  8. Material Instance에서 DissolveAmount를 0→1로 움직여 방향, 끊김, 경계 두께를 확인한다. 실제 게임 이벤트 연결은 Dynamic Material Instance에서 같은 이름의 스칼라 파라미터를 갱신하는 별도 단계다.

끝값: 정규화된 0~1 노이즈에서 DissolveAmount = 0이면 정확히 0인 texel만 잘리고 나머지는 보인다. DissolveAmount = 1이면 값이 정확히 1인 texel도 A == B = 0이므로 모두 사라진다.

샘플과 글의 차이: 다운로드 프로젝트는 별도 텍스처 없이 실행할 수 있도록 절차적 Noise 노드를 사용한다. 이 글은 TextureSampleParameter2D의 R 채널을 입력으로 쓰므로 노이즈 소스와 노드 구성은 다르지만, Noise > DissolveAmount 비교와 edge 공식은 같다.

파라미터 종류 연습 시작값 역할 확인할 현상
DissolveAmount Scalar 0.0 노이즈와 비교하는 진행 값 0→1 전 구간에서 소멸 방향이 일정한가
EdgeWidth Scalar 0.05 발광 경계 띠의 폭 넓힐수록 표면 전체가 발광하지 않는가
EdgeIntensity Scalar 2.0 경계 Emissive 배율 노출 조건이 바뀌어도 형태가 읽히는가
EdgeColor Vector 따뜻한 주황 경계 색 밝고 어두운 배경 모두에서 분리되는가
DissolveNoise Texture2D 흑백 노이즈 사라지는 순서 압축과 UV 이음새가 경계에 보이지 않는가

막히는 경우

  • Opacity Mask 입력이 비활성: Material의 Blend Mode가 Masked인지 확인한다.
  • 처음부터 모두 사라짐: 노이즈가 0~1 범위인지, DissolveAmount 기본값이 0인지, 첫 번째 If의 A > B만 1인지 확인한다.
  • 부드러운 반투명 페이드가 나오지 않음: 정상이다. Masked는 이진 가시성이다. 이 실습의 목적은 예측 가능한 컷아웃 구조를 익히는 것이다.
  • 경계가 메시 전체를 덮거나 잘린 쪽에도 보임: EdgeWidth를 줄이고 두 번째 If 결과에 VisibleMask를 곱했는지 확인한다.
  • Material Instance에 항목이 없음: Constant가 아니라 이름이 고유한 Parameter 노드인지 확인한 뒤 Material을 Apply/Save한다.

공식 문서에서 확인하기

Epic: Material Blend Modes에서 Masked와 Opacity Mask Clip Value의 동작을, Epic: Creating and Using Material Instances에서 Scalar Parameter override 절차를 확인할 수 있다. 위의 두 If 조합과 한쪽 edge band는 이 원리를 Dissolve 연습용으로 구성한 예제다.

UE 5.8 실습 프로젝트 ZIP 내려받기 · SHA-256 f50a2344f698919a40b3d3f280f1a05f4b66928bd0f963aeb694a89aa5d63808

Masked Dissolve 제작 체크리스트 내려받기 · 다음 단계: Shader 비용 측정 체크리스트 · Noise Texture Maker 사용설명서 · Education 전체 가이드

작업 이야기와 댓글

이 글을 보고 떠오른 질문이나 경험을 남겨 주세요. 서로의 시도와 관찰을 나누는 공간입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다