Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Severin Karner Geändert vor über 10 Jahren
1
Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Dozent: Prof. Dr. Manfred Thaller Referentin: Maike Wosnitza Effekte I
2
Inhalt Nebel Beleuchtung Alpha-Blending Multi-Texturing
3
Nebel 1. Realistischer 2. Verhindert Grafikfehler – Objekte springen nicht plötzlich aus dem Nichts 3. Fördert enorm die Atmosphäre Nebelarten Linearer Nebel (feste Start- und Enddistanz) Exponentieller Nebel (keine Start- und Enddistanz) einfach exponentieller Nebel quadratisch exponentieller Nebel
4
Nebel Nebel mit Direct3D Vertexnebel Pixelnebel Tiefennebel (Tiefe z-Koordinate des Pixels bzw. des Vertex) Entfernungsnebel (tatsächliche Entfernung zur Kamera) Entfernungsnebel funktioniert nicht zusammen mit Pixelnebel
5
Nebel – Render-States
7
Nebel Beste Einstellung: Hängt vom Einzelfall ab Generell: Vertexnebel (schnell zu berechnen) + Entfernungsnebel
8
Beleuchtung Durch Beleuchtung ist das Gehirn in der Lage, Objekte räumlich zu erfassen Lokale Beleuchtungsmodelle: Lichttypen: Punktlichter – geben Licht in alle Richtungen ab Spotlichter/Scheinwerfer – bündeln Licht in einen mehr oder weniger engen Lichtkegel Falloff – Wert, der bestimmt, in welcher Form die Lichtstärke zwischen dem inneren und dem äußeren Lichtkegel abfällt (bei 1 linear) Richtungslichter – extrem weit entfernt, so dass sie scheinbar Licht in nur eine Richtung abgeben (Strahlen nahezu parallel) Hintergrundlicht
9
Beleuchtung Einfallswinkel: Winkel zwischen dem Normalenvektor der Oberfläche und der Verbindungslinie zwischen Oberfläche und Lichtquelle Oberflächen, die senkrecht (0°) zu einer Lichtquelle stehen sind am meisten beleuchtet Je kleiner der Einfallswinkel, desto stärker die Beeinflussung des Lichts Effektive Reichweite: alles was dahinter liegt, kann man sich von der Berechnung her sparen Material: kann jedem Objekt Material zuordnen – bestimmt Eigenschaft der Oberfläche und wie es auf Licht reagiert
10
Beleuchtung Farben: Additive Farbmischung (alle Farben zusammen = weiß) Materialstreufarbe + Lichtstreufarbe Zusammen mit Faktor, der bestimmt, wie stark die Oberfläche vom Licht beeinfluss ist (Einfallswinkel), kann die resultierende Farbe berechnet werden: Farbe = f * Lichtstreufarbe * Materialstreufarbe Glanzkraft: Wenn der reflektierte Strahl direkt in die Kamera fällt oder nahe vorbeifliegt, muss ein Glanzeffekt entstehen Glanzfarbe meistens weiß
11
Beleuchtung
12
Eigenfarbe: Eigenhelligkeit (z.B. Bildschirme) wird hinzu addiert Bisherige Gleichung:
13
Beleuchtung Beleuchtung auf Vertexbasis Nachteil: Beleuchtung auf Vertexbasis reicht nicht aus Light Mapping – Der Lichtfleck wird in Form einer Textur aufgelegt
14
Beleuchtung Glättungsgruppen: trennen, welche Objekte glatt sind und welche scharfe Kanten haben In der Praxis nur eine Zahl – alle Dreiecke mit derselben Glättugnszahl, bilden eine glatte Kante Materialien verdrängen fast vollständig Vertexfarben (D3DMATERIAL9)
15
Beleuchtung IDIRECT3DDEVICE9::SETMATERIAL aktiviert Material GETMATERIAL fragt aktuelles Material ab
16
Beleuchtung G_PD3DDEVICE- >SETRENDERSTATE(D3DRS_LIGHTING,TRUE) Besser D3DRS_COLORVERTEX auf FALSE setzen (sichergestellt, dass Material verwendet wird) Nach getaner Arbeit Einstellungen wieder zurücksetzen Glanzeinstellung über D3DRS_SPECULARENABLE auf TRUE setzen
17
Beleuchtung
19
Wie viele Lichter ein Gerät zur Verfügung stellt: MAXACTIVELIGHTS der D3DCAPS9-Struktur Es ist besser, nicht so viele Lichter gleichzeitig zu setzen, da die Bildrate dadurch schlechter wird Bei nicht uniformen Skalierungen: Render-State D3DRS_NORMALIZENORMALS aktivieren
20
Alpha-Blending Dazu da, teilweise transparente oder durchsichtige Objekte zu zeichnen Alte Bildpunkt spielt noch eine Rolle – wird mit neuem Pixel auf bestimmte Weise verknüpft Objekte werden von hinten nach vorne gezeigt Jede Farbe hat einen Alphawert Muss festgelegt werden, wie sich der Blendfaktor vom alten und neuem Pixel berechnet – bestimmt Anteil einer Farbe am Gesamtergebnis
21
Alpha-Blending Je höher der Alphawert des neuen Pixels ist, desto stärker beeinflusst er die endgültige Farbe Aktivierung: D3DRS_ALPHABLENDENABLE – TRUE
22
Alpha-Blending
23
Verknüpfen von altem und neuem Pixel: Render-State D3DRS_BLENDOP
24
Alpha-Blending Woher kommt der Alphawert? Bei Vertexfarben – aus den Vertexstreufarben (auch im Fall von Materialen – Streufarben) Ablauf des Zeichnens: 1. Bildpuffer & Z-Buffer leeren 2. Alle völlig opaken Objekte ohne Alpha-Blending zeichnen 3. Alle transparenten Objekte von hinten nach vorne zeichnen Alpha-Testing: Grafikkarte zeichnet nur Pixel, deren Alphawert eine bestimmte Voraussetzung erfüllen D3DRS_ALPHATESTENABLE auf TRUE
25
Alpha-Blending D3DRS_ALPHAFUNC macht die Vergleichsfunktion – Wert bezieht sich auf Referenzwert, der mit D3DRS_ALPHAREF gesetzt wird
26
Multi-Texturing Zur drastischen Qualitätssteigerung und Einsparungen an Speicher und Arbeit Erlaubt mehrere Texturen übereinander auf ein und dasselbe Dreieck zu legen Einzelne Texturen müssen nicht die gleiche Auflösung haben Texturschicht-States legen fest, wie genau die einzelnen Texturschichten miteinander verknüpft werden Jede Texturschicht hat einen Operator und zwei oder drei Argumente
27
Multi-Texturing
28
Zielregister: Temporäres Register (Zwischenspeicherungen) Standardregister (dieser Wert wird verwendet, um Farbe des zu zeichnenden Pixels zu ermitteln) setzt Alphawert der Texturschicht auf Multiplizieren, erste Argument auf Streufarbe und zweite auf Textur oder umgekehrt sowohl Textur- als auch Streufarbenalphawert tragen zum Ergebnis bei Operatoren festlegen: D3DTSS_COLOROP für Farboperator setzen & D3DTSS_ALPHAOP für den Alphaoperator
29
Multi-Texturing
30
Bestimmten der Argumente: Farbargumente: D3DTSS_COLORARG1, D3DTSS_COLORARG2 & D3DTSS_COLORARG0 Alphakanal: D3DTSS_ALPHAARG1, D3DTSS_ALPHAARG2 & D3DTSS_ALPHAARG0
31
Multi-Texturing Zielregister: mit D3DTSS_RESULTARG Entweder auf D3DTA_CURRENT setzen (Standartregister) oder auf D3DTA_TEMP (temporäre Register) Wie viele Texturen gehen: über MAXSIMULTANEOUSTEXTURES der D3DCAPS9- Struktur Texturkoordinatentransformation: nicht nur Positions- und Normalenvektor sind transformierbar, sondern auch Texturkoordinaten – und zwar einzeln für jede Texturschicht eignet sich hervorragend für viele verschiedene Effekte, wenn es darum geht Texturkoordinaten in Echtzeit zu verändern, ohne die aufwändige Sperrung eines Vertex-Buffers
32
Multi-Texturing weitere Matrizen einsetzen: eine für jede Texturschicht (D3DTS_TEXTURE0, D3DTS_TEXTURE1,...) Texturkoordinatentransformation mit dem Texturschicht- State D3DTSS_TEXTURETRANSFORMFLAGS aktivieren 2D-Texturmatrizen unterscheiden sich von denen in 3D muss TriBase-Funktion TBMATRIXTOTEX2DMATRIX benutzen, um 3D-Transformationsmatrix in eine Texturtransformationsmatrix umzuwandeln
33
Literaturverzeichnis David Scherfgen: 3D-Spiele-Programmierung. München, 2006, S. 182-225.
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.