For the complete documentation index, see llms.txt. This page is also available as Markdown.

메쉬

Decentraland로 가져온 3D 모델에서 지원되는 메쉬 속성을 알아보세요.

3D 모델에는 메시가 삼각형으로 이루어진 면들로 구성되어 있습니다. 이러한 면들은 서로 모서리에서 (서로 맞닿는 선)와 정점에서 (꼭짓점이 만나는 지점) 서로 만납니다.

💡 팁: Decentraland Tools Blender 플러그인. 이 플러그인에는 3D 모델, 웨어러블, 이모트를 편집하고 내보내는 데 도움이 되는 몇 가지 유용한 기능이 포함되어 있습니다.

공간 제한

씬의 모든 3D 모델은 해당 parcel의 제한 범위 안에 들어와야 합니다. 미리보기를 실행할 때 모델의 일부가 이 제한을 벗어나면, 벗어난 부분은 잘려 나가고 렌더링되지 않습니다.



Creator Hub 편집기에서는 모델이 붉은색으로 표시되고 바운딩 박스도 빨간색으로 표시됩니다.



📔 참고: 예전 Decentraland 웹 클라이언트에서는 성능상의 이유로, 3D 모델의 일부가 경계를 벗어나면 바운딩 박스만 조금 넘어가더라도 전체 모델이 렌더링되지 않았습니다. Decentraland 2.0 데스크톱 클라이언트부터는 경계를 벗어난 모델의 부분만 잘립니다. 씬 안에 있는 모델 부분은 렌더링됩니다.

바운딩 박스

모든 정점이 씬 영역 안에 깔끔하게 들어가 있지만, 대부분 비어 있고 씬 제한을 넘어서는 큰 바운딩 박스를 가진 모델이 있다면, Creator Hub에서는 전체 모델이 씬 제한 밖에 있는 것으로 표시됩니다. parcel 안에 있는 모델의 부분은 올바르게 렌더링되며, 씬을 게시할 수 있습니다.

모든 메시에는 형상의 경계를 둘러싸는 바운딩 박스가 있습니다. Decentraland 안에서 3D 모델을 더 유용하게 만들려면, 바운딩 박스가 필요한 만큼만 모델 밖으로 확장되도록 하세요.

이 문제를 피하려면 3D 모델을 정리하여 메시의 위치와 회전을 재설정하고, 바운딩 박스가 감싸고 있는 메시보다 더 밖으로 확장되지 않게 할 수 있습니다.



Blender에서는 객체를 선택한 뒤 Ctrl+A를 누르고 “All transforms”를 적용하면 됩니다.

예를 들어, 모델 경계 근처에 있는 서브 메시를 회전할 때 주의하세요. 바운딩 박스는 큐브이기 때문에 메시가 둥글더라도 45° 회전한 뒤 바운딩 박스의 모서리가 튀어나올 수 있습니다.



모든 메시의 회전과 스케일을 베이크하여, 필요한 크기보다 불필요하게 바운딩 박스가 더 커지지 않도록 하는 것을 권장합니다.

삼각형 제한

Decentraland는 서로 다른 씬과 오브젝트가 가득한 오픈 월드이며, 같은 3D 공간에서 콘텐츠가 즉시 다운로드되므로 플레이 중 좋은 성능을 위해 메시를 최적화하는 것이 중요합니다. 그런 의미에서 메시와 관련해 항상 염두에 두어야 할 몇 가지 씬 제한이 있습니다:

n은 씬이 차지하는 parcel의 수를 나타냅니다.

  • 삼각형 수: n x 10000 씬의 모든 모델에 대한 총 삼각형 수.

  • 높이: parcel 수와 상관없이 330미터.

  • 파일 크기: parcel당 15 MB - 최대 300 MB 콘텐츠 서버에 업로드되는 파일의 총 크기입니다. 3D 모델과 오디오가 포함됩니다. node.js 패키지처럼 업로드되지 않는 파일은 포함되지 않습니다.

  • 파일당 최대 파일 크기 50 MB 씬의 어떤 종류의 개별 파일도, 씬에 parcel이 몇 개 있든 50 MB를 초과할 수 없습니다.

자세한 내용은 모든 씬 제한을 여기에서 확인하세요.

대형 씬의 메시

메시를 만들 때는 다음 두 가지 모범 사례를 염두에 두어야 합니다:

  • 모듈성: 큰 메시를 더 작고 모듈화된 부분으로 나누세요. 예를 들어 건물 전체를 하나의 메시로 두는 대신, 건물을 각 벽, 바닥, 건물의 섹션별로 분리된 메시로 나눌 수 있습니다. 이렇게 하면 Unity의 프러스텀 컬링이 더 효과적으로 동작합니다. 보이는 부분만 렌더링 대상으로 고려하면 되기 때문입니다. 또한 메모리 사용량도 개선됩니다. 하나의 메시를 여러 위치의 같은 오브젝트에 여러 번 재사용할 수 있기 때문입니다(이를 위해서는 SDK7 씬 정의에서 같은 메시를 참조하거나, Blender에서 씬을 내보낼 때 중복 객체 대신 인스턴스를 사용해야 합니다).

  • 바운딩 볼륨: 각 오브젝트의 바운딩 볼륨이 가능한 한 꼭 맞도록 하세요. 바운딩 볼륨에 불필요한 공간이 있으면 보이지 않는 오브젝트도 렌더링될 수 있습니다.



프러스텀 컬링이란?

프러스텀 컬링은 카메라의 시야 영역 밖에 있는 오브젝트의 렌더러(메시)를 비활성화하는 최적화 기법입니다. 다음 두 예를 보세요:



미로 같은 실내 레벨입니다. 이 일반적인 씬 뷰는 보이는 모든 Game Object를 보여줍니다.



일반적인 프러스텀 컬링은 카메라 시야 안의 오브젝트만 렌더링합니다. 이는 자동으로 항상 발생합니다.

오브젝트 인스턴싱 vs 오브젝트 복제

Blender에서 오브젝트를 복제하면 원본 오브젝트와 완전히 분리된 사본이 생성되는 반면, 오브젝트를 인스턴싱하면 원본 오브젝트와 동일한 데이터를 공유하는 복제본이 생성됩니다.

오브젝트가 복제되면 지오메트리, 재질, 애니메이션을 포함한 완전히 독립적인 데이터 집합을 가진 새 오브젝트가 만들어집니다. 즉, 원본 오브젝트에 가한 변경 사항은 복제된 오브젝트에 반영되지 않으며, 그 반대도 마찬가지입니다.

반면 오브젝트가 인스턴싱되면 원본 오브젝트에 가한 변경 사항이 모든 인스턴스에 반영되고, 그 반대도 마찬가지입니다. 이는 모든 인스턴스가 동일한 기반 데이터를 공유하기 때문입니다.

성능 측면에서 인스턴싱은 특히 복잡한 씬이나 많은 수의 오브젝트를 다룰 때 복제보다 훨씬 효율적일 수 있습니다. 인스턴싱은 각 인스턴스마다 새 데이터를 만들지 않으므로 복제보다 메모리를 덜 사용하기 때문입니다. 또한 Blender가 모든 인스턴스를 개별적으로 렌더링하는 대신 하나의 오브젝트처럼 다루어 렌더링 과정을 최적화하도록 할 수 있습니다.

전반적으로 인스턴싱은 Blender와 Decentraland 씬에서 성능과 작업 효율을 높이는 강력한 도구가 될 수 있으며, 특히 크고 복잡한 씬에서 유용합니다.



나무, 식물, 가로등 같은 오브젝트를 복제할 때, 인스턴싱은 복제보다 성능을 크게 향상시킬 수 있습니다. 예를 들어, 이 씬에는 14개의 가로등이 있으며 모두 정확히 동일합니다. 각 가로등에는 두 개의 서로 다른 텍스처가 있다는 것을 알고 있습니다. 하나는 기둥용이고 다른 하나는 조명용입니다. 따라서 이 경우 텍스처당 한 번씩, 총 두 번의 드로우 콜이 발생합니다.



Blender에서는 요소를 복제하고 배치하는 단계에서 세 가지 옵션이 있습니다. 오브젝트 복제, 인스턴스 생성 또는 오브젝트 병합입니다.

각 방법의 장단점을 살펴보겠습니다.

오브젝트 복제

메뉴:
Object ‣ Duplicate Objects

단축키:

Shift-D

이렇게 하면 선택한 오브젝트와 시각적으로 동일한 사본이 생성되지만, 서로 다른 오브젝트로 취급됩니다. 따라서 내보낼 때 오브젝트당 드로우 콜이 2개씩 필요해져 2 * 14 = 28개의 드로우 콜이 발생하고, 총 디스크 사용량은 320kb가 됩니다.



오브젝트 인스턴싱

패널:
Toolbar ‣ Tools ‣ Edit ‣ Duplicate Linked

메뉴:

Object ‣ Duplicate Linked

단축키:

Alt-D

이렇게 하면 모든 데이터가 원본 오브젝트에 연결된 새 오브젝트가 생성됩니다. 편집 모드에서 연결된 오브젝트 중 하나를 수정하면 연결된 모든 복사본이 수정됩니다. 변형 속성은 여전히 링크가 아니라 복사본으로 남으므로, 다른 복사본에 영향을 주지 않고 자유롭게 회전, 스케일, 이동할 수 있습니다.



이 모델들을 내보내면 드로우 콜 수는 여전히 동일하게 28개입니다. 하지만 이제 메시가 하나뿐이므로 디스크 사용량은 크게 줄어듭니다(41 kb).



정리를 쉽게 하려면 씬에서 컬렉션을 인스턴싱하면 됩니다. 이렇게 하면 하나의 폴더와 소스에서 모든 인스턴스를 제어할 수 있습니다.

💡 팁: 동일한 논리는 SDK 측에도 적용됩니다. 모두 같은 GltfContainer 에 가리키는 14개의 엔티티는 .glb 파일이 인스턴스처럼 동작합니다. 파일은 한 번만 다운로드되고 한 번만 변환되며, 몇 개의 엔티티가 사용하든 메시와 텍스처는 메모리에 한 번만 유지됩니다. 동일한 콘텐츠를 거의 동일한 .glb 파일 14개로 나누는 것은 복제에 해당하며, 14번의 다운로드와 메모리 내 14개의 복사본 비용이 듭니다.

오브젝트 병합

메뉴:
Object ‣ Join

단축키:

Ctrl-J

이렇게 하면 선택한 오브젝트들이 하나의 메시를 가진 단일 오브젝트로 합쳐집니다. 이는 Object Mode에서 작동하며, 모든 항목을 마지막으로 선택한 활성 오브젝트로 병합하고, 선택된 모든 오브젝트가 같은 유형이어야 합니다. 재질은 유지되고 병합되므로, 14개의 가로등은 더 이상 14개의 렌더 가능한 오브젝트가 아니라 하나가 되며, 엔진은 28개 대신 2개의 드로우 콜로 이를 그립니다. 즉, 재질당 한 번씩입니다.

이 세 가지 옵션 중 실제로 드로우 콜을 줄이는 것은 이것뿐이며, 그 이유를 분명히 하는 것이 중요합니다. Decentraland 엔진은 스트리밍된 콘텐츠로부터 런타임에 씬을 구성하므로, 사전에 베이크된 콘텐츠를 다루는 엔진처럼 반복 오브젝트를 자동으로 그룹화하거나 배치할 수 없습니다. 드로우 콜을 줄여야 한다면 Blender에서 병합해야 합니다.

그 감소는 공짜가 아닙니다. 병합하면 여러 가지를 한꺼번에 포기하게 됩니다:

  • 디스크 사용량이 다시 늘어납니다. 병합된 메시에는 14개 기둥의 지오메트리가 모두 저장되므로, 인스턴싱으로 얻었던 절감 효과를 잃게 됩니다.

  • 프러스텀 컬링이 전부 아니면 전무로 바뀝니다. 병합된 오브젝트는 화면에 일부만 보여도 전체가 렌더링됩니다. 거리 전체에 흩어진 14개의 가로등은 거의 항상 하나 이상이 보이므로, 결국 항상 14개 전부를 그리게 됩니다. 이는 절약한 드로우 콜보다 더 많은 비용이 들 수 있습니다.

  • 각 부분을 개별적으로 다룰 수 없게 됩니다. 오브젝트가 하나만 남으므로, 이제 단일 가로등을 이동, 애니메이션, 클릭, 숨기기를 할 수 없습니다.

병합은 신중하게 사용하세요: 한곳에서 항상 함께 보이고 상호작용하지 않는 작은 소품이 많으며, 오브젝트 수가 실제로 성능 저하의 원인이라는 것을 확인한 후에만 사용해야 합니다. 그 외의 경우에는 인스턴싱이 더 좋은 기본 선택입니다.

메시 이름 지정

메시에는 의미 있는 이름을 사용하세요. 이름은 해당 에셋이 어디에 사용되는지 또는 오브젝트의 어느 부분과 관련되는지에 대한 맥락을 제공해야 합니다.

에셋 이름에는 다음을 섞어서 사용하세요 PascalCase 및 snake_case를, 이를 PascalSnake_case라고 부를 수 있습니다. 기본 규칙은 다음과 같습니다. 새 단어 또는 구분자 뒤의 단어(_)는 대문자로

  • 메시에는 의미 있는 이름을 사용하세요 예시: 🟢 다음과 같은 이름을 선호하세요 - Theater, Tram 🔴 피하세요 이름을 선호하세요 - Untitiled.008, primitive(1), Cylinder.091, _sphere-AB

  • 구분자로 밑줄을 _ 사용하여 이름에 더 많은 맥락을 더하세요. 더 일반적인 항목을 앞에 두고, 구체적인 내용은 끝에 두세요. 예시: 🟢 다음과 같은 이름을 선호하세요 - FountainStatue, TheaterMainWall, TramWheelLeft 🔴 피하세요 이름을 선호하세요 - North_MainWall_Theater, Tram_LeftFront_Wheel

같은 이름의 오브젝트가 둘 이상 있다면 단어 뒤에 숫자를 추가하세요: FountainStatue01, FountainStatue02 등.

모델 생성 도구

에셋을 만들 때 작업을 더 빠르고 효율적으로 만들어 주는 애드온과 외부 도구가 많이 있습니다. 무료인 것도 있고 구매해야 하는 것도 있습니다. 몇 가지 예를 들면:

Decimate

이것은 메시의 표면 구조를 유지하면서 삼각형 수를 줄이는 데 사용할 수 있는 잘 알려진 모디파이어입니다. 모델 최적화에 매우 강력한 도구이지만, 모델이 디케메이트되면 토폴로지가 영향을 받아 좋지 않은 토폴로지가 될 수 있다는 점을 고려해야 합니다(지오메트리가 예측 불가능한 조각들로 나뉘기 때문입니다). 또한 디케메이션은 메시의 쿼드를 삼각형으로 변환하므로 사용 후 수정하기가 더 어려워집니다. 이런 점에서 디케메이션은 정적 모델에는 유용할 수 있지만 애니메이션 모델에는 선호되지 않습니다.




디케메이션을 사용해 메시를 최적화하는 또 다른 방법은 모델을 디케메이트한 다음 적절한 리토폴로지를 하는 것입니다. 이렇게 하면 더 예측 가능한 결과와 깔끔한 토폴로지를 얻을 수 있습니다.

유용할 수 있는 리토폴로지 애드온은 다음과 같습니다(일부는 유료):

  • Simplygon: https://www.simplygon.com/

  • Speedretopo: https://blendermarket.com/products/speedretopo?ref=2

  • Retopoflow: https://blendermarket.com/products/retopoflow

미러 모디파이어

Blender의 미러 모디파이어는 오브젝트의 절반을 어느 방향(X, Y, Z)으로든 대칭 복사하여 대칭 모델을 만드는 데 사용하는 도구입니다. 대칭 모델을 다룰 때 매우 유용한 도구인데, 3D 모델링 시간과 UV 언래핑 시간을 줄여주고(모델의 한 부분만 언래핑하면 나머지는 동일한 UV 좌표를 공유하게 되기 때문입니다), 텍스처 해상도를 본질적으로 반사되는 부분에 낭비하지 않도록 하여 텍스처도 최적화해 줍니다.



일괄 이름 변경

이름 규칙을 쉽게 바꾸는 매우 편리한 도구는 Blender에 내장된 Batch Rename을 사용하는 것입니다. 이를 사용하려면 편집 으로 이동한 다음 일괄 이름 변경.



이름을 바꾸고 싶은 오브젝트를 선택한 뒤 기본 오브젝트 이름을 새 이름으로 바꾸기만 하면 됩니다. 이 도구는 이름 변경을 위한 다양한 방법과 에셋 유형을 제공하므로 메시, 애니메이션, 본 등 이름을 바꾸는 데도 매우 유연합니다.




지오메트리에 대한 모범 사례 #

  • 3D 모델에 추가하는 면의 수를 신중하게 관리하세요. 면이 많을수록 렌더링 비용이 더 커집니다. 씬에 의해 부과되는 제한은 씬 제한 에서 확인하세요.

  • 보이지 않지만 삼각형 수에 포함되는 숨은 면이 없도록 하세요.

  • 둥근 옆면이 있어야 하는 형상은 면을 추가하기보다 스무스하게 설정하세요.

  • 모든 면의 노멀 이 안쪽이 아니라 바깥쪽을 향하도록 하세요. 렌더링할 때 모델에 있어야 할 것 같은데 보이지 않는 면이 있다면, 이것이 가장 가능성 높은 원인입니다.

  • 메시의 회전과 스케일을 베이크하여 바운딩 박스가 불필요하게 밖으로 확장되지 않도록 하세요.

마지막 업데이트