Difference between revisions of "Mesh Converter"

From Ciliz|W4
(Marked this version for translation)
Line 1: Line 1:
 
== Scope ==
 
== Scope ==
 
<translate>
 
<translate>
 +
<!--T:1-->
 
Игровой движок W4 использует собственный формат хранения ассетов. Следовательно, прежде чем использовать сторонний ассет, его необходимо преобразовать в наш формат. Сделать это можно с помощью инструмента Mesh Converter, который поставляется вместе с нашим SDK.
 
Игровой движок W4 использует собственный формат хранения ассетов. Следовательно, прежде чем использовать сторонний ассет, его необходимо преобразовать в наш формат. Сделать это можно с помощью инструмента Mesh Converter, который поставляется вместе с нашим SDK.
 
</translate>
 
</translate>
  
 
<translate>
 
<translate>
 +
<!--T:2-->
 
Mesh Converter позволяет преобразовывать ассеты из формата Autodesk FBX (.fbx). Другие форматы не поддерживаются.
 
Mesh Converter позволяет преобразовывать ассеты из формата Autodesk FBX (.fbx). Другие форматы не поддерживаются.
 
</translate>
 
</translate>
Line 10: Line 12:
 
== Technical limitations ==
 
== Technical limitations ==
 
<translate>
 
<translate>
 +
<!--T:3-->
 
Конвертер может преобразовать любой fbx со следующими ограничениями:
 
Конвертер может преобразовать любой fbx со следующими ограничениями:
  
 +
<!--T:4-->
 
1. В связи с аппаратными и программными особенностями некоторых популярных моделей устройств skinned mesh может содержать:
 
1. В связи с аппаратными и программными особенностями некоторых популярных моделей устройств skinned mesh может содержать:
 
* не более 28 костей
 
* не более 28 костей
Line 19: Line 23:
 
== How to use ==
 
== How to use ==
 
<translate>
 
<translate>
 +
<!--T:5-->
 
Загрузка репозитория проекта описана в статье [[Quick Start]].
 
Загрузка репозитория проекта описана в статье [[Quick Start]].
 
Файл конвертера W4MeshConverter.bin находится в каталоге w4framework/tools .
 
Файл конвертера W4MeshConverter.bin находится в каталоге w4framework/tools .
Line 27: Line 32:
 
==== Preparing ====
 
==== Preparing ====
 
<translate>
 
<translate>
 +
<!--T:6-->
 
Возьмем для примера Utah teapot.
 
Возьмем для примера Utah teapot.
 
Если посмотрите файл с помощью утилиты [https://www.autodesk.com/products/fbx/fbx-review Autodesk FBX Review], увидите примерно то же, что на рисунке.
 
Если посмотрите файл с помощью утилиты [https://www.autodesk.com/products/fbx/fbx-review Autodesk FBX Review], увидите примерно то же, что на рисунке.
Line 34: Line 40:
  
 
<translate>
 
<translate>
 +
<!--T:7-->
 
Обратите внимание на положение носика чайника при просмотре fbx, мы вернемся к этому чуть позже.
 
Обратите внимание на положение носика чайника при просмотре fbx, мы вернемся к этому чуть позже.
 
</translate>
 
</translate>
Line 39: Line 46:
 
==== Converting ====
 
==== Converting ====
 
<translate>
 
<translate>
 +
<!--T:8-->
 
Скопируем файл модели в директорию конвертера.
 
Скопируем файл модели в директорию конвертера.
  
 +
<!--T:9-->
 
Далее, для преобразования модели в формат нашего движка (asset) необходимо выполнить:
 
Далее, для преобразования модели в формат нашего движка (asset) необходимо выполнить:
 
</translate>
 
</translate>
Line 47: Line 56:
  
 
<translate>
 
<translate>
 +
<!--T:10-->
 
В результате появится директория teapot содержащая данные ассета.
 
В результате появится директория teapot содержащая данные ассета.
 
</translate>
 
</translate>
 
==== Adding to the project structure ====
 
==== Adding to the project structure ====
 
<translate>
 
<translate>
 +
<!--T:11-->
 
Для работы с ассетом необходимо скопировать его директорию (в нашем случае это teapot) в директорию resources проекта. Директория resources располагается на том же уровне структуры проекта, что и sources. Таким образом, структура проекта станет подобна следующей:
 
Для работы с ассетом необходимо скопировать его директорию (в нашем случае это teapot) в директорию resources проекта. Директория resources располагается на том же уровне структуры проекта, что и sources. Таким образом, структура проекта станет подобна следующей:
 
</translate>
 
</translate>
Line 73: Line 84:
 
==== Code example ====
 
==== Code example ====
 
<translate>
 
<translate>
 +
<!--T:12-->
 
Загрузка:
 
Загрузка:
 
</translate>
 
</translate>
Line 79: Line 91:
  
 
<translate>
 
<translate>
 +
<!--T:13-->
 
Добавление в Render (отображение на экране):
 
Добавление в Render (отображение на экране):
 
</translate>
 
</translate>
Line 87: Line 100:
  
 
<translate>
 
<translate>
 +
<!--T:14-->
 
Полный код примера:
 
Полный код примера:
 
</translate>
 
</translate>
Line 118: Line 132:
 
==== Result ====
 
==== Result ====
 
<translate>
 
<translate>
 +
<!--T:15-->
 
В результате выполнения должен отобразиться тот же чайник, но с небольшим отличием.
 
В результате выполнения должен отобразиться тот же чайник, но с небольшим отличием.
 
</translate>
 
</translate>
Line 124: Line 139:
  
 
<translate>
 
<translate>
 +
<!--T:16-->
 
Если сравнить рисунки, можно заметить, что нос чайника в FBX Review смотрит в одну сторону, а в результате выполнения программы в другую. Это происходит из-за различий в системах координат и поведении конвертера.
 
Если сравнить рисунки, можно заметить, что нос чайника в FBX Review смотрит в одну сторону, а в результате выполнения программы в другую. Это происходит из-за различий в системах координат и поведении конвертера.
 
</translate>
 
</translate>
  
 
<translate>
 
<translate>
 +
<!--T:17-->
 
Система координат FBX [https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_CC93340E_C4A1_49EE_B048_E898F856CFBF_htm Scene Axis and Unit Conversion] является правосторонней (с осью Y направленной верх), тогда как [[Система координат W4]] левосторонняя (ось Y также направлена верх).
 
Система координат FBX [https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_CC93340E_C4A1_49EE_B048_E898F856CFBF_htm Scene Axis and Unit Conversion] является правосторонней (с осью Y направленной верх), тогда как [[Система координат W4]] левосторонняя (ось Y также направлена верх).
 
</translate>
 
</translate>
Line 133: Line 150:
 
=== Animated mesh Exmple ===
 
=== Animated mesh Exmple ===
 
<translate>
 
<translate>
 +
<!--T:18-->
 
Для анимированных мешей порядок работы не сильно отличается от описанного [http://wiki.w4-dev.ciliz.com/index.php/Mesh_Converter#Mesh_Exmple выше].
 
Для анимированных мешей порядок работы не сильно отличается от описанного [http://wiki.w4-dev.ciliz.com/index.php/Mesh_Converter#Mesh_Exmple выше].
 
</translate>
 
</translate>
 
==== Preparing ====
 
==== Preparing ====
 
<translate>
 
<translate>
 +
<!--T:19-->
 
Анимированную модель можно найти в интернете. Возьмем, например, Rigged Hand.
 
Анимированную модель можно найти в интернете. Возьмем, например, Rigged Hand.
 
Просмотр с помощью [https://www.autodesk.com/products/fbx/fbx-review Autodesk FBX Review] покажет примерно следующее:
 
Просмотр с помощью [https://www.autodesk.com/products/fbx/fbx-review Autodesk FBX Review] покажет примерно следующее:
Line 145: Line 164:
 
==== Converting ====
 
==== Converting ====
 
<translate>
 
<translate>
 +
<!--T:20-->
 
Так же как в примере выше (с обычным мешем), скопируем модель в папку конвертера и преобразуем в формат W4 Engine:
 
Так же как в примере выше (с обычным мешем), скопируем модель в папку конвертера и преобразуем в формат W4 Engine:
 
</translate>
 
</translate>
Line 151: Line 171:
  
 
<translate>
 
<translate>
 +
<!--T:21-->
 
В результате выполнения в текущей папке будет получена директория hand, содержащая данные ассета.
 
В результате выполнения в текущей папке будет получена директория hand, содержащая данные ассета.
 
</translate>
 
</translate>
 
==== Adding to the project structure ====
 
==== Adding to the project structure ====
 
<translate>
 
<translate>
 +
<!--T:22-->
 
Скопируем полученный каталог ассета hand в каталог resources нашего проекта. Примерная структура проекта после этого:
 
Скопируем полученный каталог ассета hand в каталог resources нашего проекта. Примерная структура проекта после этого:
 
</translate>
 
</translate>
Line 180: Line 202:
 
==== Code example ====
 
==== Code example ====
 
<translate>
 
<translate>
 +
<!--T:23-->
 
Загрузим asset и добавим его в дерево отрисовки:
 
Загрузим asset и добавим его в дерево отрисовки:
 
</translate>
 
</translate>
Line 187: Line 210:
  
 
<translate>
 
<translate>
 +
<!--T:24-->
 
Если мы попробуем сейчас собрать проект, то ничего не увидим. Потому что камера попала “внутрь” asset’a.
 
Если мы попробуем сейчас собрать проект, то ничего не увидим. Потому что камера попала “внутрь” asset’a.
  
 +
<!--T:25-->
 
Возьмем камеру и передвинем её подальше (возможно, придется задать другие значения, в зависимости от размера окна браузера, размера объекта и т.п.):
 
Возьмем камеру и передвинем её подальше (возможно, придется задать другие значения, в зависимости от размера окна браузера, размера объекта и т.п.):
 
</translate>
 
</translate>
Line 196: Line 221:
 
    
 
    
 
<translate>
 
<translate>
 +
<!--T:26-->
 
Если сейчас собрать проект, то на экране появится рука, но она не будет двигаться.
 
Если сейчас собрать проект, то на экране появится рука, но она не будет двигаться.
  
 +
<!--T:27-->
 
Чтобы она задвигалась, нужно запустить аниматор у соответствующего skinned mesh’a. Известно, что skinned mesh у нас один и у него одна анимация, поэтому в цикле пройдем по всему дереву asset’a и всем skinned mesh’ам в нём и будем проигрывать анимацию (в нашем примере - первую):
 
Чтобы она задвигалась, нужно запустить аниматор у соответствующего skinned mesh’a. Известно, что skinned mesh у нас один и у него одна анимация, поэтому в цикле пройдем по всему дереву asset’a и всем skinned mesh’ам в нём и будем проигрывать анимацию (в нашем примере - первую):
 
</translate>
 
</translate>
Line 212: Line 239:
  
 
<translate>
 
<translate>
 +
<!--T:28-->
 
Полный код примера:
 
Полный код примера:
 
</translate>
 
</translate>
Line 248: Line 276:
 
==== Result ====
 
==== Result ====
 
<translate>
 
<translate>
 +
<!--T:29-->
 
В результате выполнения вышеописанной программы отобразится следующая анимация:
 
В результате выполнения вышеописанной программы отобразится следующая анимация:
 
</translate>
 
</translate>
Line 256: Line 285:
 
=== Basics ===
 
=== Basics ===
 
<translate>
 
<translate>
 +
<!--T:30-->
 
Конвертация utah-teapot.fbx в ассет с именем asset в текущей директории:
 
Конвертация utah-teapot.fbx в ассет с именем asset в текущей директории:
 
</translate>
 
</translate>
Line 262: Line 292:
  
 
<translate>
 
<translate>
 +
<!--T:31-->
 
Конвертация utah-teapot.fbx в ассет с именем teapot в текущей директории:
 
Конвертация utah-teapot.fbx в ассет с именем teapot в текущей директории:
 
</translate>
 
</translate>
Line 268: Line 299:
  
 
<translate>
 
<translate>
 +
<!--T:32-->
 
Конвертация utah-teapot.fbx в ассет с именем teapot, который будет сохранен в директории ~/some/dir:
 
Конвертация utah-teapot.fbx в ассет с именем teapot, который будет сохранен в директории ~/some/dir:
 
</translate>
 
</translate>
Line 275: Line 307:
 
=== Common keys ===
 
=== Common keys ===
 
<translate>
 
<translate>
 +
<!--T:33-->
 
Справка:
 
Справка:
 
</translate>
 
</translate>
Line 281: Line 314:
  
 
<translate>
 
<translate>
 +
<!--T:34-->
 
Вывод статистики сцены:
 
Вывод статистики сцены:
 
</translate>
 
</translate>
Line 287: Line 321:
  
 
<translate>
 
<translate>
 +
<!--T:35-->
 
Пример статистики:
 
Пример статистики:
 
</translate>
 
</translate>
Line 308: Line 343:
  
 
<translate>
 
<translate>
 +
<!--T:36-->
 
Управление размером (scale) на конвертации, где arg - значение, например (10, 1, 0.1):
 
Управление размером (scale) на конвертации, где arg - значение, например (10, 1, 0.1):
 
</translate>
 
</translate>
Line 314: Line 350:
  
 
<translate>
 
<translate>
 +
<!--T:37-->
 
Переворот вертикальной оси V текстурных координат, если флаг указан, то к текстурным координатам будет применено преобразование вида V = 1.0 - V:
 
Переворот вертикальной оси V текстурных координат, если флаг указан, то к текстурным координатам будет применено преобразование вида V = 1.0 - V:
 
</translate>
 
</translate>
Line 321: Line 358:
 
=== Setting limitations ===
 
=== Setting limitations ===
 
<translate>
 
<translate>
 +
<!--T:38-->
 
Для всех Mesh'ей могут быть заданы ограничения на максимальное количество вершин и индексов. Для Skinned Mesh'ей могут быть заданы ограничения на максимальное количество костей и максимальное количество костей на вершину.  
 
Для всех Mesh'ей могут быть заданы ограничения на максимальное количество вершин и индексов. Для Skinned Mesh'ей могут быть заданы ограничения на максимальное количество костей и максимальное количество костей на вершину.  
 
</translate>
 
</translate>
  
 
<translate>
 
<translate>
 +
<!--T:39-->
 
Модель, которая не соответствует заданным ограничениям, можно принудительно сконвертировать с помощью флага force, однако работоспособность в таком случае не гарантируется:
 
Модель, которая не соответствует заданным ограничениям, можно принудительно сконвертировать с помощью флага force, однако работоспособность в таком случае не гарантируется:
 
</translate>
 
</translate>
Line 331: Line 370:
  
 
<translate>
 
<translate>
 +
<!--T:40-->
 
Установка ограничения на максимальное количество вершин на объект, где arg - значение, по умолчанию не задано:
 
Установка ограничения на максимальное количество вершин на объект, где arg - значение, по умолчанию не задано:
 
</translate>
 
</translate>
Line 337: Line 377:
  
 
<translate>
 
<translate>
 +
<!--T:41-->
 
Установка ограничения на максимальное количество индексов на объект, где arg - значение, по умолчанию не задано:
 
Установка ограничения на максимальное количество индексов на объект, где arg - значение, по умолчанию не задано:
 
</translate>
 
</translate>
Line 343: Line 384:
  
 
<translate>
 
<translate>
 +
<!--T:42-->
 
Установка ограничения на максимальное количество костей для Skinned Mesh, где arg - значение, по умолчанию 28, при установке значения выше, чем значение по умолчанию, работоспособность не гарантируется:
 
Установка ограничения на максимальное количество костей для Skinned Mesh, где arg - значение, по умолчанию 28, при установке значения выше, чем значение по умолчанию, работоспособность не гарантируется:
 
</translate>
 
</translate>
Line 349: Line 391:
  
 
<translate>
 
<translate>
 +
<!--T:43-->
 
Установка ограничения на максимальное количество костей на вершину для Skinned Mesh, где arg - значение, по умолчанию 8, при установке значения выше, чем значение по умолчанию, работоспособность не гарантируется:
 
Установка ограничения на максимальное количество костей на вершину для Skinned Mesh, где arg - значение, по умолчанию 8, при установке значения выше, чем значение по умолчанию, работоспособность не гарантируется:
 
</translate>
 
</translate>
  
 
  --max-bones-per-vertex arg
 
  --max-bones-per-vertex arg

Revision as of 12:11, 19 May 2020

Scope

Игровой движок W4 использует собственный формат хранения ассетов. Следовательно, прежде чем использовать сторонний ассет, его необходимо преобразовать в наш формат. Сделать это можно с помощью инструмента Mesh Converter, который поставляется вместе с нашим SDK.

Mesh Converter позволяет преобразовывать ассеты из формата Autodesk FBX (.fbx). Другие форматы не поддерживаются.

Technical limitations

Конвертер может преобразовать любой fbx со следующими ограничениями:

1. В связи с аппаратными и программными особенностями некоторых популярных моделей устройств skinned mesh может содержать:

  • не более 28 костей
  • не более 8 вершин на кость

How to use

Загрузка репозитория проекта описана в статье Quick Start. Файл конвертера W4MeshConverter.bin находится в каталоге w4framework/tools . Конвертация запускается из командной строки, как это описано на следующем примере и в разделе Short manual.

Mesh Exmple

Preparing

Возьмем для примера Utah teapot. Если посмотрите файл с помощью утилиты Autodesk FBX Review, увидите примерно то же, что на рисунке.

D1b94d56-cb70-428b-ac1c-65701c690238.png

Обратите внимание на положение носика чайника при просмотре fbx, мы вернемся к этому чуть позже.

Converting

Скопируем файл модели в директорию конвертера.

Далее, для преобразования модели в формат нашего движка (asset) необходимо выполнить:

./W4MeshConverter utah-teapot.fbx teapot

В результате появится директория teapot содержащая данные ассета.

Adding to the project structure

Для работы с ассетом необходимо скопировать его директорию (в нашем случае это teapot) в директорию resources проекта. Директория resources располагается на том же уровне структуры проекта, что и sources. Таким образом, структура проекта станет подобна следующей:

.
└── W4TemplateGame
    ├── resources
    │   └── teapot
    │       ├── Animations
    │       ├── BoneInfo
    │       ├── Materials
    │       │   ├── defaultMaterial.matInst
    │       │   └── defaultSkinnedMaterial.matInst
    │       ├── Splines
    │       ├── teapot.asset
    │       └── VertexData
    │           ├── Utah Teapot Quads_0.ib
    │           └── Utah Teapot Quads.vb
    └── sources
        └── main.cpp

Code example

Загрузка:

auto asset = Asset::load(Path("resources/teapot", "teapot.asset"));

Добавление в Render (отображение на экране):

auto root = RootNode::make();
root->addChild(asset->getRoot());
Render::instance().getPass(0)->setRoot(root);

Полный код примера:

#include "W4Framework.h"

W4_USE_UNSTRICT_INTERFACE

class AssetSample : public w4::IGame
{
public:

    AssetSample() = default;
    ~AssetSample() = default; 

    void onStart() override
    {
        auto cam = Render::instance().getScreenCamera();
        cam->setWorldTranslation({0.f, 0, -50.f});

        auto asset = Asset::load(Path("resources/teapot", "teapot.asset"));

        auto root =  RootNode::make();
        root->addChild(asset->getRoot());
        Render::instance().getPass(0)->setRoot(root);
    }
};

W4_RUN(AssetSample)

Result

В результате выполнения должен отобразиться тот же чайник, но с небольшим отличием.

1b952599-fc03-428f-96e8-ae86935b46d8.png

Если сравнить рисунки, можно заметить, что нос чайника в FBX Review смотрит в одну сторону, а в результате выполнения программы в другую. Это происходит из-за различий в системах координат и поведении конвертера.

Система координат FBX Scene Axis and Unit Conversion является правосторонней (с осью Y направленной верх), тогда как Система координат W4 левосторонняя (ось Y также направлена верх).

Animated mesh Exmple

Для анимированных мешей порядок работы не сильно отличается от описанного выше.

Preparing

Анимированную модель можно найти в интернете. Возьмем, например, Rigged Hand. Просмотр с помощью Autodesk FBX Review покажет примерно следующее:

Converting

Так же как в примере выше (с обычным мешем), скопируем модель в папку конвертера и преобразуем в формат W4 Engine:

./W4MeshConverter Hand_rigged.FBX hand

В результате выполнения в текущей папке будет получена директория hand, содержащая данные ассета.

Adding to the project structure

Скопируем полученный каталог ассета hand в каталог resources нашего проекта. Примерная структура проекта после этого:

.
└── W4TemplateGame
    ├── resources
    │   └── hand
    │       ├── Animations
    │       │   └── Take 001.ssa
    │       ├── BoneInfo
    │       │   ├── bone_main_hande.skeleton
    │       │   └── Hand_rigged.skin
    │       ├── hand.asset
    │       ├── Materials
    │       │   ├── defaultMaterial.matInst
    │       │   └── defaultSkinnedMaterial.matInst
    │       ├── Splines
    │       └── VertexData
    │           ├── Hand_rigged_0.ib
    │           └── Hand_rigged.vb
    └── sources
        └── main.cpp

Code example

Загрузим asset и добавим его в дерево отрисовки:

auto asset = Asset::load(Path("resources/hand", "hand.asset"));
render::getRoot()->addChild(asset->getRoot());

Если мы попробуем сейчас собрать проект, то ничего не увидим. Потому что камера попала “внутрь” asset’a.

Возьмем камеру и передвинем её подальше (возможно, придется задать другие значения, в зависимости от размера окна браузера, размера объекта и т.п.):

auto cam = render::getScreenCamera();
cam->setWorldTranslation({0.f, 125.f, -300.f});
 

Если сейчас собрать проект, то на экране появится рука, но она не будет двигаться.

Чтобы она задвигалась, нужно запустить аниматор у соответствующего skinned mesh’a. Известно, что skinned mesh у нас один и у него одна анимация, поэтому в цикле пройдем по всему дереву asset’a и всем skinned mesh’ам в нём и будем проигрывать анимацию (в нашем примере - первую):

asset->getRoot()->traversal([&](Node& node)
{
  if(node.is<SkinnedMesh>())
  {
    auto skinned = node.as<SkinnedMesh>();
    skinned->getAnimator(0).setIsLooped(true);
    skinned->play(0);
  }
});

Полный код примера:

#include "W4Framework.h"

W4_USE_UNSTRICT_INTERFACE

class MeshAnimatedSample : public w4::IGame
{
public:
    MeshAnimatedSample() = default;

    void onStart() override
    {
        auto asset = Asset::load(Path("resources/hand", "hand.asset"));
        render::getRoot()->addChild(asset->getRoot());

        auto cam = render::getScreenCamera();
        cam->setWorldTranslation({0.f, 150.f, -300.f});

        asset->getRoot()->traversal([&](Node &node)
        {
            if (node.is<SkinnedMesh>())
            {
                auto skinned = node.as<SkinnedMesh>();
                skinned->getAnimator(0).setIsLooped(true);
                skinned->play(0);
            }
        });
    }
};

W4_RUN(MeshAnimatedSample)

Result

В результате выполнения вышеописанной программы отобразится следующая анимация:

Short manual

Basics

Конвертация utah-teapot.fbx в ассет с именем asset в текущей директории:

./W4MeshConverter utah-teapot.fbx

Конвертация utah-teapot.fbx в ассет с именем teapot в текущей директории:

./W4MeshConverter utah-teapot.fbx teapot

Конвертация utah-teapot.fbx в ассет с именем teapot, который будет сохранен в директории ~/some/dir:

./W4MeshConverter utah-teapot.fbx teapot ~/some/dir 

Common keys

Справка:

-h, --help

Вывод статистики сцены:

-v, --verbose

Пример статистики:

(DEBUG) ==================== Scene statistics ====================
(DEBUG) Nodes: 2
(DEBUG) Geometries: 1
(DEBUG) Poses: 0
(DEBUG) Materials: 1
(DEBUG) Textures: 0
(DEBUG) ====================== Axis & Scale ======================
(DEBUG) Up: +Y, Front: +ParityOdd, System: RightHanded
(DEBUG) Scale: 1.000000
(DEBUG) ================ Mesh: Red_label ================
(DEBUG) Vertex count: 404
(DEBUG) Index count: 2118
(DEBUG) All polygons are triangles: 1
(DEBUG) ==========================================================
(DEBUG) create default material...
(DEBUG) create default skinned material...

Управление размером (scale) на конвертации, где arg - значение, например (10, 1, 0.1):

--scale arg

Переворот вертикальной оси V текстурных координат, если флаг указан, то к текстурным координатам будет применено преобразование вида V = 1.0 - V:

--uv-flip

Setting limitations

Для всех Mesh'ей могут быть заданы ограничения на максимальное количество вершин и индексов. Для Skinned Mesh'ей могут быть заданы ограничения на максимальное количество костей и максимальное количество костей на вершину.

Модель, которая не соответствует заданным ограничениям, можно принудительно сконвертировать с помощью флага force, однако работоспособность в таком случае не гарантируется:

-f, --force

Установка ограничения на максимальное количество вершин на объект, где arg - значение, по умолчанию не задано:

--max-vertex arg

Установка ограничения на максимальное количество индексов на объект, где arg - значение, по умолчанию не задано:

--max-index arg

Установка ограничения на максимальное количество костей для Skinned Mesh, где arg - значение, по умолчанию 28, при установке значения выше, чем значение по умолчанию, работоспособность не гарантируется:

--max-bones arg

Установка ограничения на максимальное количество костей на вершину для Skinned Mesh, где arg - значение, по умолчанию 8, при установке значения выше, чем значение по умолчанию, работоспособность не гарантируется:

--max-bones-per-vertex arg