Archiv verlassen und diese Seite im Standarddesign anzeigen : Schatten?
Karümel
2003-07-29, 19:01:46
Öhm, das Karümel brauch mal wieder Hilfe.
Und zwar habe ich kaum/ keinen Durchblick wie die ganze Sachen mit den verschiedenen Schattendarstellungen abläuft, bzw. welche Technik dahinter steckt.
Also was ich meine zu „Wissen“ oder eher gesagt was ich mir so angelesen habe, und evtl. dann falsch oder richtig verstanden habe.
Also die erste Version wie Schatten berechnet wurden, waren oder sind Light- bzw. Darkmaps. Als Beispiel die Q3A Engine. Die dort dargestellten Schatten sind fest, das heißt in keiner Form und auch Aussehen veränderbar. Auch gehen die nur auf geraden/ Ebenen Flächen.?
Bewegliche Schatten gehen mit Light- bzw. Darkmaps nicht, man könnte einfache bewegliche Schatten wie z.B. die Flügel eines Ventilators per Texturen und Shader faken/darstellen?
Dann gibt es die Shadow-Maps, die bestehen aus einer oder mehren Texturen, diese Schatten wurden z.b. bei Jedi Knight II für den Schatten der Spielerfigur eingesetzt, oder? Diese Schatten sind der hinsichtlich beweglich das sie z.B. Bewegungen einer Spielfigur darstellen können.
Öhm sind diese Bewegungen des Schattens eigentlich vorbestimmt, sprich die können nur Bewegungen darstellen welche vorher z.B. durch das Playermodel vorgegeben sind oder wie geht das genau?
Werden oder Können Shadow-Maps eigentlich dann wenn man Sie einsetzt nur für bestimmte Sachen, wie z.B. bewegliche Sachen eingesetzt, oder würde es auch Sinn machen dieses für statische Sachen wie z.B. Felsen einzubauen, oder wäre das Ergebnis das gleich als wenn man Light-Maps eingesetzt hätte?
Wie ist das eigentlich mit der Stärke des Schattens, also wie schwarz der Schatten ist, kann man das eigentlich beeinflussen, oder muß das vorher bestimmt werden.
Dann gibt es Stencil-Schatten, bei diesen verhält es sich so das jedes massive Element einen Schatten wirft, wenn es von einer (punktförmigen) Lichtquelle angestrahlt wird. Dabei ist es egal ob dieses Objekt sich bewegt oder statisch ist, es wird immer ein Schatten (wenn möglich) dargestellt. Diese Schatten bestehen aus Polygonen und können auf jeder Oberfläche dargestellt werden (auch Wasser?).
Jede einzelne Lichtquelle wirft eigene Schatten und für jede Veränderung, z.B. Sichtfeld oder falls sich was im Blickfeld bewegt, werden alle Schatten neu berechnet, da sich diese Schatten auch gegenseitig beeinflussen können?
Besteht eigentlich die Möglichkeit das man diese Technik nur für bestimmte Sachen, wie z.B. eine Spielfigur anwendet und andere statische Sachen mit einer anderen Technik mit Schatten versieht?
Oder anders gefragt das man in bestimmten Bereichen (Innenräumen) Stencil-Schatten einsetzt, und beim Übergang zu Außenbereichen, die Stencil dann „ausschaltet“ und dort dann eine anderen Technik einsetzt?
Oder geht diese Technik nur nach dem Motto „Alles oder Nichts“?
Wäre nett wenn mir jemand mal das alles genauer erklären könnte und meine Fehler berichtigen könnte.
Ach ja was für Techniken zur Darstellung von Schatten gibt es sonst noch?
ScottManDeath
2003-07-29, 23:12:54
übersicht über schatten:
http://developer.nvidia.com/object/docs_shadows.html
stencil shadows:
http://developer.nvidia.com/object/cedec_stencil.html
shadow maps:
http://developer.nvidia.com/object/cedec_shadowmap.html
man kann mehrere verfahren kombinieren, z.B. lightmaps für statische geometrie, planare schatten (am wenigsten aufwändig, kann man mit einer einfachen projektionsmatrix lösen, man braucht keine shader dafür) für z.b. schatten von spielfiguren auf dem fussboden, stencil ...
MadManniMan
2003-07-30, 02:28:10
Original geschrieben von Karümel
Dann gibt es die Shadow-Maps, die bestehen aus einer oder mehren Texturen, diese Schatten wurden z.b. bei Jedi Knight II für den Schatten der Spielerfigur eingesetzt, oder?
Nö. Shadow Maps hast du aber zum Beispiel bei der Werwolf-Demo für die GF4-Tis. Bei JK2 wurden für die Models ganz normale Stencil Shadows benutzt.
Original geschrieben von Karümel
Dann gibt es Stencil-Schatten, bei diesen verhält es sich so das jedes massive Element einen Schatten wirft, wenn es von einer (punktförmigen) Lichtquelle angestrahlt wird. Dabei ist es egal ob dieses Objekt sich bewegt oder statisch ist, es wird immer ein Schatten (wenn möglich) dargestellt. Diese Schatten bestehen aus Polygonen und können auf jeder Oberfläche dargestellt werden (auch Wasser?).
Ich frage mich gerade, ob sich mit Stencil-Shadows auch teiltransparante Schatten erzeugen lassen (z.B. ein Seidenumhang, der einen Schaten wirft. Wenn also eh Alphablending genutzt wird.) und ob die polygonale Abhängigkeit überhaupt ein Mitwirken von Materialeigenschaften (wie Teiltransparenz bei einigen Texeln der Textur) zuläßt...
Demirug
2003-07-30, 07:46:37
Original geschrieben von MadManniMan
Ich frage mich gerade, ob sich mit Stencil-Shadows auch teiltransparante Schatten erzeugen lassen (z.B. ein Seidenumhang, der einen Schaten wirft. Wenn also eh Alphablending genutzt wird.) und ob die polygonale Abhängigkeit überhaupt ein Mitwirken von Materialeigenschaften (wie Teiltransparenz bei einigen Texeln der Textur) zuläßt...
Ja das ist machbar wenn auch nicht ganz einfach und wenn man es richtig machen will auch zu aufwendig.
- Denn Z-Buffer rendern
für jede Lichtquelle:
- Schattenvolumen berechnen und in den Stencilbuffer einbringen. Hier wird der Vorhang erst einmal als nicht transparent angesehen.
- Render der Objekte (ohne den Vorhang) Stenciltest zeigt an ob ein Pixel im Lichtbereich ist.
- Aus dem Stencilbuffer das Schattenvolumen des Vorhangs wieder entfernen. Und als umgdrehtes Volumen wieder einfügen. Dadurch sind im Stencibuffer nur noch die Pixel als beleuchtet welche auf welche das Licht durch den Vorhang fällt aber durch sonst nichts in einem Schatten liegen.
- Render der Objekte (ohne den Vorhang) unter berücksichtigung der durch den Vorhang veränderten Lichteigenschaften. Stenciltest zeigt an ob ein Pixel im Lichtbereich ist.
Als letztes muss dann noch der Vorhang gerendert werden. Der einfachste Weg wäre es diesen einfach als Transparentes Objekt mit Alphablending einzubringen. Will man allerdings auch auf dem Vorhang korrektes Licht haben muss man das ganze Spiel mit den Stencilbuffern noch einmal wiederholen.
Fällt das Licht dann noch durch mehrer Vorhänge hört es entgültig auf noch Spass zu machen.
EDIT: Mit einem guten Pixelshader geht das aber auch etwas einfacher.
MadManniMan
2003-07-30, 16:47:39
Original geschrieben von Demirug
Ja das ist machbar wenn auch nicht ganz einfach und wenn man es richtig machen will auch zu aufwendig.
- snip -
Fällt das Licht dann noch durch mehrer Vorhänge hört es entgültig auf noch Spass zu machen.
Genauso habe ich mir das gedacht und im gleichen Zug Gedanken an...
Original geschrieben von Demirug EDIT: Mit einem guten Pixelshader geht das aber auch etwas einfacher.
...nünftige Pixelshader verschwendet. Aber auch ne ordentlich hoch aufgelöste Schadow Map (1024² ?) sollte schon gute Wirkungen erzielen. Da läßt sich gewiß noch was optimieren - Stichwort "flache Winkel".
Demirug
2003-07-30, 17:20:53
Original geschrieben von MadManniMan
Genauso habe ich mir das gedacht und im gleichen Zug Gedanken an...
...nünftige Pixelshader verschwendet. Aber auch ne ordentlich hoch aufgelöste Schadow Map (1024² ?) sollte schon gute Wirkungen erzielen. Da läßt sich gewiß noch was optimieren - Stichwort "flache Winkel".
Nein, ich meinte mit "guten Pixelshader" das man weiterhin Stencilbuffer verwendet aber alles was vor und hinter dem Vorhang liegt in einem Pass rendert un dann im Pixelshader prüft auf welcher Seite des Vorhangs der Pixel ist und in entsprechend shadet. Sowas würde ich mich aber wahrscheinlich erst mit PS 3.0 wirklich trauen.
Karümel
2003-07-30, 18:41:09
Original geschrieben von ScottManDeath
übersicht über schatten:
http://developer.nvidia.com/object/docs_shadows.html
stencil shadows:
http://developer.nvidia.com/object/cedec_stencil.html
shadow maps:
http://developer.nvidia.com/object/cedec_shadowmap.html
man kann mehrere verfahren kombinieren, z.B. lightmaps für statische geometrie, planare schatten (am wenigsten aufwändig, kann man mit einer einfachen projektionsmatrix lösen, man braucht keine shader dafür) für z.b. schatten von spielfiguren auf dem fussboden, stencil ...
Öhm, gibt es sowas in der Art (muß nicht so Umfangreich sein) auch in Deutsch? Meine Restenglischkenntnisse reichen dafür leider nicht aus:(
MadManniMan
2003-07-31, 00:30:17
Original geschrieben von Demirug
Nein, ich meinte mit "guten Pixelshader" das man weiterhin Stencilbuffer verwendet aber alles was vor und hinter dem Vorhang liegt in einem Pass rendert un dann im Pixelshader prüft auf welcher Seite des Vorhangs der Pixel ist und in entsprechend shadet. Sowas würde ich mich aber wahrscheinlich erst mit PS 3.0 wirklich trauen.
Ob JC dieses bereits bedenken konnte?
Naja, aber zu noch was anderem: ich dachte eigentlich, Shadow Maps können ohne große Probs derlei Materialeigentschaften bedenken? :eyes:
Demirug
2003-07-31, 11:19:21
Original geschrieben von MadManniMan
Ob JC dieses bereits bedenken konnte?
Kommen im DOOM III Leveldesign überhaupt solche Fälle vor?
Naja, aber zu noch was anderem: ich dachte eigentlich, Shadow Maps können ohne große Probs derlei Materialeigentschaften bedenken? :eyes:
Ein ShadowMap ist genau das was der Name schon sagt eine Schattenmap. Sie enthält also lediglich Informationen darüber was im Schatten liegt und was nicht. Materialeigenschaften müssen in anderen texturen gespeichert oder eben im Pixelshader berechnet werden.
Um den Vorhang mit Shadowmap Technik zu realisieren gibt es im Prinzip zwei Möglichkeiten.
1. Die Shadowmap enthält die Schattendaten wobei der Vorhang selbst nicht als Schattenquelle mitgerendert wurde. Der Pixelshader entscheidet dann aufgrund einer Berechnung ob ein Pixel vor oder hinter dem Vorhang liegt und führt darauf hin die entsprechenden Berechnungen aus. (mit PS 3.0 eine gute Idee) Da kann man dann sogar noch etwas optimieren wenn man festlegt das ein Dreieck immer komplett vor oder hinter dem Vorhang sein muss.
2. Es gibt zwei Shadowmaps. Die erste enthält die die Information was vor dem Vorhang nicht in Schatten liegt und die zweite die gleiche Information für den Bereich hinter dem Vorhang. Dann wird im 2 Pass Verfahren erst der Bereich vor dem Vorhang und dann der hinter dem Vorhang berechnet (PS 2.0 Lösung)
In beiden Fällen braucht man dann noch einen Pass zum rendern des Vorhangs selbst.
Sollten die Unterschiede in der Berechung für Pixel welche vor und hinter dem Vorhang liegen nicht allzu gross sein kann man die Variante 1 auch mit 2.0 PS realisieren. Ansonsten dürfte der Overhead für unnötige Berechungen einfach zu gross werden.
MadManniMan
2003-07-31, 13:15:20
Original geschrieben von Demirug
Kommen im DOOM III Leveldesign überhaupt solche Fälle vor?
Halte ich für unwahrscheinlich, aber ich hätte es doch gern in der Engine gesehen. In einem spekulativen McGees Alice 2 hätte doch der Unterrock der kleinen wunderbar schimmernd sein können...
Original geschrieben von Demirug
- SNIP -
Also sind die bekannten Shadow Map(/Buffer) Demos reine vorberechnete Verblende, in denen zB eine teiltransparente Smileyscheibe direkt vor einem Scheinwerfer sitzt...
:no:
Demirug
2003-07-31, 13:49:59
Original geschrieben von MadManniMan
Halte ich für unwahrscheinlich, aber ich hätte es doch gern in der Engine gesehen. In einem spekulativen McGees Alice 2 hätte doch der Unterrock der kleinen wunderbar schimmernd sein können...
Die Engine wird ja sicherlich weiterentwickelt das könnte also durchaus noch alles kommen.
Also sind die bekannten Shadow Map(/Buffer) Demos reine vorberechnete Verblende, in denen zB eine teiltransparente Smileyscheibe direkt vor einem Scheinwerfer sitzt...
:no:
Nein da haben wir uns falsch verstanden. Ein Shadowbuffer wird schon zur Laufzeit dynamisch berechnet (Render to Texture). Sonst würde das mit bewegelichen Lichtquellen und Objekten auch gar nicht funktionieren.
Das mit der Smiliescheibe vor dem Scheinwerfer ist ein andere Effekt der aber durchaus auch sehr schön sein kann wenn man eine Lichtquelle haben möchte die Pixelweise die Lichtfarbe ändert. Disko-Lichtkugel effekte sind da ein gutes Beispiel. Man kann das natürlich auch für die Schattenerzeugung benutzten. Leider neigt das ganze aber dabei doch stark zu Fehlern.
MadManniMan
2003-07-31, 14:03:22
Original geschrieben von Demirug
Die Engine wird ja sicherlich weiterentwickelt das könnte also durchaus noch alles kommen.
Das hoffe ich!
Original geschrieben von Demirug
Nein da haben wir uns falsch verstanden. Ein Shadowbuffer wird schon zur Laufzeit dynamisch berechnet (Render to Texture). Sonst würde das mit bewegelichen Lichtquellen und Objekten auch gar nicht funktionieren.
Das mit der Smiliescheibe vor dem Scheinwerfer ist ein andere Effekt der aber durchaus auch sehr schön sein kann wenn man eine Lichtquelle haben möchte die Pixelweise die Lichtfarbe ändert. Disko-Lichtkugel effekte sind da ein gutes Beispiel. Man kann das natürlich auch für die Schattenerzeugung benutzten. Leider neigt das ganze aber dabei doch stark zu Fehlern.
Ja, die Auflösung ist auch in meinen Augen das große Problem - ansonsten würde ich Shadow Maps vorziehen, weil eben die Diffusität der Quellen bei Stencils nicht so wirklich berücksichtigt werden kann - wenn man noch Performance haben will...
zeckensack
2003-08-01, 03:12:56
Original geschrieben von MadManniMan
Ja, die Auflösung ist auch in meinen Augen das große Problem - ansonsten würde ich Shadow Maps vorziehen, weil eben die Diffusität der Quellen bei Stencils nicht so wirklich berücksichtigt werden kann - wenn man noch Performance haben will... Obacht ;)
Je höher aufgelöst eine shadow map ist, desto schwieriger wird's, weiche Kanten zu erzeugen. Die Weichheit kriegt man durch Texturfilter hin.
Wenn du dir jetzt überlegst, wie du eine 'normale' Textur weich bekommst ... eben durch starke Vergrößerung von eher gering aufgelöstem Basismaterial.
MadManniMan
2003-08-01, 03:38:44
Original geschrieben von zeckensack
Obacht ;)
Je höher aufgelöst eine shadow map ist, desto schwieriger wird's, weiche Kanten zu erzeugen. Die Weichheit kriegt man durch Texturfilter hin.
Im Grunde erfülle ich das Klichee des Nich-Proggers vollkommen: ne interessante Idee haben, nich fertig denken und dann den Müll auf die Öffentlichkeit loslassen (wobei ich jetzt aber nicht sagen will, daß diese das nicht auch könnten :eyes: ).
Tja, haste nich richtig nachgedacht, Manni... THX, ZBag!
Original geschrieben von zeckensack
Wenn du dir jetzt überlegst, wie du eine 'normale' Textur weich bekommst ... eben durch starke Vergrößerung von eher gering aufgelöstem Basismaterial.
Naja, würde es nicht reichen, die "Kantentexel" zu strecken? Okok, ich weiß, daß eine Textur aus Texeln fester Ordnung besteht, aber irgendein Befehlchen müßte doch sowas ermöglichen *frag* ?
zeckensack
2003-08-01, 03:54:24
Original geschrieben von MadManniMan
Naja, würde es nicht reichen, die "Kantentexel" zu strecken? Okok, ich weiß, daß eine Textur aus Texeln fester Ordnung besteht, aber irgendein Befehlchen müßte doch sowas ermöglichen *frag* ? Schwierig ;)
Du weißt ja nicht, wo die Übergänge sind (wenn du's wüßtest, bräuchtest du keine Shadow map). Textur-Clamping und solche Geschichten, die du (möglicherweise unbewußt des korrekten Begriffs :D) angesprochen hast, gibt's aber nur da, wo man weiß, bis wohin und nicht weiter ?-)
Aktuelle Hardware kann deswegen nur an fest vorgegebenen Kanten 'clampen' (echte Texturränder oder eben wie von Valve gefordert, mittels geforderter Bereiche, die der API in Form von Konstanten fertig präsentiert werden). Voll dynamisch ist da IMO nicht viel zu reißen.
Man kann natürlich die übliche Wischi-Waschi-Technik nutzen, und mehrere Lagen, leicht gegeneinander verschoben, übereinanderschmieren.
MadManniMan
2003-08-01, 04:34:04
Original geschrieben von zeckensack
Textur-Clamping und solche Geschichten, die du (möglicherweise unbewußt des korrekten Begriffs :D)
So langsam kann ich mir sogar etwas drunter vorstellen :idea:
Original geschrieben von zeckensack oder eben wie von Valve gefordert, mittels geforderter Bereiche, die der API in Form von Konstanten fertig präsentiert werden
:crazy: Die solln lieber mal ihre Hausaufgaben machen!
Original geschrieben von zeckensack oder eben
Man kann natürlich die übliche Wischi-Waschi-Technik nutzen, und mehrere Lagen, leicht gegeneinander verschoben, übereinanderschmieren.
Jop, an sowas hab ich gedacht. Dynamisch is da also wohl nix zu mach0rn...
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.