Документация
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 |