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.

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 enum.


Описи властивостей

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")

Необроблений буфер нормалі та шорсткості зберігається в оптимізованому форматі, відмінному від того, який доступний у просторових шейдерах. Під час вибірки буфера необхідно застосувати функцію перетворення. Використовуйте цю функцію, скопійовану з `тут <https://github.com/godotengine/godot/blob/da5f39889f155658cef7f7ec3cc1abb94e17d815/servers/ren/renderer_rd/shaders/forward_clustered/scene_forward_clustered_inc.glsl#L334-L341>`__:
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 надає доступ до стану рендерингу, він дійсний лише під час рендерингу і не повинен зберігатися.