Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
CompositorEffect
Экспериментальное: The implementation may change as more of the rendering internals are exposed over time.
Наследует: Resource < RefCounted < Object
Этот ресурс позволяет создавать индивидуальный эффект рендеринга.
Описание
Этот ресурс определяет пользовательский эффект рендеринга, который может быть применен к Viewport через Environment видовых экранов. Вы можете реализовать обратный вызов, который вызывается во время рендеринга на заданном этапе конвейера рендеринга и позволяет вставлять дополнительные проходы. Обратите внимание, что этот обратный вызов происходит в потоке рендеринга. CompositorEffect — это абстрактный базовый класс, который должен быть расширен для реализации определенной логики рендеринга.
Обучающие материалы
Свойства
Методы
void |
_render_callback(effect_callback_type: int, render_data: RenderData) virtual |
Перечисления
enum EffectCallbackType: 🔗
EffectCallbackType EFFECT_CALLBACK_TYPE_PRE_OPAQUE = 0
Обратный вызов выполняется перед нашим проходом рендеринга непрозрачности, но после предварительного прохода глубины (если применимо).
EffectCallbackType EFFECT_CALLBACK_TYPE_POST_OPAQUE = 1
Обратный вызов выполняется после прохода рендеринга непрозрачности, но до рендеринга неба.
EffectCallbackType EFFECT_CALLBACK_TYPE_POST_SKY = 2
Обратный вызов вызывается после того, как наше небо отрисовано, но до создания наших обратных буферов (и, если они включены, до подповерхностного рассеивания и/или отражений в пространстве экрана).
EffectCallbackType EFFECT_CALLBACK_TYPE_PRE_TRANSPARENT = 3
Обратный вызов выполняется до прохода прозрачного рендеринга, но после того, как небо отрисовано и мы создали обратные буферы.
EffectCallbackType EFFECT_CALLBACK_TYPE_POST_TRANSPARENT = 4
Обратный вызов выполняется после прохода прозрачного рендеринга, но до любых встроенных эффектов постобработки и вывода на нашу цель рендеринга.
EffectCallbackType EFFECT_CALLBACK_TYPE_MAX = 5
Представляет размер перечисления EffectCallbackType.
Описания свойств
Если true и MSAA включен, это вызовет разрешение буфера цвета перед запуском эффекта.
Примечание: В _render_callback() для доступа к разрешенному буферу используйте:
var render_scene_buffers = render_data.get_render_scene_buffers()
var color_buffer = render_scene_buffers.get_texture("render_buffers", "color")
Если true и MSAA включен, это запустит разрешение буфера глубины перед запуском эффекта.
Примечание: В _render_callback() для доступа к разрешенному буферу используйте:
var render_scene_buffers = render_data.get_render_scene_buffers()
var depth_buffer = render_scene_buffers.get_texture("render_buffers", "depth")
EffectCallbackType effect_callback_type 🔗
void set_effect_callback_type(value: EffectCallbackType)
EffectCallbackType get_effect_callback_type()
Тип реализуемого эффекта определяет, на каком этапе рендеринга будет вызван обратный вызов.
Если true, этот эффект рендеринга применяется к любой области просмотра, к которой он добавлен.
Если true, это запускает вычисление векторов движения во время непрозрачного состояния рендеринга.
Примечание: В _render_callback() для доступа к буферу векторов движения используйте:
var render_scene_buffers = render_data.get_render_scene_buffers()
var motion_buffer = render_scene_buffers.get_velocity_texture()
Если true, это запускает вывод данных нормали и шероховатости во время нашего предварительного прохода глубины, применимо только для рендерера Forward+.
Примечание: В _render_callback() для доступа к буферу шероховатости используйте:
var render_scene_buffers = render_data.get_render_scene_buffers()
var roughness_buffer = render_scene_buffers.get_texture("forward_clustered", "normal_roughness")
Необработанный буфер нормалей и шероховатости хранится в оптимизированном формате, отличном от того, который доступен в пространственных шейдерах. При сэмплировании буфера необходимо применить функцию преобразования. Используйте эту функцию, скопированную от сюда:
vec4 normal_roughness_compatibility(vec4 p_normal_roughness) {
float roughness = p_normal_roughness.w;
if (roughness > 0.5) {
roughness = 1.0 - roughness;
}
roughness /= (127.0 / 255.0);
return vec4(normalize(p_normal_roughness.xyz * 2.0 - 1.0) * 0.5 + 0.5, roughness);
}
bool needs_separate_specular 🔗
Если true, это запускает рендеринг зеркальных данных в отдельный буфер и их объединение после применения эффектов, применимо только для рендерера Forward+.
Описания метода
void _render_callback(effect_callback_type: int, render_data: RenderData) virtual 🔗
Реализуйте эту функцию с помощью своего пользовательского кода рендеринга. effect_callback_type всегда должен соответствовать типу обратного вызова эффекта, указанному вами в effect_callback_type. render_data предоставляет доступ к состоянию рендеринга, он действителен только во время рендеринга и не должен сохраняться.