ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4422480
Jetzt (Chat):
25 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"ScapeMaker" von (Dirk Plate)


Das Bild zeigt eine Szene aus unserem Programm ScapeMaker. ScapeMaker ist
ein Mix aus 3D-Engine und Terragen-Clone und wird von uns (2-3 Leuten)
seit ungefähr 2 Jahren entwickelt. Dabei ging es bei uns nur um den Spaß
bei der Programmierung, könnte aber durchaus sein, dass daraus auch
irgendwann ein Spiel entsteht. Da wir dabei auch etwas lernen wollten,
haben wir so ziemlich alles selbst entwickelt und keine fertigen Libraries
verwendet (außer für Archive (ZipLibrary) und Bildformate (CxImage)).
Erstellt wurde es mit VisualStudio-C++, qt und dem DirectxSDK-9.0c.
Die Bedienung des Tools entspricht der von Terragen, d.h. man erstellt
eine Heightmap, weist Bodenarten zu, stellt den Sonnenstand ein usw. Wo
bei Terragen anschließend ein Standbild gerendert wird, erstellt
ScapeMaker eine 3D-Szene, in der man sich frei bewegen kann.
Mehr Screenshots und den Download gibt es hier.

Features und technische Beschreibung:

Terrain:
GUI: Das Terrain beruht auf einer Heightmap. Diese wird von einem
Erosion-Algorithmus erstellt und ist zudem noch Tileable (linker Rand
passt an rechten Rand und oberer Rand passt an unteren Rand). Der Algo ist
sehr einfach: Es wird von einem komplett hohen Terrain ausgegangen
(Heightmap weiß). Auf dieses Terrain werden Tropfen gesetzt, die sich
einen Weg suchen. Dabei wählen sie immer den steilsten Abstieg oder bei
mehreren Möglichkeiten eine zufällige Richtung. Während dessen trägt jeder
Tropfen etwas Erde ab... und das wars im Prinzip schon, es entstehen recht
realistische Talstrukturen. Damit nicht immer das Selbe rauskommt, können
die Parameter des Algos angepasst werden, z.B. Tropfenanzahl, Härte der
Gesteinsschichten usw.
3D: Eine 256x256er Heightmap wird in 8x8 Teile geteilt. Für jedes Teil
werden 4 verschiedene Detailstufen berechnet (z.B. 32x32, 16x16, 8x8 und
4x4 Vertices). Die Auswahl der LODs geschieht über Indexbuffer. Um die
Übergänge zwischen den LODs zu gewährleisten, besitzt jedes Teil zwei
Randbereiche (unten und rechts), für die Indexbuffer für jeden möglichen
Übergang existieren. Die Sichtbarkeitsüberprüfung der Teile geschieht über
einen Quadtree, Boundingboxes und ViewFrustum.

Textur:
GUI: Für jedes Teil des Terrains berechnet die GUI eine Textur. Diese wird
aus beliebig vielen Bodenarten-Texturen zusammengemischt, die der Benutzer
festlegt. Für jede Bodenart gibt man an, unter welchen Bedingungen diese
vorkommen soll, z.B. nur an steilen Hängen oder nur in oberen Regionen).
Zusätzlich kann man noch einstellen, wie hart die Übergänge sind, oder
eine Maske benutzen.
3D: Wie gesagt wird auf jedes Teil des Terrains eine Textur gelegt. Um
einen höheren Detailgrad vorzutäuschen, wird außerdem auf die Teile in
unmittelbarer Umgebung eine Detail-Map gelegt. Diese sollte man so wählen,
dass sie zu allen Bodenarten passt, da nur eine Detailmap existiert.

Wasser:
GUI: Das Wasser besteht auf Meer und Flüssen. Die Erstellung des Meeres
ist sehr primitiv, da nur die Höhe des Meeresspiegels einstellt werden
muss. Bei den Flüssen plaziert der Benutzer Quellen auf der Heightmap.
Anschließend wird der Verlauf des Wassers berechnet, in dem in jedem
'Frame' die Quelle eine definierte Menge Wasser ausspuckt. Da das Wasser
auf jedem Pixel der Heightmap von der Schwerkraft betroffen ist, fließt es
zu niedrigeren Nachbarpixeln. Damit bilden sich automatisch Seen und auch
Wasserfälle. Für jeden Pixel mit Wasser wird außerdem die Strömungsstärke
und uv-Koordinaten berechnet.
3D: Für die Darstellung des Meers wird 'Environment Bump Mapping'
verwendet. Da dies bei den Flüssen nicht möglich ist (schräge Flächen,
verschiedene Höhen usw.) wird dort 'Environment Cube Mapping' benutzt,
dort wird allerdings nur eine feste Cube-Map mit dem gerenderten Himmel
verwendet, also Echtzeitspiegelung nur beim Meer und nicht bei den
Flüssen. Dafür besitzen die Flüsse noch eine Strömungstextur, die sich in
Richtung des Flussverlaufs bewegt. Außerdem ist sie um so mehr sichtbar,
je größer die Strömung ist. Für die Sichtbarkeitsüberprüfung des Meers und
der Flüsse werden sie ebenfalls in Teile geteilt (wie das Terrain) und die
Sichtbarkeit über Quadtree, Boundingboxes und ViewFrustum überprüft. Das
Wasser besitzt auch eine Transparenz, die 'per Vertex' definiert wird. Per
Vertex deshalb, damit man am Ufer den Grund sehen kann und in der Mitte
des Meers nicht. Bei vielen Engines (z.B. Battlefield) entsteht dadurch
der Fehler, dass man vom Ufer aus schräg unter das Meer schauen kann. Das
umgehen wir damit, in dem wir den Boden unter Wasser mit der Farbe des
Wassers einfärben. Damit sieht es wirklich so aus, als hätte das Wasser
Dichte und wäre nicht nur eine Ebene.

Objekte:
GUI: Bei den Objekten wird zwischen dynamischen und statischen Objekten
unterschieden. Dynamisch bedeutet dabei nicht, dass sie sich bewegen,
sondern, dass deren Positionen nicht vorgegeben sind und dynamisch um die
Kamera herum plaziert werden. Dies ist für Objekte, die sehr häufig
vorkommen, wie Gras, Steine usw. sinnvoll. Bei statischen dagegen sind die
Positionen vorgegeben, dazu zählen z.B. Bäume und Felsen. Egal, für welche
Objektart man sich entscheidet, man muss die Bedingungen festlegen, unter
denen das Objekt vorkommen soll. Dies entspricht den Einstellungen bei den
Bodenarten, also z.B. Steigung und Höhe, aber auch Dichte. Bei dynamischen
Objekten wird eine Distribution-Map gespeichert, bei statischen Objekten
jede Position eines Objekts.
3D: Die statischen Objekte werden in einen Quadtree einsortiert, worüber
die Sichtbarkeit und der LOD bestimmt wird. Für jedes Mesh existiert zudem
ein Octtree zum Intersectiontesting (berücksichtigt auch den Alphawert von
Texturen). Um die dynamischen Objekte um die Kamera herum zu plazieren,
wird ein 'Grid' mit der Auflösung der Heightmap verwendet. Kommt ein neues
Segment in Reichweite der Kamera, werden auf diesem mit Hilfe der
Distribution-Map die Objekte zufällig plaziert. Verschwindet ein Segment,
werden die Positionen gelöscht. Egal welche Objektart, alle Sub-Meshes
werden in drei Listen verwaltet (nicht sichbar, sichtbar ohne alpha,
sichtbar mit alpha). Gerendert wird zuerst 'sichtbar ohne alpha', dann
'sichtbar mit alpha' nach Entfernung sortiert. Da es trotz Sortierung zu
Alpha-Blending-Fehlern kommt, wenn sich zwei Sub-Meshes überschneiden,
wird beim Rendern der Sub-Meshes mit Alpha z-Write ausgestellt.

Beleuchtung:
GUI: ScapeMaker besitzt keine Echtzeitschatten, alles wird vorberechnet.
Dafür werden direkt die Landschaftstexturen verwendet, also in diese
Texturen die Schatten eingemalt. Von jedem Pixel werden acht Strahlen zur
Sonne gezogen und die Unterbrechungen mit Terrain oder Objekten berechnet.
Durch die acht Strahlen wird die Sonne nicht als punktförmige Lichtquelle,
sondern als achteckige Fläche angesehen. Damit entstehen schöne unscharfe
Schatten. Außerdem wird auch die Neigung des Hangs zur Sonne
berücksichtigt, um schönere Schattierungen zu erhalten. Parallel dazu wird
eine Lightmap für das Wasser und eine für die dynamischen Objekte erstellt.
3D: Die Engine hat nicht viel mit der Beleuchtung zu tun. Bei der
Plazierung der statischen Objekte wird ebenfalls über Strahlen zur Sonne
deren Helligkeit bestimmt, bei dynamischen Objekte geschieht dies über die
generierte Lightmap (aus Geschwindigkeitsgründen dort keine Strahlen). Die
Sonne besitzt zudem eine Lensflareeffekt. Bei jedem Frame werden acht
Strahlen von der Kamera zur Sonne gezogen und auf Unterbrechungen
getestet. Je nach Anzahl der Unterbrechungen mit Terrain, Objekten oder
Wolken blendet die Sonne mehr oder weniger stark. Auch die Position des
Blendeffekts wird angepasst, so dass die Sonne z.B. an der Seite einer
Wolke 'vorbeilinsen' kann.

Weitere Features in Kurzform (ich habe schon zuviel geschrieben ;)):
-Höhenbasierter Nebel (Postprocessing, nur mit Vertex- und Pixelshader 2.0)
-Konsole (direkt Funktionen der Engine aufrufbar)
-Scripts (Befehle der Konsole können automatisiert aufgerufen werden)
-animierter Wolkenlayer (wird mit einem Perlin-Noise Algorithmus generiert
und per Raytracing schattiert (alles vorberechnet))
-Sternenhimmel (Positionen und Helligkeit der Sterne stimmen! Daten
stammen aus dem 'Bright Star Catalog')
-Intelligenter Distance-Fog (verbirgt garantiert jedes Aufpoppen)
-Darstellung des Himmel per SkyDome

Viel Spaß damit. Kommentare (auch kritische) und Fragen sind sehr
willkommen. :)

Ps: ScapeMaker kann übrigens sehr gut als Datengenerierer für eigenen
Projekte missbraucht werden, z.B. Terraintexturen, Skyboxen und
Wolkentexturen.






Von MCAgni am 28.03.2005, 00:10:21 Uhr
#1

Sieht sehr sehr n1ce aus ;) Mich würden noch die Wasser-Grafiken interessieren

Von Löwe am 28.03.2005, 00:32:04 Uhr
Beeindruckend! [edit]hatte ein ? statt ![/edit]

mfg
Löwe

Von GamlerHart am 28.03.2005, 01:03:02 Uhr
Ich find das ganze ne reife Leistung. Respekt!

Wirklich beeindrunkend wie das ganze zu stande Kommt. Vorallem das mit dem Fliessend-Wasser find ich geil.

Von Mr.DX am 28.03.2005, 09:41:28 Uhr
Echt der Wahnsinn. Das Programm ist sehr gut gemacht, Bedienung finde ich sehr einfach.
Weiter so. Es ist ein sehr gelungenes Projekt.

Im deinem Forum befinden sich ja auch einige erstelle Landschaften von Fans. Echt der Hammer, was man mit eurem Prog alles machen kann.

Von Dirk Plate am 28.03.2005, 11:34:51 Uhr
Freut mich, dass es euch gefällt. :)
Hier noch kleines Bild vom Wasser:
http://www.dplate.de/tmp/waterreflection.jpg

Von Fireburst am 28.03.2005, 11:55:43 Uhr
Hallo!

Also meine 1. Reaktion auf die Bilder war:
"Das ist einfach nur mehr cool!"
Dann hab ich mir den Text gelesen und ich kann es eigentlich nur nocheinmal sagen.

Vorallem das 2. Bild finde ich eindrucksvoll. Jeder FarCry-Spieler wird sich fragen, ob das FarCry ist. Macht weiter so. Das ist echt super.

mfg Wolki

Von Specialist am 28.03.2005, 12:29:08 Uhr
So weit wirklich klasse. Sieht gut aus.
Ich muss aber sagen, dass mir die Texturierungsmethode nicht wirklich gefällt. Hab mal ne 1024er Map gemacht und der hatte fast 100MB nur für Texturen belegt. Vielleicht solltet Ihr da noch was optimieren. Ansonsten wie gesagt nicht schlecht.

Von Dirk Plate am 28.03.2005, 14:24:22 Uhr
Ja, durch den hohen Speicherverbauch des Terrains kann man nur entweder kleine Terrains mit hochauflösender Textur oder große Terrains mit unscharfer Textur sinnvoll verwenden. Gegenüber Textur-Splatting (also Echtzeit-Texturieren) hat das Verfahren aber auch Vorteile:
-Keine zusätzliche Lightmap für Schatten und farbiges Licht bzw. keine Echtzeitberechnung der Schatten notwendig
-Das Rendern des Terrains ist primitiv und läuft auch auf alten Grafikkarten sehr schnell
-Beliebig viele verschiedene Grundtexturen an einer Stelle des Terrains möglich

Ich muss dir aber recht geben, würde ich jetzt eine Engine anfangen, würde ich auch Textursplatting verwenden und die Beleuchtung in Echtzeit berechnen. Die Vertex- und Pixelshader sind inzwischen so mächtig, dass die Berechnung schnell genug sein dürfte... außerdem wären dann auch Tageszeitwechsel möglich. ;)

Von Mr.DX am 28.03.2005, 14:59:07 Uhr
Was genau ist den Textursplatting? Blendet man dort 4 oder mehr Texturen im Pixel-Shader?

Von Specialist am 28.03.2005, 15:11:49 Uhr
Texture Splatting läuft so weit ich weiß über Multipass Multitexturing. Also kannste da auch so viele Texturen wie du möchtest an einer Stelle verwenden. Ob das nun notwendig ist, darüber lässt sich sicherlich streiten.

Von Morphis am 28.03.2005, 17:50:52 Uhr
Gefällt mir sehr das Projekt. Gute Arbeit.

Aber eine Frage hätte ich da noch. Das Projekt ist ja unter Windows auf Basis von Qt geschrieben worden, aber ist Qt für Windows in den aktuellen Version nicht kostenpflichtig ? Meines Wissens nach ist erst die Version 4.0 auch für Windows kostenlos erhältlich.

Von Dirk Plate am 28.03.2005, 19:19:26 Uhr
Wir benutzen das uralte qt 2.3. Das gab es auch für Windows in einer, für nicht kommerzielle Projekte, freien Version.

Von Enrico_ am 28.03.2005, 23:31:52 Uhr
Hi,

sieht wirklich gut aus. Hab sowas ähnliches für die CE geplant ;)
Auf den Bildern erkennt mans leider kaum: Werfen die Bäume auch Schatten aufs Terrain?
Und man kann auch Tag/Nachtwechsel ohne Shader machen ;)

Von Jack the Ripper am 29.03.2005, 11:21:33 Uhr
Hi,

finde die Screenshots auch recht gut und finde auch nach einem Test des Programms das ganze sehr gut gemacht.
Allerdings habe ich es damit nicht geschaft, so schönes Terrain herzuzaubern, wie auf den Screenshots - und das Wasser sah bei mir auch nicht so schön aus..?

MfG

Von Mr.DX am 29.03.2005, 12:36:07 Uhr
Hast du auch eingestellt, dass Objekte und Sky sich im Wasser spiegeln sollen?

Von Specialist am 29.03.2005, 12:42:00 Uhr
Das Problem mit dem Wasser hatte ich aber auch. Erst wenn ich ganz nah rangegangen bin hat es ordentlich alles gespiegelt.

Von Mastermind am 29.03.2005, 14:48:56 Uhr
Jahre lang fand ich 2D schöner als 3D und erst im letzten Jahr hat 3D Grafik einen Stand erreicht, wo ich ihr den Vorzug gebe. Habe z.B. nun zufällig Bilder von "Der Clou 2" gesehen. Da hatte das Orginal "Der Clou" für den Amiga ja bessere Grafik als das Low-Poly 3D was dort geboten wird. Warum ich das hier schreibe? Weil ich es sehr positiv finde, dass diese Entwicklung sich so langsam auch im Hobbybereich niederschlägt. Dies ist das dritte von bisher drei 3D IOTW die mir richtig gefallen haben.

Von matrian am 29.03.2005, 15:20:28 Uhr
Kann mich allen anderen anschließen!!! Sieht richtig gut aus!

Von Jack the Ripper am 29.03.2005, 15:57:27 Uhr
@Mr.DX:

Klar hab ich das. Von den Einstellungen, die geboten werden hab ich alles auf das beste gestellt was geht ... sogar die Auflösung auf 1920x1200 ;)

Noch ein ganz kleiner Kritikpunkt:
Wenn man viele Bäume auf der Karte hat und einen Fluss durch die Landschaft fließen lässt, dann passiert es bei mir, das auch Bäume im Wasser stehen...

MfG

Von LukasH. am 29.03.2005, 19:08:35 Uhr
Echt Super!!!
Die Grafik ist umwerfend.
Aber ne Frage:"Ist es möglich sein Projekt in ein Spiel zu Integrieren?,Muss man seine Landschaften irgendwie Exportieren?"

Von Dirk Plate am 29.03.2005, 19:35:27 Uhr
Enrico_: Die Bäume werfen (statische) Schatten auf die Landschaft. Diese werden genauso wie die Schatten von Bergen in die Landschaftstextur einberechnet.

Jack the Ripper: Egal aus welcher Entfernung betrachted, das Wasser sollte immer gleich reflektieren. Wenn ihr eine perfekte Spiegelung haben wollt: Auf dem Wasser-Panel Reflexionen auf 100%, Transparenz auf 0% einstellen und als Wellentextur 'nowaves.dds' auswählen.
Um Bäume im Wasser zur vermeiden, musst du auf dem Wasser-Panel die Maske exportieren und diese auf dem Objekte-Panel als Maske für die Bäume verwenden. Dann befinden sich keine Bäume mehr im Meer oder in Flüssen.

LukasH.: Die Engine gibt es noch nicht zur freien Verwendung in eigenen Projekten (ist auch noch nicht dafür geeignet). Wenn du aber eine eigene Engine programmierst, kannst du selbstverständlich eine mit ScapeMaker erstellte Landschaft verwenden. Alle notwendigen Daten befinden sich im Ordner "/landscapes/Es gibt schon ein paar, die Teile von ScapeMaker-Landschaften in eigenen Engines verwenden.

Von Lord Delvin am 29.03.2005, 20:15:12 Uhr
Ziemlich cool...erinnert mich irgendwie an Battle Field. ICh glaub den Algo mit der errosion test ich auch mal:)

Von Peter Müller am 31.03.2005, 09:58:55 Uhr
Einfach atemberaubend! Kleiner Kritikpunkt: Das Generieren der Landschaft braucht sehr lange, aber das ist normal.

Baut bitte irgendwie eine Moeglichkeit ein, dass man auf dem Terrain einfach nur mit einem Buggy oder so rumfahren kann (nicht in den ScapeMaker sondern ein extra Programm), ich glaube ich wuerde einfach nur stunden lang in der Umgebung umherfahren :D

Von 007beo am 01.04.2005, 13:32:04 Uhr
echt Fantastisch :)

wenn über dem Bild mit Wasser nichts drüber stehen würde, würde ich sofort an FarCry glauben, auch das Terrain und die Art der Texturierung finde ich sehr schön.

Von blue lord am 02.04.2005, 21:35:40 Uhr
Jo, sieht hammers aus. :)

Hab bei dem 2. Bild auch an FarCry gedacht.

Wär cool wenn ihr einen FarCrykonkurrenten machen würdet. :D

Von =Cy= am 04.04.2005, 12:03:32 Uhr
Beeindruckend schöne Bilder <-> Beeindruckend lange Erstellungszeit.

Von BlackAnger am 13.04.2005, 21:13:27 Uhr
HAMMER!!!