Results 1 to 10 of 12

Thread: Terrain Generator Wishlist

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Administrator waldronate's Avatar
    Join Date
    Mar 2007
    Location
    The High Desert
    Posts
    3,562

    Default

    That list looks suspiciously like one I wrote about 10 years ago when I set out to do some programming.

  2. #2
    Professional Artist
    Join Date
    May 2007
    Location
    Wisconsin
    Posts
    186

    Default

    Any results? Were you able to achieve any of these goals?

  3. #3
    Administrator waldronate's Avatar
    Join Date
    Mar 2007
    Location
    The High Desert
    Posts
    3,562

    Default

    Quote Originally Posted by HandsomeRob View Post
    Any results? Were you able to achieve any of these goals?
    The analysis I did way back when suggested that the best way to implement this sort of thing is with a wavelet-based representation. You keep the world data at differing resolutions. The final area is the sum of all the larger areas. It's the basic scale-and-add scenario used by most of the standard fractal terrain generators except with user editing at each of the levels. It's not a convenient representation for certain activities but it's perfect for many others such as painting tiny details on a worldwide canvas. Essentially you keep the first few levels at full resolution and then store the higher levels with a sparse representation to avoid keeping data you're not currently using. Tiles are always seamless because painting automatically flows other to next block as needed.

    Statistically generating terrain is a royal pain. The critical elements of terrain are tectonic uplift processes being opposed by erosion processes (volcanic processes are also important in certain contexts) to produce ridges and valleys. How they appear depends very much on scale. It's far too easy, for example, to perform an erosion process that produces plausible results on a very fine scale at a scale appropriate for single mountains. If your algorithm works for a 1 meter sample size, applying it to a 1 km sample size will give interesting but implausible results. I also haven't been able to reconcile a nice wavelet representation with any reasonable erosion algorithm.

    Exemplar-based techniques can give good results (RedRobes pointed out Howard Zhou's work and there are similar ones out there mostly using Poisson blending and graph cuts to get good seam hiding), but they will always synthesize results from bits and pieces of the original exemplar. It gets the "style", but it's very easy to get the wrong scale things (basically it's a monochrome texture synthesis algorithm with constraints based on ridges/valleys). I've been toying with the idea of trying to something similar but incorporating some of the atlas-based features of Lefebvre and Hoppe to get something a little better possible detail levels, based purely on the conjecture that correctly matching gross features will drag along fairly plausible smaller ones.

    My original idea for simpler synthesis was to provide a library of real-world exemplars and allow the user to place them as appropriate. For example, placing a spine and coverage wings while specifying "Appalachian" would synthesize patches of the appalachian mountains along the provided spine. My failure in the original code was poor blending exacerbated by low-quality source data. Chunks would appear at inappropriate locations and I didn't have a technique that would eliminate them. In the many years since then many better blending techniques such as Poisson blending have become well known and the concept may well work better. If I ever get a couple of free weeks I might try to resurrect some of the old ideas / code.

    The tesselation tool in Wilbur was the first step toward implementing a synthesis engine. My goal had been to use the basic tool as a shel for directing further synthesis, but laziness and lack of time keep getting in the way.

    Blending tiles is a non-trivial problem for more than a few tiles because you need to have a high-level direction. For example, if you've done all manner of un things on a tile and there is a large river leading off the edge of the tile then the next tile in that direction needs to understand that there's a river coming in and how to deal with and route that river.

    In the wavelet representation (and the typical synthesis fractal generators out there), there is high-level information that provides the base level that finer detail builds upon. If you have geological features such as rivers, there are contraints that must be met. For example, river always must flow downhill. You need to place that context information at high level and then ensure that each added level of detail meets the constraints. A simple algorithm such as fBm adds positive and negative noise at all scales, giving little basins and humps everywhere. Constraining for rivers requires at least gradient control.

    I think I've wandered a bit far afield in that brain dump.

  4. #4
    Administrator Redrobes's Avatar
    Join Date
    Dec 2007
    Location
    England
    Posts
    7,201
    Blog Entries
    8

    Default

    This guy has done something just like that - if I am reading your wish correctly...

    http://www.howardzzh.com/research/terrain/

    He has done it as a plugin for something or other I cant remember... you will have to read through it. (EDIT - ah yes , world machine).
    Last edited by Redrobes; 02-11-2010 at 07:43 PM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •