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 предоставляет доступ к состоянию рендеринга, он действителен только во время рендеринга и не должен сохраняться.