유니티 - ASE 활용 포털 조각 분리 및 트위스트 애니메이션 제작과정(한글자막)



유니티 - ASE 활용 포털 조각 분리 및 트위스트 애니메이션 제작과정(한글자막)

금별 0 3 03:53

 


SF 포털 VFX 제작 상세 분석 (Unity ASE 중심)

요청하신 Unity ASE(Amplify Shader Editor)를 활용한 SF 포털(Teleportation Gate) VFX 제작의 전체 워크플로우를 단계별로 상세히 설명해 드리겠습니다.

---

1. 모델링 및 UV 준비 (Blender)

포털의 동적인 애니메이션을 구현하기 위한 기초 작업입니다. 셰이더만으로는 복잡한 개별 움직임을 만들기 어렵기 때문에, 모델링 단계에서 셰이더를 위한 특수 UV 정보를 심어주는 것이 핵심입니다.

포털 조각화: 포털의 기본 틀을 다이아몬드(능형) 형태로 만든 후, 이 틀을 작은 막대 또는 조각(Segments)들로 분할합니다. 각 조각은 독립된 폴리곤으로 처리되어야 셰이더에서 개별적으로 제어할 수 있습니다.
UV1 (애니메이션 제어용): 포털이 안쪽에서 바깥쪽으로 회전하며 열리는 효과를 위해 UV1 좌표를 사용합니다.
목표: 각 조각의 중심에서 바깥쪽 끝까지 선형 그라데이션 값을 부여하여, 셰이더가 이 값을 기준으로 회전 강도를 차등 적용하게 합니다. (안쪽은 회전이 느리고, 바깥쪽은 회전이 빠르게)
UV0 (텍스처링용): 포털 표면에 맵핑될 일반적인 텍스처(예: 별자리, 노이즈)를 위해 사용됩니다.

---

2. C# 스크립트 기반 제어 시스템

Unity의 기본 애니메이션 시스템 대신, C# 스크립트를 사용하여 셰이더 매개변수를 직접 제어함으로써 전체 효과를 일관되고 유연하게 관리합니다.

스크립트 (`TransferDoor.cs`): 이 스크립트는 Unity의 `Update()` 함수를 통해 애니메이션의 진행 정도를 나타내는 플로트 값(예: `_yRot_Progress`)을 셰이더에 지속적으로 전달합니다.
제어 변수: 스크립트를 통해 셰이더로 전달되는 주요 변수들입니다.
`_yRot_Progress`: 포털의 열림/닫힘 진행도를 나타내는 값 (0.0에서 1.0으로 애니메이션).
`_Total_Rots`: 포털 조각이 총 몇 바퀴 회전할지 결정하는 값.
`_Rot_Axis`: 회전이 발생할 축 (예: `(0, 1, 0)`은 Y축 회전).
목표: 스크립트의 값 하나만 변경하면 모든 포털 조각의 회전, 크기, 발광 효과가 동기화되어 움직이게 됩니다.

---

3. 메인 포털 조각 셰이더 (Amplify Shader Editor)

포털의 외형과 역동적인 움직임을 구현하는 핵심 부분입니다.

3-1. 정점 셰이더 (Vertex Shader) - 움직임

뒤틀림 회전 (Twisting Rotation): `Rotate About Axis` 노드를 사용합니다. C# 스크립트에서 받은 회전 진척도(`_yRot_Progress`)와 `_Total_Rots`를 곱한 값에 UV1의 G 채널 값(`Gradient Mask`)을 곱하여 최종 회전 각도를 계산합니다. 이 UV1 그라데이션이 안쪽 조각과 바깥쪽 조각의 회전 정도를 다르게 만들어 안쪽에서 바깥쪽으로 퍼지는 듯한 나선형 애니메이션을 만듭니다.

중앙 확장 (Radial Expansion): `Vertex Normal` 노드를 사용합니다. `Vertex Normal` 벡터에 애니메이션 진척도와 연동된 스케일 값을 곱한 후, 이 벡터를 최종 정점 위치에 더합니다(`Add`). 이로써 포털이 열리면서 조각들이 중앙에서 바깥으로 밀려 나가는 효과를 줍니다.

3-2. 프래그먼트 셰이더 (Fragment Shader) - 외형 및 발광

발광 테두리 (Fresnel Glow): `Fresnel` 노드를 사용하여 시선과 수직인 면(테두리)을 마스크하고, 이 마스크를 Emission(발광) 채널에 연결된 색상에 곱하여 테두리만 밝게 빛나게 합니다.
텍스처링 및 노이즈: `Panner` 노드를 사용하여 노이즈 텍스처를 스크롤하고, 이를 `Emission` 색상에 더하거나 곱하여 포털 표면에 미세하게 흐르는 듯한 질감을 줍니다.
페이드 인/아웃 (Alpha): `_yRot_Progress` 값을 기반으로 마스킹하고 `Depth Fade` 노드를 조합하여 포털 조각이 주변 환경과 닿는 부분에서 부드럽게 사라지도록(Soft Edge) 처리하며, 전체적으로 부드럽게 나타나고 사라지는 효과를 제어합니다.

---

4. 보조 효과 및 최종 통합

포털 내부 코어 (Inner Core): 별도의 평면 메시에 `Grab Screen Color` 노드를 사용해 화면을 캡처하고, 움직이는 노이즈 텍스처를 이용한 UV 오프셋으로 공간이 일렁이는 듯한 왜곡을 구현합니다.
파티클 시스템: 포털이 작동할 때 발생하는 스파크나 에너지 입자를 추가합니다. 이들 파티클의 방출 타이밍과 크기 변화는 C# 스크립트의 `_yRot_Progress` 값과 동기화되어야 합니다.
포스트 프로세싱 (Post Processing): 최종적으로 Bloom(블룸) 효과를 강하게 적용하여 셰이더의 Emission에서 나오는 빛을 부드럽고 환하게 번지게 하여 VFX의 완성도를 높입니다.

이 워크플로우는 모델링-스크립트 제어-셰이더 연동이라는 체계적인 단계를 거쳐, 최종적으로 복잡하고 동적인 SF 포털 VFX를 구현해 냅니다.

ASE 셰이더 제작 상세 분석

이 VFX에서 가장 중요한 두 가지 셰이더는 포털 조각(Segments)의 움직임과 외형을 담당하는 셰이더와, 포털 내부의 공간 왜곡(Distortion) 및 발광을 담당하는 셰이더입니다.

1. 메인 포털 조각 셰이더 (Main Portal Segment Shader)

이 셰이더는 Vertex Shader를 통해 조각의 동적 움직임을, Fragment Shader를 통해 발광 외형을 제어합니다.

1-1. 정점 셰이더 (Vertex Shader) - 동적 움직임 구현

정점 셰이더의 목적은 C 스크립트에서 입력받은 `Progress` 값에 따라 각 조각을 회전하고 바깥으로 밀어내는 것입니다.

변수 입력:
`_yRot_Progress` (Float): 애니메이션 진행도 (0.0 ~ 1.0).
`_Total_Rots` (Float): 총 회전량.
`_Rot_Axis` (Vector3): 회전 축 (일반적으로 Y축 `(0, 1, 0)`).
나선형 뒤틀림 (Twisting Rotation):
핵심 노드: `Rotate About Axis`.
회전 각도 계산: `_yRot_Progress` (진행도)를 `_Total_Rots` (총 바퀴 수)와 곱하여 기본 회전량을 만듭니다.
차등 회전 적용: 이 기본 회전량에 UV1의 G(Green) 채널 값을 곱합니다.
UV1 활용: 모델링 단계에서 각 조각의 안쪽은 0, 바깥쪽은 1에 가까운 그라데이션 값을 UV1의 G 채널에 저장해 놓았기 때문에, 안쪽은 회전이 거의 없고 바깥쪽으로 갈수록 회전 각도가 커져서 나선형(Twist)으로 뒤틀리며 열리는 효과가 생성됩니다.
적용: 계산된 각도와 `_Rot_Axis`를 `Rotate About Axis` 노드에 입력하고, 결과를 최종 정점 위치에 연결합니다.
중앙 확장 (Radial Expansion):
핵심 노드: `Vertex Normal`.
로직: `Vertex Normal` 노드의 출력값(각 면이 향하는 방향 벡터)에 `_yRot_Progress` 값을 곱하여, 정점들이 법선 방향을 따라 바깥으로 밀려나도록 만듭니다. 이 값을 `Rotate About Axis`의 출력에 `Add` 노드로 더하여 최종 정점 위치를 결정합니다.

1-2. 프래그먼트 셰이더 (Fragment Shader) - 발광 및 외형 구현

발광 테두리 (Fresnel Glow):
핵심 노드: `Fresnel`.
로직: `Fresnel` 노드 출력값(가장자리로 갈수록 1에 가까워짐)을 `Power` 노드로 강화하여 테두리 마스크를 만듭니다. 이 마스크에 `Color` 속성(발광 색상)을 곱한 후 `Emission` 출력 포트에 연결하여 테두리가 밝게 빛나도록 합니다.
텍스처 흐름 (Texture Panning):
핵심 노드: `Panner` 및 `Texture Sample`.
로직: 노이즈 텍스처를 `Panner` 노드로 지속적으로 스크롤(이동)시킨 후, 이 텍스처 값을 발광 색상에 `Add` 또는 `Multiply`하여 포털 표면이 에너지처럼 일렁이며 흐르는 질감을 추가합니다.
부드러운 사라짐 (Alpha & Depth Fade):
핵심 노드: `Depth Fade` 및 `Lerp`.
로직:
1. `Depth Fade`를 사용하여 포털 조각이 배경 오브젝트와 가까워질수록 투명해지도록 처리합니다. (Soft Edge 효과)
2. 이 `Depth Fade` 값과 `_yRot_Progress` 값을 조합하여 최종 `Alpha` 채널을 제어합니다. 진행도(Progress)가 0일 때는 완전히 투명하고, 1일 때는 불투명해지도록 합니다.

---

2. 포털 내부 코어 셰이더 (Inner Core Shader) - 공간 왜곡

포털 중앙의 원형 코어에 적용되어 공간이 왜곡되는 듯한 착시 효과를 만듭니다.

화면 캡처 (Screen Grab):
핵심 노드: `Grab Screen Color`.
로직: 이 노드를 사용해 현재 카메라가 렌더링한 화면을 텍스처로 가져옵니다. 이 텍스처를 포털 표면에 맵핑하여 마치 포털 너머의 장면을 보는 듯한 효과를 위한 기본 바탕을 만듭니다.
UV 왜곡 (UV Distortion):
핵심 노드: `Panner`, `Texture Sample` (노이즈 맵), `Append`.
로직: `Panner`로 움직이는 노이즈 텍스처를 샘플링한 후, 이 노이즈 값을 `Grab Screen Color` 노드의 UV 입력에 `Add`하여 오프셋(Offset)을 줍니다.
결과: 노이즈가 움직이는 모양대로 화면 텍스처가 비틀리면서, 포털 안의 공간이 일렁이는 듯한 왜곡 효과가 연출됩니다.
중앙 집중 마스크 (Radial Mask):
로직: `TexCoord` 노드와 `Length` 노드를 사용하여 UV 좌표의 중앙(0.5, 0.5)으로부터의 거리를 계산합니다. 이 거리를 마스크로 사용하여 왜곡 효과와 발광 효과가 중앙으로 갈수록 강해지고 가장자리로 갈수록 부드럽게 사라지도록 처리합니다.

개선 가능 및 첨언

1. 퍼포먼스(성능) 및 최적화

1.1 스크린 공간 왜곡 최적화
문제점: 포털 내부 코어 셰이더에서 사용하는 `Grab Screen Color` 노드는 렌더링 파이프라인에 추가적인 드로우 콜(Draw Call)을 발생시켜 게임 성능을 크게 저해하는 주범입니다. 실제 게임 환경에서는 이 방식을 지양해야 합니다.
개선 방안: URP나 HDRP와 같은 최신 렌더 파이프라인에서는 Custom Pass나 Render Feature를 사용하여 왜곡에 필요한 텍스처를 미리 캡처하고, 셰이더에서는 `Screen Position` 노드를 이용해 이 텍스처를 샘플링하는 방식으로 대체해야 퍼포먼스가 개선됩니다.

1.2 정점 애니메이션 부하 관리
문제점: 포털 조각의 `Rotate About Axis`와 `Vertex Normal` 변위는 GPU에서 효율적으로 처리되지만, 조각의 수가 수백 개 이상으로 늘어날 경우 정점 연산 비용이 증가합니다.
개선 방안: 프래그먼트 셰이더 연산을 줄이고, 조각의 알파(Alpha) 페이드와 같은 단순 연산을 정점 셰이더로 최대한 옮기면 픽셀 쉐이딩 부하를 줄이는 데 유리합니다.

---

2. 시각적 디테일 및 심화 효과

현재 방식: 튜토리얼은 UV1의 한 채널(G 채널)만을 이용해 단일 축의 회전 진척도만 제어하고 있습니다.
심화 방안: UV1의 R, G, B 채널을 각각 서로 다른 축(X, Y, Z)의 회전 값에 곱해 오프셋으로 사용하면, 각 조각이 다양한 축을 중심으로 회전하는 듯한 더욱 복잡하고 유기적인 움직임을 만들 수 있습니다.

---

3. 최신 Unity 환경 적용

렌더 파이프라인 호환성: 이 튜토리얼은 표준 렌더 파이프라인(SRP) 기반일 가능성이 높습니다. 최신 프로젝트를 위해 URP(Universal Render Pipeline) 또는 HDRP(High Definition Render Pipeline)로 전환 시, 셰이더의 템플릿 선택 및 렌더링 옵션을 각 파이프라인에 맞게 반드시 재설정해야 합니다.
VFX Graph 활용 연동: 파티클 시스템을 Shuriken 대신 VFX Graph로 대체하여 사용하면, 셰이더에서 사용한 속성(색상, 노이즈)을 파티클 시스템과 공유할 수 있어 포털과 파티클 효과 간의 시각적 일관성을 극대화할 수 있습니다.


 

 

 

 

 

 

에반 언리얼5 이펙트 그룹과정[12월 시작] : https://cafe.naver.com/unrealfx/20727

KUPAFX Stylized 유니티 이펙트 취업과정 : https://cafe.naver.com/unrealfx/21249

트리키 언리얼+후디니 활용 게임 VFX 연출과정 : https://cafe.naver.com/unrealfx/25629

 

max님의 쌩기초 메쉬활용 이펙트과정 1달특강 : https://cafe.naver.com/unrealfx/24469

eVan텍스쳐 단품과정 : https://cafe.naver.com/unrealfx/24468

rak 유니티 UI연출이펙트 : https://gamefx.co.kr/bbs/page.php?hid=Rak_intro

Comments



Total 1,265 Posts, Now 1 Page


 

Banner
 
Facebook Twitter GooglePlus KakaoStory NaverBand