Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

14.08.2013, 22:19

Einen Level aus einem png Bild erstellen?

Hallo zusammen!

Ich habe ein wenig den Livestream von Notch verfolgt und habe mich gefragt, wie man aus einer png Datei einen Level macht? Nicht das ich es auf Anhieb verstehe, nur die Logik dahinter, was man da macht. Er erwendet C# was für mich persönlich passend ist und Unity.
Danke im voraus!

Hier das Video dazu: http://www.twitch.tv/notch/b/445502701

2

14.08.2013, 22:38

Ich weiß nicht genau was Notch in dem Video macht (ist mir zu lang zum gucken). Grundsätzlich enthält ein Bild ja auch nur Informationen. Z.B. welcher Pixel welche Farbe hat. Das kann man auslesen und z.B. in eine Tilemap umwandeln.

Swoerm

Alter Hase

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

3

14.08.2013, 23:28

Und dann den einzelen Tiles Eigenschaften zuweißen ...

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

4

19.08.2013, 17:48

Ich habe mir das Video jetzt nicht angeschaut, aber wenn es um 2D geht würde ich sagen das er dafür einen Map Editor verwendet wie zum Beispiel Tiled.

http://www.youtube.com/watch?v=InDZTbx3PNo

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

5

19.08.2013, 19:31

Es geht um 3D.
Wie man im Code sieht, werden Farben bestimmte Textur- und Höhenwerte zugewiesen.

6

21.08.2013, 22:06

Man könnte z.B. den Rot-Wert die Id bestimmen, den Grün-Wert die Höhe, und den Blau-Wert für irgendwelche Zwecke verwenden von denen mir hier keiner einfällt.

Fourb

Treue Seele

Beiträge: 122

Beruf: Schüler

  • Private Nachricht senden

7

21.08.2013, 22:19

Blau: Collision Yes/No z.B.

Das Bild muss ja keinen Sinn machen. Ist aber wirklich eine einfache Lösung für Leveleditoren =)
42 / Pi = 13,37

8

21.08.2013, 22:23

Außerdem ist es nicht auf Anhieb so leicht für Modder herauszufinden, wofür die einzelnen Pixel stehen :P

Tobiking

1x Rätselkönig

  • Private Nachricht senden

9

22.08.2013, 00:00

Es gibt auch noch andere Farbräume als RGB. Ich würde anhand des Videos auf HSV tippen. Der Farbwert für die Textur und die Helligkeit für die Höhe. Bei konstanter Sättigung ergibt das Bild dann sogar einigermaßen Sinn. Es sieht dann nämlich wie eine farbige Heightmap aus. Statt eines Terrains erzeugt man daraus halt Blöcke, wobei es da bei bestimmten Farben (oder Farbkombinationen) den Spezialfall Innenraum gibt.

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

10

28.08.2013, 23:35

Da gibt es verschiedene Möglichkeiten. Ich habe das Video jetzt auch nicht angeschaut, aber hier mal ein Beispiel, wie der Mapgenerator von Minecraft (ist ja auch von Notch) funktioniert (und für mein Spiel Space Engies habe ich den in einer abgespeckten Variante nachgebaut):

Es gibt eine Höhenmap (vom Prinzip eine Graustufen-Textur), die zufällig generiert wird (dafür wird der Seed benötigt), dann aber für den Rest des Spiels auf dieser Map immer identisch bleibt. Damit kann ich also einer Koordinate in der Fläche einen Prozentwert zuordnen, nämlich genau die Pixelhelligkeit an dieser Koordinate in der Höhenmap (schwarz = 0%, weiß = 100%). Und eine Höhenmap ist ja eigentlich auch nichts anderes als ein Bild, nur erstmal in schwarz-weiß.
Jetzt lege ich zwei verschiedene solcher Höhenmaps übereinander, interpretiere die eine als Temperatur und die andere als Luftfeuchtigkeit, das heißt ich kann jeder Koordinate in der Fläche eine Temperatur (zwischen 0 und 100) und eine Feuchtigkeit (zwischen 0 und 100) zuordnen und aus einer Tabelle bekomme ich dann die Information, welches Biom diese Kombination darstellt (also z.B. heiß und trocken = Wüste, heiß und feucht = Dschungel, kalt und nass = Tundra, etc.) und vor allem bekommt man schöne Übergänge. All das nur aus zwei "Bildern"! Für die, die es interessiert: Das Ergebnis mit zwei Höhenmaps sieht in etwa so aus (man beachte vor allem die Übergänge zwischen verschiedenen Farbgebieten). Dann legt man eine dritte Höhenmap darüber, die man diesmal wirklich als Höhe interpretiert und generiert entsprechend die Höhe des Terrains daraus.

Das heißt, ich kann ein Terrain generieren mit nur drei Graustufen-Texturen. Bis hier kann man das ganze also sogar durchaus in nur einem PNG-Bild unterbringen, in den Rot-, Grün-, bzw. Blau-Komponenten. (Ich interpretiere den Rotanteil als Temperatur, den Grünanteil als Luftfeuchtigkeit und den Blauanteil als Terrainhöhe). Ob das resultierende Terrain wirklich gut aussieht am Ende, ist dann auch wieder die Frage, aber so ginge es auf jeden Fall.

Bei Minecraft ist das ganze dann noch etwas komplizierter, da kommt noch eine vierte Höhenmap hinzu, die die "Rauheit" des Terrains darstellt, sprich sind die Übergänge zwischen den Höhenunterschieden eher glatt, oder gibt es Klippen? Dann eine fünfte Höhenmap für die Dichte der Zufallsobjekte auf der Map, sprich Bäume, einzelne Felsen, usw. Insgesamt verwendet der Minecraft Terraingenerator -soweit ich weiß- insgesamt 7 Höhenmaps parallel, um Informationen über das Terrain an einer bestimmten Koordinate zu erhalten.

Mit Bildern bzw. Höhenmaps als Grundlage kann man, wenn man es richtig umsetzt, schöne Dinge machen. :)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LInsoDeTeh« (28.08.2013, 23:42)


Werbeanzeige