Terra Tiles

Community Forums/Showcase/Terra Tiles

Krischan(Posted 2009) [#1]
Here is one of my current projects: Terra Tiles - a terragen-to-meshterrain loader with a scenery engine (day/night system) and a dwarf you can steer over this terrain. As input there are only two files necessary, the terragen terrain and the matching megatexture - other parameters can be changed in the INI file or the program will calculate it automatically.

The dwarf steering is similar to the game "Gothic", but it is possible to switch to a freeflight mode, too. There are many parameters to change described in the readme.txt. I added three demo maps to the package, they are completely different to show the potential of this demo.


FEATURES


1. Terragen-Loader
It is possible to load any terragen file, it must be quadratic with a resolution of 2^n+1 (not: 512x512 but 513x513!). The terrain can be resampled from a higher resolution to a lower resolution with a bilinear filter (ex. 513x513 -> 129x129). The terrain gets cut automatic considering uv-coordinates, chunk normals and texture transitions by a given tilesize parameter (ex. source map 513x513, 4096x4096 megatexture -> 16x16 tiles with 32x32 vertices and a 256x256 texture part each). In the demo, there is a 513x513 terrain with a 20 meter per vertex distance resolution, so the island has a square footage of about 100kmē, in realistics dimensions.

2. Realistic day/night system
Using gradients, smart quad blending and a sky dome (a patch with a bulge in the center), a realistic? but at least very nice day/night transition is simulated. The terrains gets lighted by 2-3 light sources according to the time of day and with vertex shading nice light effects appear across the whole day. Additional, there is a starry night scene and a moon (you can even define the moon phase).

3. Character Steering
You can steer the dwarf like in the game "Gothic", the cam can be rotated around the character 360° with the mouse. There is gravitation and the dwarf scale is relative to the terrain scale. In freeflight mode you can cover larger distances in seconds. Switching the modes positions the dwarf to the cam position and vice versa.

4. Minimap
The minimap is to locate the player on the terrain. The map is a real snapshot of the terrain made with an orthogonal cam from bird's eye view, layed on a quad with the player as a red dot.


SCREENSHOTS


Screenshot: Monkey Island 07:15am, sunrise in the east


Screenshot: Other Island 07:15am, sunrise in the east



DOWNLOAD


Download Demo (3.5MB 7zip SFX)
http://www.christianhart.de/bb/terratilesdemo.exe


The demo is running fine but is not optimized yet, there is no LOD/PVS and the steering of the dwarf is the very first version, especially jumping is not finished. But you can test your own terrains / megatextures with this demo and change parameters in the INI file (but be careful - there is no plausibility check of them - the application can crash)

Source and Media will be released as soon as they are cleaned up, optimized and commented completely.


Mortiis(Posted 2009) [#2]
I'm really impressed with your day/light cycle and how it effects the lighting. Terrain is pretty huge and smooth too! Great work! Your gallery submission gets a 5/5 from me.


ImaginaryHuman(Posted 2009) [#3]
I had a play with it, it's pretty nice, interesting in wireframe too.

The lighting is good but I was a bit confused by the per-vertex sort of `baked in` shadows - ie as the sun moves around some sides of hills stay dark while the other sides are light - a bit odd, but I guess you're not doing realtime shadows.


Krischan(Posted 2009) [#4]
Don't be confused, its an illusion. I don't calculate realtime shadows here, Blitz does it for us with two light sources (directional and point light). The shadow quality increases with the vertex amount, I tested it once with a 2049x2049 map (5 FPS there, LOL) and it looked really nice - but was unplayable.

So the lighting is a mix of a prerendered shadow map combined with the megatexture and realtime light. I prerendered the shadowmap in the same angles like the lightsources are placed later (in L3DT: Setting "noon" which is 180° / 40° and matches with about 12:00am). For real shadows you have to calculate the shadowmap every single angle change and this will slow down the whole scene dramatically (or use a lower resolution which looks bad).

So I think it is a good compromise here and still looks nice, even at night.


BlitzSupport(Posted 2009) [#5]
Whoa, nice job!


puki(Posted 2009) [#6]
Why are you using both directional and point lighting?

Ambient lighting is the only second light source that I would alter in conjunction with whatever is being used as sun/moon light.

I noticed the dwarf was multi-lit, but this is somewhat unrealistic and unnecessary.

More use of dynamic ambient lighting is required.

I would understand the second light source if it was casting negative light. It is okay to throw dynamic, negative (black/dark), lighting to compensate for Blitz lighting through geometry which the light cannot reach in real-life (if you are trying to compensate for the directional lighting).


puki(Posted 2009) [#7]
Also, I couldn't work out whether you are, or are not, changing the sunlight colour. If so, then it was not dramatic enough.

I always dynamically change the sunlight colour - ie when it is setting and rising it should be deeper orange/red - it has a nice effect on landscape and objects when you do this. As the sun rises, then you can drop it from it's red/orange, through yellow, to white or near white and then dip the colours again at sunset.


Krischan(Posted 2009) [#8]
With only directional light, the terrain FX for sunrise / sundown is not "dramatic" enough, it looks too flat so the point light strengthens the whole lighting. I was experimenting a long time with the lights and the combination of Ambientlight not greater than 128, and a directional light and an additional point light changing its color and range gave the best results to me. There are many parameters to balance, and they are changed according to the sun angle, including sunlight color.

It is is not perfect, it is the first presentable version. There are lot of tweakings possible, ex. my gradients for sunlight. You can take a look at all my data fields, the first data represents the percentage between 0.0 and 359.9° (a whole day) where 0.0/100.0 is midnight and 50.0 is noon, and a smooth gradient between the r,g,b colors is being calculated (1440 steps, 1440 = 60 minutes x 24 hours).

You will notice that the percentages and RGB values are set very roughly, you could spend days to tweak them all until they look very realistic. I think they look cool enough.

; -------------------------------------------------------------------------------------------------
; Color Gradient Source (Percent,R,G,B)
; -------------------------------------------------------------------------------------------------

.Ambient
Data   0.0, 16, 32, 64
Data  15.0, 16, 32, 64
Data  25.0,128, 96, 64
Data  35.0,128,128,128
Data  50.0,128,128,128
Data  65.0,128,128,128
Data  75.0,128, 96, 64
Data  85.0, 16, 32, 64
Data 100.0, 16, 32, 64

.Sunsize
Data   0.0,  0,  0,  0
Data  10.0, 32, 32, 32
Data  25.0,192,192,192
Data  35.0, 96, 96, 96
Data  50.0, 96, 96, 96
Data  65.0, 96, 96, 96
Data  75.0,192,192,192
Data  90.0, 32, 32, 32
Data 100.0,  0,  0,  0

.StarLight
Data   0.0,255,255,255
Data  20.0,128,128,128
Data  25.0,  0,  0,  0
Data  50.0,  0,  0,  0
Data  75.0,  0,  0,  0
Data  80.0,128,128,128
Data 100.0,255,255,255

.MoonBright
Data   0.0,255,255,255
Data  15.0,255,255,255
Data  20.0,192,192,192
Data  25.0, 32, 32, 32
Data  50.0,  8,  8,  8
Data  75.0, 32, 32, 32
Data  80.0,192,192,192
Data  85.0,255,255,255
Data 100.0,255,255,255

.Light1Range
Data   0.0,  0,  0,  0
Data  20.0,  8,  8,  8
Data  25.0,128,128,128
Data  30.0, 64, 64, 64
Data  50.0, 32, 32, 32
Data  65.0, 64, 64, 64
Data  70.0,128,128,128
Data  80.0,  8,  8,  8
Data 100.0,  0,  0,  0

.Brightness
Data   0.0,  0,  0,  0
Data  25.0,255,255,255
Data  35.0,128,128,128
Data  50.0, 64, 64, 64
Data  65.0,128,128,128
Data  75.0,255,255,255
Data 100.0,  0,  0,  0

.ClsColor
Data   0.0,   4, 8, 16
Data  15.0,   4, 8, 16
Data  25.0, 32, 48, 64
Data  35.0,100,150,200
Data  50.0,100,150,200
Data  65.0,100,150,200
Data  75.0, 32, 48, 64
Data  85.0,   4, 8, 16
Data 100.0,   4, 8, 16

.HazeColor
Data   0.0, 12, 24, 48
Data  15.0, 12, 24, 48
Data  25.0, 64, 64, 64
Data  35.0,200,224,255
Data  50.0,200,224,255
Data  65.0,200,224,255
Data  75.0, 64, 64, 64
Data  85.0, 12, 24, 48
Data 100.0, 12, 24, 48

.LightCol
Data   0.0,  0,  0,  0
Data  15.0,  0,  0,  0
Data  25.0,255,192,128
Data  35.0,255,255,192
Data  50.0,255,255,255
Data  65.0,255,255,192
Data  75.0,255,192,128
Data  85.0,  0,  0,  0
Data 100.0,  0,  0,  0

.OceanCol
Data   0.0,  8, 16, 24
Data  25.0,  0, 32, 96
Data  35.0, 32, 64,192
Data  50.0, 32, 64,192
Data  65.0, 32, 64,192
Data  75.0,  0, 32, 96
Data 100.0,  8, 16, 24



John Blackledge(Posted 2009) [#9]
Very, very impressive - for what looks to be a total environment solution.

How many hours/days/months have I spent tweaking my environment, and it doesn't look as good as yours.

I hope you're going to release this in some form - payable?


Krischan(Posted 2009) [#10]
Nope, no money. I'm a fan of open source. Gimme some time to clean up the messy code.


Mortiis(Posted 2009) [#11]
That's really generous of you, if I had done what you have done, I would defly sell it.