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

Expérimental : The implementation may change as more of the rendering internals are exposed over time.

Hérite de : Resource < RefCounted < Object

Cette ressource permet de créer un effet de rendu personnalisé.

Description

Cette ressource définit un effet de rendu personnalisé qui peut être appliqué à des Viewports par l'intermédiaire de l'environnement Environment. Vous pouvez implémenter un callback qui est appelé lors du rendu à une étape donnée de la pipeline de rendu et vous permet d'insérer des passes supplémentaires. Notez que cet appel se produit sur le thread de rendu. CompositorEffect est une classe de base abstraite et doit être étendue pour implémenter une logique de rendu spécifique.

Tutoriels

Propriétés

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

Méthodes

void

_render_callback(effect_callback_type: int, render_data: RenderData) virtual


Énumérations

enum EffectCallbackType: 🔗

EffectCallbackType EFFECT_CALLBACK_TYPE_PRE_OPAQUE = 0

Le callback est appelé avant notre passe de rendu opaque, mais après la pré-passe de profondeur (le cas échéant).

EffectCallbackType EFFECT_CALLBACK_TYPE_POST_OPAQUE = 1

Le callback est appelé après notre passe de rendu opaque, mais avant que notre ciel soit rendu.

EffectCallbackType EFFECT_CALLBACK_TYPE_POST_SKY = 2

Le callback est appelé après que notre ciel soit rendu, mais avant que nos buffers arrières soient créés (et si activés, avant la transluminescence et/ou les réflexions de l'espace-écran).

EffectCallbackType EFFECT_CALLBACK_TYPE_PRE_TRANSPARENT = 3

The callback is called before our transparent rendering pass, but after our sky is rendered and we've created our back buffers.

EffectCallbackType EFFECT_CALLBACK_TYPE_POST_TRANSPARENT = 4

The callback is called after our transparent rendering pass, but before any built-in post-processing effects and output to our render target.

EffectCallbackType EFFECT_CALLBACK_TYPE_MAX = 5

Représente la taille de l'énumération EffectCallbackType.


Descriptions des propriétés

bool access_resolved_color 🔗

  • void set_access_resolved_color(value: bool)

  • bool get_access_resolved_color()

If true and MSAA is enabled, this will trigger a color buffer resolve before the effect is run.

Note: In _render_callback(), to access the resolved buffer use:

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

If true and MSAA is enabled, this will trigger a depth buffer resolve before the effect is run.

Note: In _render_callback(), to access the resolved buffer use:

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 🔗

Le type d'effet qui est implémenté, détermine à quel stade du rendu le callback est appelé.


bool enabled 🔗

  • void set_enabled(value: bool)

  • bool get_enabled()

Si true, cet effet de rendu est appliqué à tout viewport auquel il est ajouté.


bool needs_motion_vectors 🔗

  • void set_needs_motion_vectors(value: bool)

  • bool get_needs_motion_vectors()

If true this triggers motion vectors being calculated during the opaque render state.

Note: In _render_callback(), to access the motion vector buffer use:

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

If true this triggers normal and roughness data to be output during our depth pre-pass, only applicable for the Forward+ renderer.

Note: In _render_callback(), to access the roughness buffer use:

var render_scene_buffers = render_data.get_render_scene_buffers()
var roughness_buffer = render_scene_buffers.get_texture("forward_clustered", "normal_roughness")

The raw normal and roughness buffer is stored in an optimized format, different than the one available in Spatial shaders. When sampling the buffer, a conversion function must be applied. Use this function, copied from here:

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

If true this triggers specular data being rendered to a separate buffer and combined after effects have been applied, only applicable for the Forward+ renderer.


Descriptions des méthodes

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

Implémentez cette fonction avec votre code de rendu personnalisé. effect_callback_type doit toujours correspondre au type du callback d'effet que vous avez spécifié dans effect_callback_type. render_data donne accès à l'état du rendu, il n'est valable que pendant le rendu et ne doit pas être stocké.