14.11.2012 Aufrufe

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Projekt</strong> MiCarpet <strong>Projekt</strong>bericht<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Abbildung 12.5: Beispiel einer XML-Konfigurationsdatei für die Landschaftsschichten in der Szene<br />

In unserem Fall haben wir uns für die erste Möglichkeit - Schichtzuweisung über die Höhe - entschieden.<br />

Die Modellierer haben dabei ähnlich wie bei den Wasserebenen die Möglichkeit, über eine XML-Datei<br />

globale und szenenspezifische Vorgaben über die benutzten Texturschichten zu machen (siehe Abbildung<br />

12.5). Wir bieten sowohl die Zuweisung von Texturen wie auch Farben für die einzelnen Schichten<br />

(oder auch die Kombination von beidem). Eine Schicht ist jeweils über eine Anfangs- und End-Höhe<br />

bestimmt, in der sie aktiv ist: so muss nicht für jede Höhe jede Schicht dargestellt werden, sondern nur<br />

im entsprechenden Bereich, was die Geschwindigkeit der Darstellung erhöht.<br />

Natürlich fehlt nun noch ein Konzept für die Überblendung mehrerer Schichten, da ein abrupter Übergang<br />

sehr störend wirkt. Wir haben daher einen Algorithmus implementiert, der jeweils aufeinanderfolgende<br />

Schichten mit den Möglichkeiten normaler 3D-Hardwarekarten überblendet.<br />

Dabei benutzen wir sogenanntes Multipass-Rendering, d.h. das selbe Objekt wird mehrmals gerendert<br />

und die Ergebnisse jeweils mit den vorigen kombiniert. Die Rendering-APIs erlauben dabei üblicherweise<br />

Standard-Rechenoperationen wie Multiplikation, Addition und Subtraktion der Ergebnisse, was wir<br />

uns hier zunutze machen. So wird für jeden Punkt im Modell für jede Schicht ein Gewicht berechnet und<br />

die Schicht später beim Rendern mit diesem Gewicht dargestellt. Wichtig ist hier natürlich, daß die Summe<br />

aller Gewichte für den Punkt immer 1 ergibt, damit letzlich eine einheitliche Helligkeit vorhanden<br />

ist.<br />

Das realisieren wir mit Multipass-Rendering, indem wir das Gewicht als Alpha(Transparenz)-Wert des<br />

Punktes betrachten: wenn wir nun alle Texturen nacheinander mit dem entsprechenden Transparenzwert<br />

addieren, so ergibt sich schließlich genau das gewünschte Ergebnis einer gewichteten Kombination der<br />

Texturen. Wie sich dies auf die Renderläufe (Passes) verteilt, ist in Abbildung 12.6 zu sehen: In einem<br />

Pass wird jeweils der Texturwert mit dem Alphawert multipliziert und das Ergebnis auf das vorige Ergebnis<br />

(vor dem ersten Lauf: schwarzes Bild) addiert. Dies kann natürlich für beliebig viele Schichten<br />

geschehen, allerdings wird mit jeder Schicht die Geschwindigkeit geringer, weil für jede Schicht das Modell<br />

einmal komplett gerendert werden muss. Wie man sieht, ergibt sich als Ergebnis eine Art Shading-<br />

Baum für die Berechnung (insofern ähnlich zum allgemeinen Shading-Baum in [?]). Um auch noch ein<br />

allgemeines Zusammenblenden mit Farbwerten zu erlauben, kann (falls in der Konfiguration aktiviert)<br />

vor die Textur-Passes auch noch ein voriger Pass gesetzt werden, der das Terrain nur mit interpolierten<br />

Farben rendert.<br />

Die Alpha-Werte für jeden Punkt werden auch jeweils dynamisch berechnet: dazu wird für jede Schicht<br />

eine eindimensionale Alpha-Textur generiert, die jeweils als Blending-Wert für die entsprechende Höhe<br />

angibt. Jeder Punkt erhält dafür eine zusätzliche Texturkoordinate, die seiner Höhe entspricht, und mit<br />

der dann beim Rendern auf die Alpha-Textur zugegriffen wird. Wie schon oben erwähnt, ist es wichtig,<br />

daß zu jedem Punkt die Summe der Alphawerte exakt 1 ergibt. Dies realisieren wir, indem wir für<br />

jede Schicht den Mittelpunkt des Bereichs nehmen und mit steigender Abweichung des Höhenwertes<br />

6. Januar 2005 Seite 100

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!