Obi  7.0.5
Unified particle physics for Unity
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Events Pages
Obi.ObiEmitter Class Reference
Inheritance diagram for Obi.ObiEmitter:
Obi.ObiActor Obi.IObiParticleCollection

Public Types

enum  EmissionMethod { EmissionMethod.STREAM, EmissionMethod.BURST, EmissionMethod.MANUAL }
 

Public Member Functions

delegate void EmitterParticleCallback (ObiEmitter emitter, int particleIndex)
 
override void RequestReadback ()
 
void AddShape (ObiEmitterShape shape)
 Adds a shape trough which to emit particles. This is called automatically by ObiEmitterShape. More...
 
void RemoveShape (ObiEmitterShape shape)
 Removes a shape trough which to emit particles. This is called automatically by ObiEmitterShape. More...
 
void UpdateEmitter ()
 Updates the spawn point distribution of all shapes used by this emitter. More...
 
override void SetSelfCollisions (bool selfCollisions)
 Updates particle phases in the solver at runtime, including or removing the self-collision flag. More...
 
override bool ActivateParticle ()
 Activates one particle. Specialized implementation, optimized to activate large amounts of particles per step. Does not flag active particles and simplices as dirty (which requires the solver to rebuild them), instead it appends to their end. More...
 
bool EmitParticle (float offset)
 Asks the emitter to emit a new particle. Returns whether the emission was succesful. More...
 
bool KillParticle (int index)
 Asks the emiter to kill a particle. Returns whether it was succesful. More...
 
void KillAll ()
 Kills all particles in the emitter, and returns them to the emission pool. More...
 
override void SimulationStart (float timeToSimulate, float substepTime)
 
- Public Member Functions inherited from Obi.ObiActor
delegate void ActorCallback (ObiActor actor)
 
delegate void ActorStepCallback (ObiActor actor, float simulatedTime, float substepTime)
 
delegate void ActorBlueprintCallback (ObiActor actor, ObiActorBlueprint blueprint)
 
void AddToSolver ()
 Adds this actor to its solver, if any. Automatically called by ObiSolver. More...
 
void RemoveFromSolver ()
 Remove this actor from its solver, if any. Automatically called by ObiSolver. More...
 
virtual void ProvideDeformableTriangles (ObiNativeIntList deformableTriangles, ObiNativeVector2List deformableUVs)
 
virtual void ProvideDeformableEdges (ObiNativeIntList deformableEdges)
 
virtual int GetDeformableEdgeCount ()
 
virtual bool CopyParticle (int actorSourceIndex, int actorDestIndex)
 Copies all data (position, velocity, phase, etc) from one particle to another one. More...
 
void TeleportParticle (int actorIndex, Vector3 position)
 Teleports one actor particle to a certain position in solver space. More...
 
virtual Matrix4x4 Teleport (Vector3 position, Quaternion rotation)
 Teleports the entire actor to a new location / orientation. More...
 
virtual bool DeactivateParticle (int actorIndex)
 Deactivates one particle. More...
 
virtual bool IsParticleActive (int actorIndex)
 Returns whether a given particle is active. More...
 
virtual void SetOneSided (bool oneSided)
 Updates particle phases in the solver at runtime, including or removing the one-sided flag. More...
 
void SetSimplicesDirty ()
 Marks simplices dirty. More...
 
void SetConstraintsDirty (Oni.ConstraintType constraintType)
 Marks a given constraint type as dirty. More...
 
void SetRenderingDirty (Oni.RenderingSystemType rendererType)
 Marks rendering dirty. More...
 
IObiConstraints GetConstraintsByType (Oni.ConstraintType type)
 Returns the data representation of constraints of a given type being simulated by this solver. More...
 
virtual void UpdateParticleProperties ()
 Call when some particle properties have been modified and need updating. More...
 
int GetParticleRuntimeIndex (int actorIndex)
 Returns the index of this particle in the solver arrays. More...
 
Vector3 GetParticlePosition (int solverIndex)
 Given a solver particle index, returns the position of that particle in world space. More...
 
Quaternion GetParticleOrientation (int solverIndex)
 Given a solver particle index, returns the orientation of that particle in world space. More...
 
Vector3 GetParticleRestPosition (int solverIndex)
 Given a solver particle index, returns the rest position of that particle. More...
 
Quaternion GetParticleRestOrientation (int solverIndex)
 Given a solver particle index, returns the rest orientation of that particle. More...
 
void GetParticleAnisotropy (int solverIndex, ref Vector4 b1, ref Vector4 b2, ref Vector4 b3)
 Given a solver particle index, returns the anisotropic frame of that particle in world space. More...
 
float GetParticleMaxRadius (int solverIndex)
 Given a solver particle index, returns the maximum world space radius of that particle, in any axis. More...
 
Color GetParticleColor (int solverIndex)
 Given a solver particle index, returns the color of that particle. More...
 
void SetFilterCategory (int newCategory)
 Sets a given category value for all particles in the actor. More...
 
void SetFilterMask (int newMask)
 Sets a given mask value for all particles in the actor. More...
 
void SetMass (float mass)
 Sets the inverse mass of each particle so that the total actor mass matches the one passed by parameter. More...
 
float GetMass (out Vector3 com)
 Returns the actor's mass (sum of all particle masses), and the position of its center of mass. More...
 
void AddForce (Vector3 force, ForceMode forceMode)
 Adds an external force to all particles in the actor. More...
 
void AddTorque (Vector3 force, ForceMode forceMode)
 Adds a torque to the actor. More...
 
void ResetParticles ()
 Resets the position and velocity of all particles, to the values stored in the blueprint. More...
 
bool SaveStateToBlueprint (ObiActorBlueprint bp)
 Resets the position and velocity of all particles, to the values stored in the blueprint. More...
 
void ClearState ()
 
virtual void SimulationEnd (float simulatedTime, float substepTime)
 
virtual void Interpolate (float simulatedTime, float substepTime)
 
virtual void OnSolverVisibilityChanged (bool visible)
 

Public Attributes

ObiEmitterBlueprintBase emitterBlueprint
 
EmissionMethod emissionMethod = EmissionMethod.STREAM
 Emission method used by this emitter. More...
 
float minPoolSize = 0.5f
 Minimum amount of inactive particles available before the emitter is allowed to resume emission. More...
 
float speed = 0.25f
 Speed (in meters/second) at which fluid is emitter. More...
 
float lifespan = 4
 Particle lifespan in seconds. More...
 
float randomDirection = 0
 Amount of randomness added to particle direction when emitted. More...
 
float inheritVelocity = 0
 Amount of emitter velocity inherited by the fluid. More...
 
bool useShapeColor = true
 Use the emitter shape color to tint particles upon emission. More...
 
- Public Attributes inherited from Obi.ObiActor
ObiNativeIntList solverIndices
 Index of each one of the actor's particles in the solver. More...
 
List< int >[] solverBatchOffsets
 For each of the actor's constraint types, offset of every batch in the solver. More...
 
int groupID = 0
 

Protected Member Functions

override void Awake ()
 
override void OnDestroy ()
 
override void OnValidate ()
 
- Protected Member Functions inherited from Obi.ObiActor
virtual void OnEnable ()
 
virtual void OnDisable ()
 
void SetSolver (ObiSolver newSolver)
 Forcibly changes the solver in charge of this actor More...
 
void SetMassScale (float scale)
 Sets the mass of all particles in the actor to their blueprint values, multiplied by a scale factor. More...
 
virtual void OnBlueprintRegenerate (ObiActorBlueprint blueprint)
 
void UpdateCollisionMaterials ()
 
virtual void SwapWithFirstInactiveParticle (int actorIndex)
 
void StoreState ()
 

Properties

override ObiActorBlueprint sourceBlueprint [get]
 The base actor blueprint used by this actor. More...
 
int Filter [get, set]
 Collision filter value used by fluid particles. More...
 
bool isEmitting [get, set]
 Whether the emitter is currently emitting particles. More...
 
override bool surfaceCollisions = false [get, set]
 Whether to use simplices (triangles, edges) for contact generation. More...
 
override bool usesAnisotropicParticles [get]
 Whether this actor makes use of particle anisotropy More...
 
- Properties inherited from Obi.ObiActor
int deformableEdgesOffset [get, set]
 
ObiSolver solver [get]
 The solver in charge of simulating this actor. More...
 
bool isLoaded [get]
 True if the actor blueprint has been loaded into a solver. If true, it guarantees actor.solver, actor.solverIndices and actor.solverBatchOffsets won't be null. More...
 
ObiCollisionMaterial collisionMaterial [get, set]
 The collision material being used by this actor. More...
 
virtual bool surfaceCollisions [get, set]
 Whether to use simplices (triangles, edges) for contact generation. More...
 
float massScale [get, set]
 Scale applied to this actor's particle masses. More...
 
int particleCount [get]
 Amount of particles allocated by this actor. More...
 
int activeParticleCount [get]
 Amount of particles in use by this actor. More...
 
bool usesOrientedParticles [get]
 Whether this actors makes use of particle orientations or not. More...
 
virtual bool usesAnisotropicParticles [get]
 If true, it means particles may not be completely spherical, but ellipsoidal. More...
 
Oni.SimplexType simplexTypes [get]
 
Matrix4x4 actorLocalToSolverMatrix [get]
 Matrix that transforms from the actor's local space to the solver's local space. More...
 
Matrix4x4 actorSolverToLocalMatrix [get]
 Matrix that transforms from the solver's local space to the actor's local space. More...
 
abstract ObiActorBlueprint sourceBlueprint [get]
 Reference to the blueprint asset used by this actor. More...
 
ObiActorBlueprint sharedBlueprint [get]
 Reference to the blueprint in use by this actor. More...
 
ObiActorBlueprint blueprint [get]
 Returns a unique instance of this actor's sourceBlueprint. More...
 
- Properties inherited from Obi.IObiParticleCollection
int particleCount [get]
 
int activeParticleCount [get]
 
bool usesOrientedParticles [get]
 

Events

EmitterParticleCallback OnEmitParticle
 
EmitterParticleCallback OnKillParticle
 
- Events inherited from Obi.ObiActor
ActorBlueprintCallback OnBlueprintLoaded
 Called when the actor blueprint has been loaded into the solver. More...
 
ActorBlueprintCallback OnBlueprintUnloaded
 Called when the actor blueprint has been unloaded from the solver. More...
 
ActorBlueprintCallback OnBlueprintRegenerated
 Called when the blueprint currently in use has been re-generated. This will always be preceded by a call to OnBlueprintUnloaded and OnBlueprintLoaded. More...
 
ActorStepCallback OnSimulationStart
 Called before simulation starts. More...
 
ActorStepCallback OnSimulationEnd
 Called after simulation ends. More...
 
ActorCallback OnRequestReadback
 You can use this callback to issue GPU->CPU readbacks. More...
 
ActorStepCallback OnInterpolate
 Called at the end of each frame, after interpolation but before rendering. More...
 

Additional Inherited Members

- Protected Attributes inherited from Obi.ObiActor
int m_ActiveParticleCount = 0
 
ObiSolver m_Solver
 
bool m_Loaded = false
 
ObiCollisionMaterial m_CollisionMaterial
 
bool m_SurfaceCollisions = false
 
float m_MassScale = 1
 

Member Enumeration Documentation

Enumerator
STREAM 

Continously emits particles until there are no particles left to emit.

BURST 

Emits a single burst of particles from the emitter, and does not emit any more until all alive particles have died.

MANUAL 

Will not automatically emit particles. The user needs to call EmitParticle() manually.

Member Function Documentation

override bool Obi.ObiEmitter.ActivateParticle ( )
virtual

Activates one particle. Specialized implementation, optimized to activate large amounts of particles per step. Does not flag active particles and simplices as dirty (which requires the solver to rebuild them), instead it appends to their end.

Returns
True if a particle could be activated. False if there are no particles to activate.

This operation preserves the relative order of all particles.

Reimplemented from Obi.ObiActor.

void Obi.ObiEmitter.AddShape ( ObiEmitterShape  shape)

Adds a shape trough which to emit particles. This is called automatically by ObiEmitterShape.

bool Obi.ObiEmitter.EmitParticle ( float  offset)

Asks the emitter to emit a new particle. Returns whether the emission was succesful.

Parameters
offsetDistance from the emitter surface at which the particle should be emitted.
Returns
If at least one particle was in the emission pool and it could be emitted, will return true. False otherwise.
void Obi.ObiEmitter.KillAll ( )

Kills all particles in the emitter, and returns them to the emission pool.

bool Obi.ObiEmitter.KillParticle ( int  index)

Asks the emiter to kill a particle. Returns whether it was succesful.

Returns
True if the particle could be killed. False if it was already inactive.
void Obi.ObiEmitter.RemoveShape ( ObiEmitterShape  shape)

Removes a shape trough which to emit particles. This is called automatically by ObiEmitterShape.

override void Obi.ObiEmitter.SetSelfCollisions ( bool  selfCollisions)
virtual

Updates particle phases in the solver at runtime, including or removing the self-collision flag.

Reimplemented from Obi.ObiActor.

void Obi.ObiEmitter.UpdateEmitter ( )

Updates the spawn point distribution of all shapes used by this emitter.

Member Data Documentation

EmissionMethod Obi.ObiEmitter.emissionMethod = EmissionMethod.STREAM

Emission method used by this emitter.

Can be either STREAM or BURST.

float Obi.ObiEmitter.inheritVelocity = 0

Amount of emitter velocity inherited by the fluid.

float Obi.ObiEmitter.lifespan = 4

Particle lifespan in seconds.

Particles older than this value will become inactive and go back to the solver's emission pool, making them available for reuse.

float Obi.ObiEmitter.minPoolSize = 0.5f

Minimum amount of inactive particles available before the emitter is allowed to resume emission.

float Obi.ObiEmitter.randomDirection = 0

Amount of randomness added to particle direction when emitted.

float Obi.ObiEmitter.speed = 0.25f

Speed (in meters/second) at which fluid is emitter.

Note this affects both the speed and the amount of particles emitted per second, to ensure flow is as smooth as possible. Set it to zero to deactivate emission.

bool Obi.ObiEmitter.useShapeColor = true

Use the emitter shape color to tint particles upon emission.

Property Documentation

int Obi.ObiEmitter.Filter
getset

Collision filter value used by fluid particles.

bool Obi.ObiEmitter.isEmitting
getset

Whether the emitter is currently emitting particles.

override ObiActorBlueprint Obi.ObiEmitter.sourceBlueprint
get

The base actor blueprint used by this actor.

This is the same as emitterBlueprint.

override bool Obi.ObiEmitter.surfaceCollisions = false
getset

Whether to use simplices (triangles, edges) for contact generation.

override bool Obi.ObiEmitter.usesAnisotropicParticles
get

Whether this actor makes use of particle anisotropy

In case of fluid, this is true as particles adapt their shape to fit the fluid's surface.


The documentation for this class was generated from the following file: