[x3d-public] Proposal for New Fields for ParticleSystem

Don Brutzman don.brutzman at gmail.com
Wed Nov 5 18:04:32 PST 2025


Dick Puk and I reviewed this possible change in the specification editors
call today.  Makes sense, once again thanks.

One necessary change, particleLifetime needs to have type SFTime vice
SFFloat.

   - The *particleLifetime* field specifies the nominal duration in seconds
   of any particle.

Also adjusted bounds on the three key fields to range [0,1].  I've improved
the prose, committed to version control and updated the website.

   - X3D Architecture draft v4.1, clause 40 Particle systems component,
   40.4.5 ParticleSystem
   -
   https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/components/particleSystems.html#ParticleSystem

40.4.5 ParticleSystem

ParticleSystem : X3DShapeNode {
  SFNode   [in,out] appearance        NULL      [X3DAppearanceNode]
  SFBool   [in,out] bboxDisplay       FALSE
  SFBool   [in,out] castShadow        TRUE
  SFBool   [in,out] createParticles   TRUE
  SFNode   [in,out] geometry          NULL      [X3DGeometryNode]
  SFBool   [in,out] enabled           TRUE
  SFFloat  [in,out] lifetimeVariation 0.25      [0,1]
  SFInt32  [in,out] maxParticles      200       [0,∞)
  SFNode   [in,out] metadata          NULL      [X3DMetadataObject]
  SFTime   [in,out] particleLifetime  5         [0,∞) SFFloat
  SFVec2f  [in,out] particleSize      0.02 0.02 [0,∞)
  SFBool   [in,out] visible           TRUE
  SFBool   [out]    isActive
  SFVec3f  []       bboxCenter        0 0 0
  SFVec3f  []       bboxSize          -1 -1 -1  [0,∞) or -1 -1 -1
  SFNode   []       color             NULL      [X3DColorNode]
  MFFloat  []       colorKey          []        [0,1] [0,∞)
  SFNode   []       emitter           NULL      [X3DParticleEmitterNode]
  SFString []       geometryType      "QUAD"
["LINE"|"POINT"|"QUAD"|"SPRITE"|"TRIANGLE"|"GEOMETRY"|...]
  MFNode   []       physics           []        [X3DParticlePhysicsModelNode]
  SFNode   []       scale             NULL      [X3DCoordinateNode]
  MFFloat  []       scaleKey          []        [0,1]
  SFNode   []       texCoord          NULL
[TextureCoordinate|TextureCoordinateGenerator]
  MFFloat  []       texCoordKey       []        [0,1] [0,∞)
}

Review and improvement are always welcome.

all the best, Don
-- 
X3D Graphics, Maritime Robotics, Distributed Simulation
Relative Motion Consulting  https://RelativeMotion.info


On Tue, Nov 4, 2025 at 3:40 PM Don Brutzman <don.brutzman at gmail.com> wrote:

> John: please be aware that
>
>    - The use of pseudorandom values for scale or color, as outlined in my
>    prior message to you, is simply an author option that does not affect the
>    proposed design refinements of the ParticleSet node.  Authors can create
>    any set of values they want for modifying particle color, scale, and
>    texture coordinates for various geometry types.  This is a big palette to
>    create with!
>    - If you want to do GPU programming, please do so.  X3D has a Shaders
>    component, which Holger mentioned to you last week.  We are not expanding
>    the scope of ParticleSet requirements, but merely adding some extra
>    enhancements which are straightforward and simple to integrate.
>
> Holger:
>
>    - I too like the idea of consistent design (with all of other X3D
>    animation) by making the key parameters normalized to a float range of
>    [0,1] and letting lifetimeVariation modify the time interval.  In addition
>    to common design, it also helps authors to more easily create consistent
>    controls for all of their time-varying animation.
>    - This approach also avoids any mismatch between MFloat typing,
>    keeping such values as floats and not time intervals, thus avoiding any
>    backwards-compatibility issues (that can be troublesome for specifications
>    and implementations).
>    - Thank you for pointing out that texCoord/texCoordKey fields are also
>    part of this mix.
>    - I will work on adjusting the draft prose in the proposed change and
>    report back when ready for further review.  Dick and I will also discuss in
>    an upcoming Specification Editors meeting.
>
> Have fun with X3D ParticleSet!
>
> all the best, Don
> --
> X3D Graphics, Maritime Robotics, Distributed Simulation
> Relative Motion Consulting  https://RelativeMotion.info
>
>
> On Mon, Nov 3, 2025 at 8:50 PM John Carlson <yottzumm at gmail.com> wrote:
>
>> I would prefer if the pseudorandom list of scaleKey values to be created
>> as a particle system, similar to how WindPhysicsModel works, rather than
>> explicitly creating such values.  Indeed, when I tried to create
>> VariationalPhysicsModel, I used WindPhysicsModel as a basis.
>>
>> I don’t want to “swap out” Coordinate nodes, I want 6 separate
>> VariationalPhysicsModels, or 6 scaleKey fields that are like particle
>> systems.
>>
>> I realize I can use a script, but I really want to do this integrated
>> with the GPU, because JavaScript computation of surface coordinates on the
>> surface is way too slow.  The 6 scale keys are key to generating the
>> surface.   If I have any hope of scaling this up to thousands of surfaces,
>> it’s got to be on the GPU.    That is, I’ve got to have any randomness
>> ultimately on the GPU, or pseudorandom numbers streamed to the GPU.
>>
>> A whole another aspect is having the 6 scaleKey current values controlled
>> by multiple users, but that’s a whole another project.
>>
>> John
>>
>> On Sun, Nov 2, 2025 at 7:45 PM Don Brutzman via x3d-public <
>> x3d-public at web3d.org> wrote:
>>
>>> John, it is straightforward to generate a pseudorandom list of scale
>>> values using the *scale/scaleKey* field definitions that Holger has
>>> recommended.
>>>
>>>    - Create a Coordinate node that has a list of individual SFVec3f
>>>    scale values in the MFVec3f Coordinate.points field.  As Holger indicated,
>>>    you can sample that using however many *scaleKey *intervals you want.
>>>    - If one jittery Coordinate node isn't enough for you, you can
>>>    generate more than one and swap them out.
>>>    - Generation of such pseudorandom Coordinate nodes can be done
>>>    programmatically at authoring time.
>>>    - Generation of such pseudorandom Coordinate nodes can also be done
>>>    at run time using a Script node.
>>>
>>> Hopefully the draft specification prose helps untangle this.  The
>>> 3-tuple scale values go into the Coordinate node points field, and
>>> a scaleKey array lists corresponding time in seconds for each transition.
>>>
>>> There is a lot of expressive power here.  Have fun with X3D ParticleSet
>>> particle scaling!   😀
>>>
>>> all the best, Don
>>> --
>>> X3D Graphics, Maritime Robotics, Distributed Simulation
>>> Relative Motion Consulting  https://RelativeMotion.info
>>> _______________________________________________
>>> x3d-public mailing list
>>> x3d-public at web3d.org
>>> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20251105/fc00dd68/attachment.html>


More information about the x3d-public mailing list