Godot에서 VFX 만드는 방법
요약
본 기사는 Godot 엔진을 활용하여 게임 개발 시 다양한 VFX(시각 효과)를 만드는 방법을 다룹니다. 특히 파티클 시스템의 중요성을 강조하며, 2D와 3D 환경에서 폭발이나 마법 같은 효과를 구현하는 구체적인 기술과 워크플로우를 설명합니다.
핵심 포인트
- Godot 엔진을 사용하여 VFX 제작 과정을 배울 수 있습니다.
- 파티클 시스템은 VFX의 핵심이며, 힘/색상 변화로 애니메이션화됩니다.
- 2D는 스프라이트 시트를, 3D는 파티클 시스템을 활용하는 것이 효과적입니다.
- 복잡한 효과를 위해 여러 레이어(불꽃, 연기 등)와 사운드를 조합할 수 있습니다.
게임 개발(gamedev)에서 가장 재미있는 것 중 하나는 무언가를 '펑' 또는 '쾅' 터지게 만드는 것이라고 생각합니다 [콧방귀]. 오늘은 Godot의 VFX 세계로 깊숙이 뛰어들 것입니다. 마법부터 빗방울까지 온갖 멋진 효과를 만들기 위해 사용할 수 있는 도구들과, 여러분 스스로 효과들을 빠르게 조합하는 방법을 배울 것입니다. 그리고 Godot에서 효과들의 중심에는 강력한 파티클 시스템(particle system)이 있습니다. 설정이 너무 많아서 조금 위압적으로 느껴질 수도 있지만, 우리는 간단하게 시작해서 익숙해짐에 따라 더 많은 요소를 겹쳐 쌓는 방법을 살펴볼 것입니다.
저는 개인적으로 정말 유용하다고 생각하는 흥미로운 기술들을 배우기 위해 여러 VFX를 분석할 것이며, 2D와 3D 모두에서 직접 효과도 만들어 볼 것입니다. 이 모든 것을 단 하나의 영상에 담으려면 많은 내용입니다. 그래서 너무 압도적이지 않도록, 이 의식적인 비디오 토치(video torch)를 밝힙시다. 그리고 제가 약속하건대, 영상은 꺼지기 전에 끝날 겁니다. 이제 VFX 작업을 할 때, 저는 실험할 수 있는 작은 에셋 라이브러리, 특히 텍스처들을 준비해 두는 것을 좋아합니다. 그래서 아래 링크를 사용하여 무료로 다운로드할 수 있도록 제가 가장 좋아하는 것들 몇 가지를 모아 에셋 팩(asset pack)을 만들었습니다.
Zenva에서는 RPG부터 불릿 헬(bullet hells)에 이르기까지 다양한 장르의 실제 프로젝트를 구축하면서 재미와 실용적인 학습을 결합한 전문 비디오 튜토리얼, 서면 강의, 그리고 대화형 퀴즈를 제공합니다. Zenva는 또한 Python, Unity, Unreal 및 기타 필수 도구에 대한 광범위한 코스를 갖추고 있습니다. 7일 무료 체험이 포함된 단일 구독으로 300개 이상의 강좌를 이용할 수 있습니다.
예를 들어 간단한 2D 폭발의 경우, 단일 레이어만 사용해도 충분할 수 있습니다. 스프라이트 시트를 가진 애니메이션 스프라이트 2D 노드와 사운드를 재생하는 오디오 스트림 플레이어를 사용하는 정도면 됩니다. 하지만 더 복잡한 폭발이라면 여러 개의 레이어가 필요합니다. 불꽃, 연기, 스파크, 잔해물, 충격파를 위한 파티클 시스템이요. 그리고 모든 것을 시간 맞춰 조정하기 위해 옴니 라이트(omni light), 사운드, 애니메이션 플레이어 등을 가질 수 있습니다. 하지만 각 레이어를 어떻게 만들까요? 간단한 효과의 경우, 특히 2D에서는 애니메이션 스프라이트 노드로 표시할 수 있는 좋은 스프라이트 시트만 있으면 됩니다. 이는 실제로 'sprite'와 같은 소프트웨어에서 효과의 각 프레임을 직접 손으로 그려서 시작할 수 있다는 의미입니다. 이것은 시간이 많이 걸릴 수 있지만, 그린 것이 최종 결과물로 보이므로 작동 방식이 간단하고 좋습니다.
하지만 이렇게 하면 매번 동일한 스프라이트를 보여주기 때문에 매우 정적인(static) 효과가 만들어집니다. 그리고 3D에서 작업한다면 좀 더 입체적으로 느껴지는 무언가를 원할 수 있는데, 이것이 바로 파티클로 이어집니다. 파티클은 정말 멋집니다. 왜냐하면 파티클 시스템은 파티클을 생성하기 때문입니다. 우리는 이 파티클에 힘(force)을 가하고, 색상이나 크기 같은 것을 이용해 시간에 따라 애니메이션화하며, 텍스처를 적용할 수 있고, 인스펙터(inspector)에서 속성만 변경하여 정말 멋진 효과를 만들 수 있습니다. 파티클은 실시간으로 시뮬레이션되기 때문에 무작위성과 변화를 추가하기가 매우 쉽습니다.
그리고 파티클의 양을 완전히 과하게 사용하지 않는 한, 실제로 렌더링하는 것이 매우 빠릅니다. 이제 VFX 아티스트들은 더 많은 유연성을 위해 종종 자체 셰이더(shader)를 작성하고 이를 파티클과 결합한다는 점을 언급해야 합니다. 하지만 커스텀 셰이더가 엄청나게 복잡할 필요는 없지만, 이 영상에서 전구가 꺼지기 전에 다루기는 어려울 것입니다. 그래서 다른 영상으로 남겨두겠습니다. 대신, 몇 개의 파티클 시스템과 충분한 창의성만으로 만들 수 있는 많은 효과에 초점을 맞추겠습니다.
즉, 멋진 효과를 만들려면 파티클 시스템(particle system)을 어떻게 사용하는지 배워야 합니다. 2D에서 몇 가지를 보여드린 다음 3D로 넘어가겠습니다. 하지만 GDAU에서 파티클을 다룰 때 두 방식 간의 핵심 개념은 매우 유사하므로 너무 걱정하지 않으셔도 됩니다. 첫 번째 단계는 파티클 시스템을 만드는 것입니다. 노드를 추가하겠습니다. 여기에는 선택할 수 있는 두 가지 다른 노드가 있습니다. CPU와 GPU 파티클입니다. 이름에서 알 수 있듯이, CPU 파티클은 프로세서(processor)에서 시뮬레이션되며, GPU 파티클은 그래픽 카드(graphics card)에서 시뮬레이션됩니다.
저는 의심스러울 때는 GPU 파티클을 사용하라고 말씀드리고 싶습니다. 이들을 사용하지 않는 주된 이유는 모바일 장치와 같은 저사양 하드웨어를 목표로 할 때입니다. 상단에 있는 이 옵션을 사용하여 언제든지 GPU 시스템을 CPU 시스템으로 변환할 수 있습니다. 성능이 더 뛰어나서 더 복잡한 효과를 만들 수 있게 해주는 GPU 파티클에 초점을 맞추겠습니다. 그리고 바로 우리의 파티클 시스템이 방출(emitting)되어야 하지만, 입자가 없습니다. 그 이유는 '프로세스 머티리얼(process material)'로 들어가서 새로운 파티클 프로세스 머티리얼을 추가해야 하기 때문입니다.
이제 아주 작은 입자들을 볼 수 있습니다. 그리고 프로세스 머티리얼 아래에는 우리의 파티클에 관한 모든 종류의 것을 변경하는 무시무시한 설정들이 있습니다. 예를 들어, '스폰 벨로시티(spawn velocity)'로 가서 초기 속도를 100과 같은 값으로 설정할 수 있습니다. 또한 확산도(spread)를 180으로 설정하여 입자들이 모든 방향으로 날아가게 할 수도 있습니다. 프로세스 머티리얼이 정말 마법이 일어나는 곳입니다. 그리고 멋진 점은 이것이 2D에서 3D까지 동일하다는 것입니다. 하지만 프로세스 머티리얼의 강력함에 빠지기 전에, 여기 상단에서 우리의 파티클의 기본 설정을 조정할 수 있습니다.
텍스처를 설정할 수 있습니다. 에셋에서 가져온 것을 사용하겠습니다. 방출할 입자의 양과 시간 경과에 따른 각 입자의 생명 주기(lifetime)를 설정할 수 있습니다. 여기서는 또한 입자를 고정된 FPS로 제한하는 옵션도 있습니다. 이것을 60으로 늘려 더 부드럽게 보이도록 하거나, 아예 0으로 설정하여 제한을 완전히 제거할 수 있습니다. 폭발과 같은 일부 효과는 순간적으로 발생하는데, 이를 위해 '폭발성(explosiveness)'을 사용할 수 있습니다. 현재는 0으로 설정되어 있습니다. 이것을 1로 변경하면 모든 입자가 동시에 방출됩니다.
또는 그 중간 값을 선택할 수도 있습니다. 물론 대부분의 폭발은 이렇게 반복되지 않습니다. 따라서 시스템을 일회용(one shot)으로 설정하여 한 번만 재생되도록 할 수 있습니다. 그런 다음 '방출(emitting)' 기능을 사용하여 입자를 재생시킬 수 있습니다. 자, 이제 핵심적인 부분인 프로세스 머티리얼(process material)로 넘어가겠습니다. 대부분의 프로세스 머티리얼은 세 가지 주요 범주로 나눌 수 있습니다. 첫 번째는 스폰(spawn)으로, 입자가 시작되는 방식입니다. 여기에서 입자가 어디서 방출될지, 어떤 각도에서 방출될지 (텍스처를 사용하여 회전하는 것을 볼 수 있습니다), 그리고 어느 정도의 속도로 방출될지를 제어합니다.
우리는 이미 이것을 사용하여 초기 속도를 빠르게 증가시켜 입자들이 더 넓게 퍼지도록 했습니다. 두 번째 범주는 디스플레이(display)로, 입자가 어떻게 보이는가입니다. 여기에서 우리는 입자의 크기(scale)와 색상(color) 같은 것들을 제어할 수 있습니다. 물론 이 값들을 상수값으로 설정할 수도 있습니다. '크기(scale)'로 이동하여 최소값과 최대값을 0.2로 설정하면 입자가 더 작아지게 할 수 있습니다. 또는 두 값을 다르게 설정하여 변화를 줄 수도 있습니다. 그러면 이제 우리의 입자는 그 사이에서 변화하게 됩니다. 그리고 더 멋진 것은, 곡선(curve)을 사용하여 시간에 따라 값을 변경할 수 있다는 것입니다.
그리고 스케일 커브(scale curve) 아래에서 새로운 커브 텍스처를 설정할 수 있습니다. '커브(curve)'로 이동하여 시간이 지남에 따라 스케일이 어떻게 변하기를 원하는지 그리는 것입니다. 여기서는 예를 들어, 입자들이 작게 시작해서 빠르게 최대 크기로 자란 다음 천천히 줄어드는 모습을 만듭니다. 이처럼 시간에 따른 변화와 다양성을 만드는 것은 믿을 수 없을 만큼 강력하며, 이를 통해 우리의 입자(particles)에 관한 모든 종류의 것을 수정할 수 있습니다. 색상(color)의 경우를 예로 들면, '색상 커브(color curves)'로 이동하여 컬러 램프(color ramp)를 사용할 수 있습니다. 여기서는 시간이 지남에 따라 색상을 변화시키는 그라디언트 텍스처를 만듭니다. 보시다시피 이것만으로도 우리의 입자들이 즉시 세 배 더 멋져 보이게 만들 수 있습니다.
물론, 우리는 원하는 대로 이 그라디언트를 변경할 수도 있습니다. 세 번째이자 마지막 범주는 애니메이션 속도 및 가속도(animated velocity and accelerations)입니다. 입자가 시간이 지남에 따라 어떻게 움직이고 회전하는지 다룹니다. 스폰(spawn) 카테고리에서 우리의 초기 속도(initial velocity)를 설정할 수 있지만, 이것이 시간에 따라 변화하기를 원한다면 이 카테고리가 필요합니다. 이 파티클 시스템은 초기 속도가 없고 작용하는 힘도 없습니다. 모든 입자가 제자리에 머물러 있습니다. 이제 애니메이션 속도를 사용하여 모든 종류의 방식으로 직접 속도를 설정할 수 있습니다.
예를 들어, '방향성 속도(directional velocity)'로 이동하여 이 값을 -200과 200 사이로 설정할 수 있습니다. 하지만 아무 일도 일어나지 않습니다. 그 이유는 여기서 각 축의 속도를 설정하기 위해 커브를 사용해야 하기 때문입니다. 그래서 저는 x축에 대한 커브를 만들고 매우 높게 시작했다가 감소하도록 했습니다. 이제 우리의 입자들은 x축을 따라 발사되었다가 느려질 것입니다. 또한 가속도(accelerations)를 사용하여 물리적 개념을 통해 속도에 더 간접적으로 영향을 줄 수도 있습니다. 이 파티클 시스템은 초기 속도를 가지고 있습니다. 그런 다음 중력(gravity)과 감쇠(damping)를 적용할 수 있습니다.
따라서 이것이 세 가지 주요 카테고리입니다. 나머지 설정들은 상황에 따라 조금 더 다를 것이므로, 진행하면서 살펴보겠습니다. 이렇게 하면 파티클 시스템이 완성되어 3D에서 이러한 것들을 시도해 볼 준비가 됩니다. Legion Games의 멋진 비디오에서 영감을 받은 3D 폭발로 시작해 보겠습니다. 이 효과는 여러 다른 레이어로 구성됩니다. 불(fire) 레이어부터 시작하겠습니다. 새 GPU particles 3D 노드를 생성하겠습니다. 아직 아무것도 보이지 않습니다. 따라서 2D와 마찬가지로 프로세스 머티리얼을 추가해야 하지만, 여전히 아무 일도 일어나지 않습니다.
그 이유는 3D에서는 파티클에게 어떤 종류의 메시(mesh)를 렌더링할지 알려줘야 하기 때문입니다. 이것은 draw passes pass one으로 이동하여 메시를 선택함으로써 수행합니다. 2D에서와 같은 표준 파티클의 경우 사각형(quad)을 사용할 수 있습니다. 하지만 구체(sphere), 상자(box) 등 다른 메시 옵션도 있으며, 원한다면 사용자 정의 메시를 드래그할 수도 있습니다. 저는 구체를 선택하겠습니다. 그리고 즉시 우리의 파티클이 보입니다. 다른 모든 메시와 마찬가지로 머티리얼을 추가할 수 있습니다. 여기서 우리는 실제로 일반적인 표준 3D 머티리얼을 사용할 수 있습니다. 모든 설정을 그대로 둘 수 있습니다.
하지만 우리가 확실히 하고 싶은 한 가지는 vertex color로 이동하여 use as elbido를 활성화하는 것입니다. 사실, 나중에 이것이 왜 중요한지 보여드릴 수 있도록 지금은 꺼두겠습니다. 기본 설정의 경우 양을 조금 늘리겠습니다. 파티클을 폭발적으로 만드세요. 그리고 최적의 부드러움을 위해 fixed FPS를 0으로 설정하겠습니다. spawn position 아래에서 emission shape을 구체(sphere)로 설정하겠습니다. 이것은 파티클이 구체 내부에서 방출된다는 것을 의미합니다. 아까와 마찬가지로, 파티클에 초기 속도를 주고 확산(spread)을 늘려 모든 방향으로 방출되도록 하겠습니다.
다음으로 가속도(accelerations) 항목에서 중력(gravity)을 작은 양수 값으로 설정하여 입자들이 천천히 위로 떠다니게 할 것입니다. 이 시점에서 모든 입자가 똑같이 보입니다. 그래서 디스플레이 스케일(display scale)로 가서 크기를 조금 줄이고 다양성을 부여할 것입니다. 또한, 시간 경과에 따라 작아지도록 스케일 커브(scale curve)를 추가할 것입니다. 입자에 색상을 주기 위해 컬러 커브(color curves)로 이동하여 색상을 설정할 수 있습니다. 하지만 아무 일도 일어나지 않습니다. 그 이유는 표준 재질(standard material)에서 'use SLBO' 옵션을 끄고 왔기 때문입니다. 따라서 'vertex color use as albedo'를 사용하면 색상이 나타납니다.
이것은 입자 시스템이 메시의 정점 색상(vertex colors)을 수정하기 때문이며, 따라서 메시의 재질이 이러한 정점 색상을 표시해야 합니다. 하지만 단순히 고정된 색상을 선택할 필요는 없습니다. 컬러 초기 램프(color initial ramp)를 사용하여 그라디언트에서 무작위 색상을 얻을 수 있습니다. 여기서는 색상에 약간의 다양성을 추가하는 그라디언트를 만들고 있습니다. 또한, 발광 커브(emission curve)를 사용하여 입자를 더 밝게 만들 수 있습니다. 시작점은 높고 점차 떨어지는 곡선을 그릴 것입니다. 필요한 경우 커브의 최대값을 변경할 수 있다는 점에 유의하세요.
만약 전역 환경(world environment)이 빛나기(glow)를 사용하도록 설정되어 있다면, 입자가 실제로 빛나기 시작할 수도 있습니다. 빛나기 및 전역 환경 설정에 대해 더 자세히 알고 싶다면 GDAU에서 3D 게임 만들기 비디오를 확인하세요. 마지막으로, 우리의 효과를 일회성(one shot)으로 표시할 수 있습니다. 이것이 첫 번째 레이어입니다. 보시다시피, 우리가 설정한 대부분의 속성은 2D 입자 시스템에 대해 보여드렸던 것과 동일합니다. 그리고 우리는 다른 모든 레이어와 대부분의 효과를 만드는 데 이 동일한 속성을 사용할 수 있습니다. 실제로 연기를 만들기 위해 불꽃 레이어를 복제하고 단순히 수명(lifetime)을 조금 늘리고, 초기 속도(initial velocity)는 줄이고, 중력(gravity)은 늘린 다음, 색상을 짙은 회색으로 변경하자 즉시 연기처럼 보였습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 YouTube Brackeys (Unity 튜토리얼)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기