FOnline
Формат fo3d

Общая информация

Формат fo3d - это текстовый формат описания трехмерных объектов. Редактируется, соответственно, с помощью любого текстового редактора.

По ходу описания будут встречаться ссылки в квадратных скобках - [X], их содержание расположено ниже, перед примерами.

Для передачи данных используются различные модификаторы (ключи и значения). Строка с начала комментария (';', '#') игнорируются до ее окончания. Регистр модификаторов значения не имеет.

Для удобства соотношения некоторых номеров и имен смотрите скрипт _animations.fos.

Условные обозначения передаваемых параметров:
FileName - имя файла или пути и файла, путь может быть как полным, так и относительным;
IntegerValue - целое значение (0, 1, 22);
FloatValue - вещественное значение (0.0, 1.2, 22.1);
IntegerArray - массив целых чисел, перечисляется через знак '-', без пробелов, то есть 1-2-5-8;
FloatArray - массив вещественных чисел, перечисляется через знак '-', без пробелов, то есть 1.3-2.6-5.2-8.0, так же есть возможность их указания как целые числа (1-2.5-4-7);
String - строка, без пробелов;
Anim1Weapon [1] - тип оружия для анимации;
AnimationName [1] - имя анимации.

Модификаторы

Model FileName [2]

Указывает на базовую модель, поддерживаемые форматы: x, 3ds. Если файл содержит анимацию и дополнительно не указан модификатор model_animation, то будет использоваться данная анимация.

Include FileName From1 To1 From2 To2 FromN ToN

Указание файла, который будет вставлен в данном месте. Данный механизм предназначен для облегчения описания множества однотипных fo3d файлов. Суть состоит в том, что текст шаблона добавляется в место вызова модификатора, а затем там заменяются определенные идентификаторы. Идентификаторы перечисляются сразу после названия файла шаблона, сначала какое слово будет заменяться, затем на которое. В шаблоне заменяемый идентификатор должен быть расположен между знаками процента ('%'). Данный модификатор использует всю строку для определения передаваемых параметров, не используйте в ней другие модификаторы.

DisableShadow [2]

Отключение отрисовки тени.

CalculateTangentSpace [2]

Включение расчета касательного пространства, тангента и бинормали, которые можно использовать в эффектах, см. файл IOStructures.inc.

MoveX, MoveY, MoveZ FloatValue [3][6]

Перемещение модели по одной из оси. По-умолчанию равны 0.0.

RotX, RotY, RotX FloatValue [3][6]

Вращение модели по одной из оси. В градусах. По-умолчанию равны 0.0.

Scale, ScaleX, ScaleY, ScaleZ FloatValue [3][6]

Масштабирование модели по одной из оси или сразу по всем трем (Scale). По-умолчанию равны 1.0.

Speed FloatValue [3][6]

Изменение скорости воспроизведения анимации. По-умолчанию равно 1.0.

DisableLayer IntegerArray [3][8]

Включение игнорирование обработки определенных слоев. Значения перечисляются через знак '-'.
Воспринимаются именованные константы из файла DefineNames.fos.

DisableSubset IntegerArray [3][8]

Включение игнорирование отрисовки определенных частей модели (материалов). Значения перечисляются через знак '-'.
Воспринимаются именованные константы из файла DefineNames.fos.

Mesh IntegerValue [4]

Установка значения текущего меша, на которые будут действовать такие модификаторы, как Texture, Effect.
Воспринимаются именованные константы из файла DefineNames.fos.

Subset IntegerValue [4]

Установка значения части меша. При установке отрицательного значения дальнейшие модификаторы будут влиять на все части текущего меша, а не какой-то определенной.

Texture 0..9 FileName [5][9]

Установка определенной текстуры для аналогичных переменных в самом эффекте. Но, значение 0 так же указывает на базовую текстуру (цветовую, диффузную) текущего меша и части.
Воспринимаются именованные константы из файла DefineNames.fos.

Effect FileName [5][9]

Установка определенного эффекта для текущего выбранного меша и части.

EffDef String String String/FloatArray/IntegerValue

Передать определенное значение в эффект. Модификатор действует на эффект, указанный в последнем использованном модификаторе Effect. Передаются тип (String, Floats, Dword), имя параметра в файле эффекте и значение (в зависимости от типа - строка, массив вещественных чисел, целое значение).
Воспринимаются именованные константы из файла DefineNames.fos (для Dword).

Layer IntegerValue [7]

Установка определенного слоя.
Воспринимаются именованные константы из файла DefineNames.fos.

Value IntegerValue [7]

Установка определенного значения слоя. Когда значение слоя будет равно данному, то все модификаторы, описанные в нем, начинают действовать.
Воспринимаются именованные константы из файла DefineNames.fos.

Attach FileName [3][7]

Присоединение определенной модели к базовой. Допустимые форматы: x, 3ds, fo3d (то есть возможно рекурсивное подключение, будьте внимательны). По умолчанию модели линкуются между собой по совпадающим именам костей у обоих. Если требуется точное указание к какой кости линковать рутовую кость, то используйте модификатор Link (см. ниже).

Link String [3][7]

Линковка другой модели к текущей, с указанием куда линковать. То есть {Подключаемая модель Root-Bone} -> {Текущая модель String-Bone}. Данный модификатор действует только для прикрепленной модели (пока она не будет снята или выбрана другая).

Root [3][7]

Установка базовой модели для применения других модификаторов.

Anim Anim1Weapon AnimationName AnimFile String [1]

Данный модификатор используется для связывания имен анимаций с индексами, для дальнейшего использования в скриптах.
В AnimFile указывается имя файла, откуда она будет взята (если указать “ModelFile”, то поиск будет производиться в файле загружаемой модели)
В String указывается имя или порядковый номер анимации.

AnimSpeed Anim1Weapon AnimationName FloatValue [1]

Модификатор для указания скорости определенной анимации.

AnimEquals IntegerValue Anim1Weapon AnimationName [1]

Добавление алиасов для индексов анимации, чтобы не делать лишний копи-паст. IntegerValue - номер индекса, 1 или 2;

RenderFrame AnimFile String IntegerValue [2]

Отрисовка определенного кадра в спрайт. Используется, когда идет вывод пререндеренной модели.
В AnimFile указывается имя файла, откуда она будет взята (если указать “ModelFile”, то поиск будет производиться в файле загружаемой модели)
В String указывается имя или порядковый номер анимации. IntegerValue означает процент (0..100) времени анимации, с которого и будет произведен рендер.

RenderFrames AnimFile String IntegerValue IntegerValue [2]

Отрисовка определенной анимации в спрайт. Используется, когда идет вывод пререндеренной модели.
В AnimFile указывается имя файла откуда она будет взята (если указать “ModelFile”, то поиск будет производиться в файле загружаемой модели)
В String указывается имя или порядковый номер анимации. Первый IntegerValue означает процент (0..100) начала времени анимации, второй IntegerValue процент конечного кадра. Может быть использован обратный вывод, когда второе значение меньше первого. Частота кадров анимации берется из глобальной переменной __Animation3dFPS, если она равна нулю, то берется значение 10.

StopParsing, ContinueParsing

Остановка и возобновление обработки файла.

Примечания

  1. Имена задаются в файле DefineNames.lst Примеры:
    Anim Anim1Unarmed Anim2PickUp ModelFile HumM_Def_Una_Pickup_01
    Anim Anim1HeavyRifle Anim2Single anim_HumanMaleRifle.x rifle_shoot
  2. Данные модификаторы используются только один раз, при многократном использовании данные будут взяты у последнего встретившегося.
  1. По умолчанию данные модификаторы влияют на параметры базовой модели (см. Model). Модель меняется в следующих случаях:
  1. Данные модификаторы (Mesh, Subset) сбрасываются при применении модификаторов Root, Layer, Value, Attach. Значения сброса: Mesh = 0, Subset = -1.
  1. Данные модификаторы (Texture, Effect) устанавливают необходимое значение (текстуру, эффект) для меша и частей меша установленных модификаторами Mesh и Subset. Сначала надо указать номер меша и части, а потом ставить текстуру или эффект, по умолчанию стоят Mesh = 0 и Subset = -1.
  1. При добавлении к имени модификатора знака '+' оно будет добавляться к предыдущему значению, а не присваиваться. Например, ScaleX 1.5 ScaleX 0.5 в итоге дадут 0.5, а ScaleX 1.5 ScaleX+ 0.5 дадут 2.0. Аналогично можно использовать знак '*', что означает умножение на предыдущее значение.
  1. Данные модификаторы сейчас применяются для описания изменений модели при изменении значений слоев, которое происходит в скриптах (см. animation3d_process в client_main.fos). Доступно только для трехмерных моделей криттеров.
  1. Для чего необходимо отключать определенные слои или части тела - для того, что бы они не конфликтовали между собой при стечении определенных обстоятельств. Например, если один из слоев отвечает за вывод волос, то в слое головных уборов, при определенных его значениях (большая шляпа закрывающая всю голову), можно отключит слой волос. Или при выводе сапог могут просвечиваться части ног, то лучше отключить эту часть тела при их одевании.
  1. В передаваемом аргументе имени файла можно передать строку "Parent", что будет означать взятие текстуры у базовой модели. Можно дополнительно указывать номер меша и его часть, с которой будет взята текстура - Texture X ParentY-Z, где X номер текстуры, Y номер меша, Z номер части меша; параметры Y-Z опциональны, можно не использовать или использовать частично (то есть Parent, Parent0, Parent-5).

Примеры:

Parsing

Model model.3ds ; Загрузка модели
Scale 2.0 ; Увеличиваем в два раза
StopParsing ; Останавливаем парсинг
Здесь можем писать что угодно, весь текст будет пропущен.
Scale 0.5 # Не будет обработано, масштаб по-прежнему 2.0
ContinueParsing # Продолжаем парсинг
Scale+ 1.1 # Добавляем к масштабу, теперь там 3.1
#Scale 1.0 # Обработано не будет, так как находится за комментарием

Include

some1.fo3d

Include _SomeTemplate.fo3d name some1 number 11

some2.fo3d

Include _SomeTemplate.fo3d name some2 number 22
Include _SomeTemplate.fo3d name some2aaa number 33

_SomeTemplate.fo3d

Model ATR_%name%_%number%.3ds

После применения модификатора Include файлы будут выглядеть следующим образом: some1.fo3d

Model ATR_some1_11.3ds

some2.fo3d

Model ATR_some2_22.3ds
Model ATR_some2aaa_33.3ds

Textures, Normal mapping

Обычный вывод. "Mesh 0" в данном случае избыточен, он и так по-умолчанию 0, поставлен для примера.
Пример находится в "Client\data\art\misc\3d\box\simple.fo3d"

Model Box.3ds
Mesh 0 Subset 0 Texture 0 DED.tga
Mesh 0 Subset 1 Texture 0 DrD.tga

Рисование с использованием карты нормалей.
Пример находится в "Client\data\art\misc\3d\box\nmap.fo3d"

Model Box.3ds
CalculateTangentSpace
Subset 0 Texture 0 DED.tga
Subset 0 Texture 1 DEN.tga
Subset 1 Texture 0 DrD.tga
Subset 1 Texture 1 DIntrN.tga
Subset -1 Effect 3D_NormalMapping.fx

Frames render

Рендер одного спрайта в середине анимации использования. Без тени.
Пример находится в "Client\data\art\misc\3d\dclaw\frame.fo3d"

Model ..\..\..\critters\CR_Deathclaw.x
DisableShadow
RenderFrame ModelFile CR_Deathclaw_Def_Una_Use_01 50

Рендер анимации, с начала и до конца. Увеличена в два раза.
Пример находится в "Client\data\art\misc\3d\dclaw\frames.fo3d"

Model ..\..\..\critters\CR_Deathclaw.x
Scale 2.0
RenderFrames ModelFile CR_Deathclaw_Com_Una_Knock_ProneB_01 0 100

Effects

Установка эффекта, передача параметров

Model SomeModel.3ds
Effect 3D_MyEffect.fx
EffDef Floats MyValues 1.4-0.05-6-7.7
EffDef Floats AnotherValue 59.51243

В самом эффекте данные переменные будут иметь вышеуказанные значения

float4 MyValues; // MyValues.x == 1.4f
// MyValues.y == 0.05f
// MyValues.z == 6.0f
// MyValues.w == 7.7f
float AnotherValue; // == 59.51243
Converted from CHM to HTML with chm2web Pro 2.85 (unicode)