FOnline Engine
Current master GitHub
Документация Docs/ru/reference/model-format/validation.md

Валидация формата моделей

Сгенерированный справочник. Не редактируйте напрямую. Обновите BuildTools/ModelFormatInterface.json, затем запустите python BuildTools/docs_model_format.py --write.

Индекс Синтаксис Токены Композиция Ресурсы Анимация Валидация Каноническая JSON-модель Руководство

Правила контракта

Стабильный ID Правило Требование Причина Source
model-format.rule.lexical-syntax Разделение по whitespace Directives и arguments разделяются whitespace; # и ; начинают comments; quoting/escaping для paths с spaces отсутствуют. Parser удаляет comments и извлекает tokens строки через istringstream. Source/Tools/ModelInfoBaker.cpp
model-format.rule.multiple-directives Последовательный разбор Строка может содержать несколько directives; каждая забирает точное число arguments, затем разбор продолжается. Компактные entries допустимы, но order меняет current link или mesh selector последующих modifiers. Source/Tools/ModelInfoBaker.cpp
model-format.rule.selector-order Порядок selectors После Layer или Value задайте Root, Attach либо AttachParticles до transforms, materials, disables или cuts. Layer и Value выбирают dummy link и очищают Mesh; ранние modifiers отбрасываются. Source/Tools/ModelInfoBaker.cpp
model-format.rule.template-files Имена templates Basename include-only files начинается с TEMPLATE_; concrete files не используют этот prefix. Templates участвуют в timestamps/parsing, но не выдаются как отдельные resources или metadata sections. Source/Tools/ModelInfoBaker.cpp
model-format.rule.include-replacements Scope replacements Arguments Include являются pairs name/value и заменяют каждое буквальное %name% до tokenization. Простая текстовая замена не понимает token boundaries; placeholders не должны случайно совпадать. Source/Tools/ModelInfoBaker.cpp
model-format.rule.relative-paths Владение paths Model, Include, Attach, Cut разрешаются относительно declaring .fo3d; animation files — относительно concrete description, кроме ModelFile; particles/effects глобальны. Перемещение template или description может изменить contributed asset paths. Source/Tools/ModelInfoBaker.cpp
model-format.rule.zero-identity Ноль — transform identity Нулевые transform и Speed не дают вклада. Варианты +/* инициализируют нулевое поле operand до дальнейших операций. Runtime SetAnimData пропускает нули, а parser accumulation поддерживает самостоятельные template Scale/Speed. Source/Tools/ModelInfoBaker.cpp, Source/Client/ModelInstance.cpp
model-format.rule.layer-zero Нулевой layer value неактивен Runtime value 0 не выбирает link; authored Root и Attach требуют ненулевого Value. Composition loop пропускает ноль, baker запрещает links с нулём. Source/Tools/ModelInfoBaker.cpp, Source/Client/ModelInstance.cpp
model-format.rule.parent-materials Наследование parent material Используйте Parent или Parent_<mesh> только в attached child; parent mesh должен уже предоставлять нужный texture slot/effect. Child копирует current material state родителя, не imported default; у root description нет parent context. Source/Tools/ModelInfoBaker.cpp, Source/Client/ModelInstance.cpp
model-format.rule.mesh-before-info Порядок baker Запускайте ModelMeshBaker до ModelInfoBaker, чтобы проверить meshes, hierarchy, materials, animations и cuts из baked data. Built-in orders: 4 для ModelMesh и 6 для ModelInfo. Source/Tools/ModelMeshBaker.h, Source/Tools/ModelInfoBaker.h
model-format.rule.first-animation-wins Побеждает первая animation mapping Не объявляйте одну state/action Anim pair повторно; только первая mapping проверяется и регистрируется. Дубликаты пропускаются model-info validation и client registration. Source/Tools/ModelInfoBaker.cpp, Source/Client/ModelInformation.cpp
model-format.rule.runtime-composition Смена layers перестраивает composition Считайте model-layer arrays состоянием композиции: значение может создать/удалить children и particles, изменить materials/effects, geometry, cuts и combined meshes. Layer change не является косметическим integer update: он меняет render graph и batching state. Source/Client/ModelInstance.cpp
model-format.rule.baked-link-bounds Запечённые bounds geometry link Каждый non-particle child link содержит проверенный aggregate root-space AABB и per-animation AABB mapped clips parent; default и particle links не содержат geometry payload. Runtime framing выбирает bounds direct child для active parent clips и при их отсутствии использует aggregate link envelope вместо обхода и skinning combined-mesh vertices. Source/Tools/ModelInfoBaker.cpp, Source/Client/ModelInformation.cpp, Source/Client/ModelInstance.cpp
model-format.rule.source-units-and-mirroring Положительный scale и world units Engine До export заморозьте mirrored mesh nodes к положительному transform и держите direct FBX/OBJ attachments в диапазоне Baking.ModelAttachmentMinExtent .. Baking.ModelAttachmentMaxExtent. Если нужен явный description-level scale, используйте child .fo3d. Отрицательные transforms инвертируют winding и normals, а чужой масштаб units создаёт невозможные model-sprite frames. Отказ bake оставляет оба дефекта у authored source. Source/Tools/ModelMeshBaker.cpp, Source/Tools/ModelInfoBaker.cpp
model-format.rule.validation-boundary Bake и видимая проверка Требуйте clean resource bake для syntax/asset closure, затем проверяйте scale, pose, composition, attachments, materials, cuts и interaction bounds в visible client scene. Baking доказывает references и serialized structure; composed visual result доказывает только client renderer. Source/Tests/Test_ModelBaker.cpp

Удалённые legacy-написания

Удалённый token Замена Текущий контракт
AnimEqual StateAnimEqual or ActionAnimEqual Текущий parser требует явно указать enum domain.
CalculateTangentSpace none Mesh import настраивает ufbx для generation/normalization отсутствующих normals и tangents; directive .fo3d нет.
RenderFrame none Текущие model descriptions не создают 2D render frames.
RenderFrames none Текущие model descriptions не создают sequences 2D render frames.
DrawSize automatic model-sprite layout from baked animation bounds ModelInfo записывает aggregate/per-animation bounds; client вычисляет offscreen frame активной composition и pose.
ViewSize automatic view/name layout from baked idle-priority bounds Client проецирует baked model bounds и active child layers вместо authored interaction rectangle.

Compatibility spelling Subset отдельно помечен как deprecated в токенах: он забирает argument, но не выбирает mesh.

Команды проверки

python BuildTools\docs_model_format.py --check
python -m unittest BuildTools.tests.test_docs_model_format
.\Binaries\Tests-Windows-win64\LF_UnitTests.exe "ModelBaker*"
cmake --build Build\Auto --config RelWithDebInfo --target BakeResources

Завершите видимой client scene, которая покрывает все используемые проектом сочетания слоёв, attachments, material overrides, cuts, animations, draw size и interaction bounds.

Введите запрос.