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枚举的大小。
属性说明¶
如果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提供对渲染状态的访问,它仅在渲染期间有效,不应存储。