Possible to project colour?

Hi all.

I am wondering if it’d be possible to project an image onto a volume to, say, make an object in the plate dissolve.
E.g. I’d roto the object and project it onto a static volume, then add a gust of wind to make the object dissipate quickly.
I am just setting that uip with Nuke’s particles, but would much rather have a Eddy sim for a nicer effect,

Is this possible with Eddy?


Hi Frank,

it is possible to use an image node to project a image source. you can then use this to alter a simulation or use it in a shader tree at rendertime.

you can either emit the RGB channels into three different elements (RGB) with their respective settings and combine the fields later on during rendertime or use the image as an input to change the shader emission color during rendertime. I assume you might be able to get some interesting effects out of this, but I am not 100% sure this is the effect you are after.

The simulation approach however does not support color mixing as the channels are solved in seperate elements. One benefit ( and potential annoyance ) is that you can/have to dial in all the settings for all 3 elements. It might look interesting though when adjusting the different emission/dissipation rates of the individual colors simulations.

The shader projection through the emission will literally look like a Gobo projection, so not sure if this is what you’re after.

Also i assume you are using a static plate for the projection and its not updating as your particles move ?


Hi Frank,

i’ve done some quick tests here and there are some fun things you can do. This is my first contribution to add more cat pictures to the internet. Despite the abundance of cat pictures, the image I used isn’t very high res and was quite pixelated.

here are two examples I played with after writing the previous reply:

this is more inline with what I wrote above. 3 separate element simulations for each channel that get combined to drive the shader:

As the previous method simulated on separate velocity fields you get this chromatic separation effect. To get more control over that I copied the standard element python node and added color channels for emission. I didn’t add any chromatic shift for it, but it could be easily added to it too for more controls for this purpose. I merely did it to show how easy it is to adapt the standard element to do more advanced stuff if you are comfortable with a little python.

I was thinking of uploading the script and custom element to the example area, but will need to clean it up a bit beforehand.
Let me know if its urgent and I can send it to you sooner.

Hi Frank,

not sure if you still need this, but I’ve packaged it up a bit.
It contains the nuke script, a new element node SmokeColorSparse and a layout resource file that describes the new parameters.

While this might look a bit much at first it is essentially just a copy of the SmokeSparse element node and I’ve just added relevant color channels and parameters for my quick test.

When Eddy launches it scans for two env variables EDDY_NODE_SCRIPT_PATH and EDDY_NODE_LAYOUT_PATH. It allows you to extend Eddy byt writing new nodes or package things up more tightly by adding or removing controls for specific purposes.
Place SparseSmokeColorElement.py into the EDDY_NODE_SCRIPT_PATH location and SparseSmokeColorElement.json file in the EDDY_NODE_LAYOUT_PATH search path location and it will be available to load the additional functionality.

I was planning to do a more advanced training video on this process that walks you through the steps.

If you compare original SparseSmokeElement.py and this color version, you’ll see the changes i’ve added. They are pretty basic and might give you an understanding how you can extend this element further to fit your needs.
Let me know if you need help with it.


color_smoke.zip (42.4 KB)

Sorry Christoph,

I have been swamped with a first big delivery. I definitely still

need this and am keen, will check what you posted and get back to
you next week.



Just another idea for the color, if I get the color stored as vector in vdb, can I do the same magic?

Hi Jacy,

if you mean the rendering components ? yes, the color channel source could be coming from a vdb file.


I’m finally gearing up to test this, sorry for the delay.
Looks like i need to update my cuda drivers first though, so will take bit longer yet…

So, back on topic:
I am testing your setup and so far so good, except I don’t seem to be able to cache the custom Element node. I get this error:

EddyNuke[ERROR ] - EVALUATION ERROR: ChannelSet does not contain a channel named ‘’ - which then caused:
Could not get channel named ‘’ from ChannelSet - which then caused:
Node::evaluate failed for node ‘E_Channel5’, plug ‘field’. - which then caused:
Failed to find required evaluation inputs for node ‘E_Merge11’, plug ‘field’, .

Attached is my script which is pretty much the same as Christoph’s except for a different start frame.
coloured-smoke_frank.nk (44.7 KB)

Sorry, I meant to say the above happens when I try to READ the written cache files.

is it complaining on a specific frame or on all frames ? the data exists on disk i assume and is non zero kb ?

i opened your scene and ran it ( with the cat pic + altered paths ) with the following steps and worked fine:

  • went to 1130, hit reset on the element node
  • hit write button on the cache node (1130-1200)

if you do bypass the caching steps and render the sim as you go directly, do you see any output ( eg with the cat pic ) ? just want to verify, that the custom element attached loaded and executes on your end fine as well.


It is indeed working now.
What I had done was copy/paste the path from the Cache node into the CacheLoader node, which caused the error.
After hitting the “reload” button the CacheLoader started working but the error didn’t go away.

It all seems fine now.

Can you try the copy/paste thingy and see if it happens to you as well?

cool glad its working, fingers crossed its roughly what you were after ( effect wise ). let me know if you have any questions. I threw this together quite quickly to mainly demonstrate how you can customize and extend your element node library.

I’ll try to repro the copy/paste issue here on my end when i get a chance.

It does produce what I was after, I will spend some time trying to get the details of the effect worked out.
I’m still not quite 100% sure how the setup does what it does but hopefully that will become a bit clearer today as well.
It’d be great if this sort of colour mapping could be made a little simple for us dumb-ass compositors if possible :smiley:

Thanks for the help!

I’m hitting one little issue with the custom element:
When trying to dissipate the smoke it pops off at some stage. It looks like the emission stays at 100% intensity while the density decreases massively, so once the dissipation threshold is reached the voxels are still fully visible.
At least that is what I think is happening.

I might have to up the density a lot and multiply the density into the emission - or premultiply the rendered result.

Just sharing my thoughts on this setup more than anything as I think this should be a default feature (injecting colour in a controlled manner).

Yes i think by default the simulation only decays the density. Not sure if you’ve seen it, but I’ve added the respective R,G,B Channel dissipation parameters as well on that custom element node. It might be worth playing with them a bit. Hopefully matching the density dissipation rate more closely would keep these channels more in sync during render time and reduce the emission of the super faint smoke appropriately.

Hopefully I get some spare time soon so can add a bit more to this element code.
Let me know if you have any wishes etc in that regard.


DOH, I had not seen the rgb dissipation, that explains a lot :smiley:
I think by default those values should be linked (or there should be a checkbox to link them like in the Exposure node).
Thanks, I think I’m on my way now with this shot…

Sweet :slight_smile:

Btw the python code changes to introduce colors were pretty straight forward. If you get a chance you can diff the attached files with the SmokeSparse equivalent in your Eddy installation folder. It would highlight the new code bits and allow you as to customize these further. Obviously let me know if you need a hand with it.

good luck with your shot !

yeah, was planning to do that when I have time but it does feel like this sort of thing should be bundled by default

yeah i agree. we’ll integrate it in the future into the main releases.