At work we use Autodesk‘s 3dsMax as an integral part of our visualization process.  We use paraview and VTK to create geometry, typically as PLY files, and then import them into 3dsMax for high resolution renderings.  We have some nice scripts that will let us create a context scene, and then load each dataset in turn and submit a job to the render farm.  The results look amazing and it’s really taken our results to the next level.

Unfortunately, 3dsMax wasn’t really designed to do this and it’s really starting to show.  To manage a renderfarm (a large collection of nodes dedicated to nothing but rendering), they provide a piece of software called BackBurner.  Unfortunately, it’s pretty well tuned for controlling 2 or 3 jobs that each contain a few hundred frames.   Frankly, the performance really stinks when you have 2000-3000 jobs, each of 1 frame each.  Once a few jobs queue up we’ve seen submission times drop from 4-5 jobs per second, to 30-45seconds per job.  It’s pretty ridiculous, and once the number gets over 1000 the whole system just seems unstable and unreliable.  The manager seems to just “take a smoke break” as we’ve started calling it:  It simply stops responding and stops handing out new jobs for about 5 minutes, then suddenly catches up with everything that happened while it was out, never reporting an error.

What I’ld really like to do is submit a single job that could use MAXScript to dynamically load and unload data between frames.  This would greatly reduce both the amount of time to submit jobs (submit a single job instead of a job per frame or job per dataset), and reduce the load on BackBurner (Only has to manage 1 job instead of thousands).  Unfortunately, it seems there is no way to do this.  MAXScript has a preRender/postRender callback but they are only triggered at the beginning of the first frame and the end of the last frame, not between frames.   They do offer a preFrameRender/postFrameRender callback that offers that, but you’re not allowed to change the geometry.

The only other way I know to do this is using the existing preRender callback, but somehow getting backburner to restart 3dsMax between frames, instead of automatically advancing to the next one.  This I know will work, but I don’t know if it can be done.  Muster from Virtual Vertex can do this through control of the “Packet Size” option, so I may switch to that.  Honestly tho, I’ld really rather keep it in BackBurner, since it’s already installed & operational (mostly).

So I ask you, o great IntarWeb… Any ideas?
[tag:3dsmax][tag:autodesk][tag:maxscript][tag:backburner]