Latest News
spacer View All spacer
 
November 21, 2009
 
Video Game Watchdog National Institute On Media And The Family Shutting Down [10]
 
Modern Warfare 2 Infinity Ward's 'Most Successful PC Version' Yet [12]
 
New Tech, Design Details Of Project Natal To Emerge At Gamefest In February
spacer
Latest Features
spacer View All spacer
 
November 21, 2009
 
arrow Upping The Craft: Susan O'Connor On Games Writing [6]
 
arrow Small Developers: Minimizing Risks in Large Productions - Part II [6]
 
arrow iPhone Piracy: The Inside Story [48]
spacer
Latest Jobs
spacer View All     Post a Job     RSS spacer
 
November 21, 2009
 
Sucker Punch Productions
Character Artist
 
Sucker Punch Productions
3D Environment Artist
 
Sucker Punch Productions
Network Programmer
 
Sucker Punch Productions
Texture Artist
 
Sony Online Entertainment
Brand Manager
 
Monolith Productions
Sr. Software Engineer, Engine - Monolith Productions - #113767
 
Crystal Dynamics
Sr. Level Designer
 
Gargantuan Studios
Lead World Designer
spacer
Blogs

  Horizontal Fractal Displacement
by Brano Kemen on 11/12/09 03:46:00 am   Expert Blogs   Featured Blogs
5 comments
Share RSS
 
 
  Posted 11/12/09 03:46:00 am
 

Recently I've been working on the code that computes fractal data - a bit of reorganization to be able to have more independent fractal channels that are used everywhere in the engine, as I was running short of them already.

Previously we had one channel where the terrain elevation fractal was computed, another channel with low-pass filtered terrain slope and 2 independent fractal channels. After the redesign we have 4 independent fractal channels, but additionally the filtered slope is computed independently for u,v terrain directions.

The two-dimensional slope values allow for better horizontal displacement effect on the generated terrain, because now it's possible to make the rock bulge from the hill slope in the right direction. In the previous version only the absolute slope value was known, and the fractals extruded the mesh independently in two orthogonal directions, and of course that did not always look good.

The equation for the displacement was in addition parametrized, to be able to get more effects out of it. Currently it's possible to vary the dominant wavelength, bias and amplitude of the used fractal.

Here is a quick comparison of what the parameters do.

Bias +0.5 (bulging outwards from the slope), wavelength 19m


Wavelength 38m


Wavelength 76m



In the last screenshot the fractal used for the displacement is already only slightly visible and the bulbous shape of purely slope-dependent displacement shows up.
Here's how the displacement looks like when the bias is even larger, i.e. when the sloped parts are pushed even more outwards (bias +1.5):


It's also possible to use a negative bias values, that make the sloped parts carved into the hill (bias -1.0):



On the other hand, amplitude boost can emphasize the effect of the fractal, creating more visible overhangs here and there:


For comparison, here's how the same terrain looks like without any horizontal fractal effect at all:


... and without the vertical fractal, only a bicubic subdivision of original 76m terrain grid:



Next thing to try could be using a texture containing rough shape of specific type of erosion one would like to achieve. Current technique still cannot generate proper cliff and canyon walls, but combining it with the shape map lookup should theoretically do the job.

There's also an interactive comparison for those who want more details.

Also an older, but related comparison of components in vertical fractal refinement.

 
 
Comments

raigan burns
profile image
"In the previous version only the absolute slope value was known, and the fractals extruded the mesh independently in two orthogonal directions"

I'm afraid I don't really follow, but I'd like to understand what you mean.

Derek Smart
profile image
Ah yes, Outerra.

Brano Kemen
profile image
I was referring to earlier blog http://www.gamasutra.com/blogs/BranoKemen/20090530/1564/Horizontal_displacement.
php
Basically, the horizontal displacement modifies the mesh by displacing vertices in horizontal plane using fractal. The displacement is proportional to the terrain slope at that point. In that prior version of the algorithm I computed only the absolute, scalar value for the slope, and displaced the vertex in two orthogonal directions using two independent fractal values. The effect was nice, but in many places the displacement went in unnatural directions with respect to terrain normal direction.
In this version I'm using projection of terrain normal into the horizontal plane, and only one fractal value is used to displace vertices along that direction, and now it is nice and consistent too.

Derek Smart
profile image
Impressive stuff.

btw Brano, check your email.

raigan burns
profile image
thanks for the explanation, that makes sense :)


none
 
Comment:
 


Submit Comment