• Keine Ergebnisse gefunden

Minetest-Karten sind hierarchisch aufgebaut

N/A
N/A
Protected

Academic year: 2021

Aktie "Minetest-Karten sind hierarchisch aufgebaut"

Copied!
88
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Kartenerzeugung

(2)

Kartendaten

Minetest-Karten sind hierarchisch aufgebaut

I

16

×

16

×

16 Nodes bilden einen Block

I

5

×

5

×

5 Blocks bilden einen Mapchunk

I

Die komplette Karte besteht aus 773

×

773

×

773 Mapchunks

Jeder Kartengeneratoraufruf erzeugt ein Mapchunk Kartengenerator festlegen durch

minetest.register_on_generated(function(minp, maxp, seed) ...

end)

minp, maxp sind dabei minimalen und maximalen Koordinaten

(3)

Kartengeneratoreigenschaften

Einige grundlegende Eigenschaften des Kartengenerators sollten bekannt sein und ber ¨ucksichtigt werden:

I

Mapchunks, die nicht ge ¨andert wurden, werden nicht abgespeichert, sondern neu erzeugt, wenn sie wieder gebraucht werden

I

Wird der Kartengenerator ge ¨andert, so passen die Mapchunks unter Umst ¨anden nicht mehr sauber zueinander, harte Kanten entstehen

I

Es gibt nur einen Lua-Thread; wenn ein Chunk lange braucht, so werden keine weiteren Chunks erstellt, auch andere Lua-basierte Aspekte (viele Gegenst ¨ande,

Maschinen, . . . ) funktionieren w ¨ahrenddessen nicht; daf ¨ur

keine Synchronisierungsprobleme

(4)

Einfacher Kartengenerator

minetest.register_on_generated(function(minp, maxp, seed) for x = minp.x,maxp.x do

for y = minp.y,maxp.y do for z = minp.z,maxp.z do

local p = {x=x, y=y, z=z}

local n = {name = ...}

minetest.add_node(p, n) end

end end

Ist ein vollwertiger Kartengenerator, aber sehr langsam

(5)

Voxeleditor

minetest.add node(...) ist relativ langsam, folgende Schritte intern vonn ¨oten: String erzeugen; Zuordnung String

Node-id nachschlagen; mehrere tables erzeugen: Koordinate, Node;

Garbage collector, . . .

Dabei soll nur eine einzige Zahl gesetzt werden.

Viele Nodes auf einmal schneller setzen: Voxel Manipulator Ablauf:

I

Interne Node-id bekommen:

local id = minetest.get content id "default:dirt"

I

Voxel Manipulator erzeugen, legt fest, welcher Bereich bearbeitet werden soll (immer ein Quader)

I

Node-Daten jetzt als Array von Zahlen verf ¨ugbar: Auf einmal Lesen/Schreiben m ¨oglich

Details: http://dev.minetest.net/vmanip

(6)

2-D- vs. 3-D-Kartenerzeugung

2-D Kartengenerator: F ¨ur jeden Oberfl ¨achenpunkt

charakteristische Eigenschaften bestimmen und auf jeder H ¨ohe umsetzen. Beispiele:

I

H ¨ohenkarte

I

Stadtplan

I

. . .

3-D-Kartengenerator: F ¨ur jeden Punkt im Raum charakteristische Eigenschaften bestimmen und dort umsetzen. Beispiele:

I

Abbaubare Ressourcen im Untergrund

I

H ¨ohlen

(7)

2-D-Kartenerzeugung

2-D-Generatoren

I

Sind typischerweise schneller als 3-D-Generatoren: Pro vertikale Linie nur einmal rechnen

I

Sind gut geeignet um flache Pl ¨ane zu generieren:

Stadplan, H ¨ohenkarte, Raumverteilung eines Stockwerks eines Bauwerks, . . .

I

K ¨onnen viele r ¨aumliche Daten nicht gut generieren:

Verzweigte H ¨ohlenverl ¨aufe, ¨ Uberhang, . . .

(8)

3-D-Kartenerzeugung

I

Sind oft langsam bis sehr langsam

I

K ¨onnen gut r ¨aumliche Verteilungen erzeugen: Rohstoffe, Hochh ¨auser, H ¨ohlen

I

Erzeugen oft auch ungewollte r ¨aumliche Verteilungen, wie

etwa schwebende Inseln

(9)

Kombination aus 2-D und 3-D

Beliebt sind Kombinationen aus 2-D- und 3-D-Generatoren

I

Schneller als reine 3-D-Generatoren

I

K ¨onnen Vorteile von 2-D- und 3-D-Generatoren kombinieren

Beispiele:

I

2-D H ¨ohenkarte erzeugen, dann 3-D ¨ Uberh ¨ange und Ressourcen einf ¨ugen

I

2-D Stadtplan erzeugen, darin 3-D H ¨auser ohne konkrete Stockwerkaufteilung einf ¨ugen, darin 2-D Stockwerkspl ¨ane erzeugen

Kombinationen auch nicht immer einfach: Bei H ¨ohenkarten

entstehen trotzdem leicht schwebende Inseln

(10)

Kartengeneratortypen

Anstelle Kartengeneratoren

” irgendwie“ auszuprogrammieren

I

Noise-basierte: Stetige Variante von Rauschen; am bekanntesten: Perlin-Noise und Value-Noise

I

Kachelgeneratoren: Zusammenbau fester Kacheln

I

Feature-basierte Generatoren: Abstrakt Objekte in r ¨aumlichem Bezug festlegen, dann Objekte erzeugen

I

Zellul ¨are Automaten: Regeln f ¨ur zellul ¨are Automaten erzeugen eine Karte

I

Simulation: Simulationen verbessern Karte; mit leerer, oder anders vorberechneter Karte anfangen

Minetest verwendet 2- und 3-D Perlin-Noise f ¨ur H ¨ohenkarten

und H ¨ohlen; Feature-basierte Generatoren f ¨ur Rohstoffe,

(11)

Kartengeneratortypenkombinationen

Manche Kartengeneratoren lassen sich mit anderen auf naheliegende Weise kombinieren, bei anderen ist es komplizierter

Folien geben Hinweis auf einige M ¨oglichkeiten

Aber: Weitere M ¨oglichkeiten selbst erarbeiten, selbst

entscheiden, welche M ¨oglichkeiten f ¨ur das eigene Projekt

sinnvoll sind

(12)

Pseudozufall, Seed, Hash

Pseudozufall: Aus einer gegebenen Eingabe (seed) wird eine Liste von zuf ¨allig wirkenden Zahlen berechnet

Hash-Funktion: Berechnet aus einem Datensatz einen kurzen Hash-Wert, der chaotisch vom Inhalt des Datensatzes abh ¨angt Positionsabh ¨angiger Seed kann erzeugt werden mit

Hash(x,y,z); damit Kartenberechnung in beliebiger Reihenfolge mit gleichem Ergebnis

Hash(x,y,z,k) mit fortlaufendem k kann also Pseudozufall verwendet werden. Effizienter: eigenst ¨andige Algorithmen zum erzeugen von Pseudozufall aus einem seed

Minetest stellt einen seed f ¨ur jeden Mapchunk zur Verf ¨ugung:

minetest.register on generated(function(..., seed)

In diesem Foliensatz: Mit Zufall in den Erzeugungsalgorithmen

ist immer Pseudozufall gemeint, damit jedesmal die gleiche

(13)

Noise

Noise ist stetiger Pseudozufall:

Funktion

Rk →R

I

Stetig

I

oft mehrfach stetig differenzierbar

I

Funktionswerte unabh ¨angig voneinander berechenbar

I

Chaotisch

Beispiele f ¨ur nicht ausreichend chaotischen Noise

sin(x)

-1 0 1

0 5 10 15 20

sin(x + sin(x ·

1.3))

-1 0 1

0 5 10 15 20

(14)

Noiseverwendung

Noise hat viele verschiedene Anwendungen

I

Urspr ¨ungliche Verwendung waren Texturgeneratoren Bereits vor der Verwendung von Noise wurden Texturen zur Laufzeit verwendet (auf Computern mit wenigen KB Speicherplatz sind selbst einfache Texturen zu groß) Analyse von Noise hat zu sch ¨oneren Texturen gef ¨uhrt

I

Landkartengeneratoren setzen oft auf Noise auf: Minetest, Minecraft, Factorio, . . .

I

Dynamische Eigenschaften k ¨onnen auch mit Noise

(15)

Value-Noise

I

An allen ganzzahligen Positionen wird ein Wert festgelegt (aus dem Pseudozufallsgenerator)

I

Zwischen diesen Werten wird interpoliert

linear

0 1 2 3 4 5

kubisch/spline

0 1 2 3 4 5

(16)

Perlin-Noise

I

An allen ganzzahligen Positionen ist der Wert 0

I

F ¨ur jede ganzzahlige Position w ¨ahlt man uniform einen Einheitsvektor, genannt Gradientenvektor

I 1-D: 1 oder−1

I 2-D: gleichverteilt einen Punkt auf dem Einheitskreis

I 3-D: gleichverteilt einen Punkt auf der Einheitssph ¨are

I . . .

I

Gradientenvektor gibt die Richtung der maximalen Steigung an; Gradient in diese Richtung ist 1

I

Sonstige Werte werden interpoliert: F ¨ur jede benachbarte ganzzahlige Koordinate berechnet man

Gradientenvektor·Vektor zu dieser Ecke

Interpolation aus diesen Werten wie bei Value-noise

Perlin-noise ist vorimplementiert in Minetest

(17)

Noisegeneratoren im Vergleich

I

Value-Noise: Einfach zu berechnen, es entstehen leicht unsch ¨one f ¨ur Menschen erkennbare Muster

I

Perlin-Noise: An ganzzahligen Koordinaten Wert 0;

erzeugte Muster wirken oft gleichm ¨aßig genug

I

Simplex-Noise: Effizienter, aber komplizierter

I

Simulation-Noise: Allgemeineres Noise-Verfahren, aufwendiger zu berechnen

In vielen F ¨allen ist Perlin-Noise alleine ausreichend gut Kompromisse f ¨ur bessere Qualit ¨at und noch gute Effizienz

I

Summe aus Perlin-Noise und Value-Noise

I

Hyperebene mit zus ¨atzlicher Koordinate 0.5 aus Perlin-Noise eine Dimension h ¨oher

Beispiel: F ¨ur 2-D-Punkt

(x,y)

nimmt man 3-D-Punkt

(x,y,

0.5) aus Perlin-Noise

(18)

Frequenz, kombiniertes Rauschen

Noise wird eine Frequenz oder charakteristische L ¨ange zugeordnet: Wie weit muss man sich auf der Funktion bewegen, um typischerweise komplett andere Werte zu bekommen?

I

Perlin-Noise, Value-Noise: 1

I

Sinus: Wellenl ¨ange 2π, damit Frequenz

1

Skalierung der Eingabe: Frequenz ¨anderung

Gewichtete Summe von Noise verschiedener Frequenzen erzeugt Grobstruktur mit Feinstruktur

Typische Summierung (f

.

sind Noise-Funktionen gleicher Frequenz):

f0(x) +

2

·f1(x/2) +

4

·f2(x/4) +

8

·f3(x/8) +

16

·f4(x/16)

Analog zu dem Konzept in der Musik: Bei Faktoren der Form

(19)

Noise, Effizienz durch L ¨ucken

Berechnet man nur f ¨ur jeden

n-ten Punkt einen Wert und f ¨ullt

den Rest durch Interpolation, so braucht man im

k-dimensionalen nur einnk

-tel der Rechenleistung

L ¨uckenf ¨ullen wie bei value-Noise, oder bei

n=

2

t

durch Diamond-Square-Algorithmus: F ¨ullt bei L ¨ucken immer die freien Werte genau dazwischen

Diamond-Square auf Karte mit wenigen Werten an passenden Positionen auf Zufallswerte gesetzt kann auch als

Noise-Generator verwendet werden.

(20)

Diamond-Square-Algorithmus

Arbeitet auf diskreten Koodinaten, damit nicht f ¨ur kontinuierlichen Noise geeignet

In Originalformulierung nur 2-D, aber leicht auf beliebige Dimensionen erweiterbar

L ¨uckenf ¨ullung mit genau den Punkten mit nur gerade Koordinaten bekannt, einfacher verst ¨andlich.

Verallgemeinerung durch Skalierung: Punkte an den Vielfachen

von 2

t+1

bekannt, Punkte an den Vielfachen von 2

t

werden

(21)

Diamond-Square-Algorithmus, L ¨uckenf ¨ullungsschritt

Genau die Punkte mit allen Koordinaten gerade bekannt Berechne Punkte mit allen Koordinaten ungerade: Mittelwert aller diagonal benachbarten Punkte plus kleinen Zufallswert Berechne Rest der Punkte: Jeder ¨ubrige Punkt

p

hat gerade und ungerade Zahlen in seiner Koordinate.

Bestimme Mittelwert aus allen Punkten, die nur gerade oder nur ungerade Koordinaten haben und an jedem Index der Koordinate von

p

den Abstand h ¨ochstens 1 haben

Im 2-dimensionalen bilden sich durch den Algorithmus

abwechselnd auf der Spitze stehende und auf der flachen Seite

stehende Quadrate

daher der Name Diamond-Square

(22)

Diamond-Square-Beispiel

8

7 5 4

4

6 6 5 5 5

6 5 6 6 6

4 4 5 6 7

4 5 6

(23)

Diamond-Square-Beispiel

8

7 5 4

4

6 6 5 5 5

6 5

6

6 6

4 4 5 6 7

3

4 5 6

7

(24)

Diamond-Square-Beispiel

8

7

5

4

4

6 6 5 5 5

6

5

6

6

6

4 4 5 6 7

4 6

(25)

Diamond-Square-Beispiel

8

7

5

4

4

6

6

5

5

5

6

5

6

6

6

4

4

5

6

7

3

4

5

6

7

(26)

Diamond-Square-Beispiel

8 7 5 4 4

6 6 5 5 5

6 5 6 6 6

4 4 5 6 7

(27)

Noise im Kartengenerator

Kartengeneratoren k ¨onnen Noise auf vielf ¨altige Weise verwenden

I

2-D als H ¨ohenkarte

I

3-D als H ¨ohenkarte mit H ¨ohlen: Vergleich mit (skaliertem) H ¨ohenwert: Ist H ¨ohenwert gr ¨oßer, dann Luft, sonst Stein

I

H ¨ohlenerzeugung: Ist Noise>Grenzwert, dann H ¨ohle

I

Als Temperatur- oder Feuchtigkeiteskarte; vorhandene Pflanzen h ¨angen von Temperatur und Feuchtigkeit ab (in mehreren Spielen als Biom bezeichnet)

I

Basis zur Featureverteilung (Kraterdichte, Bauwerksdichte, Vegetationsdichte, . . . )

I

. . .

(28)

Noise-basierte Generierung: Vor- und Nachteile

Vorteile:

I

Verwendung von Noise konzeptionell einfach

I

Viele Landschaftsformen erzeugbar

Nachteile:

I

Interaktion von Landschaftsformen mitunter schwer abbildbar

I Bergspitzen

I Fl ¨usse, Flußtal

(29)

Kachelungsgeneratoren

Kartenerzeugung ausgehend von Kacheln (Tiles) mit

ausgezeichneten Kanten; jede Kachel ist mehrere Nodes groß Kacheln werden ausgelegt, so dass Kanten zueinander passen Typischerweise gibt es per Hand erzeugte Kacheln, dazu automatische erzeugte Kacheln f ¨ur beliebige

Kantenkombinationen

Kacheln haben Qualit ¨atswert. Kartengenerator legt Kacheln

aus: versucht gute Kacheln zu nehmen, w ¨ahlt dann eine

zuf ¨allige aus

(30)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(31)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(32)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(33)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(34)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(35)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(36)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(37)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(38)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(39)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(40)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(41)

Kachelungsgeneratoren, Beispiel

Kacheln haben Seiten mit Weg oder ohne Weg

Erzeugte Karte:

(42)

Kachelungsgeneratoren, Legereihenfolge

Verschiedene Legereihenfolgen m ¨oglich

I

Zeilenweise, wie in Beispiel

Vorteil: Mehr verf ¨ugbare Kacheln, da weniger Einschr ¨ankungen

Aber: Bei großen gekachelten Gebieten m ¨ussen trotzdem kleine Gitter aus Kacheln vorab gelegt werden, die

Kacheln m ¨ussen unabh ¨angig von weit entfert liegenden Kacheln erzeugbar sein

I

Chaotische Reihenfolge

Vorteil: Zentrale Kacheln mit vielen Einschr ¨ankungen an

(43)

Kachelungsgeneratoren, Kachelbarkeit

M ¨ogliches Problem: Keine Kachel f ¨ur Randbedingungen verf ¨ugbar

?

L ¨osungen:

I

Umliegende Kacheln ¨andern, bis es geht

I

Automatischen Kachelgenerator erzeugen, der mit jeder Situation klarkommt

Im Beispiel: Vier Dreiecke mit Sackgassen lassen sich zu einer beliebigen Kachel kombinieren

Automatische Kachelgeneratoren verschiedener Qualit ¨at

k ¨onnen kombiniert werden: Kachel mit bestm ¨oglicher

Qualit ¨at nehmen

(44)

Kachelungsgeneratoren, Kachelqualit ¨at

Kachelgeneratoren k ¨onnen auch f ¨ur Abwechslung sorgen

I

Im Prinzip vorgegebene Struktur, aber genauer Straßenverlauf ver ¨anderbar

I

See unterschiedlicher Form plazierbar, grobe Position des Sees durch Kachel vorgegeben

Es werden dabei Kacheln unterschiedlicher Qualit ¨at entstehen

I

Anfangs weniger ¨ Ubung beim Kachel erstellen

I

Bekommt der Kartengenerator mehr F ¨ahigkeiten, so werden die Kacheln auch besser

I

Manche Kacheln nicht ganz so gut gelungen, wenn auch nicht wirklich schlecht

Kachelplazierer sollte aus den Kacheln mit m ¨oglichst guter

Qualit ¨at eine ausw ¨ahlen, schlechte Kacheln mit geringer

(45)

Kachelung in Kombination mit anderen Generatoren

Kacheln k ¨onnen auf Ergebnisse anderer Generatoren reagieren. Beispiel: Klippenkachel bei H ¨ohenunterschieden Zentral gesetzte Spezialkacheln, die nicht beim Kacheln selbst gesetzt werden k ¨onnen. Beispiel: Nur ein Rathaus im Dorf Kacheln k ¨onnen auch auf andere Generatoren wirken

I

Nur Position eines Baumes festlegen, nicht Baum selbst

I

Ausgang eines Dorfes f ¨ur Straßengenerator festlegen Kachelgeneratoren f ¨ur Kartenteile m ¨oglich

I

Anderer Generator legt Raumstation und Bereich daf ¨ur fest; Kachelgenerator erzeugt diese dann

I

Haus mit gekachelten Stockwerken m ¨oglich

Hinweis: Auch ein Kachelgenerator kann zum Erzeugen einer

Kachel einen anderen Kachelgenerator aufrufen

(46)

Kacheln außerhalb eines Gitters

Anstatt Kacheln auf einem festen Gitter zu plazieren k ¨onnen sie auch frei plaziert werden

I

Kacheln legen Randbedingungen fest, wann sie eingesetzt werden k ¨onnen; Suche nach geeignetem Platz vonn ¨oten

I

Kacheln k ¨onnen weiterhin Voraussetzungen f ¨ur andere Kacheln erf ¨ullen. Beispiel: Kachel endet in Weg in gegebene Richtung

I

Auch andere Gitter k ¨onnen Illusion von freier Plazierung schaffen

I Unterschiedlich große Gitter werden nebeneinander plaziert

I 6-Ecke als Gittergrundlage mit 6-Eck-Kacheln

I 8-Ecke mit dazwischenliegenden 4-Ecken als Gittergrundlage

unregelm ¨aßiges Voronoi-Gitter, braucht Generator f ¨ur

(47)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(48)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(49)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(50)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(51)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(52)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(53)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(54)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(55)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(56)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(57)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(58)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(59)

Beispiel: Unregelm ¨aßige Kacheln

Raumstation aus unregelm ¨aßigen Kacheln aufgebaut

(60)

Feature-basierte Generatoren

Karten enthalten oft Features

I

B ¨aume

I

H ¨auser

I

St ¨adte

I

Vulkane

Ein Feature-basierter Generator verteilt erst die Position der Features zueinander und erzeugt dann die konkrete Karte Damit lassen sich gut r ¨aumlich abh ¨angige Karten erzeugen:

Fluß fließt vom Berg ins Meer, Flughafen neben einer Stadt,

(61)

Featurelevel

Problem: Um diesen Featurebezug zu berechnen, brauchen Features die Kenntnis anderer Features. Karte soll aber weiter st ¨uckweise berechenbar sein

L ¨osung: Einteilung der Features in verschiedene Level;

Einteilung der Karte in ein Gitter rechteckige Bereiche

I

Level-0-Features k ¨onnen direkt erzeugt werden, d ¨urfen aber nicht auf andere Features bezug nehmen

I

Level-k -Features k ¨onnen erst erzeugt werden, wenn alle Level-k

1-Features auf allen benachbarten Bereiche erzeugt wurden; d ¨urfen daf ¨ur auf Level-k

1-Features der benachbarten Bereiche bezug nehmen

I

Sollen Level-k -Features auf einem Bereich erzeugt

werden, wird erst die Erzeugung der Level-k

1-Features auf den benachbarten Bereichen durchgef ¨uhrt

[Programmvorf ¨uhrung]

(62)

Featurlevel, Tips

Hilfestellung zum Entwerfen eines auf Featureleveln aufsetzenden Generators

I

F ¨ur das Featurelevel

k

kann man nicht nur

k −

1 bei den Nachbarn verwenden, sondern auch

k−

2 bei Nachbarn eins weiter entfernt

I

Geringere Featurelevel zwischenspeichern: Oft braucht man diese bald wieder; Karte wird nicht in komplett zuf ¨alliger Reihenfolge erstellt; trotzdem nicht vergessen, alte Speicheraufwendige Featurelevel irgendwann wieder aus dem Speicher entfernen

I

Gr ¨oßere Strukturen durch Vorplanen erzeugen:

Featurelevel

k

plant eine Sturkur vor, die

(2·m+

1)

×(2·m+

1) Bereiche abdeckt

Featurelevel

k +m

kann die entsprechende vorgeplante

(63)

Featurecluster

Viele Features bilden Cluster: Großes zentrale Feature umgeben von mehreren kleinen Features

Beispiele: Findlinge, W ¨alder, St ¨adte, Berge, . . .

Viele verschiedene Gr ¨unde, warum das in der Realit ¨at passiert:

Aufteilung von Grundobjekten, Gegenseitige Beg ¨unstigung, gemeinsame Ursache, . . .

Menschen merken oft, wenn dem nicht so ist, k ¨onnen aber nicht genau beschreiben, was falsch aussieht

Featuregeneratoren sollten dies auch erzeugen

(64)

Graphfeatures

Graphen sind ein n ¨utzlicher Zwischenschritt f ¨ur Features, da sich viele Features aus Graphen erzeugen lassen

I

Wegenetz

I

Versorgungsleitungen (Wasser, Strom, . . . )

I

Flußl ¨aufe

I

. . .

Manche dieser Eigenschaften ziemlich direkt (z.B. Wegenetz),

(65)

Punktwolke

N ¨utzlich: Erst Knoten erzeugen, genannt Punktwolke

I

Kontrolle ¨uber Abst ¨ande der Knoten zueinander

I

Wiederverwendbarkeit des Punktwolkenalgorithmus f ¨ur verschiedene Graphen

Verschiedene M ¨oglichkeiten

I

Punkte durch andere Features bestimmen

I

In Teilgebieten unabh ¨angig voneinander Punkte setzen

I

Verbesserung mit der Featureleveltechnik: Punkte, die zu nah an einem anderen Punkt sind entfernen

I Alle zu nahen Punkte

I Pro Punkt Relevanzwert erzeugen; Punkte entfernen, wenn Relevanz kleinergleich der von nahen anderen Punkten

I

Verbesserung mit der Featureleveltechnik: Punkte von

anderen Punkten wegschieben, Kr ¨aftesimulation

Hinweis: Auch hier Featurelevel beachten, nur eigene

Punkte verschieben

(66)

Grapherzeugung

Verschiedene M ¨oglichkeiten zur Grapherzeugung verbreitet Unstrukturierte Graphen

I

Jeden Punkt in Punktwolke mit

k

n ¨achsten Nachbarn verbinden

I

Jeden Punkt mit ausreichend nahen Punkten verbinden Zusammenh ¨angende Graphen

I

Grundverbindungen erzeugen; dann Verbindungen

hinzuf ¨ugen, bis der Graph innerhalb des Bereiches

zusammenh ¨angend ist und es zu jedem benachbarten

Bereich mindestens eine Kante gibt

(67)

Beispiel: Flußerzeugung

Punktwolke erzeugen

Nahe Punkte entfernen, Hauptfeatures festlegen Graphen erzeugen, Meeres- und Bergknoten bestimmen

Quellen in den Bergen erzeugen. Fließrichtung festlegen: Richtung Meer, Abhang, . . .

Nicht zwingend perfekt richtige Richtung Fluß von Quelle bis Meer erzeugen Ergebnisstruktur

Mit anderen Verfahren nachbessern

(68)

Beispiel: Flußerzeugung

Punktwolke erzeugen

Nahe Punkte entfernen, Hauptfeatures festlegen

Graphen erzeugen, Meeres- und Bergknoten bestimmen

Quellen in den Bergen erzeugen. Fließrichtung festlegen: Richtung Meer, Abhang, . . .

Nicht zwingend perfekt richtige Richtung Fluß von Quelle bis Meer erzeugen Ergebnisstruktur

Mit anderen Verfahren nachbessern

(69)

Beispiel: Flußerzeugung

Punktwolke erzeugen

Nahe Punkte entfernen, Hauptfeatures festlegen

Graphen erzeugen, Meeres- und Bergknoten bestimmen

Quellen in den Bergen erzeugen. Fließrichtung festlegen: Richtung Meer, Abhang, . . .

Nicht zwingend perfekt richtige Richtung Fluß von Quelle bis Meer erzeugen Ergebnisstruktur

Mit anderen Verfahren nachbessern

(70)

Beispiel: Flußerzeugung

Punktwolke erzeugen

Nahe Punkte entfernen, Hauptfeatures festlegen Graphen erzeugen, Meeres- und Bergknoten bestimmen

Quellen in den Bergen erzeugen. Fließrichtung festlegen: Richtung Meer, Abhang, . . .

Nicht zwingend perfekt richtige Richtung

Fluß von Quelle bis Meer erzeugen Ergebnisstruktur

Mit anderen Verfahren nachbessern

(71)

Beispiel: Flußerzeugung

Punktwolke erzeugen

Nahe Punkte entfernen, Hauptfeatures festlegen Graphen erzeugen, Meeres- und Bergknoten bestimmen

Quellen in den Bergen erzeugen. Fließrichtung festlegen: Richtung Meer, Abhang, . . .

Nicht zwingend perfekt richtige Richtung

Fluß von Quelle bis Meer erzeugen

Ergebnisstruktur

Mit anderen Verfahren nachbessern

(72)

Beispiel: Flußerzeugung

Punktwolke erzeugen

Nahe Punkte entfernen, Hauptfeatures festlegen Graphen erzeugen, Meeres- und Bergknoten bestimmen

Quellen in den Bergen erzeugen. Fließrichtung festlegen: Richtung Meer, Abhang, . . .

Nicht zwingend perfekt richtige Richtung Fluß von Quelle bis Meer erzeugen

Ergebnisstruktur

Mit anderen Verfahren nachbessern

(73)

Beispiel: Flußerzeugung

Punktwolke erzeugen

Nahe Punkte entfernen, Hauptfeatures festlegen Graphen erzeugen, Meeres- und Bergknoten bestimmen

Quellen in den Bergen erzeugen. Fließrichtung festlegen: Richtung Meer, Abhang, . . .

Nicht zwingend perfekt richtige Richtung Fluß von Quelle bis Meer erzeugen Ergebnisstruktur

Mit anderen Verfahren nachbessern

(74)

Features mit anderen Generatoren kombinieren

Featurgeneratoren kaum alleinestehend verwendbar, aber gut kombinierbar

I

Features k ¨onnen durch andere Generatoren ausgef ¨uhrt werden

I

Durch andere Generatoren erzeugte Aspekte k ¨onnen als Feature deklariert werden: H ¨ochste Erh ¨ohung ist

Berggipfel, Kachel setzt Feature, . . .

I

Einzelne Features k ¨onnen auch explizit ausprogrammiert

werden: Brunnen ist statisches Gebilde an der Oberfl ¨ache,

(75)

Zellul ¨are Automaten

Zellul ¨are Automaten k ¨onnen manche Kartenarten gut erzeugen; Generatoren auf Grundlage zellul ¨arer Automaten k ¨onnen einheitlich st ¨uckweise berechnet werden

Beispiel H ¨ohlengenerator:

I

Anfangszustand: Jede Zelle zuf ¨allig tot oder lebendig

I

Zelle in n ¨achster Generation: Mehrheitsentscheidung

durch Anzahl lebender Zellen (diese und Nachbarn

inklusive Diagonale, bei Gleichstand bleibt die Zelle)

(76)

Zellul ¨are Automaten

Zellul ¨are Automaten k ¨onnen manche Kartenarten gut erzeugen; Generatoren auf Grundlage zellul ¨arer Automaten k ¨onnen einheitlich st ¨uckweise berechnet werden

Beispiel H ¨ohlengenerator:

I

Anfangszustand: Jede Zelle zuf ¨allig tot oder lebendig

I

Zelle in n ¨achster Generation: Mehrheitsentscheidung

durch Anzahl lebender Zellen (diese und Nachbarn

(77)

Zellul ¨are Automaten

Zellul ¨are Automaten k ¨onnen manche Kartenarten gut erzeugen; Generatoren auf Grundlage zellul ¨arer Automaten k ¨onnen einheitlich st ¨uckweise berechnet werden

Beispiel H ¨ohlengenerator:

I

Anfangszustand: Jede Zelle zuf ¨allig tot oder lebendig

I

Zelle in n ¨achster Generation: Mehrheitsentscheidung

durch Anzahl lebender Zellen (diese und Nachbarn

inklusive Diagonale, bei Gleichstand bleibt die Zelle)

(78)

Zellul ¨are Automaten

Zellul ¨are Automaten k ¨onnen manche Kartenarten gut erzeugen; Generatoren auf Grundlage zellul ¨arer Automaten k ¨onnen einheitlich st ¨uckweise berechnet werden

Beispiel H ¨ohlengenerator:

I

Anfangszustand: Jede Zelle zuf ¨allig tot oder lebendig

I

Zelle in n ¨achster Generation: Mehrheitsentscheidung

durch Anzahl lebender Zellen (diese und Nachbarn

(79)

Zellul ¨are Automaten

Zellul ¨are Automaten k ¨onnen manche Kartenarten gut erzeugen; Generatoren auf Grundlage zellul ¨arer Automaten k ¨onnen einheitlich st ¨uckweise berechnet werden

Beispiel H ¨ohlengenerator:

I

Anfangszustand: Jede Zelle zuf ¨allig tot oder lebendig

I

Zelle in n ¨achster Generation: Mehrheitsentscheidung

durch Anzahl lebender Zellen (diese und Nachbarn

inklusive Diagonale, bei Gleichstand bleibt die Zelle)

(80)

Zellul ¨are Automaten, Automatendesign

Zellul ¨are Automaten sind ein Implementierungskonzept, keine konkrete Implementierung; darauf achten, dass nur r ¨aumlich naheliegende Daten verwendet werden

Einige Tricks im Automatendesign

I

Automaten mit Pseudozufall k ¨onnen gut Feinstrukturen erzeugen

I

Automaten k ¨onnen unterschiedliches Verhalten zu unterschiedlichen Zeitpunkten und in verschiedene Richtungen zeigen

I

Unterschiedlichen Gitterweiten k ¨onnen Erzeugung beschleunigen

Beispiel: 3-D Automat, 30 Generationen mit Gitterabstand

4, 3 Generationen mit Gitterabstand 2, 3 Generationen mit

Gitterabstand 1 ist schneller, als 4 Generationen mit

Gitterabstand 1, kann aber wesentlich gr ¨oßere Strukturen

(81)

Zellul ¨are Automaten, teilweise Berechnung

Liegt ein Generator als zellul ¨arer Automat mit der Anweisung

k

Schritte weit berechnen vor, kann man Teilst ¨ucke der Karte berechnen

Jeder Zellzustand h ¨angt nur von Zellen der Generation davor ab, die maximal

c

Schritte entfernt sind (sogenannte

Lichtgeschwindigkeit eines zellul ¨aren Automatens)

in

k

Schritten spielen nur Zellen bis zu einem Abstand von

k·c

eine Rolle

um einen Bereich der Gr ¨oße

p

zu berechnen, f ¨angt man mit einem Bereich der Gr ¨oße

p+

2

·k ·c

an

nach

k

Schritten ist der innere Teil der Gr ¨oße

p

korrekt

Konzeptionale ¨ Ahnlichkeit zu der Featurelevel-Konstruktion

(82)

Beispiele f ¨ur Zellul ¨are Automaten

I

H ¨ohlengenerator: neuer Zellzustand Mehrheitsentscheidung der Nachbarzellen

I

Kartengl ¨atter: neuer Zellzustand Mittelwert der Nachbarzellen

Kartengl ¨atter einige Generationen auf Zufallswerten erzeugt relativ guten Noise, die vorgestellten

Noisegeneratoren sind aber effizienter

I

Vegetationsausbreitung: Neben Vegetation entsteht weitere, sofern die Bedingungen ausreichend gut sind

I

Simulationsgeneratoren lassen sich gut als zellul ¨are

(83)

Simulation

Simulationsrechnungen k ¨onnen komplexe realistische Karten am besten erzeugen

I

Abbildung physikalischer Prozesse in der Simulation

I

Hoher Rechenaufwand

In Simulationen (vergleichsweise) einfach, erfordern sonst viel Feinjustierung

I

Erosion: Spitze Berge, Flußdelta, Flußtal, . . .

I

Tektonik: Ressorcenschichtung, Faltungsgebirge, . . .

I

Wassereinzugsgebiete: zu H ¨ohenverl ¨aufen passende

Fl ¨usse

(84)

Simulationtricks

Simulationen als zellul ¨are Automaten formulieren, damit Simulation in Teilbereichen gerechnet werden kann

Zwei Tricks gegen hohen Ressourcenbedarf

I

Andere Generatoren bereiten die Karte vor, Simulation rechnet einige wenige Schritte f ¨ur letzten Feinschliff

I

Ausged ¨unnte Simulationsrechnung (speichert man f ¨ur jede dritte Mapchunk-Koordinate ein Byte mit

Simulationsergebnissen, braucht man nur 10MB f ¨ur die

(85)

Simulation, andere Aspekte

Auch nicht-physikalische Aspekte erzeugen in der Simulation gute Ergebnisse

I

Stadtsimulation: H ¨auser werden je nach Bedarf an der Stelle errichtet

I

Wegesimulation: Agenten suchen sich k ¨urzeste Wege, h ¨aufige Wege werden befestigt

Mehr Spieldynamik durch Simulationfortsetzung:

Aspekte, die sich typischerweise schnell ¨andern k ¨onnen nach Kartenerzeugung weitersimuliert werden. Beispiele:

I

Verwendung eines Hauses

I

Position von Objekte Aber:

I

m ¨oglichst keine zu starken ¨ Anderungen in Sichtweise

I

Spielerinteraktionen m ¨ussen ber ¨ucksichtigt werden

(umgebaute H ¨auser so lassen, halb zerst ¨orte H ¨auser

wieder aufbauen, . . . )

(86)

Statistische Ansammlung von Grundfeatures

Einfache Grundfeatures gem ¨aß einer einfachen Positionierung verteilt und aufsummiert

Mit passender Anzahl an Grundfeatures: Grundverteilung noch erkennbar, aber ausreichend viele Abweichungen

Beispiel 1:

” Star Control II: The Ur-Quan Masters“ erzeugt komplette Planeten aus ca. 1000 Grundfeatures der Form: geringe H ¨ohen ¨anderung in einem Kugelsegment

Beispiel 2:

I

50 Quadrate verteilt

I

Kantenl ¨ange jeweils gleichverteilt 10 bis 40

I

H ¨ohe jeweils 1/3 Node

I

Mittelpunkt

x

und

z

jeweils gleichverteilt -20 bis 20

(87)

Fraktale Objekterzeugung

Manche Objekte haben eine fraktale Struktur Beispiel Baum ¨aste:

Aste spalten sich immer weiter auf, sind ein St ¨uck gerade, ¨ spalten sich wieder auf, . . .

function ast(start, richtung, dicke) ... -- Astanfang direkt zeichnen

local astmitte = ... -- so weit wurde gezeichnet if dicke < mindestdicke then

... Blatt erzeugen else

... -- richtung und dicke variieren ast(astmitte, richtung2, dicke2) ast(astmitte, richutng3, dicke3) end

end

(88)

Fluß- und Baumregel

Fluß- und Baumregel hilft realistische Fluß- und Baumbreiten zu erzeugen

Problem an aufspaltenden/zusammenfließenden Stelle: Wie breit davor und danach?

I

Fl ¨usse haben davor und danach den gleichen Wassertransport

Querschnittsfl ¨ache ist

Transportmenge/Flussgeschwindigkeit Flussgeschwindigkeit h ¨angt vom Gef ¨alle ab

I

B ¨aume haben vor und nach Verzweigungen die gleiche

Referenzen

ÄHNLICHE DOKUMENTE

die

Stichtenoth 11.01.2006. Mathematik f¨ ur

2 M¨ oglichkeit 1: Descartes ist der Meinung, daß mathematisches Erfassen klar und deutlich ist; glaubt aber, daß es berechtigte Zweifel an der Mathematik gibt; dann w¨ are

Um zweifelsfrei den Beweis zu f ¨uhren, dass UV-Licht (insbesondere UVA-Licht) durch Singulett-Sauerstoff Sch¨aden im menschlichen Gewebe verursacht, ist es not- wendig, dass nicht

Man sollte insbesondere wissen und erkl¨aren k¨onnen, dass statistische Variablen Funktionen sind.. Man sollte Definitions- und Wertebereiche statistischer Variablen

• In jedem Schritt ver¨andert sich der Zustand der Zellen nach folgenden Regeln (die Ubergangsfunktion): ¨ – Eine tote Zelle mit exakt drei lebenden Zellen in ihrer Nachbarschaft

dividiert werden, wenn sie entweder dieselbe Basis und/oder denselben Exponenten

Welche Rechnungen kann man mit Wurzeln ausf¨ uhren.. Addition