Posts mit dem Label Beleuchtungsmodelle / 3D-Effekte / Render-Techniken / HDR-Rendering werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Beleuchtungsmodelle / 3D-Effekte / Render-Techniken / HDR-Rendering werden angezeigt. Alle Posts anzeigen

Planetary Rendering, Evasion-Artikelverzeichnis

Die einstmals so populären Weltraumspiele fristeten bis vor kurzem noch ein Nischendasein – einer vom Aussterben bedrohten Spezies gleich. Mittlerweile hat jedoch ein Umdenken stattgefunden, und immer mehr Spieler und Entwickler beginnen sich für dieses Genre zunehmend neu zu begeistern.
Die Zeiten, in denen simple texturierte Kugeln – Planeten und Monde – leb- und lieblos im Weltraum positioniert wurden, sind gottlob vorbei. Die Leistungsfähigkeit moderner Computer ermöglicht heutzutage die Darstellung von detaillierten Planetenoberflächen und ganzen Galaxien – in einem einzigen Spiel.

Eine Internet-Recherche zu diesem Thema (Planetary Rendering) für unser neues Weltraum-Spieleprojekt (http://www.space-combat-and-strategy.spieleprogrammierung.net/) führte zu den Publikationen Eric Brunetons, im Artikelverzeichnis des EVASION-Teams:

Atmosphärische Streulichtberechnungen (Realtime Atmospheric Scattering)

Ob dynamische Tageszeitänderungen oder eine realistische Planetendarstellung, was noch vor wenigen Jahren undenkbar erschien, gehört mittlerweile zum Alltag eines 3D-Programmierers. Physikalische Streulichtberechnungen bilden die Grundlage für die Darstellung der korrekten Himmelsfarben in Abhängigkeit vom Sonnenstand und der Kameraposition innerhalb bzw. außerhalb der Atmosphäre.
Treffen die einfallenden Lichtstrahlen auf Teilchen (Luftmoleküle) in der Atmosphäre, deren Durchmesser deutlich kleiner sind als die Wellenlängen des sichtbaren Lichts, kommt es zur sogenannten Rayleigh-Streuung. Während die roten Lichtanteile die Atmosphäre nahezu ungestört durchqueren können, wird blaues Licht sehr viel stärker gestreut. Als Folge davon erscheint der Himmel am Tage blau und in den Dämmerungsstunden rötlich.
Im Unterschied dazu streuen Teilchen, deren Durchmesser in etwa den Wellenlängen des sichtbaren Lichts entsprechen (Aerosole, Rauch, Nebel), das einfallende Licht unabhängig von seiner Farbe auf gleiche Weise. Dieser als Mie-Streuung bekannte Vorgang ist für den grauen Himmel an einem regnerischen Tag oder bei Smog verantwortlich.

Die nachfolgenden Links sollten Ihnen bei der Einarbeitung in das doch recht komplexe Thema sowie bei der praktischen Anwendung (Integration in ein Spieleprojekt bzw. eine 3D-Engine) behilflich sein:


Vorstellung der OpenGL-Tutorialserie von Etay Meiri

Interessierte Entwickler, die sich in die OpenGL-Programmierung einarbeiten möchten, sollten sich einmal etwas näher mit der von Etay Meiri veröffentlichten Tutorialserie über die Grundlagen der OpenGL-Programmierung befassen. Zwar wurden die einzelnen C/C++-Programmbeispiele unter Verwendung der NetBeans-Entwicklungsumgebung für Ubunu Linux entwickelt, gleichwohl sind die Tutorials auch für Windows-Entwickler sehr lehrreich, da die zum Einsatz kommenden Techniken ausführlich beschrieben und erklärt werden.

Hier eine kurze Inhaltsübersicht:

  • Erzeugen einer fensterbasierten OpenGL-Anwendung
  • Zeichnen von Punkten und Dreiecken
  • Transformationen (Skalierung, Rotation und Translation)
  • Einführung in die GLSL-Shader-Programmierung
  • Kamerabewegung
  • Texture Mapping
  • Ambiente, Diffuse und Spiegelnde Beleuchtung
  • Direktionale Lichtquellen, Punktlichter und Spotlights
  • Laden von 3D-Modellen unter Verwendung der Open Asset Import Library (Assimp)
  • Shadow Mapping
  • Verwendung von Sky Boxen
  • Normal Mapping
  • Einsatz des Geometry Shaders bei der Billboard-Darstellung
  • Partikelsysteme mit Transform Feedback

Tessellation

Entscheidend für den Realismus einer 3D-Szene ist der Detailreichtum (Level Of Detail; LOD) der dargestellten 3D-Objekte. Die Anzahl der Details, die wir wahrnehmen können, ist entfernungsabhängig und steigt mit Verringerung des Abstandes rasch an. Da Grafikkarten mit jeder neuen Generation immer leistungsfähiger werden und zudem über mehr und mehr Speicher verfügen, können immer detailreichere Objekte dargestellt werden; nichtsdestotrotz sollte der Detailgrad eines Objektes mit zunehmendem Abstand verringert werden, um die Rechenleistung nicht unnötig zu verschwenden.

In diesem Sinne bietet es sich an, zunächst einmal mehrere Detailstufen (LOD-Stufen) eines 3D-Modells in den Grafikspeicher zu laden und dann zur Laufzeit die zu verwendende LOD-Stufe anhand des momentanen Kameraabstands auszuwählen.

Die Tessellation verfolgt nun einen gänzlich anderen Ansatz – man beschränkt sich darauf, lediglich Low-Poly-Versionen der 3D-Modelle in den Grafikspeicher zu laden und berechnet die zusätzlichen Details in Abhängigkeit vom Kamerabstand zur Laufzeit auf der GPU (Displacement Mapping), wobei die Dreiecksgitter, aus denen die 3D-Modelle aufgebaut sind, entsprechend verfeinert werden (Mesh Refinement, Tessellation).


Vorstellung der Vorlesungs-Reihe: Advanced Computer Graphics (West Virginia University, 2010)

Interessierte Entwickler, die sich in die OpenGL-Programmierung einarbeiten und mit dem Thema „fortgeschrittene Computergrafik“ befassen möchten, sollten sich einmal etwas näher mit der im Jahre 2010 an der West Virginia University gehaltenen Vorlesungs-Reihe Advanced Computer Graphics befassen.
Zu allen behandelten Themengebieten stehen ausführliche Vorlesungsskripte (PDF-Dateien) zur freien Verfügung, die sich separat lesen und herunterladen lassen.

Crysis – Next-Gen-Grafikeffekte

Eine Recherche über die im Spiel Crysis zum Einsatz kommenden Techniken beim Ocean-Water-Rendering lenkte unsere Aufmerksamkeit auf eine Powerpoint-Präsentation (78 Folien) von Tiago Sousa aus dem Jahre 2008 – Crysis Next Gen Effects.

Auf insgesamt 20 Folien wird auf die Vorgehensweise bei der Wasserdarstellung eingegangen. Konkret betrachtet werden die

  • Water Surface Tessellation (Darstellung von 3D-Wasserwellen)
  • Physikalische Interaktion mit der Wasserfläche
  • Darstellung von Reflektionen
  • Darstellung von Refraktionen
  • Darstellung von Kaustiken (Unterwasser-Lichtspiele)
  • Darstellung von Strand- und Uferabschnitten sowie von Schaumkronen
  • Unterwasser-God-Rays (Light Scattering)
  • Kamera/Partikel-Interaktionen (Bsp. Wasserspritzer beim Auftauchen)

Deferred Lighting

Die grundlegende Idee hinter dem Deferred Lighting lässt sich in nur einem Satz beschreiben – um Rechenzeit einzusparen, sollten Beleuchtungsberechnungen nur für diejenigen Szenenpixel durchgeführt werden, die man auch wirklich auf dem Bildschirm sieht. So sinnvoll dieser Ansatz auch erscheinen mag, lies er sich bis vor wenigen Jahren praktisch nicht realisieren, denn die damaligen Grafikkarten verfügten über zu wenig Platz zum Speichern der für die Berechnung benötigen Zusatzinformationen. In älteren Spielen erfolgte die Beleuchtung der 3D-Objekte daher stets zeitgleich mit dem Rendering (Forward Rendering).

Bevor die eigentlichen Beleuchtungsberechnungen durchgeführt werden können, müssen die hierfür benötigten geometrischen Informationen zunächst in die nachfolgend beschriebenen Texturen gerendert werden, die allesamt an einen als G-Buffer (Geometry Buffer) bezeichneten Framebuffer gebunden sind:

  • Textur 1: Kameraraum-Positionen und Tiefenwerte der sichtbaren Szenenpixel
  • Textur 2: Kameraraum-Normalen der sichtbaren Szenenpixel
  • Textur 3: Die texturierten, jedoch nicht beleuchteten sichtbaren Szenenpixel
  • Textur 4: Reflektionsvermögen (Farbe und Intensität) der sichtbaren Szenenpixel
  • Textur 5: selbstleuchtende Szenenpixel (Bsp. mittels Light Map beleuchtet)


Vorteile des Deferred Lightings:

  • Der Rechenaufwand für die Beleuchtung ist unabhängig von der Komplexität der Szenen-Geometrie
  • Es lassen sich deutlich mehr Lichtquellen berücksichtigen als beim Forward Rendering
  • Die im Rahmen des Deferred Lightings benötigten Szeneninformationen lassen sich auch im Rahmen weiterer Post-Prozessing-Effekte verwenden (Bsp. Light Scattering, Screen Space Ambient Occlusion)

Light Propagation Volumes – Indirekte Beleuchtung (Global Illumination) in der CryEngine 3

Im Rahmen eines 44-seitigen Artikels (Light Propagation Volumes in CryEngine 3) geht der Autor Anton Kaplanyan (Crysis) detailliert auf die in der CryEngine 3 verwendete Technik für die Echtzeit-Berechnung der indirekten Beleuchtung ein und vergleicht diese mit alternativen Ansätzen (precomputed light transport, instant Radiosity, photon mapping, geometry approximation).

Grundlage der hier vorgestellten Light-Propagation-Volume-Technik ist die von Dachsberger und Stamminger beschriebene Reflective-Shadow-Maps-Methode, bei welcher jeder Szenenpixel als eine indirekte Lichtquelle betrachtet wird. Im Unterschied zu einer klassischen Shadow Map wird in einer Reflective Shadow Map nicht nur der Tiefenwert eines Pixels aus der Blickrichtung der Kamera gespeichert, sondern darüber hinaus auch dessen Position im Weltkoordinatensystem sowie die für die Beleuchtungsberechnung benötigte Normale.


Crysis – Planung und Entwurf der CryEngine 2

Ein im Rahmen der SIGGRAPH 2007 veröffentlichtes 25-seitiges PDF-Dokument von Martin Mittring (Finding Next Gen – CryEngine 2) befasst sich detailliert mit der Planung und dem Entwurf der CryEngine2.


Inhaltsübersicht:

  • Anforderungen, die das Spiel Crysis an die Game Engine stellt
  • Diskussion der in der CryEngine 1 (Far Cry) verwendeten Techniken hinsichtlich ihrer Limitierungen und ihrer möglichen Wiederverwendbarkeit
  • Vorstellung der in der Cry Engine 2 verwendeten Techniken
  • Direkte Beleuchtung und Schattenberechnungen
  • Indirekte Beleuchtung (Realtime Ambient Maps)
  • Screen-Space Ambient Occlusion
  • Level Of Detail Berechnungen für 3D-Objekte und Wasserflächen

Screen Space Ambient Occlusion (SSAO)

Obwohl die Grafikkarten mit jeder Generation immer leistungsfähiger werden, ist es auch heutzutage nur eingeschränkt möglich, globale Beleuchtungsmodelle im Rahmen von Echtzeit-Anwendungen zu implementieren. Lange Zeit begnügte man sich mit dem Einsatz von sogenannten lokalen Beleuchtungsmodellen, bei denen man lediglich den Einfluss der einzelnen Lichtquellen berücksichtigt und die indirekte (ambiente) Beleuchtung durch einen konstanten Faktor annähert. Die Schwierigkeit, indirekte Beleuchtungseinflüsse zu berechnen, ergibt sich aus der Tatsache, dass jede sichtbare Oberfläche Licht reflektiert und damit zur Beleuchtung oder Abdunkelung benachbarter Oberflächen beiträgt.

Mithilfe der Screen Space Ambient Occlusion (SSAO) Technik ist es möglich, die indirekte Beleuchtung im Rahmen des Post Processings einigermaßen glaubwürdig zu realisieren. Es muss betont werden, dass es sich beim Ambient-Occlusion-Modell (Umgebungsverdeckung) um ein rein empirisches Verfahren handelt, welches auf der alltäglichen Beobachtung basiert, dass Flächen bzw. Szenenpixel, die im geringen Abstand von anderen Flächen umgeben sind, dunkler erscheinen als freiliegende Flächen. Ein weiteres Problem ergibt sich aus der Tatsache, dass im Screen Space nur ein Teil der für die Verdeckungs-Berechnung benötigten geometrischen Informationen zur Verfügung steht (nämlich nur das, was man sieht), wodurch es nahezu zwangsläufig zu Berechnungsfehlern und Artefaktbildung kommt.


Links:


Seminararbeit von Michael Firbach aus dem Jahr 2009 (Deutsch):



3D-Effekte und Render-Techniken in Starcraft 2

Ein im Rahmen der SIGGRAPH 2008 veröffentlichtes 32-seitiges PDF-Dokument von Dominic Filion und Rob McNaughton (beide Blizzard Entertainment) behandelt detailliert die in Starcraft 2 eingesetzten 3D-Effekte und Render-Techniken.

High Dynamic Range Rendering in OpenGL

Das 25-seitige PDF-Dokument von Fabien Houlmann und Stéphane Metz von der
université de technologie Belfort-Montbéliard (utbm) geht detailliert die Umsetzung des High Dynamic Range (HDR) Renderings mithilfe der OpenGL-API ein.

Über das Beleuchtungssystem in Half Life 2 (Source Engine)

Das nachfolgende, bereits im Jahr 2004 von ATI und Valve veröffentlichte PDF-Dokument, behandelt auf 97 Seiten voller Schaubilder und Source-Code-Beispielen das in Half Life 2 implementierte shaderbasierte Beleuchtungssystem. Im Fokus stehen dabei das im Spiel zum Einsatz kommende Radiosity Normal Mapping sowie die Wasserdarstellung.

Lokale Beleuchtungsmodelle – Theorie und Implementierung

Die Implementierung von Beleuchtungsmodellen zählt zu den zentralen Aufgaben der Shader-Programmierung. Generell unterscheidet man zwischen lokalen und globalen Beleuchtungsmodellen.

Light Scattering (A.K.A. Light Shafts, God Rays)

Light-Scattering-Effekte – auch bekannt als Light Shafts oder God Rays – kommen mittlerweile in vielen modernen Computerspielen zum Einsatz. Vergisst man einmal für einen kurzen Augenblick die physikalischen Prozesse, die hinter diesem Phänomen stehen, dann wirken die Lichtstrahlen, die die Wolkendecke an ihren lichteren Stellen durchbrechen, in der Tat wie von Gott gesandt – daher die archaische Bezeichnung God Rays.