이펙트아카데미 특강/외주/커뮤니티
FX 워크 플로우 학습
Real-time(실시간) VFX 아티스트 Sjors de Laat는, 멋진 VFX : 메쉬, 텍스처링, 쉐이더 및 파티클 시스템 등을 만드는 그만의 방식을 공유하였습니다!
원문 : https://80.lv/articles/learning-fx-workflow/
번역 : http://cafe.naver.com/unrealfx (금별)
소개
안녕, 모두들! 내 이름은 Sjors de Laat, 나는 26 세이며, Made라 불리는 네덜란드에 있는 작은 마을에서 왔습니다. 현재 글래스고에 거주하면서 Axis Animation에서 실시간 VFX 아티스트로 일하고 있습니다.
저는 14 세 때 3D를 알게 되었습니다. 당시에는 혼합 미디어를 만드는 것을 좋아했으며 Cinema4D와 3ds Max를 통해 추상 이미지를 만들었습니다. 약 1 년 후 Depthcore라는 예술 단체에 소개되었습니다.
그리고 처음에는 매트 페인터가 되었습니다. 대학에 입학한 이후, 게임과 영화에 대한 관심이 커지기 시작했습니다. 그 분야에서 무언가를 하고 싶어 한다는 것은 알고 있었지만, 정확히 무엇을 하고 싶은 것인지는 확실하지 않았습니다. 알아내는 데 오랜 시간이 걸렸고, 그 시간 내에서 최대한 많은 것을 탐구했습니다. 대학을 졸업하게 되는 해에, 저는 스스로를 정의하고 집중하고자 하는 것을 선택해야 했습니다. 처음에는 모호했고, 쉽게 정의 할 수 없었지만, 환경 예술가 쪽으로 기울게 되었습니다. 이후 선생님들 중 한 분이 전문화하고 싶은 분야에 대한 명확한 목표를 설정해야 한다고 말해 주었습니다. 그동안 참여한 프로젝트들 중, 가장 즐거운 것은 무엇이었는지 생각하기 시작했습니다. 결국, VFX가 제가 가장 즐기는 것이었입니다. VFX는, 수년 동안 배웠던 많은 내용들을 명확하게 적용할 수 있게 하면서도, 제가 원할 때는 다양한 일들을 할 수 있게 해 주었습니다.
VFX는 충분히 만족스럽고 재미있는 분야입니다. 제가 여전히 시작 단계에 머물러 있다는 사실이 즐겁습니다. 아직도 배울 대상이 너무나 많음을 알고 있습니다. 모두 배움의 과정일 뿐입니다!
접근 방식
새로 창조할 대상을 찾고 있을 때는 어디서부터 시작해야 합니까? 가장 먼저 해야 하는 일은, 영감을 주고 참조가 될 수 있는 것들을 모으는 일입니다. 이 과정에서 스스로에게 질문을 던질 수 있습니다: 이 이펙트는 얼마나 복잡할 것인가? 이 이펙트의 목적은? 어떤 스타일로 가야 하는가? 어떤 타겟 플랫폼이 필요한가? 나는 어떤 유형의 모션을 원하는가? 영감을 주고 참고가 되는 대상들을 모으는 동안, 다른 FX에서 영감을 얻을 수도 있고, 흥미로워 보이는 시각적 단서와 모션을 찾게 될 수도 있습니다. 주제에서 벗어난 세상을 보고, 그곳에서 여러분의 이펙트에 통합시킬 수 있는 흥미로운 연결 고리를 찾아야 합니다. 실크가 바람 속에서 어떻게 움직이는지 보거나, 예를 들어 바위와 충돌 할 때 파도가 어떤 모습을 보이는지 관찰하는 것. 결국 현실 세계는 스타일과 주제에 상관없이 항상 최고의 영감을 얻을 수 있는 영역이 될 것입니다.
(출처 : 유튜브 Anne Kreamer, The Slow Mo Guys, 60 Symbols)
충분한 참조 과정 이후에는 구분하기/개념 정리의 단계가 옵니다. 이 단계에서는 주로 주된 모션 및 액션에 대한 느낌을 얻는 데 중점을 둡니다. 또한 필요한 리소스의 유형을 측정할 수 있습니다. 나중에는 변할 가능성이 높지만, 대략적인 감을 잡을 수 있게 되며, 미리 많은 질문에 대답을 할 수도 있게 됩니다. 이후 저는 앞으로 필요하게 될 요소들을 모두 적어놓는 문서를 작성합니다. 이 문서는 또한 피드백으로서, 수정해야 할 사항과 추가할 항목을 파악할 수 있도록 도와줍니다. 다음에는 제작을 시작할 모든 것들이 준비되어 있는지 확인해야 합니다.
개인적으로, 모든 요소를 먼저 개별적으로 제작하는 것으로 시작합니다. 메쉬가 신속하게 만들어 지므로 먼저 메쉬를 만듭니다. 다음은 텍스처입니다. 그런 다음 쉐이더 제작과, 파티클 시스템의 대략적인 설정을 시작합니다. 저는 이러한 과정을, 더 큰 조각을 만들기 위해, 부분부분들을 먼저 확장시키는 것으로 보고 있습니다.
학습 과정
학습을 시작할 계획이면 먼저 툴을 알아야 합니다. 가장 큰 배움은 FX의 기본 원칙을 이해하고, 이를 점차적으로 프로젝트에 적용해 나가는 것입니다. 작은 부분으로부터 시작하고, 개선시키고 싶은 대상을 찾고, 목표는 신중히 세워야 합니다. 저는 VFX를 배우는 과정에 있을 때 집중할 수 있는 측면이 다음과 같이 나뉜다고 생각합니다.
메쉬 제작 : VFX의 메쉬는 대개 운반체로 사용되며 납작한 물체로는 쉽게 달성 할 수없는 움직임을 만드는 데 사용됩니다. 메쉬의 UV로 무엇을 할 수 있는지 배우십시오. 그리고 어떤 이펙트에 도달하기 위해 그것이 할 수 일을 아십시오. 리소스가 얼마나 부담을 주는지 알아보십시오: 폴리곤이 너무 많은가 혹은 너무 적은가, 어떻게 하면 메쉬가 불필요한 오버 드로(overdraw)를 발생시키지 않는지 알아야 합니다.
다이나믹스 : FX는 자연 현상(부 자연스러운 현상도 포함합니다)의 움직임에 관한 것입니다. 현상이 발생하게 되는 원인을 알아내고 그것이 어떻게 작동하고, 행동하고, 서로 상호 작용하는지 확인하십시오. 이는 모두 주제를 이해하는 일입니다. 그러나 애니메이션의 관점에서 이러한 원칙을 적용해야 합니다. 왜냐하면, 때로는 무언가가 옳게 보일 수는 있지만, 그것이 이펙트 내에서도 옳다고는 여겨지지 못할 수도 있기 때문입니다. 추천해 드릴만한 소프트웨어: 후디니는 그 어느 때보다도 강하고 여전히 성장을 계속하고 있지만, 배우고 습득하기 가장 어려운 프로그램 중 하나입니다. 그러므로 처음에는 어떤 목적으로 사용할 것인지를 파악해야 합니다. 전에 말씀드린 것처럼: 작게 시작하십시오! 엔진에는 또한 몇 가지 기본적인 물리법칙이 적용되지만, 근사치일 가능성이 큽니다.
텍스처 : 텍스처의 경우 텍스처에 좋은 가치를 부여하십시오. 잘 조합되는지, 잘 읽혀지는지, 그리고 그라디언트 매핑 및 침식(erosion)은 잘 작동하는지 확인하십시오.
쉐이더 : 이 부분은 원한다면 정말 깊게 갈 수 있지만, 처음에는 노드 기반 에디터에 익숙해져야 하고, 각각의 기능이 무엇인지도 알아야 합니다. 대부분의 심도있는 내용은, 쉐이더를 얼마나 유연하게 사용하고 싶은가와 관계되어 있습니다. 에너지 기반 이펙트를 모두 하나의 쉐이더로 제어하고 싶은가? 그것들을 단순하게 주제별로 나눌 것인가? 쉐이더가 재사용을 할 수 있게 만들어야 합니다. 새로운 material을 만드는 것보다 material instance를 하는 편이 낫습니다.
디자인 : 디자인은 가장 중요한 요소 중 하나입니다. 게임에서는, 이펙트가 어떤 목적으로 플레이에 사용되는지 유저에게 알려줄 수 있어야 합니다. 또한 효과를 시각적으로 어필할 수 있게 해 주는 핵심이기도 합니다. 그래픽 디자인은 이를 위한 훌륭한 영감의 원천이며, 대부분의 디자인 원칙은 FX에 직접 적용될 수 있습니다. 디자인이란, 비주얼적인 커뮤니케이션이며, 감정적인 반응을 이끌어내는 방법이고, 플레이어에게 봐야 할 곳을 지시해주는 지시 도구라고 정의내릴 수 있겠습니다.
애니메이션 : FX란, 에너지를 애니메이트하는 것입니다. 애니메이션의 12 원칙은 이펙트에도 거의 적용됩니다. 이러한 원리는 설득력있고, 사실적인 이펙트를 만드는 데 도움을 줍니다. 스타일화된 FX와 현실적인 FX 모두에 이 규칙이 적용됩니다.
구현 : 구현 프로세스가 작동하는 방식을 학습하고, 스스로 하는 법을 배우십시오. 언리얼의 블루프린트 시스템은 훌륭한 출발점을 제공합니다. 이것은, 예를 들면 탄환을 만드는 방법에 적용될 수 있습니다. 이펙트가 키 누름에 의해 트리거되거나, 특정 뼈에 이펙트를 부가하려는 경우 등이 그 예가 될 수 있습니다. 구현 프로세스의 작동 방식을 이해하면, 어떤 면들을 고려해야 하는지 이해할 수 있습니다. 예를 들면 각 요소들을 통합할 책임이 있는 직원에게 중간 결과물을 넘겨 주는 경우, 여러분은 그 직원의 부담을 덜어줄 수 있을 것입니다.
Cascade(케스케이드)
Cascade (Unreal Engine의 파티클 에디터)는 파티클 시스템을 생성하는 데 사용되는 모듈식 이미터 기반 시스템입니다. Niagara(나이아가라)가 막 출시되었지만, 핵심 개념에 대한 이해를 도와주는 좋은 시작 툴은 될 수 있습니다. 또는 나이아가라가 바로 시작하기에는 너무 어려워 보이실 수도 있으니까요. 캐스케이드는 파티클 시스템 자체를 구성하는 규칙세트의 목록입니다. 표준 이미터를 생성할 수 있습니다. 그리고 메쉬 이미터, 리본 이미터, 트레일 이미터, GPU 이미터도 있습니다. 이미터 목록을 보여주는 창은 문제의 파티클 시스템이 어떻게 분류되어 있는지도 나타내 줍니다. 목록의 첫 번째 이미터는 마지막으로 렌더링되는 이미터입니다. 이미터 내의 각 모듈에는 임의대로 변경할 수 있는 일정량의 규칙이 들어 있습니다. 각 모듈에는 타임라인 내에 존재하는, 0에서 1 사이의 값을 가진 포인트들이 포함됩니다.
모듈 내 특정 파라미터의 분포 유형을 변경할 수 있으면, 해당 파라미터는 블루프린트, 시퀀서(sequencer) 또는 엔진을 통해서도 액세스될 수 있습니다. 엔진을 사용하면 필요한 경우 파티클 시스템의 미묘한 변화들을 만들어낼 수 있습니다. 이는 여러분이 약간의 행동 차이를 보이는 비슷한 시스템을 원할 때마다, 새로운 시스템을 만들 필요는 없게 해 줍니다.
(파티클 파라미터에 distribution(분포)을 설정하면, 런타임 중에도 파라미터를 조정할 수 있습니다)
미리보기 창은 이미터당 입자 수를 시각화하고, 경계(범위)를 시각화하고, 시스템이 움직일 때 어떻게 보일지 나타내주며, 충돌 및 빛의 영향을 확인하게 해줍니다. 이미터 내의 모든 모듈은 파티클이 생성될 영역을 시각화해 줍니다. 이를 통하여 여러 이미터들이 서로 어떻게 연관되어 있는지도 확인할 수 있습니다.
아래의 창은 커브를 편집하는 기능을 제공합니다. 모듈 옆에 있는 버튼을 클릭하면 해당 모듈의 커브를 창에서 시각화할 수 있습니다. 노란색 사각형을 누르면 곡선을 숨길 수도 있습니다. x, y 및 z (빨강, 녹색 및 파랑 사각형) 곡선은 노란색 사각형 옆에 표시되는 경우 개별적으로 토글될 수 있습니다. 원하면 개별적으로 편집할 수도 있습니다. 곡선에서 CTRL을 누르면 곡선에 점을 추가 할 수 있습니다.
생성 프로세스
앞서 언급한 것처럼, 이펙트 생성에 접근하는 개인적인 방식은 먼저 이펙트에 필요한 요소(엘리먼트)들의 유형을 파악한 다음 그것들을 먼저 만드는 것입니다. 메쉬 제작 과정에서, 저는 Maya와 ZBrush를 주로 사용합니다. 메쉬는 대부분 간단합니다. 스크롤링 텍스처를 사용하고자 하는 모든 메쉬에 대해, UV는 0과 1 사이에 있어야 합니다. 그러나 (예를 들어 총알처럼) 메쉬를 루프해서 지나가야 하는 텍스처가 있는 경우, 약간 축소하여 루핑이 눈에 띄지 않게 합니다.
메쉬에 그라디언트를 추가하려는 경우 셰이더를 통할 수도 있지만, 더 편리한 방법은 메쉬에 버텍스(정점) 컬러를 더해주는 것입니다. 그런 다음 텍스쳐에 곱(multiply)해져 동일한 페이드 아웃 효과를 얻을 수 있습니다. 버텍스 컬러는 또한 메쉬의 특정 부분의 행동을 제어할 수도 있게 해줍니다. 예를 들면, 비누 거품이나, 찌부러뜨려지고 있는 강철 통의 제어된 변형(deformation)이 있습니다. 어떤 경우에는, 특정 표면(surface) 또는 표면의 일부에 파티클이 생성되기를 원할 수 있습니다. 이러한 경우에는 스켈레탈 메쉬로 변경한 이후에, 파티클이 만들어지기를 원하는 영역을 뼈에 붙여 줍니다. 다음에는 skin weight가 파티클이 스폰되는 특정 표면에서 마스크로 사용됩니다.
텍스처의 경우 저는 Photoshop, Substance Designer 및 Substance Painter의 조합을 선호합니다. Photoshop은 손으로 그리는 요소를 만드는 데 사용되며 Substance Designer는 대부분의 타일되는 노이즈와, 제가 씬에서 사용하려 하는 간단한 요소에 사용됩니다. Asset의 경우에는 디자이너와 페인터를 함께 사용합니다. 저는 항상 채널 패킹(텍스처 이미지 채널마다 서로 다른 그레이스케일 이미지를 사용하는 것)을 사용합니다. 이 경우 요소 또는 주제별로 분류될 수 있겠습니다. 예를 들면, 원하는 효과를 얻기 위해 함께 작동하는 여러 텍스처가 필요한 다양한 유형의 트레일 또는 요소(element)들이 있습니다. 다음으로는 텍스처가 엔진 내에서 잘 읽혀지고 작동되는지, 그라디언트 매핑이 적용되었을 때는 어떠한지 확인하고, 그에 따라 원하는 결과를 얻기 위해 적절하게 조정해 줍니다.
다음으로는 셰이더가 만들어집니다. 계획 단계에서 윤곽을 세웠지만, 여전히 세부적인 설정은 하지 않은 채로, 제가 사용할 요소(element)만 만듭니다. 작업의 진척 정도에 맞추어 전체적인 설정은 자연히 개선되며, 잘 작동하지 않는 부분이 있거나 다른 설정이 필요한 경우에는 수정됩니다. 저는 대부분의 쉐이더를 직접 제작하는 편이었습니다. 하지만 시간이 지남에 따라 다른 리소스와 사람들로부터 많은 테크닉과 설정(setup)을 배우게 되었고, 이제는 필요에 따라 그것들을 활용합니다.
다음에는 제가 가진 요소(element)들을 활용하여 파티클 시스템을 구성 할 것입니다. 레이어별로 만듭니다. 각 이미터들의 행동을 정하고, 원하는 모션을 보일 때까지 조정해 줍니다. 이후, 이미터를 추가하여 그 위에 또 빌드합니다. 이전 요소와 어긋나지 않도록요. 이미터들이 모두 구현된 이후에도 필요하면 조정해 주어야 합니다. 또한 셰이더가 너무 복잡하여 시스템에 부담을 주지는 않는지 정기적으로 확인하고, 불필요한 overdraw(그린 것 위에 또 그리는)는 없는지 확인하십시오. 저는 모든 요소가 잘 작동한다는 것을 안 이후에는, 마지막까지 최적화를 유지하기 위해 노력합니다. 일단 이 지점에 도달하면, 엘리먼트(요소)를 얼만큼 축소할 수 있는지 확인해야 합니다. 가급적 원래의 모습을 잃지 않는 한도 내에서요. 이는 정확도와 최적 코스트(시스템에 주는 부담) 사이의 균형입니다.
텍스처를 애니메이션화하는 것은 여러 방법으로 수행될 수 있습니다. 케이스 바이 케이스이지만, 여기서 애니메이션화하는 한 가지 방법을 설명해 드리겠습니다. 셰이더가 핵심입니다. 무거운 작업은 어떠한 수단을 사용하여 처리할 것인지와, 얼마나 유연한 쉐이더를 만들고 싶은지에 대한 문제가 될 것입니다. 파티클 시스템 외부로부터 파티클 파라미터에 액세스하여 대상을 애니메이션화할 수 있는 가능성은 언제나 있습니다. 다이나믹 파라미터(Dynamic parameter)를 사용하면 최대 4 개의 서로 다른 매개 변수(파라미터)를 애니메이션화할 수 있습니다. 그것은 캐스케이드로 직접 넣어질 수 있습니다. 파티클 시스템 내에서 SystemUpdate 기능이 있는 모든 매개 변수는 예를 들면, 블루프린트, 시퀀서 및 C ++에서도 애니메이션화될 수 있습니다. 파라미터 컬렉션은, 런타임 도중에 액세스되어 변경될 수 있는 값들의 집합입니다. 이 파라미터 컬렉션은 쉐이더 내의 올바른 파라미터에 직접 입력될 수 있습니다. 시퀀서와 블루프린트를 통해서도 액세스될 수 있습니다.
(예 : 알파 침식(erosion,사라지게 하기) 테스트. 텍스처 내의 모션을 살펴볼 수 있는 방법 중 하나)
스크롤링 텍스처의 경우, 쉐이더 내에서 더하기(add), 빼기(subtract) 및 조정(adjust)를 통하여 그것들을 통합합니다. 흥미로운 모양을 얻기 위해서입니다. 파티클의 수명 동안 텍스처를 침식(사라지게 하는 것)하고 싶은 경우, Photoshop / Substance에서도 테스트하고, 엔진 내에서도 테스트 할 것입니다. 흥미로운 방식으로 침식이 발생하는지 확인하고, 텍스처의 콘트라스트 값을 충분하게 하여 부드럽게 침식될 수 있도록 합니다. 특정 엘리먼트(요소)가 수명 동안 어떻게 조작될 것인지에 대해 더 많은 제어권을 원하는 경우에는, Dynamic Parameter(다이나믹 파라미터)가 가장 큰 도움이 될 것입니다. 엘리먼트들이 보이는 일정한 움직임을 깨고, 여러분이 원하는대로 캐스캐이드 내에서 조정할 수 있게 해줍니다.
최적화
멋진 결과물이 만들어졌습니다. 그렇지만 오래된 질문이 왔습니다: 과연 돌아갈까? 오버 드로(overdraw)는 슬라이드 쇼처럼 느리게 작동하도록 만드는 가장 큰 원인일 수 있습니다. 가장 적은 양의 파티클로 어떻게 화면 정확도를 최대화할 수 있는지 알아야 합니다. 실제로 필요한 파티클만 생성하면서도 전체적인 일관된 외형은 훼손하지 않아야 합니다. 파티클에서 낭비되는 공간도 줄이십시오. 가능하면 trim(잘라내다) 텍스처를 이용하여, 파티클에서 낭비되는 공간을 없애야 합니다. 제가 자주 사용하는 방법이 있습니다: 생애 기간 동안 불투명도를 줄임으로써 파티클을 사라지게 하는 방법을 쓰는 경우, 파티클이 생애 기간 내에 완전히 사라지는지 확인해 보세요. 아니라면, 파티클이 완전히 투명하게 된 후 신속하게 크기를 0으로 축소시키세요.
왼쪽은 수정 전, 오른쪽은 수정 후입니다. 비슷한 결과가 나오지만, 불필요한 오버 드로(overdraw)가 적습니다.
또한 텍스처 자체 내에서 너무 많은 공간이 낭비되지 않도록 하십시오. 낭비되는 공간이 적으면 트리밍(trim, 잘라내기) 작업도 줄어듭니다. 가능하다면, 절차적으로(procedural) 만드세요. 언리얼4는 노이즈, 모양 및 그라디언트를 생성하는 다양한 옵션을 제공합니다.
왼쪽 : 텍스처 공간(space) 측면에서 이상적이지 않습니다. 오른쪽 : 텍스처 공간면에서 더 이상적입니다.
파티클 이미션이 적정한지 확인하십시오. 너무 많아도 너무 적어도 안됩니다. 사실 스크린에서 그것들이 얼마나 크게 보여지는지에 달려 있습니다. 여러분이 제작하는 시스템의 크기가 증가하면, 시스템에 필요한 틱 레이트(tick rate)도 늘어납니다. 이 경우에는, 파티클 시스템의 행동(behavior)을 업데이트하는 데 시간이 얼마나 필요한가입니다. 특정 파티클이 게임의 동일한 프레임 내에서 얼마나 많이 재사용되는가도 고려되어야 합니다.
거의 같아 보이지만, 왼쪽의 emission rate(방출계수)가 훨씬 낫습니다.
파티클 시스템의 범위를 설정해주면 파티클을 cull(추려내기)해야 하는지 여부를 결정하는 데 도움이 됩니다. 파티클 시스템에, 게임 내내 활성화되는 LOD(level of detail)를 설정하세요. 시스템의 일부 요소가 멀리 떨어져 있으면 보이지 않을 수도 있습니다. 그러한 경우 LOD에서 끄면, 시스템에 가하는 부담을 크게 덜게 됩니다.
결론
읽어 주셔서 대단히 감사합니다! 비록 저는 여전히 VFX 초심자이지만, 제 글을 통해 무언가 얻으시는 바가 있으시기를 희망합니다.
Sjors de Laat는 또한 VFX 학습을 시작하는 데 도움이 되는 유용한 리소스 리스트를 준비했으며, 이번 주말에 이를 게시할 예정입니다. 새로운 기사를 주시하십시오!
Sjors de Laat, Axis Animation의 실시간 VFX 아티스트
Interview conducted by Kirill Tokarev.
https://gamefx.co.kr/bbs/board.php?bo_table=tip_01&sca=%EC%9E%90%EC%B2%B4%EB%B2%88%EC%97%AD
유니티를 사용하여 젤다와 유사한 VFX를 구현하는 법
https://gamefx.co.kr/bbs/board.php?bo_table=tip_01&wr_id=20&page=2
게임용 VFX 설명 (VFX for Games Explained)
https://gamefx.co.kr/bbs/board.php?bo_table=tip_01&wr_id=34&page=1
FX 워크 플로우 학습
https://gamefx.co.kr/bbs/board.php?bo_table=tip_01&wr_id=38&page=1
유니티로 Stylized Equalizer Effect 만들기
https://gamefx.co.kr/bbs/board.php?bo_table=tip_01&wr_id=40&page=1