Search Unity

유나이트 LA 2018에서 실시간 시각 효과를 낼 수 있는 Unity 툴 비주얼 이펙트 그래프(Visual Effect Graph)가 공개되었습니다. 이 툴은 GPU로 실행되는 컴퓨트 셰이더(Compute Shader) 및 노드 기반의 워크플로를 사용합니다. 이번 게시물에서는 비주얼 이펙트 그래프를 기존의 파티클 시스템과 비교하고, 툴 사용 방법을 알아보겠습니다. 비주얼 이펙트 그래프는 Unity 2018.3 정식 버전에서 패키지 관리자를 통해 제공됩니다.

영화의 시각 효과 분야에서 아이디어를 얻어 완성된 비주얼 이펙트 그래프는 실시간 시각 효과 제작 시 사용되는 강력한 많은 기능을 활용하고 있습니다.

시작하기

비주얼 이펙트 그래프는 이제 Unity 2018.3부터 패키지 관리자를 통해 제공됩니다. 비주얼 이펙트 그래프를 설치하려면 ‘Window’ > ‘Package Manager’ > ‘Advanced’로 이동한 다음 ‘Show preview packages’와 ‘Visual Effect Graph’를 차례로 선택하고, ‘Install’을 클릭합니다.

 

현재 비주얼 이펙트 그래프는 Unity 2018.3고해상도 렌더 파이프라인에서 실행되며, 향후 릴리스에서 경량 렌더 파이프라인 지원이 추가될 예정입니다. 따라서 비주얼 이펙트 그래프를 사용하려면 먼저 Unity 프로젝트가 고해상도 렌더 파이프라인을 사용하는지 확인해야 합니다.

새 시각 효과를 만들려면 프로젝트 창을 마우스 오른쪽 버튼으로 클릭한 다음, ‘Create’ > ‘Visual Effects’ > ‘Visual Effects Graph’를 선택합니다. 에셋이 생성되면 씬 뷰나 계층 구조로 드래그만 하면 됩니다.

비주얼 이펙트 그래프 창

VFX를 처음 사용하는 사람부터 숙련된 VFX 아티스트와 프로그래머 모두에게 적합한 Unity의 그래프 뷰는 노드와 블록을 사용하여 빠르게 익힐 수 있으면서도 익숙해지고 나면 강력한 기능을 활용할 수 있는 워크플로를 제공합니다.

컨텍스트는 블록으로 구성되며, 파티클에 적용되는 작업의 순서를 나타냅니다. 노드는 상호 연결되어 블록에 입력된 여러 계산을 수행하며, 이를 통해 파티클 프로퍼티가 정의됩니다.

노드 시스템은 약간의 차이는 있지만 Unity의 셰이더 그래프(Shader Graph) 툴을 이용해본 사용자라면 익숙하게 다룰 수 있습니다.

컨텍스트나 노드를 만들려면 Space 키를 누르거나, 컨텍스트 영역을 벗어난 위치에서 마우스 오른쪽 버튼을 클릭한 다음 ‘Create Node’를 선택합니다. 블록을 만들려면 컨텍스트에 마우스 커서를 올려놓은 상태에서 Space 키를 누르거나 마우스 오른쪽 버튼을 클릭한 다음, ‘Create Block’을 선택합니다.

컨텍스트

System은 Initialize, Update 및 Output 컨텍스트의 컬렉션으로, 점선 테두리로 표현됩니다. 동일한 비주얼 이펙트 그래프 에셋 내에는 여러 개의 시스템이 존재할 수 있습니다.

 

Spawn은 생성할 파티클 수 및 시점(예: Periodic Burst, Constant, Single Burst)을 정의합니다.

Initialize는 Capacity와 Bounds로 시작됩니다.
Capacity는 시스템에 동시에 존재할 수 있는 파티클 수를 정의합니다.

참고로 Capacity는 파티클 수에 적합한 양의 메모리를 할당하므로 이 수치는 생성할 수 있는 파티클 양에 해당해야 합니다. Capacity 수치는 다음과 같은 공식으로 계산됩니다.

                                                                                      속도 × 최대 지속 기간 = Capacity

Bounds는 카메라를 통해 볼 때 파티클 시뮬레이션이 이루어지는 영역을 정의합니다.

Update는 시간의 경과에 따라 파티클 프로퍼티를 변경하며, 힘(force)을 사용할 수 있게 하는 유일한 컨텍스트입니다. 이 컨텍스트에서 충돌, Signed Distance Field 또는 Vector Field를 적용할 수 있습니다.

Output은 파티클을 렌더링합니다. 즉, 생성되는 파티클 유형, 텍스처/컬러 및 방향을 결정하여 파티클 크기와 포지션 등이 최종으로 조정됩니다. 각 시스템의 출력은 여러 개일 수 있으며, 각 출력을 통해 대다수의 파티클 속성을 조정할 수 있습니다.

블록

블록은 파티클 프로퍼티를 정의하며, 노드로 오버라이드 가능합니다. 블록은 컨텍스트에 따라 달라지며, 특정 컨텍스트에서는 일부 블록을 사용할 수 없습니다. 한 예로, 생성 속도(Spawn Rate) 블록은 생성(Spawn) 컨텍스트에만 추가할 수 있습니다.

블록을 비활성화하려면 블록 이름 오른쪽에 있는 체크박스를 선택 해제하면 됩니다. 일부 입력은 입력 이름 왼쪽의 작은 화살표를 사용하여 펼칠 수 있으며, 이를 통해 특정 속성, 예를 들어 Vector3의 X, Y 및 Z 컴포넌트에 액세스할 수 있습니다.

블록과 컨텍스트는 그래프에서 선택하여 인스펙터를 통해 수정할 수 있습니다. 따라서 시각 효과를 제작할 때에는 인스펙터가 표시되도록 설정하는 것이 좋습니다.

노드

노드에서는 특정한 값과 파라미터 데이터를 출력하는 작업부터 다양한 계산 실행하는 것까지 여러 다양한 기능을 수행할 수 있습니다. Add, Multiply나 Lerp 등 값을 정의하는 대부분의 노드는 Float, Vector 3, Color와 같은 다양한 유형의 값을 출력하도록 수정할 수 있습니다.

워크플로 툴

자동 컴파일

기본적으로 비주얼 이펙트 그래프는 노드나 블록이 변경될 때마다 다시 컴파일됩니다. 따라서 크기가 작은 그래프의 경우 씬에서 변경 사항을 빠르게 확인할 수 있지만, 시스템이 복잡해지면 컴파일에 상당한 시간이 걸릴 수도 있습니다. 자동 컴파일을 비활성화하면 컴파일 버튼을 누르거나 저장할 경우에만 그래프가 컴파일을 수행하므로 수정할 때마다 대기해야 하는 불편 없이 그래프에 중요한 변경 사항을 적용할 수 있습니다.

블랙보드

블랙보드에는 그래프에서 사용할 수 있는 파라미터가 저장되며, 인스펙터에서 수정할 수 있도록 파라미터를 노출할 수 있습니다. 생성 가능한 여러 다양한 파라미터 유형을 구성할 수 있도록 카테고리와 툴팁이 지원됩니다.

새로운 파라미터를 만들려면 블랙보드 오른쪽 상단의 ‘+’ 아이콘을 클릭하세요.

게임 오브젝트 타게팅

게임 오브젝트 타게팅 패널을 사용하면 씬 뷰에서 현재 실행 중인 시각 효과의 특정 인스턴스에 대한 로컬 공간 기즈모를 보거나, 재생할 수 있습니다. 게임 오브젝트를 연결하려면 씬에서 현재 열려 있는 시각 효과 인스턴스를 선택한 다음 ‘Attach’를 클릭합니다. 씬 인스턴스에서 시각 효과를 바로 열면 해당 게임 오브젝트가 자동으로 연결됩니다.

파라미터 바인더

노출된 파라미터는 스크립트를 통해 설정 가능한 반면, 파라미터 바인더는 시각 효과의 파라미터를 자동으로 구성합니다(예: 게임 오브젝트의 포지션, 스케일 및 회전). 파라미터 바인더를 추가하려면 계층(Hierarchy) 에서 Visual Effect를 선택하고 ‘Add Component’를 클릭한 다음 ‘Binder’를 검색합니다. 게임 오브젝트를 ‘None’이라는 레이블이 지정된 박스로 드래그한 다음, ‘⌄’ 기호를 클릭하여 원하는 파라미터를 선택합니다.

파티클 시스템과의 비교

두 시스템의 주요 차이점은 실행되는 하드웨어입니다. 파티클 시스템은 CPU에서 시뮬레이션되는 반면, 비주얼 이펙트 그래프는 대다수의 계산을 컴퓨트 셰이더에서 처리합니다. 즉 GPU에서 실행됩니다.

이 비교를 통해 비주얼 이펙트 그래프가 어떻게 수백만 개의 파티클을 시뮬레이션하고, 복잡한 시뮬레이션을 계산하고, 프레임 버퍼를 읽을 수 있는지 알 수 있습니다. 반면, 파티클 시스템은 기본 물리 시스템을 사용하며, 리드백(read back)을 통해 게임플레이와의 인터랙션이 가능합니다.

현재 대다수의 휴대폰을 비롯하여 일부 기기에서는 필수 컴퓨트 셰이더가 지원되지 않으므로 기기 호환성에도 유의하세요.

지원 데이터 유형

비주얼 이펙트 그래프는 Point Cache, Vector Field, Signed Distance Field 등의 에셋을 지원합니다. 이 에셋을 사용하면 입체, 힘, 충돌 및 기타 커스텀 데이터 유형을 표현할 수 있습니다.

  • Point Cache는 공간에서 트랜스폼, 노멀, 컬러, UV 등 포인트 속성을 저장합니다.
  • Vector Field는 파티클의 포지션을 샘플링한 후 파티클을 3D 공간으로 푸시합니다.
  • Signed Distance Field는 입체 표현을 통해 파티클을 끌어오거나 충돌시키는 데 사용할 수 있습니다.

아래 영상에서는 해골 SDF(Signed Distance Field)를 외부에서 제작한 후 Unity로 가져와 마법 효과를 구현한 예를 보여 줍니다.

VFX 툴박스

비주얼 이펙트 그래프 팀은 이러한 데이터 유형을 생성할 수 있는 도구 모음인 VFX 툴박스를 개발하고 있습니다. VFX 툴박스로 만든 데이터는 파티클 시스템과 같은 Unity의 다른 영역 내에서 활용될 수 있습니다.

VFX 툴박스는 Github에서 다운로드할 수 있습니다.

이미지 시퀀서

이미지 시퀀스를 처리하고 플립북 텍스처 시트와 같은 텍스처 에셋을 생성할 수 있습니다.

포인트 캐시 베이크 툴

pCache 툴이라고 하며, 텍스처에서 2D 포인트 캐시를 생성하거나, 메시에서 3D 포인트 캐시를 생성합니다.

유용한 팁

비주얼 이펙트 그래프는 시각 효과를 좀 더 다이나믹하게 표현할 수 있도록 강력한 시너지 효과와 다양한 노드를 제공합니다.

스티커 메모, 노드 그룹, 이름

비주얼 이펙트 그래프에는 그래프에 주석을 달고 레이블을 지정할 수 있는 몇 가지 유용한 기능이 있습니다.

컨텍스트 이름을 사용하면 컨텍스트의 이름을 지정할 수 있습니다. 컨텍스트 제목 아래의 작은 섹션을 더블 클릭하여 이름을 입력할 수 있습니다.

시스템 이름을 만들려면 점선 테두리 상단 바로 아래의 작은 섹션을 더블 클릭합니다.

스티커 메모는 크기를 조정할 수 있는 텍스트 상자로 생성됩니다. 스티커 메모를 만들려면 그래프의 빈 영역을 마우스 오른쪽 버튼으로 클릭한 다음 ‘Create Sticky Note’를 선택합니다. 텍스트 크기는 ‘Small’부터 ‘Huge’까지 4가지 중에서 선택할 수 있습니다. 텍스트 크기를 변경하려면 스티커 메모를 마우스 오른쪽 버튼으로 클릭하고 드롭다운 목록에서 크기를 선택합니다. 스티커 메모 크기를 변경하려면 모서리나 꼭지점 부분을 드래그합니다.

노드 그룹을 사용하면 노드 그룹의 제목을 지정할 수 있으며, 그룹으로 한 번에 이동할 수 있습니다. 노드 그룹을 만들려면 그룹으로 만들 노드를 선택하고, 선택한 노드의 상단을 마우스 오른쪽 버튼으로 클릭한 다음 ‘Group Selection’을 선택합니다. 노드를 노드 그룹에 포함하려면 기존 그룹 안으로 드래그합니다. 노드를 노드 그룹에서 제외하려면 Shift 키를 누른 채 그룹 밖으로 드래그합니다. 노드는 삭제하지 않고 그룹만 삭제하려면 그룹 제목을 클릭하여 강조 표시한 다음 Delete 키를 누릅니다.

생성자 체인

생성자(Spawner) 체인을 사용하면 하나의 생성자로 다른 생성자를 시작하거나 중단할 수 있습니다. Spawn 컨텍스트의 출력을 ‘Start’이나 ‘Stop’에 연결하세요. 위의 예시에서는 상수 스트림을 2초 동안 생성하고, 2초 동안 중단한 다음 이 과정을 반복합니다.

GPU 이벤트

GPU 이벤트를 사용하면 커스텀 설정 조건에 부합하거나 파티클 소멸 시 다른 파티클 시스템을 트리거할 수 있습니다. 위의 예에서는 파티클 소멸 시 10~15개 정도의 파티클이 생성됩니다.

GPU 이벤트를 활성화하려면 ‘Experimental Operators/Blocks’를 활성화합니다.

타임라인

비주얼 이펙트 그래프는 타임라인과 완벽하게 호환되므로 시각 효과의 타이밍을 정확하게 제어할 수 있습니다. 효과를 제어하는 두 가지 방법은 이벤트와 파라미터입니다. 이벤트를 제어하려면 타임라인에서 Visual Effect Activation Track을, 파라미터를 제어하려면 Animation Track을 생성합니다. 이 두 가지 트랙을 모두 설정하고 이벤트의 값을 상속받는 방법은 위 동영상에서 확인하실 수 있습니다.

샘플 프로젝트 다운로드

 

비주얼 이펙트 그래프를 쉽게 사용해볼 수 있도록 패키지 개발 팀에서 샘플 Unity 프로젝트를 지속적으로 출시하고 있습니다. 프로젝트의 첫 릴리스에서는 다음 3가지 샘플을 제공합니다.

  • 유니티 로고: 기본 동작과 Vector Field 시연
  • 모핑 페이스(Morphing Face): HDRP Lit 호환성과 포인트 캐시 시연
  • 버터플라이(Butterflies): 일부 고급 동작 시연

더 많은 예제가 공개될 예정이니 GitHub의 저장소를 클로닝해둘 것을 권장드립니다.

추가 자료

비주얼 이펙트 그래프와 관련 문서는 현재 계속 개발 중입니다. 패키지가 프리뷰로 제공되는 동안에도 관련 문서를 확인하려면 Github의 스크립터블 렌더 파이프라인 위키를 참조하세요.

좀 더 자세한 정보를 알아보려면 Unite Los Angeles 2018에서 발표한 비주얼 이펙트 그래프 팀의 프레젠테이션 영상을 확인해 주세요.

SpaceShip VFX 그래프 데모를 확인해보는 것도 도움이 됩니다. 이 데모에서는 스파크나 연기와 같은 간단한 효과부터 엔진 코어와 컴퓨터 핀 스크린과 같은 복잡한 효과까지 다양한 효과를 시연합니다. 추후 이 프로젝트의 더 많은 비주얼 이펙트 예시가 공개될 예정입니다.

비주얼 이펙트 그래프를 사용한 작업을 Twitter에 공유할 때에는 꼭 #VisualEffectGraph 해시태그를 달아주세요. 패키지에 관한 의견은 포럼의 비주얼 이펙트 그래프 피드백 스레드에 남겨 주시면 됩니다.

마지막으로 비주얼 이펙트 그래프를 이용하여 멋진 작품을 만드셨다면 꼭 공유해 주시기 바랍니다. 언제든 @John_O_Really로 트윗 보내주시기 바랍니다.

18 코멘트

코멘트 구독

코멘트를 달 수 없습니다.

  1. please VFX for LWRP, cant wait tho! :D

  2. Visual effect graph is something which plays a major role in creating an explosive visuals; I am eagerly waiting for it to support LWRP. (https://degreesymbolmac.com/)

  3. Visual effect graph is something which plays a major role in creating an explosive visuals; I am eagerly waiting for it to support LWRP. (https://newpipeapk.xyz/)

  4. I’d like to ask if all those new shiny nodes and links are available for us, developers, as controls and windows we’re able to create and use via editor scripting interface? Can we extend this effect editor to add new nodes like it is with shader graph nodes? Is it currently possible to create new (not shader and not effect – ai, for instance) node-based tools and workflows having standard look and feel, or we still have to rely on third party ui components?

    1. Scripting your own custom nodes for the Visual Effect Graph is possible, but not very accessible right now. As the feature is in preview there’s no documentation on how to do this. However you can open the C# files inside the package.

      And ss far as I know you cannot currently access graph view for your own plugins.

      1. Thank you! Please consider opening the graph view API for users. When working on internal tools, I always trying to integrate them into unity and bring common look and feel. This way my tools are much easier to write, learn, and use. On the other hand, using plugins with custom UIs, bloats the Unity Editor with unfamiliar (and ofted bad designed) UI elements and breaks it’s look &feel.
        Personally I would like Unity to allow to define inspectors and custom windows with some sort of markup language with data binding support instead of writing code.With markup it is much easier to enforce single UI style accross multiple tools inside the editor.

        1. Antoine Lassauzay

          12월 18, 2018 3:20 오후

          Hello,

          UIElements is a new UI framework in Unity which offers an XML based markup language and supports more and more scenarios for editor UI. A good place to start learning about it is this forum post : https://forum.unity.com/threads/uielements-preview.562258/.

          We also have a presentation from Unite LA: https://www.youtube.com/watch?v=MNNURw0LeoQ

          Thanks.

  5. Can’t wait until this supports the LWRP. Looks awesome

  6. Looks Awesome! Will be really helpful if you guys add a game object Parameter to can follow a target position in real time.

    1. The Visual Effect Graph comes with a set of parameter binder scripts: you can simply expose a Vector3 parameter in the VFX blackboard and bind it to, say, the position of a game object in your scene. Then, within your graph, you can use that exposed Vector3 to control the simulation in some way (for example, emit towards that game object).

  7. “…and generate texture Assets such as flipbook texture sheets.” => So amazing!

  8. Lucas Pallarés

    11월 27, 2018 5:56 오후

    Amazing!

  9. “Currently, the Visual Effect Graph runs on the High Definition Render Pipeline in Unity 2018.3, with planned support for the Lightweight Render Pipeline coming in future releases.”
    Could you, please be more specific? What are estimates for preview for LWRP, what for release?

  10. Gettting this error after importing it into 2018.30b11 with HDR pipeline:

    Shader error in ‘Hidden/VFX/System 1/Quad Output’: failed to open source file: ‘Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl’ at /Projects/TEMP/TestVFX/Library/PackageCache/com.unity.visualeffectgraph@4.3.0-preview/Shaders/RenderPipeline/HDRP/VFXCommon.cginc(1) (on d3d11)

    1. Nevermind, needed to update the HDRP package in package manager as well. Works now

  11. Will traditional particles remain in Unity or will they eventually be replaced by the Visual Effects Graph?

    1. From what i heard in the talks at Unite Berlin, the VFX graph will not replace the shuricken particle system due to the differences regarding physics for example. Since they both have different areas of use they will co-exist until the VFX graph can do everything the standard particle system can today.

    2. No. The old system isn’t going anywere, because they have diferent purposes.