Jump to content

"Pyroclastic noise" demystified


Hazoc

Recommended Posts

Hi!!

Thank you very much Hazoc, Sanostol and Putoparri(your CMIVFX video are a great learning resurce, Congratulations and Thank You!!!) for the files.

One more question, is there a paper or something about that coordinate calculation?

Thanks.

Link to comment
Share on other sites

@Pazuzu: Thanks. In this great paper already mentioned there is an explanation of the basic technique for getting the normals in the right direccion to displace the volume. The simplest method is the one I used based on the distance to a point.

http://magnuswrenninge.com/content/pubs/VolumetricMethodsInVisualEffects2010.pdf

@Ikarus: Thanks. Those artifacts are really a limitation of the technique I used, the cvex shader is based on the distance to a point cloud but its only shaded once. So there is no correct overlap between the "spheres".

So I was looking for a better method of doing this and I found one wich is easier and more eficient. The trick is to create a single "ball" with the cvex volume procedural and instance each on the points. This way everything is calculated at render time (no need to cache points). In this image are a few small artifacts because I need to increase the bounds (it´s allready done in the file) but I haven´t done in the render because i´m doing all this in my old laptop and I run out of memory.

Another nice thing about this technique is that the noise is sticked on the points so they can be animated. I can´t wait to try this on my workstation. I think a really big volcano smokes can be done with this.

What I´m trying now is a function to do the 2d noise by projecting it to a sphere. Anyone know how to do this?

post-5449-130220744381_thumb.jpg

PointInstancedCvex13.hip

Link to comment
Share on other sites

that looks really cool! thanks for sharing.

But still there is one thing missing though in all solutions here, that is mentioned in the paper about felt and sonys volume pipeline, how can You layer displacement sequentialy. or do I just not see the obvious.

the new displacement works on the volume(gradient) produced by the displacement before

Martin

Link to comment
Share on other sites

Well, I think Hazoc´s first file does that, is just a mather using the new volume sops to do it with volumes from start and maybe a foreach to do it in a more recursive way.

That´s the next thing I´m also trying to get, in fact it would be very powerfull to have a vop/vex function to calculate the gradient of a float field at render time without the need of any i3d or geometry cache. I think can be more complex than a regular function because the need of lookup for the neighbour voxels, and the vex functions they usually calculate each pixel-voxel separately. A custom function may be created by using arrays of the neighbour pixels but have not triyed yet and also I don´t know if would be to expensive to compute.

So for now I want to try to do it in sops (the layer of the displacement sequentialy) with a medium resolution volume primitive and getting the fine detail at render time by using the resulting volumes as normals in the cvex procedural and maybe other primitives with the smoothnes or similar to have even more control in the highly detailed final result.

Edited by putoparri
Link to comment
Share on other sites

Great thread and thanks for sharing the hip files!

This is my teapot cloud, not very pretty, but its a start. Mostly accomplished through instructions of the cmivfx tutorial.

What I dont understand, why do we need a SDF to displace a volume? Isnt that possible because we dont have the normals of the volume?

In the tutorial Andreu Lucio creates a gradient by using the offset value of the isooffset node to generate two different i3d images.

I dont understand why this gradient is needed and what information is hold inside it.

post-6548-130268499157_thumb.jpg

Link to comment
Share on other sites

Hi Sven,

They are both float fields with the density in it. One is used for the density itself and the other is converted to a vector with the gradient3d holding the outward direction. This vector field is used for displacing the volume in the right direction. When displacing geometry we use de normal for the displacement direction but when dealing with volumes there is no normal, that´s why the gradient is used.

Edited by putoparri
Link to comment
Share on other sites

  • 1 month later...

thank you andreu :)

I checked your PointInstancedCvex13.hip & 18.hip files. I understand how you instance one cloud sphere to all the points and randomize the points values with parameters (smooth, radius) you set on the material node. What I dont understand completely is what happens in the cvex. could you explain what happens inside the red mark (attached image). And why do you use aanoise and not a kind of multifractal?

I was asking myself the question which workflow is better for a whole sky of clouds, i3d or rendertime cvex? what benefit does the i3d workflow have? The cvex wokflow seems to be very efficient but you dont have any feedback in the viewport.

how would one bring spatial variation to the cloud? create more different cloud balls - some with more, some with less advection and group them somehow?

I get nice results, but the edges look a bit strange.

post-6548-130566240906_thumb.jpg

post-6548-130566244281_thumb.jpg

  • Like 1
Link to comment
Share on other sites

Why don't you just try and check them with vop sop??

Just copy them and past them then you see what is going on. And I am pretty sure, with this way, you will get better idea!!

what inside of delayloadcvex is same as volume vop, and also you can check them even vop sop with box geometry as volume container.

You can display almost everything if you want to.

Link to comment
Share on other sites

Nice render Sven. :)

As Ryo said you can check the results of one of the cloud spheres in a volumeVop, in fact you can use the cvex shader changing the vex source parameter in the volumevop to shop and chose the cvex shader.

I used antialased noise because it was just a test, but also because it has a litle advantage oposed to the fractalnoise because it can have a 4d input. This means you can animate a 4th value to have the noise evolving but staying in place. You can also use a multifractal and you will probrably get better results. And you can also use an antialased noise inside the multifractal so you can animate this 4th axis.

The i3d workflow has the only benefit of been able to determine some kind of initial shape or even use a lowres simulation as a guide. But everything really depends in the kind of scene you are creating. For big cumulous clouds this technique can work quite well, but for a complete sky it may be more realistic to mix also some thiner clouds. Can be a hard work to make a complete realistic sky because of the complex nature and hetereogenity of the real clouds.

Continuing with this technique you can pass volume attributes to the points from an initial volume were you scatter the points. So you can get more feeling of a group. Or you can also advect some particles trough a lowres fluid and you this particles and some attributes inerited from the fluids to instance this cloud spheres on they.

The first part of the network before passing the P to the antialiased noise is for projecting P to a sphere to get a 2d noise as deformation for the sphere.

The smooth vop does a smooth between two values, so the first value is the inner radio of the sphere and the second one is the outer. So its a combination of two values were the second one must be bigger than the first. So, adding the smooth parameter to the radio this smooth value will be the diference between the inner radio and the outer, giving a very hard edge if its 0 and a smoother edge while is increased.

All the parameters you use in the cvex you can change per instance.

Not sure if I explained well and hope it helps. :)

Link to comment
Share on other sites

Thx efx and especially andreu :) you're right, in fact its more easy when you check it in vopsop. At first I didn't know how to check it, but now it works just like andreu said.

Anyway, I don't understand my results here. Please see my attached image:

... problem solved

Please have a look at the attached animation. The meshes were modeled in Maya with a lot of curvature already. Sometimes the point cloud was spread on the surface and sometimes inside the geometry.

9 minutes rendertime per frame @ 1280x720p, Stepsize: 0.3, Opacity Limit: 0.85

As you can see all the clouds in the far are very sharp looking and offer a little too small amount of variation…. Only the near clouds are really nice.

Maybe its possible to paint a grayscale texture on the mesh and transfer the greyscale value to the nearest point to control the advection. Pure white would be full advection and pure black no advection. But then again I don't know how to make the single cloud sphere to look "advected".

have a nice weekend

post-6548-13059994955_thumb.jpg

post-6548-130599953464_thumb.jpg

post-6548-130599955054_thumb.jpg

post-6548-130599959348_thumb.png

clouds1.mov

Edited by Sven
Link to comment
Share on other sites

In the past I have faked advection by adding 3D noise to P, and this noised P was used as the basis for everything else requiring P as input. Multiple 3D noises with differing scales and amplitudes were added to "P". The point being to fake different scales of turbulence.

In the project I developed the technique for I used the same tool for clouds, standing dust, explosions and smoke stacks... really wish I had that "power noise" back then :)

Basically it worked by linking a ton of stuff to particle age (with user ramps), or in the case of static dust/clouds setting a manual age, so as age increased:

- 3D "P" noises amplitude increases (fakes the evolving advection by increasingly distorting the space used by density noise)

- The advecting noise would lag behind the density noise (it looks much more natural in the noises move at different speeds)

- Density noise roughness decreases (fakes diffusion)

- Density Attenuation increases (or decreased cant remember, fakes diffusion)

- Fire decreased (where applicable)

etc...

The age affected parameters were ramped so that we could affect when different parameters would take effect.

For a pyroclastic feel I was able to set how much the density noise follows the metaball's transforms, but obviously not as good as "power noise", or actual pyroclastic noise.

Every bit of smoke in this Killzone2 intro sequence was done like the above:

The spaceship take off exhaust smoke at around 1:25 was done with a single metaball (at 4am in the morning before delivery due to technical problems with a previously maya generated fx).

I think results would be better if we try to follow natures example in terms of the sequence of events that lead to cumulus clouds. I think this means ditching Pyroclastic noise as a starting point and >begining< with regular noise that becomes increasingly pyroclastic according to density, somehow :) . I think it will be much more realistic to introduce pyroclastic effects than to modify pyroclastic noise to have non-pyroclastic attributes.

This approach would be more analogous to real clouds, in that they appear as regular noise which move pyro-clastically as density increases (I'm no cloud scientist but I think this is very roughly what happens), so I think we would have more luck if we follow the same sequence.

cheers

S

Link to comment
Share on other sites

I think results would be better if we try to follow natures example in terms of the sequence of events that lead to cumulus clouds. I think this means ditching Pyroclastic noise as a starting point and >begining< with regular noise that becomes increasingly pyroclastic according to density, somehow :) . I think it will be much more realistic to introduce pyroclastic effects than to modify pyroclastic noise to have non-pyroclastic attributes.

By that I mean start with some non-pyroclastic noise, compute a normal based on this volume gradient, displace outward in the direction of the volume gradient, multiplied by density amount. A bit like using a peak sop on a bumpy sphere.

Maybe its possible to use the derivatives to compute this normal. I will try and setup a scene later.

Link to comment
Share on other sites

  • 5 weeks later...

I've picked this up and i'm trying to recreate it.. how did you get the wispy or softer foreground clouds? I am hoping to avoid the hack of using a second volume with an offset to make it feel more "cloud" like.

I have a nice volume representation of the "custom" shape I'm using for the cloud bank and i'm getting nice detail. I would hate to lose it with the softness.

i have ideas of generating particles that birth from high velocity areas of the changing shape and using them as fly away clouds....

i'm not sure how to get the gradient changes... or add some differences to the density at the outer edges of the volume.

advice welcome

-k

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...