X3DParticleEmitterNode : X3DNode {
  SFFloat [in,out] speed       0    [0,Inf)
  SFFloat [in,out] variation   0.25 [0,Inf)
  SFFloat []       mass        0    [0,Inf)
  SFFloat []       surfaceArea 0    [0,Inf)
}

X3DParticlePhysicsModelNode : X3DNode { 
  SFBool [in,out] enabled  TRUE
}

BoundedPhysicsModel : X3DParticlePhysicsModelNode { 
  SFNode [in,out] geometry NULL [X3DGeometryNode]
}

ConeEmitter : X3DParticleEmitterNode { 
  SFFloat [in,out] angle       Pi/4   [0,Pi]
  SFVec3f [in,out] direction   0 1 0 
  SFVec3f [in,out] position    0 0 0
}

ExplosionEmitter : X3DParticleEmitterNode { 
  SFVec3f [in,out] position    0 0 0
}

GravityPhysicsModel : X3DParticlePhysicsModelNode { 
  SFVec3f [in,out] force    0 -9.8 0 (Inf,Inf)
}

ParticleSystem : X3DShapeNode { 
  SFBool   [in,out] createParticles   TRUE
  SFBool   [in,out] enabled           TRUE
  SFFloat  [in,out] lifetimeVariation 0.25      [0,1]
  SFInt32  [in,out] maxParticles      200       [0,Inf)
  SFFloat  [in,out] particleLifetime  5         [0,Inf)
  SFVec2f  [in,out] particleSize      0.02 0.02 [0,Inf)
  SFBool   [out]    isActive
  SFNode   []       colorRamp         NULL      [X3DColorNode]
  MFFloat  []       colorKey          NULL      [0,Inf)
  SFNode   []       emitter           NULL      [X3DParticleEmitterNode]
  SFString []       geometryType      "QUAD"    ["LINE"|"POINT"|"QUAD"|"SPRITE"|"TRIANGLE"|"GEOMETRY"|...]
  MFNode   []       physics           []        [X3DParticlePhysicsModelNode]
  SFNode   []       texCoordRamp      NULL      [TextureCoordinate]
  MFFloat  []       texCoordKey       []        [0,Inf)
}

PointEmitter : X3DParticleEmitterNode { 
  SFVec3f [in,out] direction   0 1 0
  SFVec3f [in,out] position    0 0 0
}

PolylineEmitter : X3DParticleEmitterNode { 
  SFInt32 [in]     set_coordinate
  SFNode  [in,out] coord         NULL  [X3DCoordinateNode]
  SFVec3f [in,out] direction      0 1 0 [-1,1]
  MFInt32 []       coordIndex     -1    [0,Inf) or -1
}

SurfaceEmitter : X3DParticleEmitterNode { 
  SFInt32 [in]     set_coordinate
  MFInt32 []       coordIndex     -1    [0,Inf) or -1
  SFNode  []       surface        NULL  [X3DGeometryNode]
}

VolumeEmitter : X3DParticleEmitterNode { 
  SFInt32 [in]     set_coordinate
  SFNode  [in,out] coord         NULL  [X3DCoordinateNode]
  SFVec3f [in,out] direction      0 1 0 [-1,1]
  MFInt32 []       coordIndex     -1    [0,Inf) or -1
  SFBool  []       internal       TRUE
}

WindPhysicsModel : X3DParticlePhysicsModelNode { 
  SFVec3f [in,out] direction  0 0 0 (Inf,Inf)
  SFFloat [in,out] gustiness  0.1   [0,Inf)
  SFFloat [in,out] speed      0.1   [0,Inf)
  SFFloat [in,out] turbulence 0     [0,1]
}

