<div dir="ltr"><div>Dick Puk and I reviewed this possible change in the specification editors call today. Makes sense, once again thanks.</div><div><br></div><div>One necessary change, particleLifetime needs to have type SFTime vice SFFloat.</div><div><ul><li>The <i>particleLifetime</i> field specifies the nominal duration in seconds of any particle.</li></ul><div>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. </div></div><div><ul><li>X3D Architecture draft v4.1, clause 40 Particle systems component, 40.4.5 ParticleSystem</li><li><a href="https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/components/particleSystems.html#ParticleSystem">https://www.web3d.org/specifications/X3Dv4Draft/ISO-IEC19775-1v4.1-CD/Part01/components/particleSystems.html#ParticleSystem</a></li></ul><div><h2 style="font-size:20.8px;margin-top:18px;color:rgb(0,0,0);font-family:Verdana,Arial,Helvetica,sans-serif"><span class="gmail-proposed" title="Mantis 1519" style="background-color:yellow">40.4.5 ParticleSystem</span></h2><pre class="gmail-node" style="color:rgb(0,0,0);font-size:11.05px;margin-left:25px">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]
<span class="gmail-proposed" title="Mantis 1519" style="background-color:yellow">SFTime</span> [in,out] particleLifetime 5 [0,∞) <span class="gmail-proposedDeletion" title="Mantis 1519" style="background-color:orange;text-decoration-line:line-through">SFFloat</span>
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 [] <span class="gmail-proposed" title="Mantis 1519" style="background-color:yellow">[0,1]</span> <span class="gmail-proposedDeletion" title="Mantis 1519" style="background-color:orange;text-decoration-line:line-through">[0,∞)</span>
SFNode [] emitter NULL [X3DParticleEmitterNode]
SFString [] geometryType "QUAD" ["LINE"|"POINT"|"QUAD"|"SPRITE"|"TRIANGLE"|"GEOMETRY"|...]
MFNode [] physics [] [X3DParticlePhysicsModelNode]
<span class="gmail-proposed" title="Mantis 1519" style="background-color:yellow">SFNode [] scale NULL [X3DCoordinateNode]</span>
<span class="gmail-proposed" title="Mantis 1519" style="background-color:yellow">MFFloat [] scaleKey [] [0,1]</span>
SFNode [] texCoord NULL [TextureCoordinate|TextureCoordinateGenerator]
MFFloat [] texCoordKey [] <span class="gmail-proposed" title="Mantis 1519" style="background-color:yellow">[0,1]</span> <span class="gmail-proposedDeletion" title="Mantis 1519" style="background-color:orange;text-decoration-line:line-through">[0,∞)</span>
}</pre></div><div>Review and improvement are always welcome.</div></div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><br></div><div style="color:rgb(34,34,34)"><font face="monospace">all the best, Don</font></div><div style="color:rgb(34,34,34)"><font face="monospace">-- </font></div><div style="color:rgb(34,34,34)"><font face="monospace">X3D Graphics, Maritime Robotics, Distributed Simulation</font></div><div style="color:rgb(34,34,34)"><font face="monospace">Relative Motion Consulting <a href="https://RelativeMotion.info" target="_blank">https://RelativeMotion.info</a></font></div></div></div></div><br></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Tue, Nov 4, 2025 at 3:40 PM Don Brutzman <<a href="mailto:don.brutzman@gmail.com">don.brutzman@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>John: please be aware that</div><div><ul><li>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!</li><li>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.</li></ul><div>Holger:</div></div><div><ul><li>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.</li><li>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).</li><li>Thank you for pointing out that texCoord/texCoordKey fields are also part of this mix.</li><li>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.</li></ul></div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><font face="arial, sans-serif">Have fun with X3D ParticleSet!</font></div><div style="color:rgb(34,34,34)"><font face="monospace"><br></font></div><div style="color:rgb(34,34,34)"><font face="monospace">all the best, Don</font></div><div style="color:rgb(34,34,34)"><font face="monospace">-- </font></div><div style="color:rgb(34,34,34)"><font face="monospace">X3D Graphics, Maritime Robotics, Distributed Simulation</font></div><div style="color:rgb(34,34,34)"><font face="monospace">Relative Motion Consulting <a href="https://RelativeMotion.info" target="_blank">https://RelativeMotion.info</a></font></div></div></div></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 3, 2025 at 8:50 PM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">I would prefer if the pseudorandom list of scaleKey values to be created as a particle system, similar to how WindPhysicsModel<span style="font-family:-apple-system,sans-serif"> works, rather than explicitly creating such values. Indeed, when I tried to create VariationalPhysicsModel, I used WindPhysicsModel as a basis.</span></div><div dir="auto"><span style="font-family:-apple-system,sans-serif"><br></span></div><div dir="auto"><span style="font-family:-apple-system,sans-serif">I don’t want to “swap out” Coordinate nodes, I want 6 separate VariationalPhysicsModels, or 6 scaleKey fields that are like particle systems.</span></div><div dir="auto"><span style="font-family:-apple-system,sans-serif"><br></span></div><div dir="auto"><span style="font-family:-apple-system,sans-serif">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.</span></div><div dir="auto"><span style="font-family:-apple-system,sans-serif"><br></span></div><div dir="auto"><span style="font-family:-apple-system,sans-serif">A whole another aspect is having the 6 scaleKey current values controlled by multiple users, but that’s a whole another project.</span></div><div dir="auto"><span style="font-family:-apple-system,sans-serif"><br></span></div><div dir="auto">John </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Nov 2, 2025 at 7:45 PM Don Brutzman via x3d-public <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div>John, it is straightforward to generate a pseudorandom list of scale values using the <i>scale/scaleKey</i> field definitions that Holger has recommended.</div><div><ul><li>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 <i>scaleKey </i>intervals you want.</li><li>If one jittery Coordinate node isn't enough for you, you can generate more than one and swap them out.</li><li>Generation of such pseudorandom Coordinate nodes can be done programmatically at authoring time.</li><li>Generation of such pseudorandom Coordinate nodes can also be done at run time using a Script node.</li></ul><div>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.</div><div><br></div><div>There is a lot of expressive power here. Have fun with X3D ParticleSet particle scaling! 😀</div></div></div></div><div dir="ltr"><div dir="ltr"><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div style="color:rgb(34,34,34)"><font face="monospace"><br></font></div><div style="color:rgb(34,34,34)"><font face="monospace">all the best, Don</font></div><div style="color:rgb(34,34,34)"><font face="monospace">-- </font></div><div style="color:rgb(34,34,34)"><font face="monospace">X3D Graphics, Maritime Robotics, Distributed Simulation</font></div><div style="color:rgb(34,34,34)"><font face="monospace">Relative Motion Consulting <a href="https://RelativeMotion.info" target="_blank">https://RelativeMotion.info</a></font></div></div></div></div></div></div>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div></div>
</blockquote></div>
</blockquote></div>