Manual Спецификация формата fo3d

Автор темы #1
Дата рег
6 Фев 2011
Сообщения
6
Симпатии
55
Общая информация

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

По ходу описания будут встречаться ссылки в квадратных скобках - [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 - строка, без пробелов;
AnimIndex1 [1] - первый индекс анимации (состояние/оружие);
AnimIndex2 [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]
Включение игнорирование обработки определенных слоев. Значения перечисляются через знак '-'.

DisableSubset IntegerArray [3][8]
Включение игнорирование отрисовки определенных частей модели (материалов). Значения перечисляются через знак '-'.

Mesh IntegerValue [4]
Установка значения текущего меша, на которые будут действовать такие модификаторы, как Texture, Effect.

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

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

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

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

Layer IntegerValue [7]
Установка определенного слоя.

Value IntegerValue [7]
Установка определенного значения слоя. Когда значение слоя будет равно данному, то все модификаторы описанные в нем, начинают действовать.

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

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

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

Anim AnimIndex1 AnimIndex2 FileName String [1][10]
Данный модификатор используется для связывания имен анимаций с индексами, для дальнейшего использования в скриптах. В FileName указывается имя файла анимации. В String указывается имя или порядковый номер анимации.

AnimSpeed AnimIndex1 AnimIndex2 FloatValue [1]
Модификатор для указания скорости определенной анимации.

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

RenderFrame FileName String IntegerValue [2][10]
Отрисовка определенного кадра в спрайт. Используется когда идет вывод пререндеренной модели. В FileName указывается имя файла анимации. В String указывается имя или порядковый номер анимации. IntegerValue означает процент (0..100) времени анимации, с которого и будет произведен рендер.

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

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

Примечания

1. Значения могут использоваться как цифровые (1, 2, 5, 20), так и буквы английского алфавита (A, B, E, T).
Таблица соответствия:

Код:
_  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
2. Данные модификаторы используются только один раз, при многократном использовании данные будут взяты у последнего встретившегося.

3. По-умолчанию данные модификаторы влияют на параметры базовой модели (см. Model). Модель меняется в следующих случаях:
- при модификаторе Attach прикрепленная модель становится выбранной;
- при модификаторе Root выбирается базовая модель;
- при модификаторах Layer, Value выбранная модель снимается и другие модификаторы станут работать впустую;
- при некоторых ошибках модель может сняться, например, когда выбираем Root, но стоит нулевое значение Value.

4. Данные модификаторы (Mesh, Subset) сбрасываются при применении модификаторов Root, Layer, Value, Attach. Значения сброса: Mesh = 0, Subset = -1.

5. Данные модификаторы (Texture, Effect) устанавливают необходимое значение (текстуру, эффект) для меша и частей меша установленных модификаторами Mesh и Subset. Сначала надо указать номер меша и части, а потом ставить текстуру или эффект, по-умолчанию стоят Mesh = 0 и Subset = -1.

6. При добавлении к имени модификатора знака '+' оно будет добавляться к предыдущему значению, а не присваиваться. Например, ScaleX 1.5 ScaleX 0.5 в итоге дадут 0.5, а ScaleX 1.5 ScaleX+ 0.5 дадут 2.0. Аналогично можно использовать знак '*', что означает умножение на предыдущее значение.

7. Данные модификаторы сейчас применяются для описания изменений модели при изменении значений слоев, которое происходит в скриптах (см. animation3d_process в client_main.fos). Доступно только для трехмерных моделей криттеров.

8. Для чего необходимо отключать определенные слои или части тела - для того, что бы они не конфликтовали между собой при стечении определенных обстоятельств.
Например, если один из слоев отвечает за вывод волос, то в слое головных уборов, при определенных его значениях (большая шляпа закрывающая всю голову), можно отключит слой волос.
Или при выводе сопог могут просвечиваться часть ноги, то лучше отключить эту часть тела при их одевании.

9. В передаваемом аргументе имени файла можно передать строку "ParentY-Z", что будет означать взятие текстуры у базовой модели. Дополнительные параметры - Y номер меша, Z номер части меша. Параметры Y-Z опциональны, можно не использовать или использовать частично (т.е. Parent, Parent0, Parent-5). По-умолчанию данные параметры равны нулю.

10. В аргументе имени файла можно передать "ModelFile", это значит, что имя будет взято из модификатора Model.

Примеры

Parsing
Код:
Model model.3ds ; Загрузка модели
Scale 2.0 ; Увеличиваем в два раза
StopParsing ; Останавливаем парсинг
Здесь можем писать что угодно, весь текст будет пропущен.
Scale 0.5 # Не будет обработано, масштаб по-прежнему 2.0
ContinueParsing # Продолжаем парсинг
Scale+ 1.1 # Добавляем к масштабу, теперь там 2.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 CR_Deathclaw_Def_Una_Use_01 50
Рендер анимации, с начала, до конца. Увеличенной в два раза.
Пример находится в "Client\data\art\misc\3d\dclaw\frames.fo3d"
Код:
Model ..\..\..\critters\CR_Deathclaw.x
Scale 2.0
RenderFrames 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
 
Автор темы #2
Дата рег
6 Фев 2011
Сообщения
6
Симпатии
55
С 116 ревизии вступают в силу следующие изменения:

Удален модификатор ModelAnimation.

Расширены модификаторы Anim, RenderFrame, RenderFrames - теперь перед названием анимации добавляется имя файла откуда она будет взята (если указать "ModelFile", то поиск будет производиться в файле загружаемой модели).

Расширена спецификация указания текстуры родителя (Texture X Parent), теперь можно дополнительно указывать номер меша и его часть, с которой будет взята текстура - Texture X ParentY-Z, где X номер текстуры, Y номер меша, Z номер части меша; параметры Y-Z опциональны, можно не использовать или использовать частично (т.е. Parent, Parent0, Parent-5).
 
Автор темы #3
Дата рег
6 Фев 2011
Сообщения
6
Симпатии
55
С 141 ревизии вступают в силу следующие изменения:

Формат fo3d теперь воспринимает именованные константы DefineNames.fos, а именно для модификаторов Mesh, Subset, Layer, Value, DisableLayer, DisableSubset, Texture, EffDef (для Dword), Anim, AnimSpeed, AnimEqual.