CompositorEffect

实验性: 随着时间的推移,更多的渲染内部结构会被暴露,实现可能会发生变化。

继承: Resource < RefCounted < Object

此资源允许创建自定义渲染效果。

描述

此资源定义了一个自定义渲染效果,可以通过视口的Environment应用于Viewport。您可以实现一个回调,该回调在渲染管道的给定阶段渲染期间调用,并允许您插入额外的传递。请注意,此回调发生在渲染线程上。CompositorEffects是一个抽象基类,必须扩展以实现特定的渲染逻辑。

属性

方法

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提供对渲染状态的访问,它仅在渲染期间有效,不应存储。