Jump to content
  • Advertisement
Sign in to follow this  
duhroach

Control structure for cloud system

This topic is 5468 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Howdy all, I've been reading Nitshita's paper on Realtime clouds, attempting to update it into capable hardware. (That is, rendering the data through a voxel field instead of the metaball/splatting approach) i found a thread that delt with the rendering part, and shows that it works pretty damn good. However, his clouds were generated just using simple perlin noise; No creation, destruction etc like Nitshita. So my main question is this: Has anyone implimented a constrolstructure similiar to Nishita's? Essencially, it's 3 boolean arrays (XxYxZ in size) determining humidity, activation, and precipitation. Which is all find and dandy by me. The problem comes when trying to transfer that data to the pixel shader for raytracing: To my knowlage, there's not a bit sized image format in hardware. I understand how the perlin noise function can do it, that's no problem. I'm interested in how to handle that information dynamicly using activation. Thoughts? ~Main

Share this post


Link to post
Share on other sites
Advertisement
I did implement it - you can see a video in action here. Although i didn't spend a lot of time on the shading itself, so you are warned.

My first goal was performance, and making the clouds volumetric (so you could fly through them, like in a flight sim). I get from 400 to 600 fps on a GF6 when looking at the sky from ground level.

I do not use any pixel shader at all, although i intensively use vertex shaders for high performance particles rendering. There are more details in my journal, if you're interested. The rendering is optimized by using impostors pretty much everywhere, so when there is no impostors to update, i usually render around 1000 triangles per frame for the whole sky.

Y.

Share this post


Link to post
Share on other sites
Those Clouds look pretty damn good.
So, correct me if i'm wrong, but it sounds like all you're doing is billboarding a sprite at each voxel location, and changing it's alpha and color based upon the three state values for the clouds.

Have you attempted/considered doing a full volumetric approach? That is, converting the actual state data to a 3d texture, then rendering a ray-traced volume cloud?

And how's the fill rate with that many particles? Seems to look like a lot...

~Main

Share this post


Link to post
Share on other sites
You're right - for every voxel, i use a single particle. Empty voxels (with a cloud density of 0) do not generate any particle, obviously. I'm using a 96x20x96 voxel space. This voxel space is then converted to a set of shaded particles. To reduce memory usage, N types of spaces are used (N is 5 or 6 in that video), each corresponds to different clouds conditions. The world is split in 16x16 cells, and each cell is assigned a cloud voxel type more or less randomly. Each cloud type is in the 5000 to 25000 particles range.

The total amount of particles in the world is very high, but you only need to render some of these particles when updating an impostor, ie. not very often, especially if you are moving "slowly" (= plane speeds). Because 99% of the time you're only rendering the impostors and not the particles, the fillrate is pretty low.

I didn't try a full volumetric approach. 3D textures are still pretty expensive and you'd need to slice many layers to give a good volumetric feeling (killing your framerate due to overdraw/blending), or to use a kind of ray-caster in a pixel shader (arg! performance).

Y.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!