2017-09-12 22:42:36 +02:00
<?xml version="1.0" encoding="UTF-8" ?>
2023-07-06 10:08:05 +02:00
<class name= "GPUParticles3D" inherits= "GeometryInstance3D" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "../class.xsd" >
2017-09-12 22:42:36 +02:00
<brief_description >
2023-06-24 13:19:58 +02:00
A 3D particle emitter.
2017-09-12 22:42:36 +02:00
</brief_description>
<description >
2020-03-30 18:22:57 +02:00
3D particle node used to create a variety of particle systems and effects. [GPUParticles3D] features an emitter that generates some number of particles at a given rate.
2023-10-02 20:11:43 +02:00
Use [member process_material] to add a [ParticleProcessMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles.
2017-09-12 22:42:36 +02:00
</description>
<tutorials >
2023-08-15 12:14:01 +02:00
<link title= "Particle systems (3D)" > $DOCS_URL/tutorials/3d/particles/index.html</link>
2021-11-15 10:43:07 +01:00
<link title= "Controlling thousands of fish with Particles" > $DOCS_URL/tutorials/performance/vertex_animation/controlling_thousands_of_fish.html</link>
2020-10-01 10:34:47 +02:00
<link title= "Third Person Shooter Demo" > https://godotengine.org/asset-library/asset/678</link>
2017-09-12 22:42:36 +02:00
</tutorials>
<methods >
<method name= "capture_aabb" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "AABB" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Returns the axis-aligned bounding box that contains all the particles that are active in the current frame.
2017-09-12 22:42:36 +02:00
</description>
</method>
2023-08-19 10:55:49 +02:00
<method name= "convert_from_particles" >
<return type= "void" />
<param index= "0" name= "particles" type= "Node" />
<description >
Sets this node's properties to match a given [CPUParticles3D] node.
</description>
</method>
2020-09-11 12:22:10 +02:00
<method name= "emit_particle" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "xform" type= "Transform3D" />
<param index= "1" name= "velocity" type= "Vector3" />
<param index= "2" name= "color" type= "Color" />
<param index= "3" name= "custom" type= "Color" />
<param index= "4" name= "flags" type= "int" />
2020-09-11 12:22:10 +02:00
<description >
2022-08-12 18:07:53 +02:00
Emits a single particle. Whether [param xform], [param velocity], [param color] and [param custom] are applied depends on the value of [param flags]. See [enum EmitFlags].
2020-09-11 12:22:10 +02:00
</description>
</method>
2019-06-27 16:10:09 +02:00
<method name= "get_draw_pass_mesh" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Mesh" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "pass" type= "int" />
2019-06-27 16:10:09 +02:00
<description >
2022-08-12 18:07:53 +02:00
Returns the [Mesh] that is drawn at index [param pass].
2019-06-27 16:10:09 +02:00
</description>
</method>
2017-09-12 22:42:36 +02:00
<method name= "restart" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-04 02:57:57 +02:00
Restarts the particle emission, clearing existing particles.
2017-09-12 22:42:36 +02:00
</description>
</method>
2019-06-27 16:10:09 +02:00
<method name= "set_draw_pass_mesh" >
2021-07-30 15:28:05 +02:00
<return type= "void" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "pass" type= "int" />
<param index= "1" name= "mesh" type= "Mesh" />
2019-06-27 16:10:09 +02:00
<description >
2022-08-12 18:07:53 +02:00
Sets the [Mesh] that is drawn at index [param pass].
2019-06-27 16:10:09 +02:00
</description>
</method>
2017-09-12 22:42:36 +02:00
</methods>
<members >
2019-06-29 12:38:01 +02:00
<member name= "amount" type= "int" setter= "set_amount" getter= "get_amount" default= "8" >
2017-10-03 21:30:32 +02:00
Number of particles to emit.
2017-09-12 22:42:36 +02:00
</member>
2023-08-13 13:08:52 +02:00
<member name= "amount_ratio" type= "float" setter= "set_amount_ratio" getter= "get_amount_ratio" default= "1.0" >
The ratio of particles that should actually be emitted. If set to a value lower than [code]1.0[/code], this will set the amount of emitted particles throughout the lifetime to [code]amount * amount_ratio[/code]. Unlike changing [member amount], changing [member amount_ratio] while emitting does not affect already-emitted particles and doesn't cause the particle system to restart. [member amount_ratio] can be used to create effects that make the number of emitted particles vary over time.
[b]Note:[/b] Reducing the [member amount_ratio] has no performance benefit, since resources need to be allocated and processed for the total [member amount] of particles regardless of the [member amount_ratio].
</member>
2020-10-12 10:57:54 +02:00
<member name= "collision_base_size" type= "float" setter= "set_collision_base_size" getter= "get_collision_base_size" default= "0.01" >
</member>
2020-03-30 18:22:57 +02:00
<member name= "draw_order" type= "int" setter= "set_draw_order" getter= "get_draw_order" enum= "GPUParticles3D.DrawOrder" default= "0" >
2019-12-06 23:09:20 +01:00
Particle draw order. Uses [enum DrawOrder] values.
2023-08-14 19:29:25 +02:00
[b]Note:[/b] [constant DRAW_ORDER_INDEX] is the only option that supports motion vectors for effects like TAA. It is suggested to use this draw order if the particles are opaque to fix ghosting artifacts.
2017-09-12 22:42:36 +02:00
</member>
2019-07-15 20:42:47 +02:00
<member name= "draw_pass_1" type= "Mesh" setter= "set_draw_pass_mesh" getter= "get_draw_pass_mesh" >
2018-06-03 03:45:30 +02:00
[Mesh] that is drawn for the first draw pass.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 21:22:15 +02:00
<member name= "draw_pass_2" type= "Mesh" setter= "set_draw_pass_mesh" getter= "get_draw_pass_mesh" >
2018-06-03 03:45:30 +02:00
[Mesh] that is drawn for the second draw pass.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 21:22:15 +02:00
<member name= "draw_pass_3" type= "Mesh" setter= "set_draw_pass_mesh" getter= "get_draw_pass_mesh" >
2018-06-03 03:45:30 +02:00
[Mesh] that is drawn for the third draw pass.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 21:22:15 +02:00
<member name= "draw_pass_4" type= "Mesh" setter= "set_draw_pass_mesh" getter= "get_draw_pass_mesh" >
2018-06-03 03:45:30 +02:00
[Mesh] that is drawn for the fourth draw pass.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "draw_passes" type= "int" setter= "set_draw_passes" getter= "get_draw_passes" default= "1" >
2018-06-03 03:45:30 +02:00
The number of draw passes when rendering particles.
2017-09-12 22:42:36 +02:00
</member>
2021-05-01 10:56:32 +02:00
<member name= "draw_skin" type= "Skin" setter= "set_skin" getter= "get_skin" >
</member>
2020-09-04 10:43:11 +02:00
<member name= "emitting" type= "bool" setter= "set_emitting" getter= "is_emitting" default= "true" >
2023-07-20 22:03:59 +02:00
If [code]true[/code], particles are being emitted. [member emitting] can be used to start and stop particles from emitting. However, if [member one_shot] is [code]true[/code] setting [member emitting] to [code]true[/code] will not restart the emission cycle until after all active particles finish processing. You can use the [signal finished] signal to be notified once all active particles finish processing.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "explosiveness" type= "float" setter= "set_explosiveness_ratio" getter= "get_explosiveness_ratio" default= "0.0" >
2019-06-29 15:24:23 +02:00
Time ratio between each emission. If [code]0[/code], particles are emitted continuously. If [code]1[/code], all particles are emitted simultaneously.
2017-09-12 22:42:36 +02:00
</member>
2021-05-01 10:56:32 +02:00
<member name= "fixed_fps" type= "int" setter= "set_fixed_fps" getter= "get_fixed_fps" default= "30" >
2022-10-20 04:09:17 +02:00
The particle system's frame rate is fixed to a value. For example, changing the value to 2 will make the particles render at 2 frames per second. Note this does not slow down the simulation of the particle system itself.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "fract_delta" type= "bool" setter= "set_fractional_delta" getter= "get_fractional_delta" default= "true" >
2019-06-29 15:24:23 +02:00
If [code]true[/code], results in fractional delta calculation which has a smoother particles display effect.
2017-09-12 22:42:36 +02:00
</member>
2023-08-13 13:08:52 +02:00
<member name= "interp_to_end" type= "float" setter= "set_interp_to_end" getter= "get_interp_to_end" default= "0.0" >
Causes all the particles in this node to interpolate towards the end of their lifetime.
[b]Note[/b]: This only works when used with a [ParticleProcessMaterial]. It needs to be manually implemented for custom process shaders.
</member>
2021-05-01 10:56:32 +02:00
<member name= "interpolate" type= "bool" setter= "set_interpolate" getter= "get_interpolate" default= "true" >
2022-03-01 19:59:49 +01:00
Enables particle interpolation, which makes the particle movement smoother when their [member fixed_fps] is lower than the screen refresh rate.
2021-05-01 10:56:32 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "lifetime" type= "float" setter= "set_lifetime" getter= "get_lifetime" default= "1.0" >
2019-06-29 15:24:23 +02:00
Amount of time each particle will exist.
2017-09-12 22:42:36 +02:00
</member>
2022-06-09 17:38:07 +02:00
<member name= "local_coords" type= "bool" setter= "set_use_local_coordinates" getter= "get_use_local_coordinates" default= "false" >
If [code]true[/code], particles use the parent node's coordinate space (known as local coordinates). This will cause particles to move and rotate along the [GPUParticles3D] node (and its parents) when it is moved or rotated. If [code]false[/code], particles use global coordinates; they will not move or rotate along the [GPUParticles3D] node (and its parents) when it is moved or rotated.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "one_shot" type= "bool" setter= "set_one_shot" getter= "get_one_shot" default= "false" >
2023-10-02 20:11:43 +02:00
If [code]true[/code], only the number of particles equal to [member amount] will be emitted.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "preprocess" type= "float" setter= "set_pre_process_time" getter= "get_pre_process_time" default= "0.0" >
2018-06-03 03:45:30 +02:00
Amount of time to preprocess the particles before animation starts. Lets you start the animation some time after particles have started emitting.
2017-09-12 22:42:36 +02:00
</member>
2019-07-15 20:42:47 +02:00
<member name= "process_material" type= "Material" setter= "set_process_material" getter= "get_process_material" >
2022-08-18 11:09:22 +02:00
[Material] for processing particles. Can be a [ParticleProcessMaterial] or a [ShaderMaterial].
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "randomness" type= "float" setter= "set_randomness_ratio" getter= "get_randomness_ratio" default= "0.0" >
2019-06-29 15:24:23 +02:00
Emission randomness ratio.
2017-09-12 22:42:36 +02:00
</member>
2019-06-29 12:38:01 +02:00
<member name= "speed_scale" type= "float" setter= "set_speed_scale" getter= "get_speed_scale" default= "1.0" >
2019-06-29 15:24:23 +02:00
Speed scaling ratio. A value of [code]0[/code] can be used to pause the particles.
2017-09-12 22:42:36 +02:00
</member>
2020-09-11 12:22:10 +02:00
<member name= "sub_emitter" type= "NodePath" setter= "set_sub_emitter" getter= "get_sub_emitter" default= "NodePath("")" >
</member>
2021-05-20 16:25:06 +02:00
<member name= "trail_enabled" type= "bool" setter= "set_trail_enabled" getter= "is_trail_enabled" default= "false" >
2022-11-06 21:57:08 +01:00
If [code]true[/code], enables particle trails using a mesh skinning system. Designed to work with [RibbonTrailMesh] and [TubeTrailMesh].
[b]Note:[/b] [member BaseMaterial3D.use_particle_trails] must also be enabled on the particle mesh's material. Otherwise, setting [member trail_enabled] to [code]true[/code] will have no effect.
[b]Note:[/b] Unlike [GPUParticles2D], the number of trail sections and subdivisions is set in the [RibbonTrailMesh] or the [TubeTrailMesh]'s properties.
2021-05-01 10:56:32 +02:00
</member>
2022-11-06 21:57:08 +01:00
<member name= "trail_lifetime" type= "float" setter= "set_trail_lifetime" getter= "get_trail_lifetime" default= "0.3" >
The amount of time the particle's trail should represent (in seconds). Only effective if [member trail_enabled] is [code]true[/code].
2021-05-01 10:56:32 +02:00
</member>
<member name= "transform_align" type= "int" setter= "set_transform_align" getter= "get_transform_align" enum= "GPUParticles3D.TransformAlign" default= "0" >
</member>
2019-09-24 19:45:03 +02:00
<member name= "visibility_aabb" type= "AABB" setter= "set_visibility_aabb" getter= "get_visibility_aabb" default= "AABB(-4, -4, -4, 8, 8, 8)" >
2021-01-16 16:13:33 +01:00
The [AABB] that determines the node's region which needs to be visible on screen for the particle system to be active.
Grow the box if particles suddenly appear/disappear when the node enters/exits the screen. The [AABB] can be grown via code or with the [b]Particles → Generate AABB[/b] editor tool.
2017-09-12 22:42:36 +02:00
</member>
</members>
2023-05-08 21:11:34 +02:00
<signals >
<signal name= "finished" >
<description >
Emitted when all active particles have finished processing. When [member one_shot] is disabled, particles will process continuously, so this is never emitted.
[b]Note:[/b] Due to the particles being computed on the GPU there might be a delay before the signal gets emitted.
</description>
</signal>
</signals>
2017-09-12 22:42:36 +02:00
<constants >
2017-11-24 23:16:30 +01:00
<constant name= "DRAW_ORDER_INDEX" value= "0" enum= "DrawOrder" >
2017-10-03 21:30:32 +02:00
Particles are drawn in the order emitted.
2017-09-12 22:42:36 +02:00
</constant>
2017-11-24 23:16:30 +01:00
<constant name= "DRAW_ORDER_LIFETIME" value= "1" enum= "DrawOrder" >
2017-10-03 21:30:32 +02:00
Particles are drawn in order of remaining lifetime.
2017-09-12 22:42:36 +02:00
</constant>
2021-05-20 16:25:06 +02:00
<constant name= "DRAW_ORDER_REVERSE_LIFETIME" value= "2" enum= "DrawOrder" >
</constant>
<constant name= "DRAW_ORDER_VIEW_DEPTH" value= "3" enum= "DrawOrder" >
2017-10-03 21:30:32 +02:00
Particles are drawn in order of depth.
2017-09-12 22:42:36 +02:00
</constant>
2020-09-11 12:22:10 +02:00
<constant name= "EMIT_FLAG_POSITION" value= "1" enum= "EmitFlags" >
2022-01-24 21:28:59 +01:00
Particle starts at the specified position.
2020-09-11 12:22:10 +02:00
</constant>
<constant name= "EMIT_FLAG_ROTATION_SCALE" value= "2" enum= "EmitFlags" >
2022-01-24 21:28:59 +01:00
Particle starts with specified rotation and scale.
2020-09-11 12:22:10 +02:00
</constant>
<constant name= "EMIT_FLAG_VELOCITY" value= "4" enum= "EmitFlags" >
2022-01-24 21:28:59 +01:00
Particle starts with the specified velocity vector, which defines the emission direction and speed.
2020-09-11 12:22:10 +02:00
</constant>
<constant name= "EMIT_FLAG_COLOR" value= "8" enum= "EmitFlags" >
2022-01-24 21:28:59 +01:00
Particle starts with specified color.
2020-09-11 12:22:10 +02:00
</constant>
<constant name= "EMIT_FLAG_CUSTOM" value= "16" enum= "EmitFlags" >
2022-02-10 12:00:11 +01:00
Particle starts with specified [code]CUSTOM[/code] data.
2020-09-11 12:22:10 +02:00
</constant>
2017-11-24 23:16:30 +01:00
<constant name= "MAX_DRAW_PASSES" value= "4" >
2018-06-03 03:45:30 +02:00
Maximum number of draw passes supported.
2017-09-12 22:42:36 +02:00
</constant>
2021-05-01 10:56:32 +02:00
<constant name= "TRANSFORM_ALIGN_DISABLED" value= "0" enum= "TransformAlign" >
</constant>
<constant name= "TRANSFORM_ALIGN_Z_BILLBOARD" value= "1" enum= "TransformAlign" >
</constant>
<constant name= "TRANSFORM_ALIGN_Y_TO_VELOCITY" value= "2" enum= "TransformAlign" >
</constant>
<constant name= "TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY" value= "3" enum= "TransformAlign" >
</constant>
2017-09-12 22:42:36 +02:00
</constants>
</class>