<!-- MHonArc v2.4.4 --> <!--X-Subject: Re: [MUD-DEV] Ideas for dynamically generated worlds --> <!--X-From-R13: Qlaor eh Fnera <plaorNzhd.bet> --> <!--X-Date: Fri, 17 Dec 1999 14:05:23 -0800 --> <!--X-Message-Id: 199912171812.MAA04451#laurel,actlab.utexas.edu --> <!--X-Content-Type: text/plain --> <!--X-Head-End--> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>MUD-Dev message, Re: [MUD-DEV] Ideas for dynamically generated worlds</title> <!-- meta name="robots" content="noindex,nofollow" --> <link rev="made" href="mailto:cynbe#muq,org"> </head> <body background="/backgrounds/paperback.gif" bgcolor="#ffffff" text="#000000" link="#0000FF" alink="#FF0000" vlink="#006000"> <font size="+4" color="#804040"> <strong><em>MUD-Dev<br>mailing list archive</em></strong> </font> <br> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] <br clear=all><hr> <!--X-Body-Begin--> <!--X-User-Header--> <!--X-User-Header-End--> <!--X-TopPNI--> Date: [ <a href="msg00642.html">Previous</a> | <a href="msg00643.html">Next</a> ] Thread: [ <a href="msg00646.html">Previous</a> | <a href="msg00652.html">Next</a> ] Index: [ <A HREF="author.html#00645">Author</A> | <A HREF="#00645">Date</A> | <A HREF="thread.html#00645">Thread</A> ] <!--X-TopPNI-End--> <!--X-MsgBody--> <!--X-Subject-Header-Begin--> <H1>Re: [MUD-DEV] Ideas for dynamically generated worlds</H1> <HR> <!--X-Subject-Header-End--> <!--X-Head-of-Message--> <UL> <LI><em>To</em>: <A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A></LI> <LI><em>Subject</em>: Re: [MUD-DEV] Ideas for dynamically generated worlds</LI> <LI><em>From</em>: Cynbe ru Taren <<A HREF="mailto:cynbe#muq,org">cynbe#muq,org</A>></LI> <LI><em>Date</em>: Fri, 17 Dec 1999 12:12:18 -0600</LI> <LI><em>Reply-To</em>: <A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A></LI> <LI><em>Sender</em>: <A HREF="mailto:mud-dev-admin#kanga,nu">mud-dev-admin#kanga,nu</A></LI> </UL> <!--X-Head-of-Message-End--> <!--X-Head-Body-Sep-Begin--> <HR> <!--X-Head-Body-Sep-End--> <!--X-Body-of-Message--> <PRE> I've been collecting ideas of my own along these lines for some years. Here are some of them. Reader should pick out anything locally useful and discard the rest. :) * In general, these ideas are easier to handle in 3D graphics worlds than in text worlds. Why? Because as a many posters have implicitly noted in various ways, dynamic world generation tends to generate huge amounts of detail when left to itself. In a 3D graphics world, this is ok: Rendering down to the pixel level is visually acceptable, and cutting back to some fixed angular level of resolutions is acceptable and easy to implement. By contrast, text descriptions must discard orders of magnitude more information, pruning down to the absolute bare essentials of a scene in very intelligent fashion. In short, the 3D graphics version can be handled by brute force, but the text version requires "intelligence", and current computing technology is much better at brute force than "intelligence" -- as witness Deep Blue's design. * Pushing dynamic world generation very far takes one beyond well established programming paradigms in pretty short order, at least if you think hard about it and try to generate really good solutions. Whether this is good or bad is of course purely in the eye of the beholder! :) I think it is great -- I like each new project to teach me something new about programming. In particular, conventional programming uses very minimal context at each step and proceeds by Boolean decisions. In my explorations at least, dynamic world generation builds and uses large amounts of information expressing the current context -- geometry, culture, language, whatever you're interested in -- and has to sum it in ways much more sophisticated than the conditional Boolean expreesions typical of contemporary programming: The resulting mechanisms have much more the flavor of quantum mechanical summing of probability waves followed by collapse to a particular output at some point by picking a specific outcome based on the final probability function. * For many sorts of geometry, I believe "fractal" (I use the term loosely here) distortions of regular constructions turn out in my opinion to be more practical than straightforward fractal constructions. Example: You can specify a fractal road network, but given a point in space, it will become very expensive to find out whether there are any roads in the scene. Instead, you can start with a construction placing roads where-ever max(sin(ax),sin(by)) > 0.99, say: This gives you a rectangular grid of roads of finite width with the advantage that you can tell for any point about how close it is to the nearest road, and in what direction, just by looking at the field value and gradient before the max() is applied. Now, you can distort this regular construction in fractal fashion by using something like Perlin's classic noise() function to do a space-to-space remapping. The result should look pretty fractal, but possess various nice properties: In particular, finding whether there is a road at a given point in a scene is now a constant-time operation -- just invert the noise() mapping and apply the above function. Obviously, this can be elaborated to include major and minor road networks and towns at road intersections and non-rectangular base geometries and such to taste. Example: A good river network is hard to do. You will usually want the rivers stay close to the surrounding terrain, flow downhill, not start or stop mysteriously, and flow to the ocean, by and large. (Any or all of these constraints can of course be violated for creative reasons -- rivers in the sky or whatever.) Doing this efficiently from first principles is hard. But it is relatively easy to construct a canonical regular river basin following emperically established river statistics: A very simple try may have a radial geometry consisting of a number of rings, each containing twice as many radial river segments as the previous one, running in a strict pattern of one bifurcation per ring, joining at ring edges. This will again allow one to map a given (x,y) to the closest river in constant time using a little polar geometry. Again, using a noise function to remap this basis geometry irregularly onto the actual world geometry may give a reasonably realistic result while remaining efficient to generate. Example: An island will usually want to have a port by the ocean, paths or roads following the coast much of the way, and likely a central peak or two. Doing all this with straight conventional fractals will be an expensive pain: Just determining whether something is an island or not will require tracing the complete coastline, likely, ditto laying out the coastal roads and locating an appropriate harbor shaped piece of coast outline for the port. Instead, one can generate a canonical conical island with central peak, circular coast and coastal road, and semi-circular harbor cutout. All the connections make sense by construction now, and a noise()-driven remapping can give each island realistic fractal individuality. The archipelago itself can start as a rectangular or triangular mesh of island vertices connected by boating routes, with positions noise()-remapped to look more realistic. [ Whoops, got to run. Maybe a few more from the stockpot some other time. -- Cynbe ] _______________________________________________ MUD-Dev maillist - MUD-Dev#kanga,nu <A HREF="http://www.kanga.nu/lists/listinfo/mud-dev">http://www.kanga.nu/lists/listinfo/mud-dev</A> </PRE> <!--X-Body-of-Message-End--> <!--X-MsgBody-End--> <!--X-Follow-Ups--> <HR> <ul compact><li><strong>Follow-Ups</strong>: <ul> <li><strong><A NAME="00652" HREF="msg00652.html">Re: [MUD-DEV] Ideas for dynamically generated worlds</A></strong> <ul compact><li><em>From:</em> J C Lawrence <claw#cp,net></li></ul> </UL></LI></UL> <!--X-Follow-Ups-End--> <!--X-References--> <!--X-References-End--> <!--X-BotPNI--> <UL> <LI>Prev by Date: <STRONG><A HREF="msg00642.html">Re: [MUD-Dev] Fair/Unfair? Scenarios (fwd)</A></STRONG> </LI> <LI>Next by Date: <STRONG><A HREF="msg00643.html">Re: [MUD-Dev] The grass is always greener in the other field</A></STRONG> </LI> <LI>Prev by thread: <STRONG><A HREF="msg00646.html">[MUD-Dev] Online Migration and population mobility in a virtual gaming setting - Ultima Online</A></STRONG> </LI> <LI>Next by thread: <STRONG><A HREF="msg00652.html">Re: [MUD-DEV] Ideas for dynamically generated worlds</A></STRONG> </LI> <LI>Index(es): <UL> <LI><A HREF="index.html#00645"><STRONG>Date</STRONG></A></LI> <LI><A HREF="thread.html#00645"><STRONG>Thread</STRONG></A></LI> </UL> </LI> </UL> <!--X-BotPNI-End--> <!--X-User-Footer--> <!--X-User-Footer-End--> <ul><li>Thread context: <BLOCKQUOTE><UL> <LI><STRONG>RE: [MUD-Dev] Optimized Object Storage</STRONG>, <EM>(continued)</EM> <ul compact> <LI><strong><A NAME="00657" HREF="msg00657.html">RE: [MUD-Dev] Optimized Object Storage</A></strong>, Matthew Mihaly <a href="mailto:diablo#best,com">diablo#best,com</a>, Sat 18 Dec 1999, 04:26 GMT </LI> <LI><strong><A NAME="00660" HREF="msg00660.html">RE: [MUD-Dev] Optimized Object Storage</A></strong>, Sellers, Michael <a href="mailto:MSellers#maxis,com">MSellers#maxis,com</a>, Sat 18 Dec 1999, 04:26 GMT </LI> </ul> </LI> <LI><strong><A NAME="00647" HREF="msg00647.html">Balancing between anxiety and boredom (was RE: [MUD-Dev] Fair/Unfair? Scenarios (fwd) )</A></strong>, Sellers, Michael <a href="mailto:MSellers#maxis,com">MSellers#maxis,com</a>, Fri 17 Dec 1999, 23:00 GMT <LI><strong><A NAME="00646" HREF="msg00646.html">[MUD-Dev] Online Migration and population mobility in a virtual gaming setting - Ultima Online</A></strong>, J C Lawrence <a href="mailto:claw#cp,net">claw#cp,net</a>, Fri 17 Dec 1999, 22:57 GMT <LI><strong><A NAME="00645" HREF="msg00645.html">Re: [MUD-DEV] Ideas for dynamically generated worlds</A></strong>, Cynbe ru Taren <a href="mailto:cynbe#muq,org">cynbe#muq,org</a>, Fri 17 Dec 1999, 22:05 GMT <UL> <LI><strong><A NAME="00652" HREF="msg00652.html">Re: [MUD-DEV] Ideas for dynamically generated worlds</A></strong>, J C Lawrence <a href="mailto:claw#cp,net">claw#cp,net</a>, Fri 17 Dec 1999, 23:56 GMT </LI> </UL> </LI> <LI><strong><A NAME="00617" HREF="msg00617.html">[MUD-Dev] Game Balance: Statistical Analysis in MPORPGs</A></strong>, Lovecraft <a href="mailto:dave#darkages,com">dave#darkages,com</a>, Thu 16 Dec 1999, 23:43 GMT <UL> <li><Possible follow-up(s)><br> <LI><strong><A NAME="00627" HREF="msg00627.html">RE: [MUD-Dev] Game Balance: Statistical Analysis in MPORPGs</A></strong>, Koster, Raph <a href="mailto:rkoster#origin,ea.com">rkoster#origin,ea.com</a>, Fri 17 Dec 1999, 01:01 GMT </LI> </UL> </LI> <LI><strong><A NAME="00601" HREF="msg00601.html">[MUD-Dev] Mud-Dev FAQ</A></strong>, Marian Griffith <a href="mailto:gryphon#iaehv,nl">gryphon#iaehv,nl</a>, Tue 14 Dec 1999, 20:03 GMT </UL></BLOCKQUOTE> </ul> <hr> <center> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] </center> <hr> </body> </html>