{{tag>igde editor particle}}
[[:start|Start Page]] >> [[:gamedev|Game Development with the Drag[en]gine]] >> [[gamedev:deigde|Drag[en]gine Integrated Game Development Environment]] >> **Particle Emitter Editor**
====== IGDE Particle Emitter Editor ======
The particle emitter editor allows to edit [[gamedev:particleemitters|Particle Emitters]] for your game.
{{:gamedev:deigde:editors:editor_pemitter.jpg?direct&400|Particle emitter preview}}
{{youtube>V8i5MSrWfDk?medium}}
The editor window composes of the preview view, properties panel on the left side and the property curves on the bottom side.
====== Preview view ======
The preview window shows the preview of the particle emitter. See [[gamedev:deigde:editors:3dviewnavigation|3D-View Navigation]] for how to navigate the view.
====== Property Curves ======
This view shows the selected **Property Curves**. See [[gamedev:deigde:editors:widgetbeziercurve|Bezier Curve Editor]] for usage.
Each property has multiple curves that can be defined. Defined curves are marked with a plus sign, undefined curves with a minus sign.
The **Value** curve is used to calculate the property value at the time a particle is cast. The input of the curve is the **Controller Value** parameter from the **Type -> Parameters** panel. The output is used as parameter value.
The **Spread** curve is used to calculate the spread applied to the property value at the time a particle is cast. The input of the curve is the **Controller Spread** parameter from the **Type -> Parameters** panel. The output is added to the cast value (which can be from the above curve).
The **Progress** curve is used to calculate the property value of a cast particle relative to its lifetime. When particles are cast they are assigned a life-time (property value hence it can be dynamic). The input of the curve is the relative elapsed time since the particle has been cast (0 input value) and when it will die (1 input value). The output value is used as parameter value for the particle. If progress curve is used the value and spread curve are not used.
The **Beam** curve is used only if the particle type is of **Beam** type. The input of the curve is the relative distance of the particle along the beam (0 input value at start, 1 input value at end). The output value is used as parameter value for the particle. If beam curve is used the progress, value and spread curve are not used.
====== Type ======
{{ :gamedev:deigde:editors:editor_pemitter_type.png?nolink|Type panel}}
Particle emitters can have one or more **Particle Types**. Each type describes one kind of particles to emit with their own properties.
**Emitter Sub Panel**
Sets preview parameters of the particle emitter and are not type specific nor saved to file.
The **Emit Burst** determines if the particle emitter emits a burst of particles. If enabled particle emitter emits particles once immediately after being enabled with particle count taken from the //Particle Count// parameter. If disabled particles are cast continuously. Each time a particle is cast (and at the beginning when first enabled) the next cast interval is calculated from the //Interval// parameter. Once the time elapses particles are cast with the particle count taken from the //Particle Count// parameter.
The **Lifetime** defines the lifetime in seconds of particles in burst mode only. For regular particles the //Time To Live// parameter is used.
**Type Sub Panel**
The **Type** parameter is the display name of the type. Use the button next to it to show a context menu to add and remove types.
The **Skin** parameter defines the **Skin** resource to use for particles of this type.
The **Model** parameter defines an optional **Model** resource. If used particles are cast using the model geometry as source depending on the cast from value used. The model itself is not visible and can be used to cast particles from irregular shapes. If the model is not used particles are cast from the emitter position.
The **Model Skin** parameter defines the **Skin** resource to use for the cast model. This allows to modify casting behavior in greater detail using [[gamedev:skinproperties|Skin Texture Properties]].
The **Cast From** parameter defines how particles are cast from the cast model if used. Supported are **Vertex** to cast from model vertices, **Face** to cast from model surface or **Volume** to cast from enclosed model volume. Particles are evenly distributed across the potential source locations.
The **Simulation Type** parameter defines what type of particles are cast. Supported are the tapes **Particle**, **Ribbon** and **Beam**.
The **Particle** cast individual particles vanishing after their lifespan elapses.
The **Ribbon** type creates one ribbon geometry composing of all cast particles in the order they have been cast. The particles thus define a path the ribbon follows. Ribbon type is typically used for trails or tracers.
The **Interval As Distance** is used by ribbon types. By default the interval parameter defines the time span in seconds between casting particles. If this parameter is enabled the interval parameter is changed to define the distance in meters between casting particles. This is used to make ribbons trailing behind moving objects. If the object is not moving and this parameter is disabled particles will be generated in regular intervals at the same location which can cause troubles. If enabled new particles will only be cast if the object moves a certain distance.
The **Physics Size** parameter defines the radius of the collision sphere assigned to each particle. The physics size is usually 50% of the visual particle size.
**Trail Sub Panel**
Assigns a particle emitter to be used as trail for cast particles. An example are explosion debris which have a smoke trail behind them.
The **Emitter** parameter defines the particle emitter to use.
The **Controller** parameter defines the named controller in the trail emitter to assign particle attributes to. This allows to adjust the trail emitter depending on the particle state. For example if a controller name is set for //Linear Velocity// then the controller value will be set to the linear velocity of the particle.
**Collision Sub Panel**
The **Response** parameter defines how particles behavior colliding with other geometry. Supported are **Destroy** to destroy the particle and remove it, **Physical Response** to bounce particles physically or **Custom Response** to let game scripts calculate an appropriate collision response.
The **Emitter** parameter defines an optional particle emitter to use upon collisions. Emitter is used in burst mode.
The **Min Impulse** parameter defines the minimum impact impulse [Ns] before an emitter instance is created.
The **Controller** parameter defines the named controller in the collision emitter to assign particle attributes to. This allows to adjust the collision emitter depending on dynamic input. For example if a controller name is set for //Linear Velocity// then the controller value will be set to the linear velocity of the particle.
**Parameters Sub Panel**
Shows the list of all supported parameters for the particle type. Parameters with one or more curves defined are shown with a plus sign. All parameters with no curves defined are shown with a minus sign.
The **Cast Range** parameter defines the range of the cast value for newly cast particles. The cast value is randomly picked from between an including **castValue-range -> castValue+range**.
The **Cast Spread** parameter defines the spread applied to the cast value for newly cast particles. The spread is added to the cast value.
The **Controller Value** parameter defines the controller to use as input for the //Value Curve//. If not set 0-input is used for the curve.
The **Controller Spread** parameter defines the controller to use as input for the //Spread Curve//. If not set 0-input is used for the curve.
====== Controllers ======
{{ :gamedev:deigde:editors:editor_pemitter_controller.png?nolink|Controller panel}}
Controllers are used by game programmers to adjust the particle emitter. In general the artist defines the controller ranges but game programmers can overrule them to make their live easier. This does not interfere with the particle parameters. The output of the controller is the **Value** linearly mapped from the range **Minimum Value -> Maximum Value** to the range **0 -> 1**.
Controllers are typically accessed by the game developer using the unique **Controller Name** (case sensitive). This allows to mix and match different animators with differing controller setups (count, ordering and ranges) as long as the required names are present.
The controller list is an ordered list. For this reason controllers are shown with their index number too. Game developers can use this index number as an alternative to controller names.
The **Clamp value to range** check box determines if the input value is clamped to the controller range or wraps around if going past the range.
The **Freeze controller value** is used only for preview purpose to stop a controller from updating its value dynamically.
====== View ======
{{ :gamedev:deigde:editors:editor_pemitter_view.png?nolink|View panel}}
The **Camera** panel shows the parameters of the camera in the preview view. The values can be manually edited.
The **Sky** panel defines the **Sky** resource to use in the preview view.
The **Environment Object** panel defines the **Object Class** to use as environment the particle emitter is previewed in.
The **Preview** panel defines parameters of the particle emitter preview caster. The emitter casts along the Z-axis (blue arrow, x/right=red, y/up=green).
The **Burst Interval** defines the time in seconds before the preview particle emitter is reset. This is used on burst type emitters only.
The **Warm-Up Time** can be used to simulate an emitter in a running state. This avoids the need to wait for a couple of seconds to test emitters in running condition.
The **Enable Casting** enables particle casting. Toggle this on and off to check how the emitter behaves.