PART 04 · 강의 1/3

텍스처 좌표와 UV

TexCoord, Panner, Rotator, World Position, Triplanar Projection 등 UV 조작의 모든 것.

01

UV 좌표 기초

텍스처 매핑의 근본 원리

UV 좌표는 3D 메시의 각 정점에 할당된 2D 좌표로, 텍스처의 어떤 부분이 메시의 어디에 매핑되는지를 결정합니다. U는 수평, V는 수직 축입니다.

UV 좌표 체계 // UE5 UV 좌표 체계 (0,0) ────────── (1,0) │ │ │ 텍스처 영역 │ │ │ (0,1) ────────── (1,1) // 0~1 범위: 텍스처 1회 매핑 // 0~2 범위: 텍스처 2회 타일링 // UV > 1 또는 < 0: 텍스처의 Wrap 모드에 따라 동작 // Repeat(기본): 타일링 // Clamp: 가장자리 색상으로 고정

TexCoord 노드

파라미터 설명 기본값
Coordinate Index 사용할 UV 채널 (0, 1, 2...) 0
UTiling U축 타일링 횟수 1.0
VTiling V축 타일링 횟수 1.0
UV 채널

UE5 메시는 최대 8개의 UV 채널(0~7)을 가질 수 있습니다. UV0는 텍스처 매핑용, UV1은 라이트맵용이 일반적입니다. UV2 이상은 마스크, 디테일 등 추가 용도로 활용합니다.

02

UV 애니메이션 노드

Panner, Rotator로 움직이는 텍스처

Panner (이동)

Panner Node // UV를 시간에 따라 이동 (스크롤) Panner Coordinate: TexCoord // 입력 UV Time: Time // 자동 시간 (생략 가능) SpeedX: 0.1 // U방향 속도 SpeedY: 0.0 // V방향 속도 // 활용: 흐르는 물, 용암, 컨베이어 벨트, 홀로그램 // 내부 수식: UV_out = UV_in + float2(SpeedX, SpeedY) * Time

Rotator (회전)

Rotator Node // UV를 중심점 기준으로 회전 Rotator Coordinate: TexCoord Time: Time CenterX: 0.5 // 회전 중심 U CenterY: 0.5 // 회전 중심 V Speed: 0.25 // 회전 속도 (1 = 1초에 360도) // 활용: 회전하는 마법진, 레이더 스캔, 환풍기
다중 레이어 조합

서로 다른 속도와 방향의 Panner를 2~3개 겹치면 복잡한 패턴을 만들 수 있습니다. 예: 용암 = 느린 Panner(기본 흐름) + 빠른 Panner(표면 디테일) + Rotator(소용돌이).

03

World Position 기반 투영

월드 좌표를 UV로 사용하기

메시의 UV가 없거나 적합하지 않을 때, 월드 좌표를 텍스처 좌표로 사용할 수 있습니다. 이 방식은 이음매 없는 텍스처링에 유용합니다.

World Aligned Texture // 월드 좌표 기반 텍스처 매핑 WorldPositionComponentMask (XY만 추출) → Divide by 512 // 타일링 크기 (cm)TextureSample UVs 입력 // 장점: UV 언래핑 불필요, 오브젝트 간 이음매 없음 // 단점: 하나의 축에서만 투영 → 측면 늘어남

Triplanar Projection

3개 축(XY, XZ, YZ)에서 각각 투영한 뒤 노말 방향 가중치로 블렌딩하여 모든 면에서 자연스러운 결과를 얻습니다.

HLSL - Triplanar Projection // Triplanar Projection (Custom Node) float3 worldPos = GetWorldPosition(); float3 worldNormal = abs(GetWorldNormal()); // 가중치 (노말 방향에 따라) float3 blend = pow(worldNormal, 4); blend /= dot(blend, 1.0); // 정규화 // 3축 투영 float4 xProj = Texture2DSample(Tex, TexSampler, worldPos.yz / Scale); float4 yProj = Texture2DSample(Tex, TexSampler, worldPos.xz / Scale); float4 zProj = Texture2DSample(Tex, TexSampler, worldPos.xy / Scale); // 블렌딩 return xProj * blend.x + yProj * blend.y + zProj * blend.z;
WorldAlignedTexture 머티리얼 함수

UE5는 WorldAlignedTexture, WorldAlignedNormal 머티리얼 함수를 기본 제공합니다. Triplanar 로직이 내장되어 있어 HLSL 작성 없이도 사용할 수 있습니다. 팔레트에서 검색하여 사용하세요.

04

UV 왜곡과 디스토션

노이즈와 마스크로 UV를 변형

UV에 노이즈를 더하면 텍스처가 왜곡됩니다. 열 아지랑이, 물 굴절, 마법 효과 등에 활용됩니다.

UV Distortion // 기본 UV 디스토션 // 1. 노이즈 텍스처로 왜곡량 생성 Panner (SpeedX: 0.05, SpeedY: 0.03) → TextureSample (노이즈 텍스처) → Multiply by 0.02 // 왜곡 강도 (작은 값!)DistortionOffset // 2. 기본 UV에 왜곡 더하기 TexCoordAdd (+ DistortionOffset) → TextureSample (메인 텍스처) // 주의: 왜곡 강도는 0.01~0.05 정도가 자연스러움 // 너무 크면 텍스처가 깨져 보임
추가 텍스처 샘플링 비용

UV 디스토션은 노이즈 텍스처를 추가로 샘플링합니다. 모바일이나 저사양 환경에서는 텍스처 대신 노이즈 노드(Noise, SimpleNoise)를 사용하거나 버텍스 셰이더에서 UV를 변형하여 비용을 줄일 수 있습니다.

SUMMARY

핵심 요약

  • UV 좌표는 0~1 범위로 텍스처를 메시에 매핑하며, TexCoord 노드로 타일링과 채널을 제어합니다.
  • Panner는 UV를 이동(스크롤), Rotator는 UV를 회전시켜 애니메이션을 만듭니다.
  • World Position을 UV로 사용하면 UV 언래핑 없이 이음매 없는 텍스처링이 가능합니다.
  • Triplanar Projection은 3축 투영 + 노말 가중치 블렌딩으로 모든 면에서 자연스러운 결과를 제공합니다.
  • UV 디스토션은 노이즈로 UV를 왜곡하며, 강도는 0.01~0.05 범위가 자연스럽습니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: UV 타일링과 오프셋

TexCoord 노드의 UTiling, VTiling을 변경하여 텍스처 반복 횟수를 조절하세요. Append 노드로 U, V를 개별 제어하고, Panner 노드로 UV 스크롤 애니메이션을 추가하세요.

실습 2: 월드 좌표 기반 프로젝션

WorldPosition 노드와 ComponentMask를 활용하여 Tri-Planar 프로젝션을 구현하세요. 오브젝트의 UV에 의존하지 않고 월드 좌표로 텍스처를 매핑하여 이음새 없는 결과를 만드세요.

심화 과제: 절차적 UV 왜곡

Sine, Time, Noise 노드를 조합하여 UV를 실시간으로 왜곡하는 물 표면 효과를 만드세요. 두 개의 다른 속도와 스케일의 왜곡을 블렌딩하여 자연스러운 결과를 얻으세요.