CompositorEffect

Экспериментальное: The implementation may change as more of the rendering internals are exposed over time.

Наследует: Resource < RefCounted < Object

Этот ресурс позволяет создавать индивидуальный эффект рендеринга.

Описание

Этот ресурс определяет пользовательский эффект рендеринга, который может быть применен к Viewport через Environment видовых экранов. Вы можете реализовать обратный вызов, который вызывается во время рендеринга на заданном этапе конвейера рендеринга и позволяет вставлять дополнительные проходы. Обратите внимание, что этот обратный вызов происходит в потоке рендеринга. CompositorEffect — это абстрактный базовый класс, который должен быть расширен для реализации определенной логики рендеринга.

Обучающие материалы

Свойства

bool

access_resolved_color

bool

access_resolved_depth

EffectCallbackType

effect_callback_type

bool

enabled

bool

needs_motion_vectors

bool

needs_normal_roughness

bool

needs_separate_specular

Методы

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.


Описания свойств

bool access_resolved_color 🔗

  • void set_access_resolved_color(value: bool)

  • bool get_access_resolved_color()

Если 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")

bool access_resolved_depth 🔗

  • void set_access_resolved_depth(value: bool)

  • bool get_access_resolved_depth()

Если 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 🔗

Тип реализуемого эффекта определяет, на каком этапе рендеринга будет вызван обратный вызов.


bool enabled 🔗

  • void set_enabled(value: bool)

  • bool get_enabled()

Если true, этот эффект рендеринга применяется к любой области просмотра, к которой он добавлен.


bool needs_motion_vectors 🔗

  • void set_needs_motion_vectors(value: bool)

  • bool get_needs_motion_vectors()

Если true, это запускает вычисление векторов движения во время непрозрачного состояния рендеринга.

Примечание: В _render_callback() для доступа к буферу векторов движения используйте:

var render_scene_buffers = render_data.get_render_scene_buffers()
var motion_buffer = render_scene_buffers.get_velocity_texture()

bool needs_normal_roughness 🔗

  • void set_needs_normal_roughness(value: bool)

  • bool get_needs_normal_roughness()

Если 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 🔗

  • void set_needs_separate_specular(value: bool)

  • bool get_needs_separate_specular()

Если true, это запускает рендеринг зеркальных данных в отдельный буфер и их объединение после применения эффектов, применимо только для рендерера Forward+.


Описания метода

void _render_callback(effect_callback_type: int, render_data: RenderData) virtual 🔗

Реализуйте эту функцию с помощью своего пользовательского кода рендеринга. effect_callback_type всегда должен соответствовать типу обратного вызова эффекта, указанному вами в effect_callback_type. render_data предоставляет доступ к состоянию рендеринга, он действителен только во время рендеринга и не должен сохраняться.