Pyroclastic Puffs - DX11 Comp Entry

Here is my second entry for the DX11 contest (my first one being Fluidity).

It’s a new version of my pyroclastic explosions some of you might of seen a while back.

The raymarching is still done in the pixel shader (with some fancier tricks though) and the noise is calculated in the compute shader and stored in a volume texture.

The great thing with this project is that I am releasing the full (documented) source code completely free under the MIT license, right now, here! (Until I get a chance to put it up on the asset store, still for free of course).

A lot of people have contacted me with regards to my older version of this, so I’m hoping this will be satisfactory to you all. And let me know if you do anything cool with it, I’d definitely be interested!

Here is a link to the full project, and executable : PyroPuffs.zip

And for those of you without DX11, here is an updated video!

Wow! That looks gorgeous, best of luck!

Absolutely wonderful!

I think… I think it’s time for…

some Kronos!

This contest really made some sick stuff. I really like this, great work!

Offering the source gratis is admirably generous, my hat goes off to you sir

Sharing this is incredible, thank you! It also just convinced me you deserve a Fluidity purchase, getting it now also :slight_smile:

FYI I’m working on a new version of this. My ultimate goal is to get it working on, Mac, PC, Android and iOS.

Very awesome, though maybe it would be more impressive to see in an actual animated explosion :slight_smile:

This is awesome smb! I’m finding that I can’t use more than 5 objects in the array - anything over index 4 doesn’t get the effect applied to that position. I’ve look though your code but I can’t seem to find out where this limitation is. I’m pretty new at using compute shaders, so it’s possible I’m missing something obvious. Any help is much appreciated.

Thanks!!
~Jake

Found the solution! It’s the unroll command in the Pryo Puff shader. It must be changed from

// Scene setup, draw shapes in here.
float RenderScene(float3 pos, out int objectID)
{	
     objectID = -1;
     float sceneDistance	= 1000000;

     [unroll(5)]
     for(uint i=0 ; i<numberOfObjects ; i++)
     {

to

// Scene setup, draw shapes in here.
float RenderScene(float3 pos, out int objectID)
{	
     objectID = -1;
     float sceneDistance	= 1000000;

     [unroll(numberOfObjects)]
     for(uint i=0 ; i<numberOfObjects ; i++)
     {

Hey Alex,

I was curious if you’re doing any development on this. It’s an awesome effect but I messed with it yesterday and was having a hard time finding a way to actually use it in a standard way.

The script being pinned to the camera is one trouble (if you have two or more simultaneously then you need cloned scripts to render the effect?), the other is spawning new, unique instances realtime. Do you have any suggestions on this? Seems like such a fun tool to experiment with, just having a hard time finding out ways to use it on a larger scale.

Thanks

FYI What I’ve provided here is a demo. It is by no means a fully functioning product. If you want to use it for your own purposes, you will have to put some work into it yourself… No free dinners.

That being said, I am working on a version of this, which will come in a very user friendly format. But it’s not ready yet. But some time this year it will be :smile:

Lol, of course. I know its a free demo. You had mentioned updating it so I was of course curious about that and ideas/suggestions to extend it myself.

Great! Looking forward to it. =)