Документация
Docs/ru/reference/image-format/baking.md
Контракт запекания изображений
Сгенерированный справочник. Не редактируйте его напрямую. Обновите
BuildTools/ImageFormatInterface.json, затем выполнитеpython BuildTools/docs_image_format.py --write.
| Индекс | Форматы | FOFRM | Параметры | Запекание | Runtime | Проверка | Канонический JSON | Руководство |
| Стабильный ID | Правило | Требование | Причина | Источник |
|---|---|---|---|---|
image-format.baking.discovery |
Scan и targeted modes | Пустая цель сканирует каждое зарегистрированное расширение; отсутствующий, неподдерживаемый или пропущенный BakeChecker targeted path завершается без выхода. | Incremental build проекта и перезапекание одного файла используют один baker, не считая пропущенную цель ошибкой. | Source/Tools/ImageBaker.cpp |
image-format.baking.extension-case |
Диспетчеризация расширения без учёта регистра | Lookup расширений source и runtime использует get_file_extension(), который возвращает расширение без точки и в нижнем регистре. | Расширения в смешанном регистре разрешаются одним зарегистрированным loader, хотя проекты всё равно должны использовать канонические lowercase paths. | Source/Tools/ImageBaker.cpp, Source/Essentials/StringUtils.h |
image-format.baking.source-options |
Диспетчеризация параметров после $ | LoadAny удаляет из физического имени текст после $, передаёт suffix выбранному loader и разрешает источник внутри того же FileCollection. | Один исходный файл может давать выбранные или преобразованные варианты через ссылки FOFRM без дублирования binaries. | Source/Tools/ImageBaker.cpp |
image-format.baking.output-path |
Путь выхода и NewName | Запечённый ресурс обычно сохраняет исходный путь; loader может задать NewName, который заменит путь выхода для legacy-нормализации. | Нормализация critter FRM/FRx и агрегация разделённых направлений требуют детерминированно переименованных ресурсов. | Source/Tools/ImageBaker.cpp |
image-format.baking.container-header |
Заголовок частного контейнера | Частный baked stream начинается с magic SpriteResource 43 и version 2, затем содержит uint16 числа кадров, uint16 полных animation ticks и uint8 числа направлений, а заканчивается magic 43. | Общий decoder SpriteResource проверяет версионированное обрамление до потребления pixels или mesh-данных клиентом либо tool. | Source/Common/SpriteResource.h, Source/Common/SpriteResource.cpp |
image-format.baking.direction-record |
Записи направлений | Каждое из одного или GameSettings::MAP_DIR_COUNT направлений хранит ровно общее число кадров; разрешённый logical root offset сериализуется в каждом конкретном кадре после mesh padding и crop. | Per-frame offsets сохраняют экранное размещение, когда polygon geometry независимо меняет сериализованный canvas каждого направления и кадра анимации. | Source/Tools/ImageBaker.cpp |
image-format.baking.frame-record |
Concrete и shared frame records | Каждый кадр начинается с shared flag; concrete record хранит знаковый int16 draw offset, uint16 обрезанных размеров, знаковые int16 NextX/NextY, точные RGBA8 pixels, mesh kind, а для Mesh — vertices/indices, logical source size и origin. Shared record хранит индекс одного более раннего кадра. | Record сохраняет логическое размещение и координаты освещения, устраняя прозрачные texture rows и отправляя indexed silhouettes; повторные кадры переиспользуют исходный payload. | Source/Tools/ImageBaker.cpp |
image-format.baking.sprite-info-index |
Индекс SpriteInfo каждого pack | Запекание изображений поддерживает SpriteInfo/<PackName>.foinfo версии 1 с duration, direction, frame bounds, offsets и metadata shared frame каждого актуального image source в resource pack. | Общий EngineMetadata отвечает на запросы 2D-анимации server/client без декодирования RGBA payload; потеря или появление агрегированного индекса требует полной перезапечки. | Source/Tools/ImageBaker.cpp, Source/Common/AnimationInfo.cpp |
image-format.baking.sprite-mesh |
Необязательный polygonal sprite mesh | Разрешайте и проверяйте всю группу settings SpriteMesh при каждом image bake, в том числе когда SpriteMesh.Enabled равен false: AlphaThreshold находится в 0..254, MaxTriangles положителен, а AreaSavingsWeight конечен и неотрицателен. При включении стройте детерминированные alpha-thresholded candidates в пределах triangle budget, оценивайте saved original-frame area относительно submitted triangles, оставляйте только проверенное покрытие, обрезайте выбранные mesh canvases точно по geometry bounds и сохраняйте logical root через сериализованный frame offset. | Opt-in путь уменьшает transparent overdraw и texture area без обрезания видимых pixels или изменения gameplay placement; небезопасные/невыгодные кандидаты остаются quads, пустые masks — явной пустой geometry. | Source/Common/Settings.inc, Source/Tools/SpriteMeshing.cpp, Source/Tools/ImageBaker.cpp |
image-format.baking.error-aggregation |
Работа каждого файла и агрегированный отказ | Выбранные файлы запекаются асинхронно; каждое исключение журналируется, а ненулевое число ошибок завершает Image baker исключением ImageBakerException. | Полный scan сообщает обо всех независимо сломанных image resources за один запуск и не завершается молча. | Source/Tools/ImageBaker.cpp |