Search code examples
unity-game-enginegraphicsmodelingunreal-engine4

Developing a graphical model of Earth Science processes


I am new to programming and I have little experience with a few languages such as MATLAB, Python & C++, to be specific, but I can't do anything extraordinary.

However, I would like to attempt to make a model using 3D graphics to model some Earth Science process such as erosion of a mountain, faulting, and I was even thinking about the formation of the Earth.

I would want it to look as realistic as possible, so 3D is a must, I was almost thinking of like video game cinematic cutscene quality.

Anyways, I was wondering if anyone could give me some insight into what kind of programming languages could best accomplish a project of this sort.

I've been looking at Unreal Engine, Unity and World Machine for terrain generation, but I've never done anything of this sort so any help would be much appreciated. Thanks.


Solution

  • language is not important... important is how will be your Earth stored and rendered. 3D engines,frameworks and physics packs are usually "easy" to use but often limiting so much that you can not do what you intend especially if you want scientific grade data. Have a look on modern games and see how they all suck. Especially those based on Unity. Yes for game It is OK but for physic simulation or photo-realistic rendering it is unusable in most cases.

    1. You need to decide what is more important visual appearance or scientific relevancy

      some scientific physical data do not necessarily output visually pleasing content. So you want awesome looking Earth or relevant data? That is the first thing to decide so you can build on that...

    2. Decide how will be your model stored/represented.

      This mainly depends on what you want to model and how you want to render. For example:

      1. Analytical/Voxel/Volume based representation

        Many physical simulations require (or are much better/simpler/accurate on) Voxel space and Volume rendering especially field base simulations like flow of fluids heat, energy transfer, lighting effects, clouds,... This kind of representation requires a lot of memory but usually the simulation is simple and provides the best visual quality. For regular shapes you can also use analytical representation (equations instead polygons or voxels). For rendering are used usually (back)-ray tracing techniques. Current HW is not very well suited for this kind of rendering so forget about speed (unless you use some shortcuts).

      2. BR boundary representation

        Standard nowadays 3D visualization requires BR boundary representation of your model. That means your earth must be represented by polygon covering the surface of any layer you want to render. This is usually not consistent with scientific data you are writing about Unless you want to model your earth as set of dynamic tectonic plates or just terrain surface effects. This is suitable for DEM (digital elevation model) based simulation (like rain simulations and computing the water levels of rivers etc). To add visual detail use Bump mapping.

      3. Hybrid

        This is very often used especially for photo realistic rendering of earth. As the earth is solid and huge it is represented with BR polygon or analytical equation. On top of that local viewed area is represented by Voxel space (or array of textures) holding clouds, and dynamic stuff at scalable resolution dependend on the view zoom/distance) This way you can combine BR rendering with (back) ray tracing methods usually in RT (real time). For example see images in my answer:

        It is an example of hybrid representation. Where the voxel space is not in memory abut in form of ellipsoid math equation with exponential field gradient instead (Analytical representation).

      Also if you want high visual quality see PBR (physically based rendering)

    If you digest all the above text and selected what you want/need then you can finally start coding. I would go for C++/GLSL based App but that is because I do most of my work in such environment. As I mentioned before language is not important use what are you familiar with or you like the most. The graphics API depends on platform you want to use and stuff you need. For example for voxel rendering I would start on SW (CPU only) to test my algorithms in small scale and when working then port to GLSL because debugging code on gfx card is REALLY HARD especially if you never done anything like it.

    Some things you may want to google (for ideas or data compilation):

    Sorry can not be more specific then this as you did not provide any specific data.