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:
4408188
Jetzt (Chat):
23 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-
"3D Raumszenerie" von Stephan Reiter (Reita)


'lo Leute! Es ist wieder einmal Zeit, dass ich ein bisschen herzeige, woran ich im Moment werkle - zur Motivation für mich, und vielleicht auch ein wenig für euch ;-)

Naja, wie man auf den ersten Blick sehen kann, handelt es sich um eine 3D Raumszenerie. Da ich, was das Erstellen von 3D Models betrifft, kaum begabt bin, habe ich mich zu Beginn dieses Projekts erst einmal um schöne Modelle für die Raumschiffe umsehen müssen. Da die Homeworld-Spielereihe zu einer meiner liebsten gehört, war die Entscheidung eigentlich recht schnell getroffen - im Internet (3D Café, etc.) habe ich eigentlich nur hässliche 3D Objekte finden können.

Zuerst musst ich mich was das Dateiformat der HW-Schiffe betrifft einmal im Internet schlau machen, und habe dann mit den Arbeiten an einem Konverter begonnen. Dieser Konverter hatte einige Aufgaben zu erfüllen, wie die Ausgabe des Meshes in ein .x-File, Auslesen der Schiffsinformationen, wie z.B. über die Waffen, etc.
Weiters habe ich mich darum bemüht, das Rendern der Schiffe etwas zu beschleunigen: HW-Meshes sind mit einer Vielzahl von kleinen Texturen(16x16, 32x32, etc.) überzogen. Um nicht Leistung durch andauerndes Wechseln der Texturen zu verlieren, habe ich dann ein Programm geschrieben, welches sämtliche Schiffstexturen lädt (auch in einem proprietären Format) und diese dann mit Hilfe eines 2D BSP-Trees zu einer großen kombiniert.

Da ich schon HW-Schiffe verwendete, habe ich auch dann gleich die Homeworld'sche Technik zum Rendern von bunten Hintergründen übernommen. Weil für HW bereits viele Tools zur Erstellung von Hintergründen vorhanden sind, habe ich mich als "Reverse Engineer" betätigt und das Dateiformat dieser durch Probieren herausgefunden (im Internet existierte damals keine Beschreibung des Dateiformats und Relic war auch nicht zu Auskünften zu bewegen) - und dies ein paar Wochen, bevor die Engine freigegeben wurde, doh! Trotzdem hats Spaß gemacht ;-)

Um die weiten Leeren des Weltraums zu Füllen, habe ich dann schließlich noch Klassen für Sonne und Planeten geschrieben, die dynamisch via Zufallsvariable initialisiert werden, und somit leicht verschiedene Sonnensysteme erzeugt werden können ... Für das Rendern von Planeten wird eine mit Perlin Noise erstellte Heightmap-Textur verwendent, welche dann in einem Pixel Shader für Blending-Operationen als Basis dient.

Nun zu den Screenshots:
(links oben) Dieser Screenshot zeigt die Verwendung von Stencil Shadow Volumes zur Schattenberechnung. Die Sonne wird hier nicht als einfaches Punktlicht sondern als "Kugellicht" behandelt, was korrekte Planetenschatten - wie auf dem Screenshot - ermöglicht. Wenn ihr Fragen dazu habt, kann ich euch da gerne nähere Auskunft geben ...

(rechts oben) Die Schiffe werden von neuronalen Netzen gesteuert - mit dem Ziel, sich gegenseitig zu jagen und zu zerstören.

(links mitte) Der DirectX Mesh Viewer zeigt ein in das .x-Format umgewandeltes Schiff.

(rechts mitte) Die Schiffe dieser Simulation besitzen eine Star Trek-ähnliche Tarnvorrichtung :-) Dazu muss pro Schiff eine Cubemap der Umgebung gerendert werden - in einem Pixel Shader wird dann über den Fresnel Term zwischen Brechung und Reflektion beblendet. Ein Vertex Shader versetzt die Vertex-Positionen in Sinusform und erzeugt so einen schönen "Wobble-Effekt". Der Übergang zwischen getarnt und enttarnt ist am aufwendigsten: Hier wird wiederum zwischen normalem Rendern und dem Tarnungseffekt geblendet, was allerdings auf diesen Screenshots nicht zu sehen ist, da das ganze nur in Bewegung gut aussieht ...

(links unten) Der DirectX Mesh Viewer zeigt einen typischen Homeworld Hintergrund, welcher eine Kugel ist! Die schöne Farbgebung entsteht durch Interpolation der Vertex-Farben ...

(rechts unten) Neben Screenspace-Glow habe ich auch eine "künstliche Iris" zur 3D-Engine hinzugefügt: In einem ersten Schritt wird die ganze Szenerie in eine 32x32 Texture gerendert, was recht schnell geht. Von allen gerenderten Pixeln wird dann der Helligkeits-Mittelwert berechnet, welcher gleich dem in der "künstlichen Iris" eintreffenden Licht ist. Dieser Wert wird dann weiter verwendet, um die Lichter in der Szenerie so zu skalieren, dass die durchschnittliche Lichtintensität bei 1 liegt.
Auf dem ersten Teilbild verdeckt der Planet das halbe Bild, was zu aufgehelltem Rendern u. a. des Hintergrunds führt. Entfernt sich nun der Planet zunehmend, sieht man mehr vom helleren Hintergrund, was zu einer Herunterskalierung des Lichts führt ...
Die Kästchen jeweils links oben in der Ecke zeigen einen Bildpunkt vergrößert an, um den Vergleich zwischen den Bildern leichter zu machen. Die Zahl daneben ist die Helligkeit im Bereich [0; 255] ...

Das wars erst einmal von mir, vielen Dank für eure Aufmerksamkeit :-)
Stephan






Von ChrisM am 24.10.2003, 00:07:39 Uhr
Hi,

erster! :)

Mir fällt dazu nur eins ein: Wow! :D

Oft heißt es ja, Weltraumspiele seien zum Anfangen gut, weil sie ganz simpel zu machen sind, aber eins weiß ich: Das, was du da gemacht hast, das ist alles andere als simpel!

Vor allem die Tarnung gefällt mir sehr gut, auf so eine Idee muss man erst kommen (mir wär außer mit Emissive das Schiff teiltransparent rendern vermutlich nichts eingefallen).

Eine Frage zu den Planeten: Haben die LOD-Stufen, so dass man wirklich nah an die ranfliegen kann und immernoch eine gutaussehende Landschaft hat?
Und was ist dieser Hintergrund, warum verwendest du nicht einfach eine Skybox (wenn die Perspektive bei dir stimmt, dürfte man bei statischen Hintergründen keinen Unterschied sehen)?

Wird das Ganze (irgendwann veröffentlich)?

Gruß,
ChrisM

Von Eisflamme am 24.10.2003, 00:08:21 Uhr
Hallo,

das nenne ich mal eine ausführliche Beschreibung. :)
Habe mir tatsächlich alles durchgelesen und finde, dass das sher schön aussieht. :)
Aber auf dem Bild oben links sieht der Schatten ansich schon wie eine Kugel aus und der Hört einfach auf, das sieht ein wenig komisch aus. ???
Das Feuer oben rechts sieht auch sehr schön gemacht aus. =)
Naja, kritisieren kann ich leider nichts, da ich im 3D Gebiet nicht tätig bin, mach jedenfalls weiter so! :)

MfG MAV

Von JanBacke am 24.10.2003, 00:16:47 Uhr
Jo saubere Arbeit Reita. Schade das man den Cloakeffekt bei statischen Bildern so schlecht sieht. Aber ich kenn ihn ja und er ist Hammer =)
Respekt

Von BertoSmasher am 24.10.2003, 00:29:06 Uhr
hi knuddel-reita
sieht echt klasse aus :D

Von Marc7759 am 24.10.2003, 01:45:55 Uhr
Jo, mein Lob hast du auch...
Sieht wirklich super aus!!!

Jedoch fällt auf, dass das alles sehr grell erscheint... Das spielt zwar scheinbar immer in der Nähe der Sonne, aber ich glaube dennoch, dass es im Weltraum sehr viel dunkler währe. Aber gut, 1. war ich nie im Weltraum so nah bei der Sonne und 2. gilt ja künstlerische Freiheit...

Also, weiter so!!!

Von Gaunlet am 24.10.2003, 06:00:12 Uhr
Wow !
Sieht echt gut aus :D !
Die explosion is so richtig stimmhaft, und das bild darunter wirkt auch richtig Atmosphaerisch ;)!

mfg Gaunlet

Von holladrio am 24.10.2003, 08:24:22 Uhr
Der Schatten ist nicht natürlich. Es fehlt der Halbschatten. Bei der Nähe zur Sonne kann der aber auch überstrahlt werden.

Von Reita am 24.10.2003, 09:19:12 Uhr
Also ich muss auch 'wow' sagen! - Ich hätte nicht gedacht, dass diese paar Bilder so gut ankommen :D
Danke erstmal für eure netten Kommentare, ich glaube, das ist die nötige Motivation, die ich manchmal brauche ;)

ChrisM:
- Die Planeten haben im Moment eigentlich keine verschiedenen LOD-Stufen, da die Hauptarbeit beim Rendern bei einem Pixel Shader liegt. Das hieße man könnte dann eigentlich ziemlich nahe zum Planeten fliegen, wenn ich die Perlin-Noise Textur einfach vergrößern würde ...
- Bezüglich deiner Frage zum Hintergrund: Natürlich könnte ich zuerst einmal diese Homeworld-Hintergründe in Skyboxes rendern, aber der Vorteil von diesen ginge dann verloren. HW verwendet Meshes, die so um die 1000 Vertices haben - das heißt zwar etwas mehr Arbeit beim Transformieren für die Graka, aber so braucht das ganze aber wesentlich weniger Speicherplatz als vergleichsweise 6 512x512 Texturen ...
- Bezüglich der Veröffentlichung kann ich eigentlich nichts sagen - im Moment hat es eher Bildschirmschoner-Charakter als den eines Spiels ;)

Mis2Com:
Ja, du hast recht, der Schatten sieht vielleicht am Anfang ein bissl komisch aus, aber der stimmt schon so wie er is :D
Verfolge einfach einmal die zwei Schattenlinie zur Sonne - du wirst sehen, dass sie sie genau berühren. Das heißt: Innerhalb des Shadow Volumes sieht man keine Sonne, außerhalb sieht man sie ganz/teilweise ...

Marc7759:
Dafür ist hauptsächlich der bunte HW-Hintergrund verantwortlich :) Aber schwarz wäre einfach langweilig ;)

holladrio:
Jo, du hast recht, aber mit Shadow Volumes lassen sich Halbschatten nur schwer, wenn überhaupt, erreichen. So habe ich mich auf die Vollschatten beschränkt ...

Nocheinmal, danke für die Kommentare und jetzt: fleißig weiterschreiben :D

Von Fastjack am 24.10.2003, 10:29:27 Uhr
Mir gefällt das auch sehr gut. Bin auch Homeworld Fan. Du hast da ja mehr rausgeholt als Relic selbst :D
Das mit dem Shadowvolume ist aber ja nicht ganz richtig, weil die Spitze Kuppel hinter dem Planeten ja nichts schattiert. Dort ist ja nichts, das den Schatten aufnehmen kann...

Von Reita am 24.10.2003, 10:40:47 Uhr
Keine Angst, das ist Absicht: Im ersten Screenshot wird das Shadow Volume in den Backbuffer gezeichnet; fürs Vorführen halt ; Rechts unten ist es dann eh wieder verschwunden ...

Von mastre2 am 24.10.2003, 11:04:55 Uhr
Echt cool
Homeworld 1 lebt
Bin absoluer HW fan und bin gerade mit hw2 beschäftigt
es ist gut zu wissen dass man sich auf ein hw like spiel freuen kann
Neurale netze zur steuerung klingt interessant
Respekt
weiter so

Von ChrisM am 24.10.2003, 11:09:14 Uhr
Hi,

Zitat:
(links oben) Dieser Screenshot zeigt die Verwendung von Stencil Shadow Volumes zur Schattenberechnung. Die Sonne wird hier nicht als einfaches Punktlicht sondern als "Kugellicht" behandelt, was korrekte Planetenschatten - wie auf dem Screenshot - ermöglicht. Wenn ihr Fragen dazu habt, kann ich euch da gerne nähere Auskunft geben ...

*meld*

Wie ist das Kugellicht implementiert?

Und noch eine Frage (weil's mich selbst auch grade betrifft): Sind deine Shader in Assembler geschrieben oder in CG/HLSL?

ChrisM

Von joeydee am 24.10.2003, 11:26:20 Uhr
Respekt! Da hast Du Dich ja tief in die Technik reingekniet!

Du sagst, die Homeworld-Hintergründe bestehen aus Kugeln, die Farbgebung entsteht durch Vertexfarben-Interpolation. Also keine Textur drauf? Heißt das, man kann z.B. keine Sterne rendern?
Aber wie Du schon sagtest - schwarz ist langweilig. Im Inneren von leuchtenden Gaswolken ist es viel interessanter :-) Ergibt auch irgendwie einen Stil ähnlich SciFi-Zeichentrick, wie z.B. Titan A.E., sehr atmosphärisch!

Der Iris-Effekt beeindruckt mich auch.

Von Swordfighter am 24.10.2003, 14:15:44 Uhr
Zitat:
Bezüglich der Veröffentlichung kann ich eigentlich nichts sagen - im Moment hat es eher Bildschirmschoner-Charakter als den eines Spiels
Ich haette auch nichts gegen so einen Screensaver =)

Von MULTIVITAMIN am 24.10.2003, 15:03:27 Uhr
Ein Screensaver wäre schon geil :D

Von Peter Müller am 24.10.2003, 20:07:03 Uhr
Sieht echt gut aus!

Kannst du mal ein Video von dem Übergang getarnt-nicht getarnt und umgekehrt ins Internet stellen?
Würd ich echt gern mal sehen :)

Von Reita am 25.10.2003, 11:39:00 Uhr
Ein Video, das den Tarnungseffekt zeigt, könnt ihr euch hier ansehen. [DivX 5, 203kb]
... wegen Kugellichtern reden wir in irc ;)

Von Striker1111 am 25.10.2003, 12:54:05 Uhr
Das Bild oben links sieht etwas merkwürdig aus, weil ja dieser schwarze Kegel den Hintergrund verdeckt, auf dem ja kein Schatten liegt. Ansonsten seeehr schick. Der Effekt sieht genial aus.
Also so nen Screensaver hätt ich auch gerne ;)

Von GenkiOjousan am 26.10.2003, 16:40:02 Uhr
Nette Sache das... *puh ich lass das mal mit dem großschreiben =)*
und das video ist ja mal richtig cool...
mach nen SCREENSAVER sonst sind wir alle beleidigt und sauer! =)


weiter so!