Exploring Frost Particle Sources And Meshing Modes
The following tutorial will guide you through an exploration tour of the various particle sources supported by the FROST particle mesher. It assumes that you have followed the First Steps tutorial.
The FROST particle mesher was designed to take advantage of nearly every possible point data source available in 3ds Max, including several 3rd party plugins.
Let's create a FROST object in the scene and take a look at some of the supported sources:
- Start a new 3ds Max scene.
- Without anything selected, click on the FROST MacroScript icon and click in the viewport to define the pivot location of the FROST object, then drag while holding the left mouse button pressed to define the icon size.
Alternatively, you can go to the Command Panel's Create tab and click the Frost button in the Thinkbox category under Geometry. The FROST MacroScript icon brings you there with a single click though, so it is recommended as the best possible workflow.
RESULT: The FROST icon will appear in the viewport and will have a random wireframe color because, other than in the previous tutorial, nothing was selected to pre-define an existing source, position and color for the new object.
Geometry Vertices As Particles
FROST will accept any 3ds Max Geometry object that provides valid mesh vertices as a particle source. The geometry object does not have to provide valid topology (in other words, the faces are largely ignored).
There are very few geometry objects in 3ds Max that do not qualify - the TargetObject used by Target Cameras, Lights and Tape helpers being the obvious exception.
Nearly every other geometry type including Primitives, Editable Meshes and Editable Polys, Patches and NURBS objects will be handled correctly.
Meshing a Plane Primitive
Let's create a Plane primitive and convert it to a FROST mesh using the Union Of Spheres method:
- In the Command Panel, go to the Create tab and click the Plane button in the Standard Primitives category of the Geometry group.
- Create a Plane primitive with width 100.0, length 100.0 and default 4x4 segments.
- Select the FROST icon and in the Modify tab of the Command panel
- In the Meshing Quality rollout, change the Resolution mode to Absolute Spacing
- Set the Viewport value to 1.0
- Click the Pick button in the Particle Objects rollout.
- Click the Plane primitive to add it to the list.
RESULT: Each vertex of the Plane will now have a corresponding blob sphere.
Note that you can also hit the H button to open the Select By Name dialog to pick an object instead of clicking in the viewport, and the list will be filtered to show only the valid particle sources. The Pick button will let you pick only one object, while the Add... button will open a Select By Name dialog AND let you select multiple objects at once.
Meshing A Denser Plane
- Select the FROST object and in the Frost rollout, check Viewport Update > When Particles Change.
- Select the Plane primitive and enter 15 for both segment counts.
RESULT: The Plane is now covered by a Union Of Spheres mesh, but the single spheres are still clearly visible.
Let's change the Meshing Modes and see how a planar set of vertices is meshed by the various FROST algorithms:
- Select the FROST object again
- Change the Meshing Mode to Metaballs.
RESULT: The surface becomes smoother, but the single vercies are still evident.
Playing with the Metaballs parameters (Radius Scale and Surface Level) does not solve the problem either. Increasing the Segments count in the Plane would produce smoother results, but in real-world conditions where the points have been generated by a fluid simulator for example, decreasing the interparticle distance would not be an option.
The Zhu/Bridson mode is better suited for meshing flat surfaces, so let's see how it will behave in the same situation.
- Change the Meshing Mode to Zhu/Bridson.
- Although the default Blend Radius of 1.7 already produces a much smoother result, change it to 2.5
RESULT: The surface becomes completely smooth!
Meshing A Plane Using Anistropic Mode
The Anisotropic mode considers the neighbor particles surrounding each particle and uses elipsoides instead of spheres to produce flat surfaces where the particle distribution calls for a flat sheet of fluid mesh.
- Change the Meshing Mode to Anistropic - the result will be a very smooth and relatively flat mesh, but it will be shrunk below the original size of the Plane primitive.
- Adjust the parameters in the Anisotropic rollout to Radius Scale 20.0, Surface Level 0.7, Max. Stretch 8.0, Position Smoothing 0.0.
RESULT: The FROST mesh is nearly completely flat, with just the corners slightly more rounded due to the lack of influence at the outer edges.
Meshing Other Geometry Primitives
As a homework exercise, try creating various geometry primitives like Sphere, Teapot, Torus etc. and add them to the FROST Particle Sources list to test the various Meshing Modes.
Meshing Spline Shapes
In the following tutorial we will explore how FROST handles Shape objects like Text, Line, Circle and so on.
Creating Some Shapes
Note that deleted objects will remain on the FROST Particle Objects list as (deleted) - this is done to show you that a source that used to be referenced by FROST is not on the list anymore. You can click the Options [>>] button and select the Remove Deleted Objects to clean it up, or remove them by highlighting them in the list and pressing the Remove button.
- Create a Text shape, set its Size to 50.0 and select any font you like (this example uses the Impact font of the FROST logo)
- Create a Star shape next to the text with Radii 10.0 and 30.0
- Create a Circle with Radius 40.0
- Select the FROST object and change the Radius to 1.0 and the Absolute Spacing > Viewport value to 0.25.
- Make sure the Meshing Mode is set to Metaballs.
- In the Particle Objects rollout, click the Add... button - the Select By Name dialog will appear and will show all supported sources, in this case the Text, the Star and the Circle. Select them all and press OK.
RESULT: Only the Knots (Spline Vertices) of the selected Shape objects will be turned into particles. Note that curves produce more and denser vertices, while straight lines are only meshed at the corners.
Increasing Spline Interpolation
To refine the resulting mesh, we can increase the Interpolation value of each object:
- Select the Text shape, expand the Interpolation rollout and change the Steps value from the default 6 to 50.
- Select the Star shape and repeat the same.
- Select the Circle and repeat once again.
RESULT: The Shapes are now completely covered with Metaballs, producing a smooth and continuous surface around them.
Meshing Legacy Particle Systems
FROST accepts all pre-Particle Flow 3ds Max particle systems as particle sources. While some of them (Super Spray) have the ability to produce Metaball surfaces, by now you must already suspect that FROST might do a better job in that area. Let's take a look...
- Start a new 3ds Max scene.
- In the Create tab of the Command Panel, select the Particle Systems category
- Click the Super Spray button
- Click in the viewport and while holding the left mouse button, drag to define the position and size of the particle system emitter.
- Adjust the following parameters in the Super Spray rollouts in the Modify Tab: Off Axis Spread 30.0, Off Plane Spread 180.0, Viewport Display Dots, Percentage of Particles 100%, Particle Quantity > Use Total 10000, Size 5, Grow For 0, Fade For 0.
- Move the time slider to frame 30.
- Create a default FROST object next to the Super Spray, switch to Metaballs Meshing Mode.
- Pick the Super Spray as the Particle Source.
Accessing FROST Performance Statistics
But how fast was FROST really? To discover this, you can simply
- Expand the Help rollout of the FROST object,
- Click the Show Log Window button,
- Select the Edit menu in the Frost Log Window menu bar
- Set the Logging Level to Logging Statistics.
- Press the Force Viewport Update button in the Frost rollout.
RESULT: Information about the meshing of the FROST object will be printed to the Log. On the machine this tutorial was created on (i7 quad-core + HT), the meshing of 9679 particles took 0.134 seconds. Your mileage may vary.
FROST is fully multi-threaded, but it needs significantly more particles to saturate all cores at 100%, so the general speed should be in the same ballpark on most modern machines.
So how slow is the built-in MetaParticles mode of the Super Spray exactly?
To test this, you can
- Move to frame 0 (you will see why in a second!),
- Turn off FROST by unchecking the Enable In Viewport option in the Meshing rollout
- Switch Super Spray Particle Type to MetaParticles mode
- Switch the Viewport Display of the Super Spray to Mesh mode.
- Open a new MAXScript Editor tab via the 3ds Max Main Menu > MAXScript > New Script
- Enter the following code:
(st = timestamp(); sliderTime = 30; timestamp()-st )
Press Ctrl+E to evaluate this code and wait. And wait...
On the same machine, the time to produce a MetaParticles mesh with default settings was 69935 milliseconds, or nearly one minute and ten seconds! In other words, in this particular case, FROST was 522 times faster, and the result was of higher quality.
The meshing on frame 0 is much faster, and the script moves the time slider to frame 30 to measure the meshing time of that frame only. Had we not moved away from frame 30, enabling the MetaParticles mode would have caused us to wait for over a minute.
Note that both Super Spray and FROST accept the ESC key to stop processing at any time!
Now that we know that FROST is definitely faster than the built-in metaballs solution in the Super Spray particle system, let's see how it scales with increasing particle counts.
In programming, the desired behavior is linear scaling, and the unwanted one is exponential. For example, the Krakatoa particle renderer scales linearly with increasing particle count - if you know how long it took to render 1 million particles, you can assume that 10 million particles will need 10 times longer.
- Select the Super Spray and switch to Dots display again.
- Change the Use Total value from 10000 to 65000.
- Select the FROST object and check Enable In Viewport again.
- Look for the Stats in the Frost Log Window
So after increasing the particle count 6.5 times, we got 0.289 seconds meshing time using the exactly same settings. Linear scaling would have predicted a time of 0.134*6.5 = 0.871 seconds.
In other words, FROST was 3 times faster than predicted!
In fact, FROST's performance graph is a very flat line and the main performance hit comes from the amount of polygons it has to prepare and pass to the graphics system or renderer of 3ds Max.
Using the Particle Size
We saw from the Particle Flow example in the First Steps tutorial that FROST can accept per-particle Radius data. The same applies to the Legacy Particle Systems including Super Spray (but not to mesh vertices which right now can only use the global Radius value in FROST)
- Select the Super Spray.
- Change the Use Total from 65000 back to 10000.
- Enter 10 in the Grow For and Fade For fields.
- Select the FROST object and check the Use Radius Channel option in the Meshing rollout.
RESULT: The FROST mesh will now respect the per-particle Size value of the Super Spray and particles will grow from Age 0 to 10 and then Fade from Age 20 to Age 30 before dying. The time to mesh is even shorter (around 0.1 seconds) due to the lower polygon count.
This tutorial demonstrated the ability of FROST to accept particle data from Geometry Objects, Spline Shapes and Legacy Particles and showcased the performance benefits of FROST over the built-in MetaParticles meshing of the Super Spray particle system.
In the next tutorial, you will learn about the AutoFrost feature which can significantly speed up the process of adding particle sources to a FROST object.