Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 21, 2025 23:05

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 12:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Beides ist völlig richtig, für ShadowVolumes gibt es gar kein Lichtfrustum, da sie einfach die Silhouettenvertices in Richtung des Lichteinfalls extrudiert werden. Es ist z.B. überhaupt kein Problem, eine Lichtquelle im Inneren eines Objektes aufzustellen und die Schatten werden draußen richtig dargestellt.

Weiche Schatten lassen sich - ich geb's zu - überhaupt nicht darstellen. Die Möglichkeit die NVidia vorschlägt, nämlich die Lichtquelle ein venig zu variieren und die Variationen überzublenden ist erstens langsam und zweitens schauen die so erhaltenen streifigen Stencil Shadows ja noch schlimmer aus, als die "normalen" scharfkantigen.

Wer scharfe Schatten überhaupt nicht mag, kann einfach AntiAliasing aktivieren, dann sind die Übergänge auch weicher und es schaut IMHO besser aus als die NVidia Lösung.

Dein Angebot mir deine ShadowMap-Klasse zur Verfügung zu stellen ist sehr freundlich - leider unterstützt meine Radeon 9000 die Depth Texture Extension nicht.
Außerdem kenne ich meine Grenzen, wenn ich jetzt auch noch anfange alle ARB-Erweiterungen in Mcad einzubauen, wächst mir das Ganze wahrscheinlich über den Kopf :blink: .
Nein nein, ich widerstehe des Teufels Advokaten (oder eher Cthulhus ?) und bleibe bei meiner Standardimplementation, die leichter zu verwalten ist und garantiert überall läuft (aber danke für das Angebot).

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 13:16 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Interessante Demos. Beide Techniken haben eben ihre vor und Nachteile.
Ich möchte noch was ergänzen:

Das Problem bei Shadowmaps sind Punktlichter. Da reicht dann ja einmal zeichnen nicht aus. Hier könnten unter Umständen Schatten Volumen
schneller sein. Außerdem kommt es ab einer gewissen Entferung bei Shadowmaps zur Blockbildung. Vom Prinzip her sind Shadowmaps besser, aber ich denke es immer auf die jeweilige Szene ankommt, welche Art von Schatten bessere Ergebnisse liefert. Ein großer Vorteil ist auf jeden Fall, daß man einfach die Geometrie wie bisher zeichnen kann und dadurch nicht in der Anzahl der Dreiecke eingeschränkt ist. Außerdem muß man die Shadow map nur neu generieren, wenn sich die Lichtquelle bewegt hat. Eine weitere Idee wäre pro Licht zwei Shadowmaps zu nehmen eine statische für die statischen Objekte und eine für die bewegten Objekte. Dann muß mal eben beim Vergleichen bei Shadowmaps vergleichen.
Stencil Schatten kann man auch durch ein Vertex Program extruieren. Dafür muß das Objekt dann aber geschlossen sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 14:04 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Eigentlich ist es kein Problem auch bei komplexen Geometriedaten ShadowVolumes zu verwenden - es zwingt einen ja niemand, das Mesh des schattenwerfenden Objektes ebenso komplex zu machen, wie das Dargestellte (muss man sich nur mal die Charakterschatten bei Morrowind ganz genau ansehen ;) ).
Mcad löst dies übrigens, indem ein Objekt optional zusätzlich zum OpenGL Code noch ein Trianglemesh mitverwaltet. Das hat den Vorteil, dass man zum Zeichnen optimierte Quad- und Trianglestrips in eine Displayliste kompilieren kann, das Mesh ist dann nur für Schattenwurf und Kollisionserkennung zuständig, und kann dementsprechend in der Komplexität vermindert werden - das Demo verwendet übrigens keine vereinfachte Schattengeometrie (wäre bei den paar Miniobjekten ohnehin sinnlos).

Von der Möglichkeit Stencilshadows über Vertexprogramme zu extrudieren würde ich übrigens abraten - hier wird nämlich, soweit ich weiß (lasse mich aber gern eines Besseren belehren) wirklich jedes Polygon extrudiert, was den potentiellen Geschwindigkeitsvorteil der Grafikhardware ganz schnell zunichte macht, da es ja ausreicht ein ShadowVolume über die Silhouette zu erstellen (im Schnitt wächst die Anzahl der Flächen relativ zum Quadrat der Anzahl der Silhouettekanten).

Was verwendet wird, muss sich schlussendlich wirklich jeder selbst überlegen. Wenn man nicht gerade völlig abgehobene Beleuchtungseffekte haben möchte, sind ShadowMaps auf unterstützter Hardware sicher auf jeden Fall schneller UND einfacher zu implementieren.
Für mich sind ShadowVolumes angenehmer, da ich die Meshes der einzelnen Objekte ja ohnehin für den letzten und exakten Schritt der Kollisionserkennung benötige - und eben auch keine Extensions verwenden möchte.

Eine Frage hätte ich noch:
Wie ist denn das mit ShadowMaps, wenn ich mehrere animierte Lichtquellen haben möchte, benötige ich dann für jede Lichtquelle eine eigene Textureinheit, oder gibt es eine Möglichkeit mehrere Lichtquellen in einer Textur vorzuberechnen ?

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 14:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Eine Frage hätte ich noch:
Wie ist denn das mit ShadowMaps, wenn ich mehrere animierte Lichtquellen haben möchte, benötige ich dann für jede Lichtquelle eine eigene Textureinheit, oder gibt es eine Möglichkeit mehrere Lichtquellen in einer Textur vorzuberechnen ?

Ich hab mich zwar noch nicht eingehend mit dieser Thematik befasst (das von mir in diesem Thread gepostete Demo war meine erste Erfahrung in Sachen Shadowmaps), allerdings dürfte es kein Problem sein, mehrere Lichtquellen in eine Textur hineinzuzwengen.Wie groß der Aufwand dabei ist, weiss ich nicht, bin aber dabei (oder besser gesagt : ich versuche) sowas zu implementieren.
Sollte dies nicht möglich sein, so hast du recht, man braucht für jede Schattentextur eine eigene Textureneineit.Das wird dann wirklich knapp, denn eine Textureneinheit geht ja (mindestens) für die Geometrie drauf, und dann noch für jede Lichtquelle eine eigene Textureneinheit.Bei zwei bis drei Lichtquellen ist dann selbst bei modernen 3D-Beschleunigern (die GeForceFX 5200/5600 hat z.B. "nur" 4 TMUs) ists dann vorbei mit dem Singlepass...

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 14:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zitat:
allerdings dürfte es kein Problem sein, mehrere Lichtquellen in eine Textur hineinzuzwengen.Wie groß der Aufwand dabei ist, weiss ich nicht, bin aber dabei (oder besser gesagt : ich versuche) sowas zu implementieren.


Wäre nett, wenn du das Ergebnis dann hier posten könntest (auch wenn's nicht klappen sollte).

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 16:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
@Mars: Ja, obwohl es möglich ist, sollte man Vertex Programme nur für die eigentlich Extrusion der Punkte nutzen und die Silhoutte auf der CPU berechnen. Wenn man Schattenvolumen vollställdig mit einem Program berechnen möchte muß man an den Kanten Dreicke einfügen, die dann beim Extruieren die Seitenflächen des Schattenvolumes darstellen. Das ist zu langsam, weil für jede Kante dann 2 Dreiecke eingefügt werden müßen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 20:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich war grad mal wieder am rumexperimentieren, und da ist mir schlagartig die Idee gekommen doch nen netten Drahtzaun einzubauen, der mittels Alphamasking einen verdammt gut aussehnden Schatten auf die Szenerie wirft.

Das ist in meinen Augen auch ein riesiger Vorteil des ShadowMappings, nämlich die Tatsache das man filigrane Schatten ganz einfach mittels der Alphamaske einer Textur erzeugen kann.Mit ShadowVolumes dürfte dies wohl kaum, oder nur unter sehr sehr großem Auwand möglich sein.

Um das was ich angesprochen habe zu verdeutlichen, gibts hier wieder (weils so geil aussieht :D ) ein paar Screenshots (Klicken um zu Vergrößern) :

<a href='http://www.delphigl.de/misc/alphamask1.jpg' target='_blank'>Bild</a> <a href='http://www.delphigl.de/misc/alphamask2.jpg' target='_blank'>Bild</a> <a href='http://www.delphigl.de/misc/alphamask3.jpg' target='_blank'>Bild</a>

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 03, 2003 21:37 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 26, 2003 15:57
Beiträge: 50
Wohnort: Hamminkeln
Hm, stimmt schon, es ist wirklich detailgetreu, aber andererseits sieht man an deinem Beispiel auch ziemlich gut den großen Nachteil von ShadowMaps, die Schatten werden immer gröber, je weiter sie von der LQ entfernt sind, was natürlich wieder unschön ist. Nichts desto trotz, deine Demo find ich wirklich gut!
Ein großes Lob an dich!

mfg,
Dennis.

_________________
Bush's on a highway to hell with the whole world blind, leading it straight into the flames.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 02:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Hm, müssen die Schatten nicht auch größer werden, wenn sie weiter weg sind? Außer natürlich das Licht fällt parallel ein, wie etwa Sonnenlicht. Aber bei Point und Spot-Lights sollte es so doch richtig sein, oder täusche ich mich da jetzt?

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 06:19 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 10:37
Beiträge: 251
Wohnort: Ulm
nein thunder, da hast du recht :)

was mir auffällt, was kein pc spiel oder grafik programm wirklich richtig macht (außer natürlich die raytracer ...): ein licht ist im realen leben nie EIN punkt, wodurch es dazu kommt, dass man fast nie einen richtigen schatten hat, bei dem man jede einzelne kante sieht. das ist größtenteils nur so ein "weichgezeichneter" umriss vom körper!

ich finds nur schade, dass das auf meiner geforce ddr nicht funktioniert :D

_________________
http://www.rochus.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 10:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Thunderman hat geschrieben:
Hm, müssen die Schatten nicht auch größer werden, wenn sie weiter weg sind? Außer natürlich das Licht fällt parallel ein, wie etwa Sonnenlicht. Aber bei Point und Spot-Lights sollte es so doch richtig sein, oder täusche ich mich da jetzt?

Doch, und das werden sie auch...zieh dir mal die Demo (vorausgesetzt das deine Grafikkarte die entsprechende GL_ARB_DEPTH_TEXTURE-Extension unterstützt), und entfern dich mit der Lichtquelle mal von den Objekten und vice versa.Dann wirst du sehr gut sehen können, das die Schatten mit größerer Entfernung länger werden, so wie das im realen Leben der Fall ist.

rochus hat geschrieben:
was mir auffällt, was kein pc spiel oder grafik programm wirklich richtig macht (außer natürlich die raytracer ...): ein licht ist im realen leben nie EIN punkt, wodurch es dazu kommt, dass man fast nie einen richtigen schatten hat, bei dem man jede einzelne kante sieht. das ist größtenteils nur so ein "weichgezeichneter" umriss vom körper!


Das stimmt.Allerdings kann man da mittels ShadowMapping so einiges machen, da man ja seine Schattentextur hat, die man nachdem sie erstellt wurde, nach Belieben manipulieren, und an den Rändern bzw. nach hinten hin weichzeichnen kann.In SplinterCell (neue Unreal-Engine) gibts ähnliche Effekte.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 12:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
@SoS
Also so ein Maschendrahtzaun wäre über ShadowVolumes nur sehr schwierig (also eher gar nicht :rolleyes: ) zu realisieren (halt nur über Unmengen an Geometrie)

@rochus
Dann musst du dich halt an die StencilShadows halten, die funktionieren auf jeder Hardware (und sogar im Softwaremodus) einwandfrei

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 04, 2003 19:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
SoS: Hab mich ja nur auf rochus Posting bezogen. Mir war schon klar, und ihm ja wohl auch, dass ShadowMapping genau das ja tut. Hab allerdings "nur" ne Radeon 8500 und die hat die Extension meine ich nicht... :(

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 08, 2003 22:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Da ich grad dabei bein mit meiner neuen Hercules 9700 zu spielen, hab ich auch folgende Extension entdeckt, die neben der 9500Pro nur noch die 9700 bzw. 9800 (zumindest im Desktop-Bereich) unterstützen : <a href='http://oss.sgi.com/projects/ogl-sample/registry/ARB/shadow_ambient.txt' target='_blank'>GL_ARB_Shadow_Ambient</a>

Mittels dieser netten Extension, die übrigens gleich mit der GL_SHADOW_AMBIENT_SGIX-Extension ist (also auch die gleiche ID besitzt), wird es möglich den Texturenwert zu setzen, der im Falle eines Fehlschlagens des Vergleichstestes gesetzt wird.Im Normalfall ist das ja 0, sprich alles im Schatten ist komplett schwarz.Mittels dieser Extension kann man aber ganz einfach den Wert der in diesem Falle gesetzt werden soll festlegen, so daß man die Schatten im Handumdrehen mehr oder weniger transparent machen kann.Man benötigt dann also nur noch eine Textureinheit statt wie bisher zwei um transparente Schatten darzustellen.

Hier mal ein Screenshot :
Bild


Die aktualisierte Demo hab ich noch nicht hochgeladen, wer allerdings ne 9500,9700 oder gar 9800er Radeon besitzt, kann diese Funktion ganz einfach nutzen indem er dort wo die Shattentextur erstellt wird folgende Zeile einfügt :
<!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre>glTexParameterf(GL_TEXTURE_2D, GL_SHADOW_AMBIENT_SGIX, <span class='integer'>0.6</span>); // neue Zeile, der Param-Wert gibt die Transparenz des Schattens an
// Folgendes sollte dort bereits stehen
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE_ARB, GL_LUMINANCE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3-->

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]