# 에셋 임포트

## 개요

OVERDARE Studio에서 제작한 월드 에셋은 [Creator Hub](https://eterno-studio-fgt.ovdr.io/)에 등록할 수 있습니다. 등록된 에셋은 공개 설정에 따라 OVERDARE Studio의 Asset Drawer에서 누구나 자유롭게 활용할 수 있습니다.

Blender나 3D Max 등 외부에서 작업된 3D 모델이나, 배경음 같은 오디오, UI용 이미지 등 월드 제작을 위해 필요한 에셋들을 임포트하세요.

## 임포트 가능한 에셋 종류

<table><thead><tr><th>에셋 타입</th><th width="613">지원되는 확장자</th></tr></thead><tbody><tr><td>텍스쳐</td><td>.png / .tga (용량: 15MB 이하)</td></tr><tr><td>메쉬</td><td>.fbx / .obj (트라이 수: 30,000, 용량 : 250 MB 이하)</td></tr><tr><td>오디오</td><td>.wav / .mp3 / .ogg (용량: 20 MB 이하)</td></tr></tbody></table>

## 에셋 제작 가이드라인

### 메쉬

* 저사양 기기 기준 프랍 1개당 권장 Vertex 수: 700 이하
* 화면 기준 총 Vertex 한도: 70,000 이하

자세히 알아보기 (모바일 저사양 최적화 가이드)

{% content-ref url="../game-development/world-performance-optimization" %}
[world-performance-optimization](https://docs.overdare.com/korean/manual/studio-manual/game-development/world-performance-optimization)
{% endcontent-ref %}

### 텍스쳐

* 기본 권장 해상도: 512 × 512
* 초저사양 기기 대응 시: 256 이하 해상도 사용 권장

## 메쉬 제작 가이드라인

### 충돌체 생성 기준

OVERDARE Studio에서 메쉬를 임포트할 때, 메쉬 구조를 바탕으로 자동으로 충돌체가 생성됩니다. 만약 메쉬가 Convex(볼록한 형태)로 문제없이 감쌀 수 있다고 판단되면, 아래와 같은 방식으로 충돌체가 만들어집니다.

**기본 생성 방식**

* 메쉬당 최대 **32개의 Convex**
* 하나의 Convex는 **최대 32개의 정점(Vertices)**&#xAE4C;지만 포함
* Convex로 메쉬 구조를 감쌀 수 있다고 판단되면,\
  최대 Convex 32개 × 각 정점 32개 = **총 1024개 정점 기준의 충돌체 생성 가능**
  * 충돌체로 변환되는 총합 기준이 1024이며, 이 제한을 넘으면 자동 충돌 생성이 비정상적일 수 있습니다.

**이 방식은 성능상 유리하지만, 다음과 같은 문제가 발생할 수 있습니다:**

* 메쉬 구조와 맞지 않아 **충돌이 허공에 뜨거나**, **파손** 또는 **뚫리는 현상**이 생길 수 있음
* 충돌체가 허공에 뜨거나, 메쉬를 뚫는 것과 같이 다소 부정확할 수 있음

**Convex 생성을 포기하고 메쉬를 충돌체로 사용하는 조건**

* 구조가 일정하지 않고 들쭉날쭉한 메쉬일 때 (평면이 아닌, 비정형 구조의 메쉬)
* 너무 많은 Convex가 필요한 구조일 때 (Convex 정점의 수가 메쉬 정점의 수 보다 많아 질 때)
* 메쉬 구조를 그대로 충돌체로 사용하는 게 유리할 때

현재 자동 충돌체 생성 기능은 메쉬의 형상을 정밀하게 따르기보다는, 대략적인 충돌 영역을 빠르게 생성하는 데 초점이 맞춰져 있습니다. 따라서 충돌 정확도가 중요한 콘텐츠나 상황에서는 수동으로 충돌체를 설정하는 것을 권장드립니다.

**팁**

* 복잡하거나 정밀한 충돌이 필요한 경우, 직접 충돌체를 만들어 사용하는 걸 추천합니다.
* 메쉬 구조 그대로 충돌을 만들고 싶다면, 정점 수 제한을 초과하지 않도록 주의하세요.
* 정확한 충돌감지를 원한다면, 컨벡스 기반이 아닌 수동 충돌체 설정이 더 나을 수 있어요.

### 충돌 메쉬(UCX) 사용하기

Blender나 3ds Max와 같은 3D 모델링 소프트웨어에서 **충돌용으로 사용할 메쉬**를 생성한 후, 해당 메쉬의 이름을 **UCX\_**&#xBA54;쉬이름 형식으로 지정하면 OVERDARE Studio에 임포트될 때, UCX\_ 접두어가 붙은 메쉬들은 **충돌체로 자동 인식**됩니다.

이 기능을 이용하면 복잡한 형태의 메쉬에서 별도의 **충돌용 메쉬**를 따로 사용할 수 있습니다.\
(단, 충돌용 메쉬는 완전히 닫힌 형태여야 하며, 면이 뚫려 있으면 정상적으로 충돌 처리가 되지 않습니다.)

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-3cabdcf51a7cedd10433e5b3db68eda80bb1cab3%2Fucx.png?alt=media" alt=""><figcaption></figcaption></figure>

## 에셋 임포트

### 에셋 임포트 방법

OVERDARE Studio에서 World를 불러온 다음, 해당 월드에서 사용할 에셋을 임포트할 수 있습니다.

에셋 임포트는 OVERDARE Studio 최상단 탭 영역에서 **Home탭**을 선택하면 출력되는 **Import 버튼** 또는 **BulkImport 버튼**을 눌러 진행할 수 있습니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-7e952297bd9a47c10e421ae5fd0d80d64ef2a9d8%2Fasset-import-1.png?alt=media" alt=""><figcaption></figcaption></figure>

또는 **Asset Manager 패널**에서도 **Import 버튼**을 눌러 진행할 수 있습니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-7bc6aab51a69a25505569223803d299f76da1837%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

* **Import 버튼**: 하나의 에셋만 임포트할 수 있습니다. (메쉬를 임포트할 때 상세한 옵션을 설정할 수 있습니다.)
* **BulkImport 버튼** 또는 **Import 버튼**: 여러 에셋을 임포트할 수 있습니다. (메쉬를 임포트할 때 간소화된 옵션을 설정할 수 있습니다.)

캐릭터 애니메이션 임포트는 캐릭터 메뉴얼을 참고하세요.

{% content-ref url="../character" %}
[character](https://docs.overdare.com/korean/manual/studio-manual/character)
{% endcontent-ref %}

### 메쉬 임포트 옵션

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-6ae9a3c3e09460fe0f6c18ff23be98c2a711cf6a%2FImport-Preview.png?alt=media" alt=""><figcaption></figcaption></figure>

#### File General

<table><thead><tr><th width="145">구분</th><th width="332">설명</th><th>기본값</th></tr></thead><tbody><tr><td>Name</td><td>사용자가 불러온 3D 에셋의 이름을 표시합니다. 에셋의 이름을 변경하여 프로젝트에서 노출되게 할 수 있습니다.</td><td><br></td></tr><tr><td>Import Only as Model</td><td>활성화된 경우, 모델에 여러 Child Objects가 포함되어 있더라도 모델을 단일 자산으로 불러옵니다.<br>체크박스를 해제하여 비활성화한 경우, 모델과 여러 메쉬 등 하위 항목들을 개별 에셋으로 불러옵니다.</td><td>기본적으로 활성화되어 있습니다.</td></tr><tr><td>Insert in Workspace</td><td>활성화된 경우, 사용자가 불러온 3D 에셋을 Workspace와 Asset Drawer에 삽입합니다.<br>체크박스를 해제하여 비활성화한 경우, Toolbox, Asset Manager에만 삽입됩니다.</td><td>기본적으로 활성화되어 있습니다.</td></tr><tr><td>Insert Using Scene Position</td><td>활성화된 경우, 모델을 Workspace에 삽입할 때의 current scene position을 사용합니다.</td><td>기본적으로 비활성화되어 있습니다.</td></tr><tr><td>Set Model Instance Pivot to Scene Origin</td><td>활성화된 경우, 전체 모델의 Pivot point를 Scene Origin으로 설정합니다.</td><td>기본적으로 활성화되어 있습니다.</td></tr></tbody></table>

#### File Transform

<table><thead><tr><th width="145">구분</th><th>설명</th><th>기본값</th></tr></thead><tbody><tr><td>World Forward</td><td>오브젝트의 앞쪽을 향하는 축을 설정합니다. Front, Back, Left, Right 중 하나로 설정할 수 있습니다.</td><td>기본적으로 'Front'로 설정되어 있습니다.</td></tr><tr><td>World Up</td><td>오브젝트의 위쪽을 향하는 축을 설정합니다. Top, Bottom, Left, Right 중 하나로 설정할 수 있습니다.</td><td>기본적으로 'Top'으로 설정되어 있습니다</td></tr></tbody></table>

#### File Geometry

<table><thead><tr><th width="145">구분</th><th>설명</th><th>기본값</th></tr></thead><tbody><tr><td>Scale Unit</td><td>파일을 가져올 때 적절한 크기가 되도록 파일을 모델링한 단위를 설정합니다. Stud, Metor, CM, MM, Foot, Inch 중 하나로 설정할 수 있습니다.</td><td>기본적으로 'CM'로 설정되어 있습니다.</td></tr><tr><td>Merge Meshes</td><td>활성화된 경우, 모델의 모든 MeshPart를 단일 MeshPart로 병합하고 모델이 아닌 하나의 MeshPart로 생성됩니다.</td><td>기본적으로 비활성화되어 있습니다.</td></tr><tr><td>Invert Negative Faces</td><td>메쉬에서 음수면의 방향을 반전시킵니다.</td><td>기본적으로 비활성화되어 있습니다.</td></tr></tbody></table>

#### Object Geometry

<table><thead><tr><th width="145">구분</th><th>설명</th><th>기본값</th></tr></thead><tbody><tr><td>Make Double Sided</td><td><ul><li>비활성화된 경우, 정점/꼭짓점을 단면으로 설정합니다. 단면의 꼭짓점은 한 방향에서 볼 수 있다는 의미입니다.</li><li>활성화한 경우, 정점/꼭짓점을 양면으로 설정합니다. 양면의 정점/꼭짓점은 시각적으로 양 방향으로 보임을 의미합니다.</li></ul></td><td>기본적으로 비활성화되어 있습니다.</td></tr><tr><td>Ignore Vertex Colors</td><td>활성화된 경우, Child Object의 정점 색상 데이터를 무시합니다.</td><td>기본적으로 비활성화되어 있습니다.</td></tr></tbody></table>

### 주의 사항

Import한 에셋을 오버데어에 등록하지 않으면 **월드를 생성한 크리에이터만 이용**할 수 있으며, 맵 파일을 다른 크리에이터에게 전송했을때, 해당 크리에이터에게는 정상적으로 동작되지 않을 수 있습니다.

따라서, **하나의 맵 파일을 여러 크리에이터가 함께** 작업해야 하는 경우, Import한 에셋을 반드시 오버데어에 등록하세요.

### 임포트한 메쉬에 텍스쳐 자동 연결

3ds Max나 Blender 같은 3D 모델링 프로그램에서 **텍스쳐가 설정된 메쉬**를 Export한 다음, Studio 최상단 탭 영역의 Home 탭에서 **Import 버튼**으로 임포트 할 때, **Import Only as Model을 비활성화**하면 모델에 텍스쳐가 연결된 상태로 임포트됩니다.

(Bulk Import나, Asset Manager의 Import 버튼으로 임포트할때는 Import Only as Model을 비활성화해도 텍스쳐가 연결되지 않습니다.)

## 오버데어에 등록

### 등록 방법

등록하고자 하는 World Asset을 **Level Browser**에서 선택한 다음, 우클릭 하면 나오는 메뉴에서 **Save to OVERDARE**를 통해 에셋을 Creator Hub에 등록할 수 있습니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-f9d2d6ab0489d63c0e84faf9fbb2507dc2ba8433%2Fasset-import-2.png?alt=media" alt=""><figcaption></figcaption></figure>

Save to OVERDARE를 클릭하면 에셋 정보를 입력하는 **웹 페이지로 자동 연결**됩니다. 웹 페이지를 찾은 다음, 에셋의 태그, 공개 여부 등 에셋 정보를 입력합니다.\
(모든 정보를 입력해야 에셋을 등록할 수 있습니다.)

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-03883941d951bf6726cba6a1800cfaf5031adc1a%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

약관을 확인하고 동의를 선택한 다음, Complete를 눌러 등록을 완료합니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-1f4e69079b78d68a9522068409845d076a28eaa3%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

등록이 완료된 에셋은 Studio내 **Asset Drawer**에서 확인할 수 있습니다. 공개 설정된 에셋은 다른 크리에이터도 사용할 수 있습니다.

### Creator Hub에서 내 에셋 찾기

[Creator Hub](https://create.overdare.com/) 상단 메뉴 영역에서 Dashboard - My Contents를 눌러 Dashboard로 이동합니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-93ee3df968caa093b5cbd3eeebf6675093b19e2c%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

Dashboard에서 **World Asset 탭**을 눌러 등록한 모든 에셋을 확인할 수 있습니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-48627d403d507cfa9f9163673c50a26e4f1e0ea6%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### 배포 여부 설정

월드 에셋 편집 페이지에서 **Distribute on Asset Store** 옵션으로 Studio내 Asset Drawer 패널에 해당 에셋을 표시할 지 설정할 수 있습니다.\
(Distribute를 활성화하면 다른 크리에이터도 사용할 수 있게 됩니다.)

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-d3b85f47277095c9eed9933fe52a3034db0d9821%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## 에셋 배치하기

Asset Manager에서 배치할 에셋의 카테고리를 선택합니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-a97a1e05a1cfc8cbf502f5ca80ceb0bb12b7f771%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

배치할 에셋을 확인합니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-0c52385c4523586a59a5e6b667f15678fd9fa9ac%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

에셋을 더블클릭하거나, 드래그한 다음 Viewport로 드랍하면 Workspace에 에셋이 배치됩니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-fee7c2b1f46d5446c6c533fab797fd3ab10cd5c3%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## Asset Id 연결 방법

일부 오브젝트는 **에셋을 참조**하여 표시됩니다. 예를 들어, MeshPart 오브젝트는 표시할 메쉬를, MeshPart나 VFX는 텍스처를, 사운드는 재생할 오디오를 참조합니다. 이러한 경우, 해당 오브젝트에 **표시할 에셋의 Asset ID**를 연결해야 합니다.

### Asset Id가 필요한 속성의 종류

<table><thead><tr><th width="182">필드</th><th>관련 오브젝트</th></tr></thead><tbody><tr><td>Mesh Id</td><td>MeshPart, CharacterMesh 등</td></tr><tr><td>Texture Id</td><td>MeshPart, BackpackItem, VFX 등</td></tr><tr><td>Sound Id</td><td>Sound</td></tr><tr><td>Image</td><td>ImageButton, ImageLabel 등</td></tr></tbody></table>

### 연결 방법

오브젝트를 선택한 상태에서, 프로퍼티창에서 Mesh Id나 Texture Id 등 Asset Id가 필요한 속성이 있는지 확인합니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-25fea8c7a4afd4d3355b9f3c41bd7c97e6bf81f2%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

Asset Id는 **Asset Manager**에서 에셋을 우클릭한 다음, **Copy Asset ID to Clipboard**를 클릭해서 복사할 수 있습니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-4817a993fc9be3637305fcd1ffb637bdf9205a65%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

또는 **Asset Drawer**에서 에셋에 커서를 올리면 나오는 **돋모기 모양(🔍) 버튼**을 클릭하고, Asset Id 오른쪽에 있는 **복사 버튼**을 클릭해서 복사할 수 있습니다.

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-b76eaa555869375a52f98aa1679ed4ef8cac7bc1%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

복사한 Asset ID는 **ovdrassetid://번호** 형식으로 설정해야 합니다.\
(예시 : ovdrassetid://**1234**)

<figure><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-4987cb99e374437d4e3ee146388642581bd484b2%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

## Script에서 Asset Id 사용시 주의사항

프로퍼티창이 아닌, 스크립트에서도 Asset Id를 다음과 같이 할당할 수 있습니다.

```lua
local Workspace = game:GetService("Workspace")
local Sound = Workspace.Sound

Sound.SoundId = "ovdrassetid://1234"
```

위와 같이 스크립트에서 사용하는 경우, **직접 임포트**한 메쉬, 텍스처, 사운드, 애니메이션은 Level Browser에 배치하지 않아도 사용할 수 있습니다.

하지만 **Asset Drawer에서 가져온 에셋**은 스크립트에서 사용하려면 반드시 Level Browser에 배치되어 있어야 합니다.\
(Level Browser에 배치되어 있지 않으면 Studio에서는 정상적으로 로드되더라도 **모바일에서는 로드되지 않습니다.**)
