AWS Thinkbox Discussion Forums

Magma/Genome Wish List - Time input

I understand that Magmaflow re evaluates per frame, but would it be possible to add a “Time” input for all Input Channels? If we could tell Magma to evaluate the PRT’s at a certain frame, it would eliminate the need to cache out extra channels for some of the more basic post sim effects. For example, if we want to store the initial distance to an object to color the particle, we need to duplicate the PRT Loader, freeze the loader to only load the first frame, and use this frozen PRT Loader as a lookup. This workflow isn’t terrible, but is definitely not intuitive and clutters the scene with extra Loaders. Since any frame could be used, it would open up lots of more options for effects and allow for some nice ways of creating relationships and formations that come together exactly when you’d like them to. Not sure if this is possible, I figure with Genome there would be dependency errors, but since Magmaflow is just accessing data from PRTs I thought that maybe it would be a possibility.

It is unlikely to happen as a general feature of Magma, and I am sure you are aware of the reasons. (Mainly we have to keep it fast enough for operating over billions of particles in reasonable times while using very little memory.)

However, we could probably design some form of a utility object, like a cross between the Stoke Particle Simulator and the Birth Channel Generator. It could host Magma flows that perform time-dependent particle processing without keeping all data in memory, and probably re-reading data from disk at different times as needed. The Stoke Particle Simulator in v2.3 already has a Birth magma to initialize channels to be used later, and Per-Step Magma to process data which is then baked to PRTs. And the Birth Channel Generator can read through a sequence and generate a new sequence with a new channel based on existing ones. The new tool would take an existing PRT stream, do all sorts of crazy (and potentially very slow) time-dependent operations, and bake the results to a new PRT sequence to be loaded in a PRT Loader.

I know it won’t give you on-the-fly processing as regular Magma modifiers do, but it would let you process any number of particles with any complex computations without having to keep all particles in memory. For smaller sets that fit in memory, one could just load the PRTs in a PFlow and run Data Operators over them, but I am not seriously suggesting using that :smiley:

Btw your example with the initial distance to an object could be solved with the Birth Channel Generator - you would create a BirthPosition channel in a new PRT sequence so on all frames you could easily calculate the distance using a regular Magma.

Awesome, I wasn’t even aware of the BirthChannel operator and will spread the word here at work. I think doing time dependent operations would take the realtime workflow that makes working with PRT’s so enjoyable, but it’s a cool option to have. Thanks for the info!

If you missed it, here is a demo video of the Birth Channel Generator.
youtube.com/watch?v=GmIuFIT1PSY

Privacy | Site terms | Cookie preferences