Posted by: Jeff | 2009/10/22

FumeFX – Large Grids

Sometimes, there are scenes that require you to have a burning, moving object.  Having so usually means you need to setup a very large grid – which then leads to very slow, memory heavy simulations.

Here are a few ways to tackle this…

(Updated: March 06, 2011 – Added methods 5 & 6)

*** Created/Tested on FumeFX 1.x ***


1. Large Static Grid

One way to simulate the fire is to create a very large grid which would encompass the boundaries of it’s movement.

You could download a free script by Allan Mckay at ScriptSpot called Create Animation Bounding Box.

Here’s a short description from the site:

The idea is that I wanted to roughly work out the entire dimensions of a characters animation, so a bounding box – of the entire animation.

Also note the reply by Anubis for his version, which seems be much simpler and faster.


2. Isolate Bounding Box Script

This next one also uses a very large grid, but it will need to use a script inside FumeFX to isolate only the voxels inside a bounding box object.

Here are some requirements:

  • An object (Preferably a Box) to be used as the bounding volume.
  • The box can be linked/animated to follow the object you want to burn.
  • The box shouldn’t have any rotations whatsoever.

    BBox Alignment

    BBox Alignment

Download the script FumeFX – Object Bounding Box Script, and assign it to FumeFX.

 

 

MaxScript Assignment Rollout

MaxScript Assignment Rollout

Press Edit and replace the contents of the original script with the script provided above.  You will then need to edit the encircled parts of the script:

Set the $'BBox' (in red) to the name of your bounding box object.
Lastly, set the $'FumeFX01' to the name of your FumeFX object.

Object Bounding Box Script Snippet

Object Bounding Box Script Snippet

note: You could skip setting the name for the FumeFX object, just comment out line 26 of the script, and uncomment line 25. I did that because I had some problems with the script where the built-in ffx variable didn’t return the proper FumeFX object, so a direct assignment of the node by name was the safer approach.

Here’s a preview of the resulting simulation.

FumeFX Simulation Preview

FumeFX Simulation Preview

You can take a look at the Log window being generated by fume as it simulates, look for the ones with “–>”. These are infos generated by the script.

fume-bbox_log

FumeFX Log

If you then try to not use the script and simulate the scene in a 32bit Windows environment, you will likely get a crash as I did.

Out Of Memory Error

Out Of Memory Error

Essentially, whenever doing simulations, it is largely recommended to do it on a 64bit environment, as you’ll be able to better maximize your memory usage.

Some pros with this method aside from being able to simulate with very large grids is that you will most likely always get a constant simulation speed per frame.  Looking at the FumeFx Log image above shows that the isolation time is a constant 7.0 per second.

The drawback is that the voxels outside the Box volume will definitely get deleted. So this method is obviously not suitable for large pluming smoke sims.

max 2009: fume-bbox.zip


3. Grid Lock

This method also makes use of a script, and in way, is similar to method #2 above.
The Idea was to be able to directly animate the FumeFX grid object itself.

You start off by animating or linking the FumeFX grid object to an animated object.. as with the Bounding Box method, you’re not allowed to have any rotations for the animation.

As an example, I linked the FumeFX grid to a Point Helper that is linked to the animated object. I used a Point Helper to help center the pivot of the FumeFX grid, since the grid always has it’s pivot at the base.

I then used this Baking Script called Tera Bake Transforms which has an option to retain a constant grid alignment even if it’s moving around the 3d space.

Tera Bake Transforms Script

Tera Bake Transforms Script

This script simply bakes any object animation into keyframes.

A special option that it does is called the Snap Positions. Using this option when baking, you can snap the animation positions to values that are divisible by the specified amount.
(The resulting comparison image below might better explain what this option does.)

The Get button is a special button to quickly get the Spacing value of the selected FumeFX Grid.

 

Here’s the result after baking using this script, with and without the Snap Positions checked:

Baking with Snap Positions OFF/ON

Baking with Snap Positions OFF/ON

Notice the seemingly non-moving grid with the Snaps ON.

With the positions snapped to the spacing value, we could then proceed to assigning a script to offset the voxel data based on the grid emitter movement.

Download the script FumeFX – Grid Lock and place it to your FumeFX maxscript section.

Now we can proceed with the simulation…
Here’s the result using the same scene from the method #2 above:

 

FumeFx Simulation Preview

FumeFX Simulation Preview

This method took a bit longer to simulate compared to method #2 for this scene.

Including doing other tasks while simulating in the background (300 frames):

  • method #2 –  37 mins
  • method #3 – 47 mins

max 2009: fume-grid_lock.zip


4. Cut-Off

This method can be found in the Afterworks forums. It also uses a script to delete voxel data that falls below a specified user threshold. I think it is also available in the CGFluids website.


5. Void Src

If you have FumeFX 2.x, you can make use of a new FumeFx Helper called the Void Source. It essentially works like methods #2 & #3 above. But with the convenience of it being a non-scripted approach, plus you’re allowed rotations.


6. Script by lutteral @ CGTalk

Also worth noting is a script done by lutteral which was based on the Isolate Bounding Box Method above (#2).
Click here for the link to the Thread.
The script can be found on the 3rd post.

Advertisements

Responses

  1. Haha, Awesome stuff Jeff, this is great, cheers!

    • thanks johnny! love the R&D stuff on your page by the way. 😀

  2. Hi Jeff, same word like JohnnyRand, Awesome stuff =)

    Just a question, I try the 3rd method “Grid Lock”, I make my animation, use an helper too, use the “Baking Script”, so no prob with this, but when I use the “FumeFX – Grid Lock” script , my fumefx box don’t move, so I run the script and I’ve got a pop up notice.

    #–Unknown property: “EnableFuel” in undefined#

    If you can give me you’re light about this and I’m useless, because, I’m noob with maxscript lol

    But I can move my fumefx box, when I copy and paste the position key controle since my helper to the fumefx box.

    Sorry about my english, french guy here lol

    • Thanks Romain!

      so I run the script and I’ve got a pop up notice.

      nope, you don’t need to run the script.. you will need to assign it to Fume’s maxscript component. (see the MaxScript Assignment Rollout image from method #2)

  3. That’s a nice trick. Thank you 🙂

  4. Hey, great tutorials you got here but I’m having some issues. With either the Bounding box method or the grid lock method I can’t seem to get the script working with fumeFx. Once I’ve browsed for the script in the fumefx maxscript section is there anything I have to do to make sure it runs when I simulate aside from check the “use’ box? with the bounding box method the adaptive box doesn’t seem to be using the Bounding box I specified and with the grid lock method its not shifting over the voxel data as the grid shifting in space which tells me the script isn’t working in fume. Any help would be greatly appreciated!

    Al.

    • Hi, have you tried the sample max files posted at the end of each section? What version of max are you using? and, if it’s not too much trouble, will you be able to send me a scene file?

    • You could also try copy/pasting it, instead of opening the maxscript file.. coz if you’re using the new script editor in max2008+, opening a maxscript file will open it in a new tab.

      If you press the “edit” button from fumefx.. you should get the maxscript window with a script file that starts with the letters “scr” + some random words/numbers. Delete the default script and paste in my code, lastly “save” it.

      If everything is working correctly, you should see some infos printed out of fume’s progress window.

      I hope this helps 😀

  5. very useful!

    ^^

    • Sorry for the late response.Copying and pasting worked fine Thx!

      Al.

  6. Thanks !!! you made my life easier 🙂 🙂

  7. hi Jeff, very helful those info 🙂 ! I have a question about method 2. The script was working fine, but when I decrease the spacing is not giving the “true” sim and rendering MB. So how can I calculate them correctly ?

    • Where do you look for the memory info? I usually look at the Task Manager’s PF Usage (CTRL+ALT+DEL) under the Performance Tab. I also take into consideration the memory used by windows xp (which is usually under 300~500MB), then the memory used by 3dsmax (usually 300MB I guess), lastly I would look at the Mem. Usuage shown by the FumeFX Simulation window. This is assuming that you don’t have any other memory heavy programs running in the background. If you take these into account, you’ll get a rough idea if your sim would crash or not.

      • cheers thanks 🙂

  8. I don’t know why need Snap Positions? could you tell me? Thanks!

    • The script reads voxel data using absolute positions. (position x,y,z to voxel x,y,z)
      Using the Snap Positions option makes the conversion more accurate/exact. I need the conversion be exact because the script is offsetting voxels based on the movement of the grid in the opposite direction.
      I guess the best way to see the effect is to try and simulate fume with the Snap Positions turned OFF. You’ll notice a very jittery sim.

      • Haha, thanks! it’s full use of FumeFX object to save data.

  9. It would be really cool if you have upgraded the latest version fumefx
    my error –Argument count error: RunSimulation wanted 1, got 0

  10. sorry just not in this post

  11. got sum problem vid fumefx,can u plz help me out,I have done stimulation in fumefx from 1 to 400,but there r sum missing frames ,how do i restimulate from frame 350……..plz reply

  12. Do any of these options work in Fume 2? I can’t seem to make any work. It’s as if the script isn’t even running.

  13. Hi Jeff,

    Have you tried linking fumefx to a liquid simulation for a mist effect? Having the mist synchronized with the liquid’s movement…

    • no, not yet.. but yeah, the idea kinda also hit me after seeing this cool video on air fields: https://vimeo.com/57182252

      • Really interesting… How about making the fluid mesh an object source for fumefx? That might work…

      • yup, that might also work 🙂

  14. Hi Jeff, any Updates on #2 for latest FFX3.5? Or would you use grid motion option instead?

    • Hi, I suppose the Use Grid Motion option would also suffice if you need to animate the grid itself. Otherwise, simply use the Void source to isolate your volume more controllably.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Categories

%d bloggers like this: