Unity 검색

Unity 2019.1용 애니메이션 리깅 프리뷰 패키지 소개

2019년 5월 14일 엔진 & 플랫폼 | 11 분 소요
공유

Is this article helpful for you?

Thank you for your feedback!

Unity 2019.1용 애니메이션 리깅(Animation Rigging) 패키지를 사용하면 런타임 동안 애니메이션된 골격의 절차적 모션을 설정할 수 있습니다. 또한 사전 정의된 애니메이션 제약 조건(constraints) 세트를 사용하여 캐릭터의 컨트롤 릭(Rig) 계층을 직접 빌드할 수 있으며, C#으로 커스텀 제약 조건을 개발할 수도 있습니다. 이를 통해 게임플레이 중에 월드 인터랙션, 골격 변형 리깅 및 물리 기반 2차 동작과 같은 작업을 수행할 수 있습니다.

이제 Unity 2019.1버전에서 애니메이션 리깅을 프리뷰 패키지로 사용할 수 있습니다. 이번 블로그 포스팅에서는 애니메이션 리깅에 대한 소개와 사용 방법에 대한 몇 가지 예시를 제공합니다. 아울러, GDC Vault에서 무료로 볼 수 있는 애니메이션 리깅에 대한 GDC 2019 프레젠테이션 동영상을 함께 참조하시기 바랍니다.

시작하기

이제 패키지 관리자(Package Manager)에서 애니메이션 리깅 패키지를 Unity 프로젝트에 설치할 수 있습니다. 프리뷰 패키지는 패키지 관리자 상단의 Advanced 탭에서 확인할 수 있습니다. 패키지 페이지에는 기술 자료 링크와 샘플이 포함되어 있습니다. 이번 패키지는 Unity 2019.1용 프리뷰 패키지로 처음 출시되었으며, 2019.2 공개 베타에서 더 개선된 버전을 제공합니다. 2019.2에 포함된 버전에서는 애니메이션 윈도우(Animation Window)를 사용하여 직접 제약 조건 애니메이션을 작성할 수 있으며, 실시간으로 피드백을 확인할 수 있습니다.

프리뷰 버전은 업데이트 시 패키지에 포함된 내용이 변경될 수 있습니다. 하지만 프리뷰 버전을 사용하면서 필요한 기능을 제안하거나 피드백을 전달하여 개발 과정에 간접적으로 참여할 수 있습니다. 애니메이션 리깅 패키지 포럼에 참여하여 프리뷰 버전에 대한 의견을 공유해 주시기 바랍니다!

애니메이션 리깅 개요

애니메이션 리깅 패키지는 런타임 동안 절차적 모션을 생성하는 데 사용하는 릭 제약 조건 라이브러리를 제공하며, 이러한 기능을 일반적으로 런타임 리깅이라고 합니다. 제약 조건은 Rig이라고 하는 단위로 구성되며, 에셋의 Animator Root에 할당되는 Rig Builder 컴포넌트에서 조합됩니다.

이를 통해 사용자는 애니메이션된 골격을 사용하여 게임플레이 중에 월드 인터랙션과 같은 작업을 수행할 수 있습니다. 예를 들어, 캐릭터의 손이 소품과 상호작용하거나 월드 내 타겟을 겨냥하는 등의 작업이 가능합니다. 또한 스킨드 메시 캐릭터의 어깨와 손목 회전 보정과 같이 골격 변형 리깅을 위해 절차적으로 제어된 뼈대를 사용해 더 높은 품질의 리깅이 가능합니다. 또한 캐릭터 릭의 동적 2차 동작을 위해 사용할 수 있는 물리 기반 제약 조건도 포함하고 있습니다.

Bone Renderer

Unity 에디터에서 씬(Scene) 뷰를 이용하면 골격을 보면서 릭에 관한 작업을 편하게 할 수 있습니다. 이제 Bone Renderer 컴포넌트를 사용하여 트랜스폼 목록을 추가하고 다양한 스타일로 변경 가능합니다.

보통 Bone Renderer 컴포넌트를 여러 개 사용하여 골격의 일부를 각각 구성하면 작업이 훨씬 수월해집니다. 아래 예시에서는 하나의 캐릭터가 여러 Bone Renderer 컴포넌트를 가지고 있어 몸, 손가락 및 트위스트 본(twist bone)이 각각의 고유한 스타일로 표현되어 있습니다. 이를 통해 릭 설정, 키프레이밍 또는 게임플레이 디버깅 등 다양한 아티스트 워크플로를 더욱 원활하게 진행할 수 있습니다.

Rig Builder 및 Rig

캐릭터에 Rig을 설정하는 방법은 다음과 같습니다.

  • 먼저, 애니메이터 루트에 Rig Builder 컴포넌트를 추가합니다. 이는 Animator 컴포넌트가 할당된 게임오브젝트와 동일합니다. 일반적으로 릭 계층에서 최상위 트랜스폼입니다.
  • 다음으로 새로운 자식 게임오브젝트를 생성하고 여기에 Rig 컴포넌트를 추가합니다.
  • 마지막으로 Rig Builder에서 Rig Layer 목록에 Rig을 할당합니다.

위 방법으로 최소한의 릭 설정이 가능하며, 다음 단계에서 제약 조건을 추가할 수 있습니다.

Rig Builder의 가장 큰 장점은 위 이미지에서 볼 수 있는 것처럼 Rig Layer 목록에 여러 릭을 추가할 수 있다는 점입니다. 이 기능은 게임플레이 중에 켜고 끌 수 있는 특수한 동작을 만들 때 매우 유용합니다. 또한 각 Rig이 다른 Rig과 블렌딩할 수 있도록 고유한 가중치를 가지고 있어 해당 기능을 더욱 유용하게 사용할 수 있습니다.

Rig Constraint

Rig Constraint는 릭을 조합하고 런타임 동안 절차적 모션을 제작하는 데 사용하는 구성 요소입니다. 모듈형이며 범용으로 설계되었기 때문에 다양한 방법으로 조합하여 런타임에 애니메이션 게임 디자인에 필요한 요구 사항을 해결할 수 있습니다.

패키지와 함께 릴리스되는 Rig Constraint 목록은 다음과 같습니다.

Rig Constraint를 설정하는 방법은 다음과 같습니다. 이 예시에서는 TwoBoneIK Constraint를 사용했습니다.

  • 먼저, Rig 아래에 자식 게임오브젝트를 추가합니다.
  • 그런 다음 TwoBoneIK Constraint를 추가합니다.
  • 다음으로 TwoBoneIK Constraint에 뼈대 및 이펙터를 할당합니다.
  • 마지막으로, 플레이 버튼을 누르면 런타임에서 제약 조건이 평가되는 것을 확인할 수 있습니다.

Rig Constraints 샘플

패키지에 포함된 샘플을 직접 사용해보시면 Rig Constraint 사용 방법을 빠르게 이해할 수 있습니다. 패키지 관리자에 샘플을 프로젝트로 임포트할 수 있는 버튼이 있습니다. 샘플에는 각 제약 조건이 어떻게 작동하는지 보여주는 씬이 포함되어 있습니다.

게임플레이 예시

런타임 리깅은 게임플레이 중에 발생합니다. 따라서 리깅 과정을 보여드리기 위해 기존의 Unity 샘플 콘텐츠를 사용하여 간단한 게임플레이 프로토타입을 만들었습니다.

프로토타입에서는 기본 플레이어 컨트롤을 구현하고 애니메이션 리깅 패키지를 사용해 멋진 게임플레이 메카닉스를 매우 쉽게 적용했습니다. 아래에서 간략한 플레이 영상을 보실 수 있습니다.

각 기능을 살펴보면서 런타임 릭의 제작 과정을 확인하시기 바랍니다.

골격 변형 릭

닌자의 골격에는 이미 뼈의 회전과 스킨 가중치가 설정되어 있습니다. Unity에서 팔과 다리의 변형을 수정하기 위해 TwistCorrection 제약 조건을 추가했습니다. 아래 동영상에서 제약 조건이 꺼져 있을 때의 모습을 확인할 수 있습니다. 회전 보정을 적용하면 실제 해부학적 신체 구조와 의상이 적용된 것처럼 움직임이 훨씬 자연스럽습니다.

수직 조준 릭: 수리검

수리검을 던지는 플레이어인 닌자는 360도로 검을 조준할 수 있어야 합니다.

  • To set this up we first added some new virtual bones to his skeleton.
  • 이를 설정하기 위해 먼저 골격에 새로운 가상 뼈대를 추가합니다.
    • Unity의 가상 뼈대는 골격 계층에 새 트랜스폼을 추가하고 이를 프리팹에 저장하여 생성합니다. 가상 뼈대는 다른 뼈대와 마찬가지로 애니메이션할 수 있습니다. 필요한 경우에만 애니메이션 클립에 키프레임이 있기 때문에 가상 뼈대로 간주되며, 이를 통해 메모리를 절약할 수 있습니다.
  • 다음으로 TwoBoneIK Constraint를 왼쪽 팔에 추가하고 가상 뼈대를 IK 타겟으로 지정합니다.
  • 그런 다음 닌자가 수리검을 던지는 새로운 애니메이션 클립에 IK 타겟을 애니메이션합니다. 그리고 이 클립을 닌자의 애니메이터 상태 머신에서 대체 레이어로 설정합니다. 이 레이어와 수직 조준 릭은 버튼을 누르면 활성화됩니다.
  • 마지막으로 IK 타겟의 부모인 Aim Vertical 가상 뼈대를 실행하기 위해 1D Blend Tree를 만듭니다. 이는 게임패드 컨트롤러의 왼쪽 조이스틱 세로축에 해당하는 플레이어 입력에 따라 실행됩니다.

이 애니메이션 레이어는 닌자가 플레이 중인 모든 애니메이션 위에 오버레이됩니다. 이는 닌자가 달리거나, 점프하거나, 웅크리거나 심지어 검으로 공격 중에도 항상 적용되어 진짜 닌자처럼 즉시 수리검을 던질 수 있습니다.

수직 조준 릭: 일본도

닌자의 일본도 역시 바닥이나 머리 위에 있는 타겟을 맞추기 위해 수직으로 조준할 수 있어야 합니다. 이를 위해 수리검 릭 위에 해당 애니메이션을 빌드했으며, 조준 시 똑같이 1D Blend Tree를 사용합니다.

검 애니메이션에는 수평 회전이라는 새로운 요소가 필요합니다. 수평 조준이 완전히 일직선이 되어야 검의 잔상 효과가 부드럽게 보일 수 있습니다. 자세가 완벽하더라도 서브 프레임에서 결함이 생기기도 하므로 골격 애니메이션만 사용해서는 안됩니다. 팔의 FK 뼈대 체인(bone chain)에서 보간을 계산하는 방식 때문입니다. Multi-Aim Constraint을 사용하면 이 문제점을 해결할 수 있습니다.

  • 먼저 새로운 가상 뼈대를 만들고 일본도 앞쪽에 배치합니다. 그런 다음 해당 뼈대를 Multi-Aim Constraint의 타겟으로 할당합니다. 소스 오브젝트는 일본도 모델의 부모인 오른손 그립 뼈대입니다.
  • 다음으로 조준 타겟의 부모로 다른 가상 뼈대를 추가하고 뼈대가 닌자의 가슴 중심에 위치하도록 Position Constraint를 사용합니다.
  • 마지막으로 검을 휘두르는 애니메이션 클립을 열고 조준 타겟의 부모가 팔의 모션과 동기화되어 회전할 수 있도록 키프레임을 추가합니다.

이렇게 하면 Multi-Aim Constraint가 검의 불완전한 수평 회전을 완벽히 보정합니다. 위의 동영상에서 볼 수 있듯이 애니메이션이 느려지고 파티클 효과를 추가해도 검의 움직임은 항상 일직선으로 유지됩니다.

나비 릭

다음은 Rig Constraint를 사용하여 닌자를 따르는 캐릭터를 만드는 방법에 대한 예시입니다. DampedTransform Constraint를 사용하여 나비가 닌자 프리팹의 타겟 트랜스폼을 따라오도록 했습니다. 또한 Multi-Aim Constraint를 사용하여 닌자가 가는 곳마다 항상 스포트라이트가 그 앞을 비추도록 했습니다.

셰이더 그래프(Shader Graph)용 HD Lit 마스터 노드에 대한 이전 블로그 포스팅에서 동일한 나비 모델을 보신 적이 있을 겁니다. 이 나비는 닌자의 메신저 역할을 수행하며 닌자의 공격력을 상승시키고 특수 공격을 할 수 있게 해줍니다. 무엇보다도 나비는 닌자가 메가시티(Megacity)를 탐험하는 동안 항상 닌자를 따라다닙니다. 이렇게 애니메이션 리깅 패키지를 사용하면 원하는 게임플레이 메카닉스를 쉽게 개발하고 구현할 수 있습니다.

기중기 릭

애니메이션 리깅 제약 조건은 캐릭터뿐만 아니라 다른 대상에도 활용할 수 있습니다. 이번 예시에서는 이러한 제약 조건을 사용하여 미래형 기중기 릭을 만들고 런타임 동안 입력과 제약 조건에 의해서만 구동되는 것을 목표로 삼았습니다. 이번 예시에는 두 개의 게임 패드 조이스틱의 입력값에 따라 모든 모션이 생성되고 하나의 버튼이 컨테이너를 잡고 놓는 모션을 트리거하므로 별도 애니메이션 클립이 없습니다.

참고: 샘플 프로젝트에는 HDRP 텍스처가 포함되어 있지 않습니다.

Github에서 Unity 2019.1용 기중기 샘플 프로젝트를 다운로드할 수 있습니다.

Unity 2019.2 베타를 사용하는 경우 업데이트된 버전의 프로젝트를 여기서 다운로드하시기 바랍니다.

기중기의 컨트롤은 다음과 같습니다.

ControlRig

이번 예시에서는 두 개의 릭을 만들었습니다. 먼저 애니메이션 스트림에서 원하는 결과를 입력하고 계산하기 위해 기본적으로 모델 계층을 모방하는 ControlRig을 만들었습니다.

릭의 빨간 부분은 입력 또는 원하는 타겟을 나타내며 초록 부분은 현재의 실제 결과를 나타냅니다.

DeformRig

두 번째로DeformRig은 ControlRig의 최종 결과를 모델 계층 및 보조 피스톤 운동에 적용합니다.

릭의 최종 결과는 씬에서 모델 또는 조인트에 적용됩니다.

릭 구조

기중기의 팔에 대한 입력은 간단한 스크립트와 Rig Transform 컴포넌트를 사용하여 릭 이펙터를 구동하며, 이를 통해 적절한 씬 및 입력값 평가가 가능합니다. 그 다음으로 입력값은 두 번째 이펙터로 감쇠됩니다. 컨테이너의 회전과 컨테이너를 잡는 모션을 포함한 나머지 이펙터는 이러한 감쇠 결과의 자식입니다. 이 예시에서는 ControlRig에서 15개의 제약 조건을 사용했으며, 입력에는 Damp를, 팔에는 2BoneIK를, 컨테이너를 잡고 놓는 모션에는 다양한 제약 조건을 사용했습니다. 또한 DeformRig은 피스톤에 Aim & Multi-Position을, 릭에서 모델로의 재매핑에는 Multi-Parent Constraint를 사용했습니다.

물론 다른 방법으로 리깅하더라도 이 예시와 유사한 결과를 얻을 수 있습니다. 씬 내 게임 오브젝트 순서인 릭 계층이 제약 조건을 평가하는 순서를 결정하므로 특정 순서에 따라 제약 조건을 평가해야 하는 경우 특히 유의하시기 바랍니다.

이번 포스팅을 통해 입력과 Rig Transform 컴포넌트, 그리고 다양한 유형의 릭과 제약 조건을 다루는 방법을 이해하는 데 도움이 되었기를 바랍니다. 위 기능을 직접 사용해보고, 포럼에 의견을 남겨주시기 바랍니다.

---

Want to continue learning about rigging? Check out our courses and tutorials on the Unity Learn Premium platform.

2019년 5월 14일 엔진 & 플랫폼 | 11 분 소요

Is this article helpful for you?

Thank you for your feedback!