Документация
Docs/ru/reference/image-format/fofrm.md
Справочник descriptor FOFRM
Сгенерированный справочник. Не редактируйте его напрямую. Обновите
BuildTools/ImageFormatInterface.json, затем выполнитеpython BuildTools/docs_image_format.py --write.
| Индекс | Форматы | FOFRM | Параметры | Запекание | Runtime | Проверка | Канонический JSON | Руководство |
FOFRM является авторским слоем композиции статических изображений, анимаций, наборов направлений и импортированных legacy-источников. Ссылки задаются относительно каталога descriptor.
| Стабильный ID | Поле/правило | Требование | Причина | Источник |
|---|---|---|---|---|
image-format.field.fps |
Fps | Корневой положительный uint32 Fps заменяет умолчания таймлайна; полное время равно floor(1000*final_count/Fps) и должно давать минимум одну миллисекунду на кадр. Frame/Frames по умолчанию использует10fps; Source сохраняет импортированный покадровый тайминг без явного переопределения. Fps ноль и конфликт с Duration/FrameDurations в секции запрещены. | Положительные равномерные границы вычисляются после окончательного выбора кадров; runtime использует полученные покадровые длительности. | Source/Tools/ImageBaker-Fofrm.cpp |
image-format.field.count |
Вычисляемое число ссылок | Count не является авторским ключом. Каждое направление вычисляет1..65535 итоговых кадров после grid, разворачивания и FrameIndices; число может различаться. Source считается одной входной ссылкой для массивов преобразований. | Каждый источник по ссылке сам может содержать несколько кадров. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tools/ImageRecipe.cpp |
image-format.field.sequence-offset |
Offset | Offset требует ровно два знаковых целых; пропущенные пары переносятся из корня или предыдущего направления. Неверные пары и значения вне диапазона запрещены. | Парсер переносит текущую пару смещений между направлениями. | Source/Tools/ImageBaker-Fofrm.cpp |
image-format.field.effect |
Effect | Effect удалён и отклоняется до разрешения источников, включая пустое значение и отсутствующий эффект. Render effect выбирает потребитель GUI/map/model/script; бейкер не сериализует эффекты ресурса. Отказ отмечен FO_TEMPORARY_COMPAT(FofrmRetiredEffect, “2026-12-31”). | Распознанный ключ должен действовать либо явно отклоняться; неработающего EffectName больше нет. | Source/Tools/ImageRecipe.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.direction-section |
HexDir / SquareDir | Безымянный корень всегда задаёт направление 0. Используйте HexDir 1..5 или SquareDir 1..7 с каноническими десятичными индексами, а не градусами. Именованный ноль и старые формы Dir отклоняются до разрешения Source. Отсутствие второй последовательности и индексной секции означает один ракурс; секция без кадров запрещена. | SpriteSheet принимает ровно одно направление или GameSettings::MAP_DIR_COUNT направлений. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tools/ImageRecipe.cpp, Source/Client/DefaultSprites.cpp, Source/Tests/Test_ImageBaker.cpp |
image-format.field.frame-reference |
Frame и Frames | Используйте только Frame или Frames. Frame содержит один полный относительный путь; Frames — непустой упорядоченный массив String парсера AnyData. Пути с пробелами берите в кавычки; пишите одну ссылку на продолженную строку, сохраняйте повторы. | Ссылки объединяются с каталогом descriptor и затем диспетчеризируются по расширению ресурса. | Source/Tools/ImageRecipe.cpp, Source/Tools/ImageBaker-Fofrm.cpp |
image-format.field.frame-offsets |
FrameOffsets | FrameOffsets задаёт локальную пару int32 X Y на исходную ссылку до разворачивания; без поля нулевые пары. Offset и покадровое размещение складываются без накопления и изменения движения. Пустые/неверные значения, число пар и выход за диапазон запрещены. Source считается одной ссылкой, включая именованные переопределения. | Размещение картинки задаётся отдельным авторским ключом и хранится отдельно от импортированных root-motion дельт; пропущенные пары нулевые и не переносятся между направлениями. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tools/ImageImport.h, Source/Tools/ImageBaker.cpp, Source/Tests/Test_ImageBaker.cpp |
image-format.field.size |
Size | Size требует ровно два строгих целочисленных токена массива String парсера AnyData в 1..65535 и задаёт точный размер холста в пикселях для каждой ссылки. Корневое значение служит умолчанием всем направлениям; именованный Size локален и не переносится дальше. Size и FrameSizes в одном разделе запрещены. | Физическое изменение пикселей отделено от размещения и масштаба при отрисовке. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tests/Test_ImageBaker.cpp |
image-format.field.frame-sizes |
FrameSizes | FrameSizes задаёт локальную AnyData-пару целых W H в1..65535 на исходную ссылку до разворачивания. Размер применяется каждому дочернему кадру и заменяет корневой Size; список не наследуется. Пустые/неверные значения, число пар и отсутствие ссылок запрещены. Source считается одной ссылкой, включая именованные переопределения. | Число пар соответствует ссылкам, а не развёрнутым кадрам анимации. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tests/Test_ImageBaker.cpp |
image-format.field.flattening |
Flattening вложенной последовательности | Frame/Frames добавляют выбранную Main sequence по умолчанию либо InputDir, сохраняя покадровое размещение и движение, но отбрасывая привязку последовательности и другие направления ребёнка. Crop/grid/преобразования выполняются по ссылкам до разворачивания; FrameIndices выбирает итоговую последовательность. Source сохраняет целую коллекцию и покадровое время. Число кадров и длительность независимы по направлениям. | Каждое итоговое направление владеет таблицей кадров и таймлайном; привязка дочерней последовательности исключается только при композиции Frame/Frames. | Source/Tools/ImageBaker-Fofrm.cpp |
image-format.field.timing |
Timing всей последовательности FOFRM | Кадры используют положительную timespan Duration. Файлы требуют целые uint32 мс на кадр и направление. Frame/Frames по умолчанию задают 100 мс на итоговый кадр; Source наследует выбранные длительности, включая повторы/grid. Локальные FrameDurations или Duration заменяют корневые Duration/Fps. Корневой FrameDurations относится только к направлению 0. Границы floor(i*Duration/count) сохраняют общую длительность без нулевых кадров. | Обёртка коллекции не теряет тайминг; разворачивание анимированных ссылок сохраняет заданный стандартный темп. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tools/ImageImport.cpp |
image-format.field.source |
Целая коллекция Source | Корневой Source переносит целую бинарную или FOFRM-коллекцию с направлениями, смещениями последовательностей/кадров, движением и таймингом. Source и Frame/Frames взаимоисключающие. Корневые преобразования служат умолчанием существующим направлениям; именованные секции переопределяют их без повторения ссылок. Авторский Offset прибавляется к унаследованной привязке последовательности. Явный корневой Fps заменяет тайминг источника. Alias отклоняется с датированным отказом. | Наследование целой коллекции и сборка выбранных Main-последовательностей имеют явные отдельные правила размещения и тайминга. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tools/ImageRecipe.cpp |
image-format.field.input-dir |
Параметр InputDir | Выбрать существующее направление до преобразования пикселей. Явный корневой InputDir в Source оставляет одну последовательность с её привязкой. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-input-dirs |
Параметр FrameInputDirs | Один индекс входного направления на ссылку до разворачивания. В одной секции исключает InputDir. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-indices |
Параметр FrameIndices | Непустой AnyData-массив целых после grid и разворачивания: порядок и повторы разрешены, индексы вне диапазона запрещены. Корневой список Source действует на все направления, локальный заменяет его. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.crop |
Параметр Crop | Обрезать каждый входной кадр до grid: неотрицательное начало, положительный размер, область целиком внутри исходника. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-crops |
Параметр FrameCrops | Один прямоугольник на ссылку до разворачивания; заменяет унаследованный Crop и исключает локальный Crop. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.grid |
Параметр Grid | Нарезать каждый обрезанный кадр слева направо, затем сверху вниз. Положительные размеры клетки должны делить изображение без остатка; молчаливое обрезание запрещено. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.flip |
Параметр Flip | Отразить каждую клетку до поворота; числовые значения размещения и движения не меняются. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-flips |
Параметр FrameFlips | Один токен отражения на исходную ссылку до grid/разворачивания; исключает локальный Flip. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.rotate |
Параметр Rotate | Повернуть по часовой стрелке после отражения и до resize. Четверть оборота меняет оси изображения, сохраняя векторы размещения и движения. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-rotations |
Параметр FrameRotations | Один поворот по часовой стрелке на исходную ссылку; исключает локальный Rotate. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.canvas |
Параметр Canvas | После resize поместить изображение на прозрачный холст точного размера uint16. Изображение должно помещаться целиком; пиксели удаляет Crop. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-canvases |
Параметр FrameCanvases | Одна пара размера холста на исходную ссылку; исключает локальный Canvas. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.canvas-offset |
Параметр CanvasOffset | Неотрицательное положение от левого верхнего угла Canvas. Требует действующий Canvas и запрещает обрезание. Не меняет Offset. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-canvas-offsets |
Параметр FrameCanvasOffsets | Одна пара размещения на холсте на исходную ссылку; исключает локальный CanvasOffset. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.move |
Параметр Motion | Явная пара int16 заменяет Motion каждого развёрнутого кадра; отсутствие сохраняет импортированное движение. Независима от Offset/FrameOffsets и преобразований пикселей. Старые ключи Move/FrameMoves отклоняются до разрешения Source с временным маркером FofrmLegacyMotionKeys. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp, Source/Tools/ImageRecipe.cpp |
image-format.field.frame-moves |
Параметр FrameMotions | Одна пара движения int16 на ссылку до разворачивания. Исключает локальный Motion; не накапливается как размещение. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.resample |
Параметр Resample | Nearest копирует исходные каналы. Bilinear использует Q16-центры пикселей. Area учитывает точное рациональное покрытие при уменьшении или равном размере; увеличение запрещено. Равный размер сохраняет байты. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.pixel-usage |
Параметр PixelUsage | Color фильтрует с premultiplied alpha. Data независимо фильтрует четыре канала. Normal фильтрует знаковые RGB-векторы, нормализует целочисленным корнем, заменяет ноль на +Z и независимо фильтрует alpha. Nearest и равный размер сохраняют байты. ColorSpace запрещён для Data/Normal. Data/Normal сохраняют все каналы до выхода: alpha mesh/crop отключены, включая владельцев общих пикселей. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.color-space |
Параметр ColorSpace | Фильтрация только Color. Linear декодирует фиксированной таблицей sRGB linear16 до интерполяции premultiplied alpha, затем выбирает ближайшую запись таблицы (равенство вверх). Encoded сохраняет прежние Q16-байты. | Порядок преобразований и число исходных ссылок заданы явно. | Source/Tools/ImageTransforms.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.duration |
Параметр Duration | Положительное uint32 время всей последовательности; минимум ms на итоговый кадр. Равномерные floor-границы сохраняют сумму. Корневой Duration служит умолчанием; локальные Duration/FrameDurations заменяют его. Конфликты с Fps/FrameDurations в секции запрещены. | Размер таймлайна соответствует итоговой логической последовательности. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tests/Test_ImageTransforms.cpp |
image-format.field.frame-durations |
Параметр FrameDurations | Положительные uint32 длительности AnyData: ровно одна на итоговый кадр после выбора; сумма uint32. Только локальный список, не по ссылкам и без наследования между направлениями. Исключает Duration/Fps в своей секции. | Размер таймлайна соответствует итоговой логической последовательности. | Source/Tools/ImageBaker-Fofrm.cpp, Source/Tests/Test_ImageTransforms.cpp |