I want to achieve precipitation that won't fall through static objects.
I want to experiment with flooding that also does not pass through objects in its path.
In the GECK we are able to view a WorldSpace's Heightmap and export it. The result is split into 4 raw textures, one being each quadrant.
I believe I can take the player's position for X and Y and use it to locate the Height value in one of those textures. The player's X and Y can be either positive or negative. Starting from the middle of the height map It is the 0 for x and 0 for y, and the negative and positive values follow a standard cartesian plane depending on what quadrant you venture into.
http://en.wikipedia.org/wiki/File:Cartesian_coordinates_2D.svg
Obviously taking the player's x and y and multiplying them is a very bad idea in order to find the index which contains the height value at your player's location. For programmers at-least, the reason is it is possible for the x or y to be negative when the values are taken straight from the player's position, the end result is a no no when accessing indexes of an array.
Some math will need to be done to counter that.
Another thing is depending on the quadrant the starting point will be in a different corner. For those of you who work in a 2D Paint program, the top left would be the 0, 0 of your image. (The starting point from which your data is commonly read in from the file. )
I hope that gives you a rough idea of some things to take care with.
Moving on! Being able to have an accurate way to read z values (height values) by just calling a function with both a x and y value, you can use the height map data and determine any Z.
My strategy then goes as follows:
1. Find the player x and y.
2. Read the surrounding radius of terrain for height values.
3. Use these height values to calculate where fluid for flood should be spawned or in the case of precipitation how far the rain should fall before splashing.
For performance reasons some algorithms may be necessary because terrain can be highly detailed to just simulate a rain drop to touch down on every spot in even occasion heavy down pours.
For flooding a conditional check is not required for every spot on the terrain against every fluid ounce of water. I think the CPU happy way is probably just to use the already existed data loaded for the terrain in your area of the game, and somehow generate a thin water surface based on that. Maybe through a simple shader we deform that water mesh or what have you to give us the effect we want.
Ok so whether or not you agree with how the visuals will be generated, I am certain using the height map from the world-space is legit and is very much likely the way to do some neat things.
So what I have not explained is how we will prevent precipitation from falling through objects or floods from not passing through objects.
Well the first thing to try is to just use a bounding boxes that roughly surround the objects. Bounding Box collision detection is very fast. It may be as simple as taking the bottom quad of the boxes, and from it subtract that from the visual. In the case of floods that should work, and for rain depending on how picky you are, you may want to have rain fall until it reaches the roof.
Performance... performance.. performance. We probably want a consistent area to be covered but also have that area always stay in the player's view so he or she does not reach it pre-maturely and breaks the immersion.
It could be done by cell. Say we want the whole cell the player is located in to have these floods and rain, then we can expect the effect to not influence anything outside the cell. But what if the player is near or reaches a border of two cells or maybe even three? Perhaps we could script these weather effects to sort of weaken .
It could also be trivial to find the objects in a player's circle no matter where he is, no matter the border of the cells.
Some may be skeptic. If you are, lolz. I think anyone who has been around long enough could suggest some way of using Heightmaps to do a similar or different thing. This is just a combination of some of my own ideas and knowledge others have offered up (often for free, see gamedev)
If it is any comfort to anyone, I have already wrote a program that can atleast find legit height values relative to my player's location. Maybe my test program is way off in being accurate, but it worked seemingly in a way that supports what I was aiming for.
Quadrant is important though, I had crashes until I realized that my player's x and y had a mismatch in positive/negative signs when i compared to the ones in the Heightmap editor for GECK. After a correction, the crashes did go away.
ONE LAST THING:
If it was already possible for Fallout 3 using FOSE, I am sorry, and I would like a guide. For the Scene Graph, how do I draw objects or influence it? I know OBSE has a good deal of things that no one has yet to bother to convert for Fallout 3. This is one thing, that if not already available, I really would like for New Vegas. I really need a way to do the visuals, and I was lectured by Ian Patt for my dirty low level v-table hooking of fallout 3's graphics.