Search Unity

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

, 5월 14, 2019

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.

33 replies on “Unity 2019.1용 애니메이션 리깅 프리뷰 패키지 소개”

Hi Christougher,
The example content we currently have available for download is the mechanical crane. We have versions available on GitHub for both 2019.1 and 2019.2. We do hope to release more example content including the ninja later this year.

This is so going in the right direction – I’m planning to mix animation data from various sources (mocap system, neural network, regular fbx animation, IK etc) and the new rigging system looks like it may enable me to this cleanly and effectively.

However, in trying to follow the demo movie (Unity Runtime Rigging Setup on youtube) I am completely stumped by how he manages to select the armature in the Hierarchy whilst keeping the ‘Ninja’ prefab’s root gameobject selected in the Inspector (22 seconds into the movie) – how does one select one thing in the Inspector whilst selecting something else in the Hierarchy – what magic is this, and how do I perform it!?

Edit: Further on in the movie, I noticed the presenter uncheck the padlock icon at the top of the Inspector window. I guessed then that the icon is a selection lock – I tried it and was able to select the joints in the hierarchy whilst keeping the root gameobject selected in the Inspector – my issue is resolved.

Hi DaveDub,

Cool, glad to hear you figured it out. Yes, it can be useful sometimes to lock the inspector so it stays focused on a particular GameObject. You can also open a second instance of Inspector so you can also see the selected GameObject. I agree it’s not the most obvious workflow, so we will keep an eye out for how to make it easier to discover.

I’m excited to hear how it goes with your project. This does seem like something that would be facilitated by the runtime constraints in Animation Rigging. Definitely stay in touch with us about how that goes and feel free to post a thread on our forums (link is included in the blog) if there are good discussion topics that come up.

And by the way, cool name!

-Dave

I’m so so happy features built into humanoid are being transferred into components, with a billion new features to boot! Quick question though, how do those twist bones work? The ones that are built into the rig before import.

Hi Josh,
Glad to hear you are happy about these features! The Twist Correction constraint gets added to bones that are already in your skeleton with skin weights. The constraint blends rotation on one axis to the target transform. So this just sets rotation correctly during runtime, but the bones need to be there to begin with. I hope that helps clarify how they work.

I assume that characters already have to be skinned to get this new stuff work?
Many character-files out there provide geometry in T/A-pose but have no bones/skin.
So I would like to get a skinning tool in Unity similar to the Mixamo-thing but better ;-)

Hi Carsten,
That is correct, your character needs to have a skeleton and skin weights already set up. Thanks for the suggestion, I agree it would be nice to have tools for creating that content in Unity.

I am guessing thats next on your list, as a logical next step from this would be to add the bone creation and skin weighting into unity itself

Looks cool. What is the performace cost of this? Can it run in mobile? Would be possible to import rig systems from a dcc tools? Would b possible to enable this feature by lod distance? Great work

Hi Andre,
To speak to your question about performance costs, this is relative to how much computation happens within each constraint solver algorithm. Simple constraints will be more performant than complex ones. We do have the added benefit of automatic multi-threading with the C# Jobs System. There isn’t any reason why this wouldn’t work on mobile platforms. There is the ongoing trade-off of processor vs. memory, which can mean different choices for mobile based on what kind of game you are making.

For DCC importing of constraints, Unity does have a different kind of constraint that is meant to serve that purpose. Those can be found on the Component > Miscellaneous menu (Aim, Position, Rotation, Scale, Look At and Parent). These will be exported from DCC if you FBX settings have export constraints set to true, and they will be imported into Unity. However, the constraints in Animation Rigging are not intended to serve this purpose and are instead built for runtime so that games and applications can have the performance and range of functionality that is needed for that set of use cases.

For your final question: yes, it’s definitely possible to enable/disable these constraints by LOD distance. You can manage constraints active state and weight value from C# scripts very easily.

Hi Wendelin,
Yes, there is more information about physics-based constraints in our GDC Developer Days presentation. The link to that video is included at the top of the blog post. In that presentation we describe how to build a new physics-based constraint called the Jiggle Chain Constraint. There is also an example scene included with the package that shows how to used the Damped Transform Constraint. I hope that helps.

If i understand the video correctly, the jiggly example is faking physics.
Is there a way to have let’s say the scorpion tail with something like :

“baked idle tail animation” + “realtime rig constraints to attack a position” + “physics rigidbody+collider to adapt to the map and other ojects around” ?

This is definitely going in the right direction. It is a bit disappointing that the out-of-the-box constraints do not include a constrained FABRIK or general constrained CCD IK solver. This is the thing I need most. Specifically, I need more than two bones and I need to specify rotation limits at each bone. Bonus would be to handle sliding joints in the IK solver. The game we are working on now uses 6 bone chains with rotation joints at each. We use the Final IK plugin for the constrained IK. If we could get Rigging up to that level, it would be extremely useful.

Hi David,
Great suggestions and yes, we understand the importance of different kinds of IK solvers like FABRIK and CCD. We do intend to add more constraints in future releases, but in the meantime we left it open ended for users to extend the package and develop their own constraints in C#. The package architecture handles all of the internal work for you to get access to Animation Stream and multi-threading with the C# Jobs System. Our GDC Developer Days presentation has more instructions how to do that if you are interested. The link to that is included in the blog post.

What is the difference between Animation Rigging and Humanoid IK through OnAnimatorIK? Can these two systems be used together?

Hi, you can use animation rigging with humanoid, but humanoid IK will override constraints applied by animation rigging. You can use one or the other, but not both at the same time.

I used an Xbox one Gamepad controller (did have an issue with the button mapping though), but any PS4 controller should also be fine. Also mapped Keyboard inputs, just in case ;-)

OMG!!

Can I make mocap directly in Unity using Kinect & Cinema Suite???

(please say yes, please say yes, please say yes, please say yes)

OMG!!!!

This is compatible witi the asset Cinema Suite?

CAN I MAKE MOPAC DIRECTLY IN UNITY NOW??

(PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,)

Hi Kaz,
It looks like Cinema Suite is an Asset Store plugin provided by an external developer, so we don’t maintain that ourselves. I haven’t used it so I can’t say for sure if it is compatible. By reading the description it looks like it does Kinect mocap and as far as I can tell that should work fine with the Animation Rigging package.

Comments are closed.