> 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 파일에 포함된 셰이프 키 애니메이션은 스켈레탈 또는 오브젝트 애니메이션처럼 월드 안에서 재생됩니다.

사람, 생물, 기계장치처럼 더 복잡한 모델이라면 **리그**가 필요합니다. 리그는 메시를 움직이고 변형시키는 디지털 골격일 뿐입니다. 메시를 스켈레톤에 연결하는 과정을 스키닝(Skinning)이라고 하며, 여기서 어떤 뼈가 각 버텍스 그룹에 영향을 미치는지와 그 영향력이 얼마나 되는지를 정의하여 모델이 가능한 가장 좋은 방식으로 변형되도록 합니다.

하지만 어떤 방법이든 3D 모델의 모든 애니메이션은 반드시 그 *glTF* 파일 안에 포함되어야 합니다. 애니메이션을 별도의 파일로 참조할 수 없기 때문입니다.

## 애니메이션 만들기

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

### 오브젝트 애니메이션

* 탭이 열려 있는지 확인하고 ***Dope Sheet*** > ***액션 편집기*** 을(를) 클릭해 ***새로 만들기*** 애니메이션 클립을 추가하세요.
* 원하는 대로 이름을 바꾸고 ***Fake User*** (방패 아이콘)를 켜서 애니메이션이 저장되도록 하세요.
* 오브젝트를 선택한 뒤 ***I***&#xB97C; 눌러 첫 번째 프레임에 키프레임을 설정하세요. 그런 다음 오브젝트를 이동, 회전 또는 스케일하고, 타임라인의 다른 프레임에서 다시 ***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\&token=36d8ed74-3fa5-4df8-bef2-fe2d6b265396)

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

### 리그 애니메이션

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

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

* 로 이동하세요 ***포즈 모드*** 그리고 ***Dope Sheet*** > ***액션 편집기*** 을(를) 클릭해 ***새로 만들기*** 애니메이션 클립을 추가하세요.
* 원하는 대로 이름을 바꾸고 ***Fake User*** (방패 아이콘)를 켜서 애니메이션이 저장되도록 하세요.
* 이 열려 있는지 확인하세요. ***Viewport***&#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\&token=c8df4f01-b0a7-402a-9a98-12df37364547)

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

[![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\&token=aa794d1f-2457-4b80-9533-db1aa11f5d72)

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

모든 애니메이션이 NLA 편집기에 나열되면 모든 오브젝트를 선택하고 **파일 > 내보내기 > 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\&token=a13e6ca7-62e0-48f0-be63-1351fc82de04)

*를 누르면 여러 애니메이션을 하나로 내보내는 설정이 완료됩니다.*

단, 이는 각 오브젝트가 하나의 애니메이션만 가질 때만 동작한다는 점을 기억하세요. 오브젝트에 여러 애니메이션 클립이 있다면 별도로 내보내는 것이 가장 좋습니다.

{% 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\&token=0c7dc5e2-3450-4508-ad0f-113626418059)

{% 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
