Material File Format

From Ciliz|W4
Other languages:
English • ‎русский

Scope

Материал является частью W4 Engine Material System. Значения параметров шейдера, которые будут использоваться по-умолчанию для всех инстансов этого материала, а так же указания для рендера (блендинг) и текстуры (враппинг и фильтрация) могут быть заданы в файле материала (.mat).

Detailed Description

File Structure

Пример файла .mat:

 {
     "vertexFile" : "<path from the project root directory to the vertex shader file (.vs)>",
     "fragmentFile" : "<path from the project root directory to the fragment shader file(.fs)>",
     ["blending" : <enable blending (true/false)>,]
     ["blending" : {"src" : "<blending function for the result of your shader>", "dst" : "<blending function for background>"},]
     "params" : {
         "texture0": {"type": "TEXTURE", "data": {"path": "<path from the project root directory to the texture file>", "type": "file"}[, "sWrapping": "{Repeat|MirroredRepeat|ClampToEdge}"][, "tWrapping" : "{Repeat|MirroredRepeat|ClampToEdge}"][, "filtering": "{Level0|Level1|Level2|Level3}"]},
         "texture1": {"type": "TEXTURE", "data": {"generator": "[default] color", "params": {"type": "Vec4", "value": { "x": 1.0, "y": 1.0 , "z": 1.0, "w": 1.0 }}, "type": "generator"}},
         "cubemap0": {"type": "CUBEMAP", "data": {
                 "0": {"path": "<path from the project root directory to the X+ texture file>", "type": "file"},
                 "1": {"path": "<path from the project root directory to the X- texture file>", "type": "file"},
                 "2": {"path": "<path from the project root directory to the Y+ texture file>", "type": "file"},
                 "3": {"path": "<path from the project root directory to the Y- texture file>", "type": "file"},
                 "4": {"path": "<path from the project root directory to the Z+ texture file>", "type": "file"},
                 "5": {"path": "<path from the project root directory to the Z- texture file>", "type": "file"}
             }
         },
         "intParam": { "type": "INT", "data": -42 },
         "floatParam": { "type": "BOOL", "data": 3.14159259 },
         "boolParam": { "type": "BOOL", "data": true },
         "vec2Param": { "type": "VEC2", "data": { "x": 0.1, "y": 0.2 }},
         "vec3Param": { "type": "VEC3", "data": { "x": 0.1, "y": 0.2 , "z": 0.3 }},
         "vec4Param": { "type": "VEC4", "data": { "x": 0.1, "y": 0.2 , "z": 0.3, "w": 0.4 }}
     }
 }

Следующие значения являются обязательными:

  • vertexFile
  • fragmentFile

Всё остальное опционально.

Hints

1) Чтобы не задавать одни и те же параметры из кода, можно в файле материала задать значения по умолчанию для любого параметра. Они будут выставляться для каждого нового MatInstance. Поддерживаются следующие типы параметров: INT, FLOAT, BOOL, VEC2, VEC3, VEC4, TEXTURE и СUBEMAP.

2) По умолчанию прозрачность у материала выключена. Её можно включить двумя способами:

  • Установить ключ "blending" в значение "true". В этом случае для материала выставятся функции SRC_ALPHA для результата шейдера и ONE_MINUS_SRC_ALPHA для фона.
  • Добавить JSON-запись с ключом "blending" (см. выше структуру файла), содержащую значения "src" и "dst" соответственно. Возможные варианты значений: ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR, SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR, CONSTANT_ALPHA, ONE_MINUS_CONSTANT_ALPHA, SRC_ALPHA_SATURATE.

3) Запись для типов TEXTURE и CUBEMAP состоит из следующих пар ключ-значение:

  • type - TEXTURE или CUBEMAP .
  • "data" - описание источника данных (для типа CUBEMAP "data" содержит 6 источников данных, обозначаемых цифрами от 0 до 6 (соответственно X+, X-, Y+, Y-, Z+, Z-)). Описание может быть определено любым из следующих способов:
  1. Через файл с ключами "path" и "type"="file" .
  2. Через генератор вкомпилированный в движок. В этом случае используются ключи "generator" (type=generator) и "params" (собственно параметры генератора). На момент написания статьи доступен только один генератор, которому задается параметр типа Vec4 (не путать с vec4). Генератор может использоваться для создания текстуры одного цвета - "[default] color".
  • Опциональное поле "sWrapping" для задания типа заполнения текстурой (Repeat, MirroredRepeat, ClampToEdge) по координате S .
  • Опциональное поле "tWrapping" для задания типа заполнения текстурой (Repeat, MirroredRepeat, ClampToEdge) по координате T .
  • Опциональное поле "filtering" для задания режима фильтрации текстуры (Level0 - Level3).