> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-ko/3d/animations.md).

# 애니메이션

Decentraland에 가져온 3D 모델에 포함할 수 있는 애니메이션을 만드는 방법을 알아보세요.

애니메이션은 사물에 생명을 불어넣는 예술입니다. 그리고 3D 모델에 애니메이션을 추가하는 것만큼 장면을 더 생동감 있게 만드는 좋은 방법은 없습니다.

{% hint style="info" %}
**💡 팁**: 다음을 설치하세요 [Decentraland Tools Blender 플러그인](https://extensions.blender.org/add-ons/decentraland-tools/). 여기에는 3D 모델, 착용 아이템, 이모트를 편집하고 내보내는 데 도움이 되는 여러 유용한 기능이 포함되어 있습니다.
{% endhint %}

이를 수행하는 몇 가지 방법이 있습니다: **객체 애니메이션**, 또는 **리그(골격 애니메이션)**, 또는 **셰이프 키(모프 타깃 애니메이션)**.

**객체 애니메이션** 은(는) 튀는 공, 회전하는 지구본, 떠 있는 의자 같은 단순한 모델에 가장 적합하며 아마추어가 필요 없습니다. 객체 애니메이션은 **버텍스 애니메이션**과는 다르다는 점을 말씀드리는 것이 중요합니다. 객체 애니메이션에서는 모델 전체가 하나로 애니메이션되지만, 버텍스 애니메이션에서는 오브젝트의 각 버텍스를 개별적으로 애니메이션할 수 있습니다.

**셰이프 키(모프 타깃 또는 블렌드 셰이프라고도 함)** 은(는) **Decentraland 엔진에서 지원되는**버텍스 애니메이션의 한 형태입니다. 이는 특히 얼굴 표정, 립싱크, 또는 뼈만으로는 구현하기 어려운 변형에 유용합니다. glTF/GLB 파일에 포함된 셰이프 키 애니메이션은 골격 애니메이션이나 객체 애니메이션처럼 월드에서 재생됩니다.

더 복잡한 모델, 예를 들어 사람, 생물체 또는 기계 장치와 같은 경우에는 **리그**. 리그는 메시를 움직이고 변형시키는 디지털 골격에 지나지 않습니다. 메시를 골격에 바인딩하는 과정을 스키닝이라고 하며, 여기서 어떤 뼈가 각 버텍스 그룹에 영향을 주는지, 그리고 그 영향이 어느 정도 강해야 하는지를 정의하여 모델이 가능한 한 최상의 방식으로 변형되도록 합니다.

어떤 방법을 사용하든, 3D 모델의 모든 애니메이션은 반드시 내부에 포함되어 있어야 합니다 *glTF* 파일에 저장되어야 합니다. 애니메이션을 별도 파일로 참조할 수 없기 때문입니다.

## 애니메이션 만들기

Blender를 사용해 애니메이션을 만드는 방법은 다음과 같습니다.

### 객체 애니메이션

* 탭이 열려 있는지 확인하고 ***도프 시트*** > ***액션 에디터*** 를 클릭하여 애니메이션 클립을 추가하세요. ***새로 만들기*** 를 클릭하여 애니메이션 클립을 추가하세요.
* 원하는 대로 이름을 바꾸고 ***Fake User*** (방패 아이콘)를 켜서 애니메이션이 저장되도록 하세요.
* 첫 번째 프레임에서 오브젝트를 선택한 다음 ***I***. 그런 다음 오브젝트를 이동, 회전 또는 크기 조절하고, 타임라인의 다른 프레임에서 ***I*** 를 다시 눌러 현재 변환값으로 다른 키프레임을 설정하세요.
* 애니메이션의 마지막 프레임은 첫 번째 프레임과 같아야 하므로, 첫 프레임을 복사해서 마지막 프레임에 붙여넣기만 하면 됩니다.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-efdf5b9c23ab8b9fe1c9dba379a9f19927fca580%2F01_object_animation_02.gif?alt=media)

*애니메이션 클립을 만들고 키프레임을 추가하기.*

### 리그 애니메이션

리그 애니메이션을 하려면 아마추어가 필요합니다. 직접 하고 싶다면 [리그 만들기](https://www.notion.so/686e6f59a1604585b059f990a36b2d55) 를 참고하여 일관된 아마추어를 설정하는 방법을 확인하세요.

리깅이 완료되고 스키닝으로 변형이 잘 되면 애니메이션을 시작할 준비가 된 것입니다! 과정은 객체 애니메이션과 매우 비슷하지만,  ***오브젝트 모드***&#xC5D0;서 하는 대신 ***포즈 모드***.

* 다음으로 이동하세요 ***포즈 모드*** 그리고 ***도프 시트*** > ***액션 에디터*** 를 클릭하여 애니메이션 클립을 추가하세요. ***새로 만들기*** 를 클릭하여 애니메이션 클립을 추가하세요.
* 원하는 대로 이름을 바꾸고 ***Fake User*** (방패 아이콘)를 켜서 애니메이션이 저장되도록 하세요.
* 가 열려 있는지 확인하세요 ***뷰포트***&#xB9C8;우스를 ***하나의*** 모두 선택한 다음 ***I*** 를 눌러 전체 아마추어에 키프레임을 설정하세요.
* 타임라인에서 다른 프레임으로 이동한 뒤 원하는 포즈가 나오도록 뼈를 마음대로 조작하세요. 리그를 어떻게 설정했는지에 따라 뼈의 위치, 회전, 크기를 변경할 수 있습니다.
* 좋은 결과가 나오면 전체 아마추어에 또 다른 키프레임을 설정하세요. 애니메이션을 끝낼 때까지 계속하세요. 애니메이션이 반복 재생될 예정이라면 첫 프레임과 마지막 프레임이 같아야 한다는 것을 기억하세요.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-56d38d4203ef345849a93c8bfe86ec7c517342cd%2F02_rig_animation_02.gif?alt=media)

애니메이션 과정이 처음이라면, 초보자를 위한 유용한 팁이 담긴 이 튜토리얼을 확인해 보세요:

[![Video Preview](https://img.youtube.com/vi/-iWslh4uQIk/maxresdefault.jpg)](https://youtu.be/-iWslh4uQIk)

## 스키닝된 애니메이션 vs 변환 애니메이션

**변환 애니메이션은 애니메이션을 표시하는 데 필요한 계산 자원이 더 적기 때문에, 일반적으로 성능 면에서 스키닝된 메시 애니메이션보다 더 낫습니다.**

스키닝된 메시 애니메이션은 메시의 버텍스에 가중치가 적용된 뼈대 골격을 가진 메시를 사용하는 방식입니다. 골격이 애니메이션되면 메시도 함께 애니메이션됩니다. 이 과정은 특히 애니메이션해야 할 버텍스 수가 많을 때 계산 비용이 상당히 클 수 있습니다.

반면 변환 애니메이션은 오브젝트의 변환 속성(예: 위치, 회전, 크기)을 직접 애니메이션하는 방식입니다. 일반적으로 메시의 버텍스보다 애니메이션할 변환 속성이 적기 때문에, 스키닝된 메시 애니메이션보다 더 적은 계산 자원으로 수행할 수 있습니다.

또한 변환 애니메이션은 키프레임 데이터와 같이 더 압축된 형식으로 미리 계산하여 저장할 수 있는 경우가 많아, 실시간으로 복잡한 계산을 할 필요 없이 빠르게 접근하고 재생할 수 있습니다.

전반적으로 스키닝된 메시 애니메이션이 더 세부적이고 사실적인 애니메이션을 만들 수 있지만, 변환 애니메이션은 비디오 게임과 같이 성능이 중요한 애플리케이션에서 종종 선호됩니다.

## 여러 애니메이션 클립 만들기 및 내보내기

모델에 원하는 만큼 많은 애니메이션 클립을 넣을 수 있습니다. 애니메이션을 만드는 방법, 탐색하는 방법, 삭제하는 방법은 [이 섹션을 참고하세요](https://www.notion.so/5e962e5d54a24bcb9b906748007eb4cc).

아래 비디오에서 Blender의 여러 애니메이션을 하나의 GLB 파일로 내보내는 방법을 배울 수 있습니다.

[![Video Preview](https://img.youtube.com/vi/YxAB4bujO_w/maxresdefault.jpg)](https://www.youtube.com/watch?v=YxAB4bujO_w\&ab_channel=Decentraland)

## 여러 애니메이션을 하나로 내보내기

골격 애니메이션과 달리, 여러 오브젝트를 리깅하고 그 애니메이션을 하나의 애니메이션 클립으로 결합할 수 있는 것과는 달리, 객체 애니메이션에서는 그렇게 할 수 없습니다. 애니메이션은 따로 내보내지며 한 번에 하나의 오브젝트만 재생됩니다. 이를 해결하려면 여러 애니메이션을 하나로 합쳐서 모든 오브젝트가 동시에 움직이는 애니메이션 클립을 만들어야 합니다.

그렇게 하려면, ***비선형 애니메이션 트랙*** 에 각 오브젝트의 애니메이션을 아래와 같이 내려놓으세요.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-202a85c0ab83178cd4cab88cd54cea29d5741928%2F03_object_animation_push_down_02.gif?alt=media)

*각 오브젝트의 애니메이션을 NLA 트랙으로 내려놓으세요.*

모든 애니메이션이 NLA 편집기에 나열되면 모든 오브젝트를 선택하고 **File > Export > glTF2.0**로 이동하세요. Include를 펼치고 Selected Objects를 체크하세요. Animation을 펼치고 다시 Animation을 펼친 다음 **Group by NLA Track**의 체크를 해제하세요. Merged Animation Name에서 애니메이션 클립의 이름을 바꾼 다음 **glTF 2.0 내보내기**.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-07d1d6ede0e3413282e94383abfc8f51cedfc722%2F04_export_single_animation_clip.png?alt=media)

*를 눌러 여러 애니메이션을 하나로 내보낼 수 있습니다.*

이 방법은 각 오브젝트에 애니메이션이 하나씩만 있을 때만 작동합니다. 오브젝트에 여러 애니메이션 클립이 있다면 따로 내보내는 것이 가장 좋습니다.

{% hint style="info" %}
**💡 팁**: 자신만의 애니메이션을 만드는 대신, 일반적인 애니메이션을 다운로드하여 모델에 적용할 수도 있습니다. 예를 들어 사람과 비슷한 특징을 가진 3D 캐릭터의 경우, 다음에서 무료 또는 유료 애니메이션을 다운로드할 수 있습니다 [Mixamo](https://www.mixamo.com/#/).
{% endhint %}

## 샘플링

때로는 애니메이션 수나 애니메이션+모델의 조합 때문에 애니메이션 파일이 너무 무거워질 수 있습니다.

샘플링은 애니메이션을 최적화하는 좋은 방법입니다. 샘플링 레이트는 애니메이션에서 키프레임을 얼마나 자주 베이크할지 정합니다. 예를 들어 샘플링 레이트를 2로 설정하면 2프레임마다 키프레임이 생성된다는 뜻입니다. 샘플링 레이트가 3이면 3프레임마다 키프레임이 베이크되고, 이런 식으로 진행됩니다. 샘플링 레이트가 높을수록 파일은 더 가벼워집니다.

하지만 단점은 일부 중요한 키프레임이 손실되기 때문에 애니메이션이 점점 덜 부드러워진다는 것입니다(키프레임이 애니메이션 전체에 고르지 않게 분포됩니다). 또한 **샘플링은 애니메이션 프레임 수를 샘플링 비율로 나누는 것이 아니라는 점에 유의하는 것도 중요합니다**.

보통 **2 또는 3의 샘플링 레이트** 이면 충분합니다. 그 값들은 품질을 해치지 않으면서 애니메이션을 최적화할 수 있습니다.

다음 항목을 찾을 수 있습니다 ***샘플링 속도*** 내보내기 설정에서, 아래 ***애니메이션***.

![](https://3980763956-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-5bb9203e0a74492dfa68b1c7d3596c39baf62f95%2F05_sampling_rate.png?alt=media)

{% hint style="info" %}
**💡 팁**: 애니메이션의 프레임 수를 샘플링 비율로 나눌 수 있다면, 좋은 것입니다! 이는 마지막 프레임이 베이크되어 애니메이션의 끝에서 시작으로 이어지는 전환을 보존한다는 뜻입니다.
{% endhint %}

## 애니메이션 구현하기

이 문서는 3D 모델에 애니메이션을 추가하는 방법을 다룹니다. 아래를 참고하세요 [**애니메이션 처리**](https://docs.decentraland.org/creator/development-guide/3d-model-animations/) 시 장면에서 애니메이션을 활성화하고 다루는 방법에 대한 지침을 확인하세요.

## 애니메이션 모범 사례

* 아마추어는 가능한 한 단순하게 유지하고, 애니메이션하려는 모델의 부분에 대해서만 뼈를 만드세요. 뼈는 성능에 영향을 줄 수 있으므로 실제로 필요한 것만 추가해야 합니다.
* 애니메이션이 장면에서 반복 재생될 예정이라면, 더 나은 전환을 위해 마지막 포즈가 시작 포즈와 완전히 같아야 합니다.
* 캐릭터가 실제로 아무것도 하지 않더라도 애니메이션이 없는 상태로 두지 마세요. 캐릭터가 가만히 있을 때를 위한 "idle" 애니메이션을 만드세요. idle에는 호흡 같은 미세한 움직임과 가끔 주변을 바라보는 동작이 포함될 수 있습니다.
* 손, 손가락, 머리, 목처럼 뼈를 포즈 없이 두지 마세요. 디테일은 좋은 애니메이션에서 정말 중요하며, 뻣뻣한 움직임은 그것을 덜 그럴듯하게 만들 뿐입니다.
* 극히 필요한 경우가 아니라면 키프레임을 너무 많이 사용하지 마세요. 키프레임을 많이 추가할수록 잘못된 보간이 발생할 가능성이 높아지고 애니메이션도 더 무거워집니다.
* 모든 뼈(변형용 뼈 포함)를 선택하고 애니메이션의 첫 프레임과 마지막 프레임에 키프레임을 설정하세요. 이렇게 하면 정보가 없는 뼈가 생기는 것을 방지하여 하나의 애니메이션이 다른 애니메이션에 의도치 않게 영향을 주는 일을 막을 수 있습니다.
* 내보낼 때 파일에 아마추어가 하나만 있는지 확인하세요. 애니메이션을 가져올 때는 아마추어도 함께 가져와집니다. 모든 애니메이션은 동일한 기본 아마추어로 수행되어야 하므로, 필요 없는 것은 모두 삭제하세요.
* 항상 뼈와 애니메이션의 이름을 바꾸세요. 모든 것을 체계적으로 정리하세요!
* 모델을 *glTF* 내보낼 때 모든 오브젝트와 애니메이션을 내보내는지 확인하세요. 일부 내보내기 도구는 기본적으로 ***현재 선택된*** 항목만 내보냅니다.
* 모델을 내보낸 후 [Babylon Sandbox](https://sandbox.babylonjs.com/) 에서 확인하고 모든 애니메이션이 제대로 작동하는지, 기대한 대로 이름이 지정되어 있는지 확인하세요.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-ko/3d/animations.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
