Mesh Converter
Contents
Общее описание
Игровой движок W4 использует собственный формат хранения сцены. Следовательно, прежде чем использовать сторонний ассет, его необходимо преобразовать в наш формат. Сделать это можно с помощью инструмента Mesh Converter, который поставляется вместе с нашим SDK.
Mesh Converter позволяет преобразовывать ассеты из формата Autodesk FBX (.fbx). Другие форматы не поддерживаются.
Технические ограничения
Ограничения движка завязаны на ограничения WebGL, но оптимальное сочетания работоспособности и компактности решений достигается, если skinned mesh содержит не более 28 костей и/или 8 вершин на кость.
Использование
Загрузка репозитория проекта описана в статье Quick Start. Файл конвертера W4MeshConverter.bin находится в каталоге w4framework/tools . Конвертация запускается из командной строки, как это описано на следующем примере.
Пример использования
Подготовка
Возьмем для примера Utah teapot). Если посмотрите файл с помощью утилиты Autodesk FBX Review, увидите примерно то же, что на рисунке.
Обратите внимание на положение носика чайника при просмотре fbx, мы вернемся к этому чуть позже.
Конвертация
Скопируем файл модели в директорию конвертера.
Далее, для преобразования модели в формат нашего движка (asset) необходимо выполнить:
./W4MeshConverter utah-teapot.fbx teapot
В результате появится директория teapot содержащая данные ассета.
Добавление в структуру проекта
Для работы с ассетом необходимо скопировать его директорию (в нашем случае это 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
Код
Загрузка:
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)
Результат выполнения
В результате выполнения должен отобразиться тот же чайник, но с небольшим отличием.
Если сравнить рисунки, можно заметить, что нос чайника в FBX Review смотрит в одну сторону, а в нашем примере в другую. Это происходит из-за различий в системах координат и поведении конвертера. Система координат FBX Scene Axis and Unit Conversion является правосторонней (с осью Y направленной верх), тогда как Система координат W4 левосторонняя (ось Y также направлена верх).
Справочная информация
Базовое применение
Конвертация 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
Общие ключи
Справка:
-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
Установка ограничений
Для всех 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