앞선 포스트에서는 Material의 기본 속성과 여러 블렌딩 방식을 정리했다.
이번 포스트에서는 이미지 시퀀스와 Noise 텍스처를 이용해 움직이는 Fog를 만들고, Material Attributes와 Material Function을 활용해 복잡한 재질을 구성하고 재사용하는 방법을 정리했다.
마지막에는 WorldAlignedBlend를 사용해 오브젝트의 위쪽 면에 눈이 쌓이는 머티리얼도 제작했다.
각 기능은 서로 달라 보이지만, 텍스처의 값을 마스크로 사용하고 필요한 값을 Material Instance에서 조절한다는 공통점이 있었다.
이미지 시퀀스를 이용한 Fog 제작
Img Media Source 생성
연속된 이미지를 영상처럼 재생하려면 Content Browser에서 우클릭한 뒤 Media - Img Media Source를 생성한다.


Sequence Path에는 시퀀스의 첫 번째 이미지인 0000 파일을 지정했다.
이미지 파일의 번호가 순서대로 이어져 있어야 Unreal Engine이 하나의 시퀀스로 인식할 수 있다.


원본이 PNG나 JPG 시퀀스라면 Frame Rate Override도 원본 영상의 FPS에 맞춰 설정한다.
프레임률이 맞지 않으면 원본보다 빠르거나 느리게 재생될 수 있다.

단일 영상 파일은 보통 File Media Source로 참조하지만, 여러 장의 연속 이미지는 Img Media Source로 불러와야 한다.
Media Player와 Media Texture 생성
Content Browser에서 우클릭한 뒤 Media - Media Player를 선택한다.
생성 창이 열리면 Video output Media Texture asset을 반드시 활성화한다.


설정을 완료하면 두 개의 에셋이 생성된다.
- Media Player: Media Source를 열고 재생하는 에셋
- Media Texture: 재생 중인 프레임을 Material에 전달하는 텍스처

Media Player를 열면 프로젝트 안의 Media Source가 목록에 표시된다.
생성한 Img Media Source를 더블클릭하면 이미지 시퀀스를 미리 재생할 수 있으며, 연결된 Media Texture도 같은 프레임으로 갱신된다.
이미지 시퀀스를 반복 재생하려면 Media Player의 Details 패널에서 Loop를 활성화한다.
Loop를 켜면 시퀀스의 마지막 프레임까지 재생된 뒤 첫 프레임부터 다시 재생된다.

이 설정은 해당 Media Player를 통한 재생에 적용되며, Level Sequence 자체의 반복 재생 설정과는 별개다.



처음에는 Media Player와 Media Texture의 역할이 비슷해 보였지만, 재생을 담당하는 에셋과 화면에 출력할 프레임을 전달하는 에셋으로 나누어 생각하니 구조가 훨씬 쉽게 정리됐다.
Fog Material의 기본 설정
생성된 Media Texture를 우클릭해 Material을 만든다.
처음에는 Texture Sample의 RGB가 Base Color에 연결된 기본 Material이 생성된다.


먼저 다음과 같이 설정해 투명도를 확인했다.
- Blend Mode: Translucent
- Lighting Mode: Surface TranslucencyVolume


Base Color에 연결돼 있던 Texture Sample을 Opacity에 연결하면 검은 배경은 투명해지고 밝은 Fog 부분만 남는다.
다만 이 상태에서는 Fog가 약하게 보일 수 있어 밝기와 투명도를 별도로 조절할 필요가 있다.


최종적으로 Blend Mode를 Additive로 변경하고 Texture Sample의 RGB를 Emissive Color에 연결했다.
Additive는 머티리얼의 색을 배경에 더하는 방식이므로 검은색은 거의 보이지 않고, 밝은 Fog는 배경을 더 밝게 만든다.



네 방향 가장자리 흐리게 만들기
Plane에 Fog 텍스처를 그대로 표시하면 사각형의 경계가 드러난다.
이를 감추기 위해 UV 좌표로 가장자리 마스크를 만들었다.
- TextureCoordinate의 값을 Component Mask에 연결하고 R 채널만 사용
- R 값과 OneMinus로 반전한 R 값을 곱함
- 같은 구조를 복제한 뒤 G 채널만 사용
- G × (1-G)를 계산
- 가로와 세로 결과를 다시 곱함
- 마지막에 Opacity Scalar Parameter를 곱해 Opacity에 연결
R은 가로 UV, G는 세로 UV에 해당한다.


R × (1-R)은 가로 양끝에서 0이 되고 중앙에서 가장 커지며, G도 같은 방식으로 세로 양끝을 흐리게 만든다.
두 결과를 곱하면 네 방향 가장자리가 모두 옅어진다.

이 계산의 중앙 최댓값은 1이 아니라 0.25 × 0.25 = 0.0625다.
따라서 그대로 연결하면 중앙까지 너무 어두워 보일 수 있다.
마지막에 Opacity Parameter를 곱한 이유는 전체 밀도를 다시 보정하기 위해서다.


Fog의 밝기와 색상 조절
Fog의 밝기와 색상을 조절하기 위해 Texture Sample의 RGB에 Emissive Strength Scalar Parameter와 Color Vector Parameter를 차례로 곱한 뒤, 그 결과를 Emissive Color에 연결했다.

Color는 먼저 흰색으로 두고 결과를 확인한 뒤, 씬의 조명과 분위기에 맞게 색조를 조절하는 편이 좋다.
Color가 완전한 검은색이면 곱셈 결과도 0이 되어 Fog가 보이지 않는다.



가장자리만 정리해도 평면의 사각형 형태는 많이 줄어들지만, 오브젝트와 만나는 부분에는 여전히 선명한 경계가 남았다.

오브젝트 교차 경계 처리: DepthFade
DepthFade는 반투명 머티리얼과 불투명 오브젝트가 교차할 때 생기는 딱딱한 선을 부드럽게 감추는 노드다.
- Opacity: 기존에 만든 Opacity 값
- FadeDistance: 교차 지점에서 얼마만큼의 월드 거리 동안 Fade할지 결정
앞에서 만든 가장자리 마스크와 Opacity Parameter의 결과를 DepthFade.Opacity에 연결했다.
FadeDistance에는 Scalar Parameter를 연결해 Material Instance에서 조절할 수 있도록 했다.

Fade Distance를 높이면 오브젝트와 만나는 부분이 더 넓은 구간에 걸쳐 부드럽게 사라진다.
다만 지나치게 높이면 오브젝트 주변의 Fog가 필요 이상으로 비어 보일 수 있으므로 실제 카메라 구도에서 확인해야 한다.

수치만 크게 올리는 것보다 교차선이 사라지는 최소 범위를 찾는 편이 Fog의 밀도를 유지하기 쉬웠다.
카메라 근접 구간 처리: CameraDepthFade
카메라가 Fog Plane에 가까워지면 텍스처의 픽셀이 거칠게 보이고, Plane을 통과하는 순간 화면에서 갑자기 사라지는 느낌이 날 수 있다.

CameraDepthFade를 사용하면 카메라와 가까운 구간에서 Fog를 미리 옅게 만들어 이 변화를 감출 수 있다.
CameraDepthFade의 Result와 DepthFade의 결과를 곱한 뒤 최종 Opacity에 연결했다.
Fade Length는 Scalar Parameter로 변환하고 이번 실습에서는 1000을 시작값으로 사용했다.


Fade Length가 커질수록 카메라에서 더 먼 지점부터 서서히 옅어진다.
이 노드는 텍스처 해상도를 높이는 기능은 아니며, 가까이서 거칠게 보이는 구간을 Fade로 감추는 방식이다.

또한 Plane의 뒷면에서도 Fog가 보여야 한다면 Material의 Two Sided를 활성화해야 한다.
Two Sided는 후면 렌더링을, CameraDepthFade는 카메라 근접 Fade를 담당하므로 두 설정의 목적은 서로 다르다.

Level Sequence에서 이미지 시퀀스 재생
Fog를 Sequencer에서 재생하려면 Level Sequence를 생성한 뒤 Media Track을 추가한다.
- Media Track에 Img Media Source를 추가
- 생성된 Media Section을 우클릭
- Properties에서 앞서 만든 Media Texture를 지정



Media Source만 추가하고 Media Texture를 지정하지 않으면 Sequencer가 재생할 프레임을 Material로 전달할 대상이 없기 때문에 Fog가 움직이지 않는다.
Media Texture까지 연결하면 Sequencer의 재생 위치에 맞춰 Fog 시퀀스가 갱신된다.

Sequencer는 Media Track을 재생할 때 내부 Media Player를 생성할 수 있다.
이번 작업에서 만든 Media Player는 미리보기와 자동 생성된 Media Texture 연결에 사용했고, 실제 Sequencer 재생에서는 Media Section의 Media Texture 지정이 핵심이다.
Noise와 Panner를 이용한 Fog 제작
이미지 시퀀스 대신 Noise 텍스처를 이동시키는 방식으로도 Fog를 만들 수 있다.
앞에서 만든 가장자리 Fade, DepthFade, CameraDepthFade 구조는 그대로 사용하고 Texture Sample만 T_Perlin_Noise_M으로 변경했다.

Panner 노드 연결
Noise가 좌우로 흐르게 만들기 위해 다음과 같이 연결했다.
- TextureCoordinate × Scale을 Panner.Coordinate에 연결
- Time을 Panner.Time에 연결
- Speed X와 Speed Y Scalar Parameter를 Append로 합침
- Append의 결과를 Panner.Speed에 연결
- Panner의 출력을 Noise Texture Sample의 UVs에 연결

Speed X는 가로 이동, Speed Y는 세로 이동을 조절한다.
부호를 바꾸면 이동 방향도 반대로 바뀐다.
이번 예시에서는 X축에 작은 음수 값을 사용해 한쪽 방향으로 천천히 흐르도록 설정했다.

Scale을 바꾸면 속도도 달라 보이는 이유
이번 노드의 좌표 계산은 간단히 다음처럼 볼 수 있다.
최종 UV = 기본 UV × Scale + Time × Speed
Scale이 커지면 같은 Plane 안에 Noise가 더 많이 반복되어 무늬 하나의 크기가 작아진다.
같은 Speed를 유지해도 하나의 무늬가 월드 공간에서 이동하는 체감 속도는 대략 Speed ÷ Scale에 비례하므로, Scale을 변경하면 속도도 달라 보인다.
따라서 먼저 Scale로 Fog 덩어리의 크기를 정하고, 그다음 Speed X와 Speed Y를 다시 조절하는 편이 좋다.


이 방식은 넓은 영역에 옅은 안개를 채울 때 사용하기 좋다.
반대로 Opacity와 Emissive Strength를 너무 높이면 Noise의 반복과 평면 구조가 쉽게 드러나므로, 배경에 섞일 정도로 약하게 사용하는 편이 자연스러웠다.
영상 재생 Material 제작
Media Texture는 Fog뿐 아니라 모니터, 전광판, TV처럼 영상을 재생하는 표면에도 사용할 수 있다.
영상 파일을 Media Source로 준비한 뒤 Media Player를 생성하고, Video output Media Texture asset을 활성화한다.
Media Player에서 영상 소스를 더블클릭하면 연결된 Media Texture에 현재 재생 프레임이 표시된다.



Media Texture로 Material을 만들고 Texture Sample의 RGB를 Emissive Color에 연결했다.
모니터 화면처럼 보이도록 이번 실습에서는 다음 값을 시작점으로 사용했다.
- Base Color: 검은색
- Specular: 0.1
- Roughness: 0.3
- Media Texture RGB → Emissive Color

Level Sequence에서는 Fog와 같은 방식으로 Media Track에 Media Source를 추가하고, Media Section의 Properties에서 Media Texture를 지정한다.


영상 재생은 디코딩과 텍스처 갱신 비용이 발생하므로 한 화면에 많은 영상을 동시에 사용하지 않는 편이 좋다.
필요한 길이와 해상도, 프레임률을 먼저 정하고 실제 출력 크기보다 지나치게 큰 원본은 줄여 사용한다.

이미지 시퀀스는 무조건 더 가벼운 대안이 아니다.
프레임 단위 재생, 알파, EXR이 필요한 시네마틱에는 유리하지만 파일 수와 디스크 입출력 비용은 커질 수 있다.
실시간 표시는 압축 영상, 프레임 정확도가 중요한 Sequencer 작업은 이미지 시퀀스처럼 목적에 따라 선택해야 한다.
모니터가 여러 대 보이는 장면에서는 각각 다른 영상을 재생하기 전에 같은 영상이나 정지 프레임으로 대체할 수 있는 화면부터 구분하는 것이 성능 관리에 도움이 된다.
Material Attributes
일반적인 Material은 Base Color, Metallic, Roughness, Normal 같은 값을 각각 Main Material 노드에 연결한다.
Material Attributes는 이 여러 값을 하나의 묶음으로 만들어 한 개의 선으로 전달하는 방식이다.
각 속성을 개별 서류라고 보면 Material Attributes는 한 재질에 필요한 서류를 모아 둔 파일과 비슷하다.
벽돌 재질 한 묶음과 이끼 재질 한 묶음을 만든 뒤, 두 파일 전체를 한 번에 섞는 식으로 이해할 수 있다.
Material의 Details에서 Use Material Attributes를 활성화하면 Main Material 노드의 여러 입력이 하나의 Material Attributes 입력으로 합쳐진다.


Material Attributes 관련 노드
| 노드 | 역할 |
| Make Material Attributes | Base Color, Roughness, Normal 등 모든 표준 속성을 하나의 묶음으로 만든다. |
| Break Material Attributes | 묶여 있는 속성을 모두 개별 출력으로 분리한다. |
| Set Material Attributes | 필요한 속성만 입력으로 추가해 새로운 묶음을 만들거나 기존 묶음의 일부를 덮어쓴다. |
| Get Material Attributes | 묶음에서 필요한 속성만 선택해 꺼낸다. |
| Blend Material Attributes | A와 B 두 속성 묶음을 Alpha 값에 따라 혼합한다. |
Set Material Attributes와 Get Material Attributes는 노드를 선택한 뒤 Details의 Attributes 배열에 항목을 추가해 사용할 속성을 정한다.
모든 핀을 표시하지 않아도 되므로 큰 그래프를 정리할 때 유용하다.




두 Material Attributes 혼합
벽돌과 이끼 재질의 Base Color, Roughness, Normal 등을 각각 Make Material Attributes에 연결했다.

두 결과를 Blend Material Attributes의 A와 B에 연결하고 Alpha에 Scalar Parameter를 연결했다.

- Alpha 0: A에 연결한 벽돌 재질 출력
- Alpha 1: B에 연결한 이끼 재질 출력
- Alpha 0~1: 두 재질이 비율에 따라 혼합


Alpha에 Scalar 대신 Noise 텍스처를 연결하면 위치마다 값이 달라진다.
밝은 영역에는 B, 어두운 영역에는 A가 주로 나타나므로 이끼가 불규칙하게 낀 벽돌 같은 재질을 만들 수 있다.


속성을 하나씩 따로 Lerp하지 않아도 재질 전체를 한 번에 섞을 수 있어, 텍스처 종류가 늘어날수록 그래프가 훨씬 단정해졌다.
Material Function 제작
Material Function은 자주 사용하는 노드 계산을 하나의 에셋으로 묶어 여러 Material에서 다시 사용할 수 있게 하는 기능이다.
보통 이름 앞에 "MF_"를 붙여 일반 Material과 구분한다.
Content Browser에서 우클릭한 뒤 Material - Advanced - Material Function을 선택해 생성한다.

이번 실습에서는 Vector Parameter로 만든 Color를 Function Output의 Output Result에 연결했다.


Material Function의 Details에서 Expose to Library를 활성화하면 Material Editor의 Palette와 검색 메뉴에서 함수를 찾을 수 있다.

Content Browser의 MF 에셋을 Material Graph로 직접 드래그하는 방법도 사용할 수 있다.
Material에 배치한 함수를 Base Color에 연결하면 함수에서 출력한 색상이 적용된다.


이 Material을 부모로 하는 Material Instance를 만들면 함수 안에서 만든 Color Parameter도 조절할 수 있다.

실제 작업에서는 색상 하나보다 UV 조절, 공통 마스크, 표면 효과처럼 여러 Material에서 반복되는 노드 묶음을 함수로 만드는 편이 활용도가 높다.
WorldAlignedBlend로 눈이 쌓인 Material 만들기
마지막으로 Fab에서 눈 Material과 눈이 쌓일 오브젝트를 준비했다.
부모 Material을 만들고 Use Material Attributes를 활성화한 뒤, 기본 재질과 눈 재질의 텍스처를 각각 Material Attributes로 구성했다.


WorldAlignedBlend의 역할
WorldAlignedBlend는 메시의 UV가 아니라 표면이 월드 공간에서 어느 방향을 향하는지를 기준으로 블렌드 마스크를 만든다.
위쪽을 향한 면의 값을 높게 만들면 눈이 오브젝트 위에 쌓인 것처럼 표현할 수 있다.
이번 실습에서는 다음과 같이 연결했다.
- 기본 재질의 Material Attributes를 MatLayerBlend_Simple.Base Material에 연결
- 눈 재질의 Material Attributes를 Top Material에 연결
- WorldAlignedBlend.Alpha를 MatLayerBlend_Simple.Alpha에 연결
- 최종 Blended Material을 Main Material의 Material Attributes에 연결

WorldAlignedBlend가 Material Attributes 자체를 혼합하는 것은 아니다.
표면 방향에 따른 0~1 마스크를 만들고, 실제 기본 재질과 눈 재질의 혼합은 MatLayerBlend_Simple이 담당한다.
참고로 WorldAlignedBlend의 Alpha는 Blend Material Attributes.Alpha에도 연결할 수 있다.
Blend Bias & Blend Sharpness
Blend Bias와 Blend Sharpness를 Scalar Parameter로 변환하면 Material Instance에서 눈의 범위를 조절할 수 있다.
- Blend Bias: 눈이 나타나는 경사 기준과 전체 범위를 이동
- Blend Sharpness: 기본 재질과 눈 재질 사이 경계의 선명도 조절


Blend Sharpness가 높을수록 눈의 경계가 또렷하게 나뉘고, 낮을수록 두 재질이 넓은 범위에서 부드럽게 섞인다.
Blend Bias의 증가 방향은 Base와 Top의 연결 순서, 사용한 WorldAlignedBlend 출력에 따라 체감이 달라질 수 있으므로 Material Instance에서 실제 메시를 보며 조절하는 편이 정확하다.

같은 구조에서 눈 재질을 이끼나 흙먼지 재질로 바꾸면 오브젝트의 특정 방향에 다른 재질이 덮인 효과로 확장할 수 있다.
간단한 노드 구성만으로도 결과가 빠르게 나오지만, 실제 눈의 두께나 바람에 가려지는 영역까지 계산한 것은 아니므로 기본 적설 표현으로 이해하는 것이 적절했다.
이번 포스트에서는 이미지 시퀀스와 Noise 텍스처로 두 종류의 Fog를 만들고, DepthFade와 CameraDepthFade를 사용해 평면 머티리얼의 경계를 자연스럽게 처리했다.
또한 Media Texture를 이용한 영상 재생과 Material Attributes, Material Function의 기본 구조도 확인했다.
Material Attributes는 여러 표면 속성을 하나의 재질 단위로 다룰 때 유용했고, Material Function은 반복되는 노드 구성을 재사용하는 데 적합했다.
마지막에 제작한 눈 쌓임 Material에서는 WorldAlignedBlend가 재질을 직접 만드는 노드가 아니라, 표면 방향에 따른 블렌드 마스크를 만드는 노드라는 점이 중요했다.
앞으로 복잡한 Material을 만들 때는 모든 노드를 한 그래프에 늘어놓기보다, 데이터와 마스크, 경계 처리, 재사용 로직을 구분해 구성하는 습관을 들이는 것이 좋을 것 같다.
'3D Video Production > Unreal Engine (5.6.1)' 카테고리의 다른 글
| UE 5.6 Landscape: Height Map 불러오기부터 Water Body까지 (0) | 2026.09.01 |
|---|---|
| UE 5.6 Material 심화: 물 Material 만들기 & 텍스처·Nanite 최적화 (0) | 2026.08.31 |
| UE 5.6 Material 심화: Decal과 Vertex Paint부터 Dissolve, 유리, 물 재질까지 (1) | 2026.08.27 |
| UE 5.6 Material 심화: Panner부터 WPO·Nanite Displacement까지 (0) | 2026.08.26 |
| UE 5.6 Material: PBR 속성부터 Gradient, Noise, Tiling까지 (0) | 2026.08.25 |