86 lines
5.6 KiB
XML
86 lines
5.6 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<class name="CompositorEffect" inherits="Resource" experimental="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
|
<brief_description>
|
|
This resource allows for creating a custom rendering effect.
|
|
</brief_description>
|
|
<description>
|
|
This resource defines a custom rendering effect that can be applied to [Viewport]s through the viewports' [Environment]. You can implement a callback that is called during rendering at a given stage of the rendering pipeline and allows you to insert additional passes. Note that this callback happens on the rendering thread.
|
|
[b]Note:[/b] This functionality is still experimental, there will be changes to the implementation as we expose more of the rendering internals.
|
|
</description>
|
|
<tutorials>
|
|
</tutorials>
|
|
<methods>
|
|
<method name="_render_callback" qualifiers="virtual">
|
|
<return type="void" />
|
|
<param index="0" name="effect_callback_type" type="int" />
|
|
<param index="1" name="render_data" type="RenderData" />
|
|
<description>
|
|
Implement this function with your custom rendering code. [param effect_callback_type] should always match the effect callback type you've specified in [member effect_callback_type]. [param render_data] provides access to the rendering state, it is only valid during rendering and should not be stored.
|
|
</description>
|
|
</method>
|
|
</methods>
|
|
<members>
|
|
<member name="access_resolved_color" type="bool" setter="set_access_resolved_color" getter="get_access_resolved_color">
|
|
If [code]true[/code] and MSAA is enabled, this will trigger a color buffer resolve before the effect is run.
|
|
[b]Note:[/b] In [method _render_callback], to access the resolved buffer use:
|
|
[codeblock]
|
|
var render_scene_buffers : RenderSceneBuffersRD = render_data.get_render_scene_buffers()
|
|
var color_buffer = render_scene_buffers.get_texture("render_buffers", "color")
|
|
[/codeblock]
|
|
</member>
|
|
<member name="access_resolved_depth" type="bool" setter="set_access_resolved_depth" getter="get_access_resolved_depth">
|
|
If [code]true[/code] and MSAA is enabled, this will trigger a depth buffer resolve before the effect is run.
|
|
[b]Note:[/b] In [method _render_callback], to access the resolved buffer use:
|
|
[codeblock]
|
|
var render_scene_buffers : RenderSceneBuffersRD = render_data.get_render_scene_buffers()
|
|
var depth_buffer = render_scene_buffers.get_texture("render_buffers", "depth")
|
|
[/codeblock]
|
|
</member>
|
|
<member name="effect_callback_type" type="int" setter="set_effect_callback_type" getter="get_effect_callback_type" enum="CompositorEffect.EffectCallbackType">
|
|
The type of effect that is implemented, determines at what stage of rendering the callback is called.
|
|
</member>
|
|
<member name="enabled" type="bool" setter="set_enabled" getter="get_enabled">
|
|
If [code]true[/code] this rendering effect is applied to any viewport it is added to.
|
|
</member>
|
|
<member name="needs_motion_vectors" type="bool" setter="set_needs_motion_vectors" getter="get_needs_motion_vectors">
|
|
If [code]true[/code] this triggers motion vectors being calculated during the opaque render state.
|
|
[b]Note:[/b] In [method _render_callback], to access the motion vector buffer use:
|
|
[codeblock]
|
|
var render_scene_buffers : RenderSceneBuffersRD = render_data.get_render_scene_buffers()
|
|
var motion_buffer = render_scene_buffers.get_velocity_texture()
|
|
[/codeblock]
|
|
</member>
|
|
<member name="needs_normal_roughness" type="bool" setter="set_needs_normal_roughness" getter="get_needs_normal_roughness">
|
|
If [code]true[/code] this triggers normal and roughness data to be output during our depth pre-pass, only applicable for the Forward+ renderer.
|
|
[b]Note:[/b] In [method _render_callback], to access the roughness buffer use:
|
|
[codeblock]
|
|
var render_scene_buffers : RenderSceneBuffersRD = render_data.get_render_scene_buffers()
|
|
var roughness_buffer = render_scene_buffers.get_texture("forward_clustered", "normal_roughness")
|
|
[/codeblock]
|
|
</member>
|
|
<member name="needs_separate_specular" type="bool" setter="set_needs_separate_specular" getter="get_needs_separate_specular">
|
|
If [code]true[/code] this triggers specular data being rendered to a separate buffer and combined after effects have been applied, only applicable for the Forward+ renderer.
|
|
</member>
|
|
</members>
|
|
<constants>
|
|
<constant name="EFFECT_CALLBACK_TYPE_PRE_OPAQUE" value="0" enum="EffectCallbackType">
|
|
The callback is called before our opaque rendering pass, but after depth prepass (if applicable).
|
|
</constant>
|
|
<constant name="EFFECT_CALLBACK_TYPE_POST_OPAQUE" value="1" enum="EffectCallbackType">
|
|
The callback is called after our opaque rendering pass, but before our sky is rendered.
|
|
</constant>
|
|
<constant name="EFFECT_CALLBACK_TYPE_POST_SKY" value="2" enum="EffectCallbackType">
|
|
The callback is called after our sky is rendered, but before our back buffers are created (and if enabled, before subsurface scattering and/or screen space reflections).
|
|
</constant>
|
|
<constant name="EFFECT_CALLBACK_TYPE_PRE_TRANSPARENT" value="3" enum="EffectCallbackType">
|
|
The callback is called before our transparent rendering pass, but after our sky is rendered and we've created our back buffers.
|
|
</constant>
|
|
<constant name="EFFECT_CALLBACK_TYPE_POST_TRANSPARENT" value="4" enum="EffectCallbackType">
|
|
The callback is called after our transparent rendering pass, but before any build in post effects and output to our render target.
|
|
</constant>
|
|
<constant name="EFFECT_CALLBACK_TYPE_MAX" value="5" enum="EffectCallbackType">
|
|
Represents the size of the [enum EffectCallbackType] enum.
|
|
</constant>
|
|
</constants>
|
|
</class>
|