FOnline Engine
Current master GitHub
Документация Docs/ru/reference/effect-format/syntax.md

Синтаксис файла эффекта

Сгенерированный справочник. Не редактируйте его напрямую. Обновите BuildTools/EffectFormatInterface.json, затем выполните python BuildTools/docs_effect_format.py --write.

Индекс Синтаксис Состояние рендеринга Ресурсы Запекание Runtime Проверка Канонический JSON Руководство

Минимальный однопроходный эффект содержит обязательную секцию конфигурации и одну пару вершинного/фрагментного шейдера:

[Effect]

[VertexShader]
layout(set = 0, binding = 0, std140) uniform ProjBuf { mat4 ProjMatrix; };
layout(location = 0) in vec3 InPosition;
void main(void) { gl_Position = ProjMatrix * vec4(InPosition, 1.0); }

[FragmentShader]
layout(location = 0) out vec4 FragColor;
void main(void) { FragColor = vec4(1.0); }
Стабильный ID Секция Требование Причина Источник
effect-format.section.effect [Effect] Каждый исходный файл .fofx должен содержать секцию Effect. В ней хранятся число проходов, версия шейдера, выбор теневого прохода и состояние рендеринга по умолчанию или для отдельных проходов. И baker, и runtime-загрузчик отклоняют исходный файл без этой секции. Source/Tools/EffectBaker.cpp, Source/Frontend/Rendering.cpp
effect-format.section.shader-common [ShaderCommon] ShaderCommon содержит необязательный исходный текст шейдера, добавляемый после пролога Engine перед обеими стадиями каждого прохода. Это единственный блок повторного использования на уровне формата; parser .fofx не поддерживает директиву include. Source/Tools/EffectBaker.cpp
effect-format.section.vertex [VertexShader] and [VertexShader PassN] Для каждого объявленного прохода нужен непустой текст вершинного шейдера. Baker сначала читает VertexShader PassN, а при пустой секции прохода использует общую секцию VertexShader. Общая вершинная стадия может обслуживать все проходы, а выбранные проходы могут её переопределять. Source/Tools/EffectBaker.cpp
effect-format.section.fragment [FragmentShader] and [FragmentShader PassN] Для каждого объявленного прохода нужен непустой текст фрагментного шейдера. Baker сначала читает FragmentShader PassN, а при пустой секции прохода использует общую секцию FragmentShader. Многопроходные эффекты часто совместно используют обработку геометрии и различаются только фрагментной стадией. Source/Tools/EffectBaker.cpp
Введите запрос.