Difference between revisions of "Mesh Converter"
Line 1: | Line 1: | ||
== Scope == | == Scope == | ||
+ | <translate> | ||
Игровой движок W4 использует собственный формат хранения сцены. Следовательно, прежде чем использовать сторонний ассет, его необходимо преобразовать в наш формат. Сделать это можно с помощью инструмента Mesh Converter, который поставляется вместе с нашим SDK. | Игровой движок W4 использует собственный формат хранения сцены. Следовательно, прежде чем использовать сторонний ассет, его необходимо преобразовать в наш формат. Сделать это можно с помощью инструмента Mesh Converter, который поставляется вместе с нашим SDK. | ||
− | + | </translate> | |
+ | <translate> | ||
Mesh Converter позволяет преобразовывать ассеты из формата Autodesk FBX (.fbx). Другие форматы не поддерживаются. | Mesh Converter позволяет преобразовывать ассеты из формата Autodesk FBX (.fbx). Другие форматы не поддерживаются. | ||
+ | </translate> | ||
== Technical limitations == | == Technical limitations == | ||
+ | <translate> | ||
Конвертер может преобразовать любой меш, но стоит помнить про ограничения движка, которые завязаны на ограничения WebGL. Оптимальное сочетания работоспособности и компактности решений достигается, если skinned mesh содержит не более 28 костей и/или 8 вершин на кость. | Конвертер может преобразовать любой меш, но стоит помнить про ограничения движка, которые завязаны на ограничения WebGL. Оптимальное сочетания работоспособности и компактности решений достигается, если skinned mesh содержит не более 28 костей и/или 8 вершин на кость. | ||
− | + | </translate> | |
== How to use == | == How to use == | ||
+ | <translate> | ||
Загрузка репозитория проекта описана в статье [[Quick Start]]. | Загрузка репозитория проекта описана в статье [[Quick Start]]. | ||
Файл конвертера W4MeshConverter.bin находится в каталоге w4framework/tools . | Файл конвертера W4MeshConverter.bin находится в каталоге w4framework/tools . | ||
Конвертация запускается из командной строки, как это описано на следующем примере. | Конвертация запускается из командной строки, как это описано на следующем примере. | ||
+ | </translate> | ||
=== Exmple === | === Exmple === | ||
==== Preparing ==== | ==== Preparing ==== | ||
+ | <translate> | ||
Возьмем для примера [https://free3d.com/3d-model/teapot-15884.html# Utah teapot]). | Возьмем для примера [https://free3d.com/3d-model/teapot-15884.html# Utah teapot]). | ||
Если посмотрите файл с помощью утилиты Autodesk FBX Review, увидите примерно то же, что на рисунке. | Если посмотрите файл с помощью утилиты Autodesk FBX Review, увидите примерно то же, что на рисунке. | ||
− | + | </translate> | |
[[File:D1b94d56-cb70-428b-ac1c-65701c690238.png|500px]] | [[File:D1b94d56-cb70-428b-ac1c-65701c690238.png|500px]] | ||
− | + | <translate> | |
Обратите внимание на положение носика чайника при просмотре fbx, мы вернемся к этому чуть позже. | Обратите внимание на положение носика чайника при просмотре fbx, мы вернемся к этому чуть позже. | ||
− | + | </translate> | |
==== Converting ==== | ==== Converting ==== | ||
+ | <translate> | ||
Скопируем файл модели в директорию конвертера. | Скопируем файл модели в директорию конвертера. | ||
Далее, для преобразования модели в формат нашего движка (asset) необходимо выполнить: | Далее, для преобразования модели в формат нашего движка (asset) необходимо выполнить: | ||
− | + | </translate> | |
./W4MeshConverter utah-teapot.fbx teapot | ./W4MeshConverter utah-teapot.fbx teapot | ||
− | + | <translate> | |
В результате появится директория teapot содержащая данные ассета. | В результате появится директория teapot содержащая данные ассета. | ||
− | + | </translate> | |
==== Adding to the project structure ==== | ==== Adding to the project structure ==== | ||
+ | <translate> | ||
Для работы с ассетом необходимо скопировать его директорию (в нашем случае это teapot) в директорию resources проекта. Директория resources располагается на том же уровне структуры проекта, что и sources. Таким образом, структура проекта станет подобна следующей: | Для работы с ассетом необходимо скопировать его директорию (в нашем случае это teapot) в директорию resources проекта. Директория resources располагается на том же уровне структуры проекта, что и sources. Таким образом, структура проекта станет подобна следующей: | ||
+ | </translate> | ||
. | . | ||
└── W4TemplateGame | └── W4TemplateGame | ||
Line 49: | Line 59: | ||
==== Code example ==== | ==== Code example ==== | ||
+ | <translate> | ||
Загрузка: | Загрузка: | ||
+ | </translate> | ||
auto asset = Asset::load(Path("resources/teapot", "teapot.asset")); | auto asset = Asset::load(Path("resources/teapot", "teapot.asset")); | ||
− | + | <translate> | |
Добавление в Render (отображение на экране): | Добавление в Render (отображение на экране): | ||
− | + | </translate> | |
auto root = RootNode::make(); | auto root = RootNode::make(); | ||
root->addChild(asset->getRoot()); | root->addChild(asset->getRoot()); | ||
Render::instance().getPass(0)->setRoot(root); | Render::instance().getPass(0)->setRoot(root); | ||
− | + | <translate> | |
Полный код примера: | Полный код примера: | ||
− | + | </translate> | |
#include "W4Framework.h" | #include "W4Framework.h" | ||
Line 88: | Line 100: | ||
==== Result ==== | ==== Result ==== | ||
+ | <translate> | ||
В результате выполнения должен отобразиться тот же чайник, но с небольшим отличием. | В результате выполнения должен отобразиться тот же чайник, но с небольшим отличием. | ||
− | + | </translate> | |
[[File:1b952599-fc03-428f-96e8-ae86935b46d8.png|500px]] | [[File:1b952599-fc03-428f-96e8-ae86935b46d8.png|500px]] | ||
− | + | <translate> | |
Если сравнить рисунки, можно заметить, что нос чайника в FBX Review смотрит в одну сторону, а в нашем примере в другую. Это происходит из-за различий в системах координат и поведении конвертера. | Если сравнить рисунки, можно заметить, что нос чайника в FBX Review смотрит в одну сторону, а в нашем примере в другую. Это происходит из-за различий в системах координат и поведении конвертера. | ||
+ | </translate> | ||
+ | <translate> | ||
Система координат FBX Scene Axis and Unit Conversion является правосторонней (с осью Y направленной верх), тогда как [[Система координат W4]] левосторонняя (ось Y также направлена верх). | Система координат FBX Scene Axis and Unit Conversion является правосторонней (с осью Y направленной верх), тогда как [[Система координат W4]] левосторонняя (ось Y также направлена верх). | ||
− | + | </translate> | |
== Short manual == | == Short manual == | ||
=== Basics === | === Basics === | ||
+ | <translate> | ||
Конвертация utah-teapot.fbx в ассет с именем asset в текущей директории: | Конвертация utah-teapot.fbx в ассет с именем asset в текущей директории: | ||
− | + | </translate> | |
./W4MeshConverter utah-teapot.fbx | ./W4MeshConverter utah-teapot.fbx | ||
− | + | <translate> | |
Конвертация utah-teapot.fbx в ассет с именем teapot в текущей директории: | Конвертация utah-teapot.fbx в ассет с именем teapot в текущей директории: | ||
− | + | </translate> | |
./W4MeshConverter utah-teapot.fbx teapot | ./W4MeshConverter utah-teapot.fbx teapot | ||
− | + | <translate> | |
Конвертация utah-teapot.fbx в ассет с именем teapot, который будет сохранен в директории ~/some/dir: | Конвертация utah-teapot.fbx в ассет с именем teapot, который будет сохранен в директории ~/some/dir: | ||
− | + | </translate> | |
./W4MeshConverter utah-teapot.fbx teapot ~/some/dir | ./W4MeshConverter utah-teapot.fbx teapot ~/some/dir | ||
=== Common keys === | === Common keys === | ||
− | + | <translate> | |
Справка: | Справка: | ||
− | + | </translate> | |
-h, --help | -h, --help | ||
− | + | <translate> | |
Вывод статистики сцены: | Вывод статистики сцены: | ||
− | + | </translate> | |
-v, --verbose | -v, --verbose | ||
− | + | <translate> | |
Пример статистики: | Пример статистики: | ||
− | + | </translate> | |
(DEBUG) ==================== Scene statistics ==================== | (DEBUG) ==================== Scene statistics ==================== | ||
(DEBUG) Nodes: 2 | (DEBUG) Nodes: 2 | ||
Line 137: | Line 153: | ||
(DEBUG) create default material... | (DEBUG) create default material... | ||
(DEBUG) create default skinned material... | (DEBUG) create default skinned material... | ||
− | + | <translate> | |
Управление размером (scale) на конвертации, где arg - значение, например (10, 1, 0.1): | Управление размером (scale) на конвертации, где arg - значение, например (10, 1, 0.1): | ||
− | + | </translate> | |
--scale arg | --scale arg | ||
− | + | <translate> | |
Переворот UV.Y координаты: | Переворот UV.Y координаты: | ||
− | + | </translate> | |
--uv-flip | --uv-flip | ||
=== Setting limitations === | === Setting limitations === | ||
− | + | <translate> | |
Для всех Mesh'ей могут быть заданы ограничения на максимальное количество вершин и индексов. Для Skinned Mesh'ей могут быть заданы ограничения на максимальное количество костей и максимальное количество костей на вершину. | Для всех Mesh'ей могут быть заданы ограничения на максимальное количество вершин и индексов. Для Skinned Mesh'ей могут быть заданы ограничения на максимальное количество костей и максимальное количество костей на вершину. | ||
− | + | </translate> | |
+ | <translate> | ||
Модель, которая упирается в текущие ограничения, можно сконвертировать с помощью флага force, однако работоспособность данной модели не гарантируется: | Модель, которая упирается в текущие ограничения, можно сконвертировать с помощью флага force, однако работоспособность данной модели не гарантируется: | ||
− | + | </translate> | |
-f, --force | -f, --force | ||
− | + | <translate> | |
Установка ограничения на максимальное количество вершин на объект, где arg - значение, по умолчанию не задано: | Установка ограничения на максимальное количество вершин на объект, где arg - значение, по умолчанию не задано: | ||
− | + | </translate> | |
--max-vertex arg | --max-vertex arg | ||
− | + | <translate> | |
Установка ограничения на максимальное количество индексов на объект, где arg - значение, по умолчанию не задано: | Установка ограничения на максимальное количество индексов на объект, где arg - значение, по умолчанию не задано: | ||
− | + | </translate> | |
--max-index arg | --max-index arg | ||
− | + | <translate> | |
Установка ограничения на максимальное количество костей для Skinned Mesh, где arg - значение, по умолчанию 28: | Установка ограничения на максимальное количество костей для Skinned Mesh, где arg - значение, по умолчанию 28: | ||
− | + | </translate> | |
--max-bones arg | --max-bones arg | ||
− | + | <translate> | |
Установка ограничения на максимальное количество костей на вершину для Skinned Mesh, где arg - значение, по умолчанию 8: | Установка ограничения на максимальное количество костей на вершину для Skinned Mesh, где arg - значение, по умолчанию 8: | ||
− | + | </translate> | |
--max-bones-per-vertex arg | --max-bones-per-vertex arg |
Revision as of 13:51, 13 May 2020
Contents
Scope
Игровой движок W4 использует собственный формат хранения сцены. Следовательно, прежде чем использовать сторонний ассет, его необходимо преобразовать в наш формат. Сделать это можно с помощью инструмента Mesh Converter, который поставляется вместе с нашим SDK. Mesh Converter позволяет преобразовывать ассеты из формата Autodesk FBX (.fbx). Другие форматы не поддерживаются.
Technical limitations
Конвертер может преобразовать любой меш, но стоит помнить про ограничения движка, которые завязаны на ограничения WebGL. Оптимальное сочетания работоспособности и компактности решений достигается, если skinned mesh содержит не более 28 костей и/или 8 вершин на кость.
How to use
Загрузка репозитория проекта описана в статье Quick Start. Файл конвертера W4MeshConverter.bin находится в каталоге w4framework/tools . Конвертация запускается из командной строки, как это описано на следующем примере.
Exmple
Preparing
Возьмем для примера Utah teapot). Если посмотрите файл с помощью утилиты Autodesk FBX Review, увидите примерно то же, что на рисунке. Обратите внимание на положение носика чайника при просмотре 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
В результате выполнения должен отобразиться тот же чайник, но с небольшим отличием. Если сравнить рисунки, можно заметить, что нос чайника в FBX Review смотрит в одну сторону, а в нашем примере в другую. Это происходит из-за различий в системах координат и поведении конвертера. Система координат FBX Scene Axis and Unit Conversion является правосторонней (с осью Y направленной верх), тогда как Система координат W4 левосторонняя (ось Y также направлена верх).
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
Переворот UV.Y координаты:
--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