Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

11

27.01.2010, 16:27

Ich finds persönlich krank, aber sinnig ist es schon, dass beim Distanz-Vergleich beim Shadow-Mapping die Heightmap vom Parallax-Mapping mit einfließt ;-).

LG
Alyx

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

27.01.2010, 16:32

Achso, gut das könnte sein...

13

31.01.2010, 12:31

okay, nochmal ganz langsam für besonders lange Leitungen.

Shadow Mapping bedeutet:
1) Szene aus der Sicht des Lichts rendern
2) Die Tiefeninfo in eine Textur quetschen
3) Beim eigentlichen Rendervorgang den Abstand Punkt -> Lichtquelle vergleichen und jeden Pixel entsprechend zeichnen

Parallax-Mapping bedeutet
1) Heighmap aus ner Textur erstellen
2) Beim zeichnen der Textur die Heightmap raytracen
3) Verzerrung berechnen und Texturkorrdinaten entsprechend setzen

Das sieht für mich z.Z. einfach komplett unvereinbar aus bzw. ich erkenne den Sinn dahinter nicht. Wenn die Parallax-Heightmap also beim Distanzvergleich einfließt, heißt das mit anderen Worten, dass ich mir aus der Shadow-Map eine Heightmap baue? Aber welchen Sinn hat dann Parallaxe bei einer Textur, die ich gar nicht sehe? Und ist es wirklich billiger, die Heightmap zu raytracen und eine Approximation der Texturkoordinaten zu berechnen, anstatt einfach den Originalwert abzufragen?

Auch nochmal was generelles zum Shadow Mapping: Das Verfahren wird ja immer mit dem großen Vorteil beworben, komplett unabhängig von der Szenengeometrie zu sein, und ich habe leider keinen Artikel dazu gefunden, der genau auf diesen Aspekt genauer eingeht. Was bedeutet das genau? Sobald sich die Geometrie der Szene ändert, muss ich den ganzen Spaß (= Shadow-Map und Szene rendern) neu machen. Hört sich für mich ziemlich ununabhängig an...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

31.01.2010, 13:09

Zitat von »"Sk!p"«

Shadow Mapping bedeutet:
1) Szene aus der Sicht des Lichts rendern
2) Die Tiefeninfo in eine Textur quetschen
3) Beim eigentlichen Rendervorgang den Abstand Punkt -> Lichtquelle vergleichen und jeden Pixel entsprechend zeichnen

Parallax-Mapping bedeutet
1) Heighmap aus ner Textur erstellen
2) Beim zeichnen der Textur die Heightmap raytracen
3) Verzerrung berechnen und Texturkorrdinaten entsprechend setzen


Soweit im Pprinzip korrekt.

Zitat von »"Sk!p"«

Das sieht für mich z.Z. einfach komplett unvereinbar aus bzw. ich erkenne den Sinn dahinter nicht. Wenn die Parallax-Heightmap also beim Distanzvergleich einfließt, heißt das mit anderen Worten, dass ich mir aus der Shadow-Map eine Heightmap baue? Aber welchen Sinn hat dann Parallaxe bei einer Textur, die ich gar nicht sehe? Und ist es wirklich billiger, die Heightmap zu raytracen und eine Approximation der Texturkoordinaten zu berechnen, anstatt einfach den Originalwert abzufragen?


Naja ich denke was Alyx meint ist wohl dass die Höhe des Pixels beim Distanzvergleich zur Lichtquelle mit einfließt (d.h. Pixel die höher liegen sind ja je nach Ausrichtung des Polygons zur Lichtquelle etwas weiter weg oder etwas näher dran), was dann dazu führt dass die Schattenlinie am Polygon nicht mehr schnurgerade verläuft sondern sich eben der Kontur der Oberfläche anpasst.
Das hat nur indirekt was mit Parallaxe zu tun und über die Sinnhaftigkeit könnte man auch diskutieren da man bei einigen der aufwändigeren Parallax Mapping Verfahren (z.B. wenn man raytracing einsetzt) sowieso auch self shadowing bekommt (müsste man sich anschauen ob das wirklich die Bildqualität derart steigern würde).

Zitat von »"Sk!p"«

Auch nochmal was generelles zum Shadow Mapping: Das Verfahren wird ja immer mit dem großen Vorteil beworben, komplett unabhängig von der Szenengeometrie zu sein, und ich habe leider keinen Artikel dazu gefunden, der genau auf diesen Aspekt genauer eingeht. Was bedeutet das genau? Sobald sich die Geometrie der Szene ändert, muss ich den ganzen Spaß (= Shadow-Map und Szene rendern) neu machen. Hört sich für mich ziemlich ununabhängig an...


Shadowmapping ist pixelbasiert. Ein geometriebasierter Ansatz wären z.b. die guten alten Shadow Volumes (auch als Stencil Shadows bekannt). Dabei werden die Polygonkanten die die Schattenkontur bilden bestimmt, extrudiert, daraus ein 3d Modell des Schattens gebaut und das dann mit einer speziellen Technik gerendert.
Stell dir vor du hättest nun z.B. ein Billboard, z.B. einen Zaun. Also ein Polygon mit ner Textur mit Colorkey drauf. Mit Shadow Volumes wird das einen schwarzen Fleck als Schatten werfen, mit Shadow Mapping hingegen bekommst du (z.B. dank Alphatesting) problemlos den "richtigen" Schatten (da es eben pixel- und nicht geometriebasiert ist).
Shadow Volumes haben z.B. auch den Nachteil dass sie CPU lastig sind (obwohl es natürlich Wege gibt das zumindest teilweise auf die GPU abzuladen).
Shadow Mapping ist dafür z.B. bei Punktlichtquellen problematisch (Schattenwurf in alle Richtungen; aber auch da gibt es natürlich Lösungen, z.B. eine Cubemap als Shadowmap) und sehr anfällig für Aliasing Artefakte.

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

15

31.01.2010, 14:12

Kann das von dot so nur unterschreiben.

Bzgl. dem "Sobald sich die Geometrie der Szene ändert, muss ich den ganzen Spaß (= Shadow-Map und Szene rendern) neu machen":

Prinzipiell hast du Recht, aber da man sich bekannterweiße ja nur zu helfen wissen muss :-):

In aller Regel verwaltet man statische Light/Shadow-Maps und dynamische Shadow-Maps. Angenommen du hast du ein Tal in dem eine Burg steht. Dann brauchst du 500,000 Dreiecke für die Landschaft und die Burg. Die kommen in die statischen Shadow Maps.
Und darin laufen nun ein paar Leute rum, sie hat noch noch ein paar Tore und eine Windmühle, die nochmal 50,000 Dreiecke ausmachen. Die kommen in die dynamischen Shadow Maps.

Erstere aktualisierst du dann nur alle 2 Sekunden, also z. Bsp. alle 200 FPS, letztere alle 2-3 Frames.

LG
Alyx

16

31.01.2010, 15:11

Aaaach jetzt hab ich kapiert, worauf ihr hinauswollt. Also im Prinzip, dass man ganz normales Parallax-Mapping auf den Texturen macht und die Höheninfo in die Shadow-Map mit einfließten lässt. Auch keine schlechte Idee, aber ich glaube aber, ich hab jetzt geschnallt, worauf diese Arbeit hinaus will:

Ich hab ja weiter oben schonmal beschrieben, dass man mit einem Simulator arbeitet, der Umgebungslicht durch ganz viele kugelförmig verteilte Richtungslichtquellen simuliert. Das bedeutet natürlich, dass man die Schattenberechnung 1x pro Richtungslicht machen muss, und da soll man die Shadow-Map wohl nur für wenige Richtungslichtquellen berechnen und die Shadow-Maps der anderen Richtungslichter durch Parallax-Mapping approximieren (die liegen dann ja nah beieinander)

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

17

01.02.2010, 00:23

Genau :-).

Von einem Simulator hab ich auf der anderen Seite nichts gelesen ;-).

Aber wenn es ca. so aussieht, wie ich es mir gerade bildlich vorstelle, dann lässt sich das damit natürlich sehr gut lösen, die Grafik von dot veranschaulicht es ja schon sehr gut.

LG
Alyx

18

11.02.2010, 17:01

Ich habe jetzt mal mit dem Betreuer der Arbeit gesprochen und denke darüber nach, die doch einfach zu machen. Dummerweise bin ich was Computergrafik angeht eher ein noob (im Vergleich zu diesem Forum und den Leuten, die da im Institut arbeiten, im Vergleich zum Durchschnittsbachelor schätze ich mich als Maschine ein, da gibts sogar manche die können kein cpp, geschweige denn OpenGL)
Der hat mir das jedenfalls ein bisschen erklärt, wie das funktionieren soll. Allerdings ist er auch voll in diesem Renderingzeugs drin, d.h. als normaler Mensch steigt man da relativ schnell aus, wenn der loslegt.

Fangen wir doch mal bei dem kleinsten Grundproblem an:

Noch zur Info: Es wird das Parallax Occlusion Mapping von Tatarchuk & Co benutzt, wo die Heightmap in Richtung des Parallax-Vektors abgetastet wird usw.

Wir haben also eine weit von der Szene entfernte Richtungslichtquelle und führen echtes Shadow-Mapping von da aus durch. Da das Licht Umgebungslicht simulieren soll und deshalb eine direktionale Lichtquelle ist, ist das ganze eine Parallel-Projektion.
Jetzt haben wir eine zweite Lichtquelle, deren Distanz und Ausrichtung zur ersten Lichtquelle bekannt sind. Mir ist jetzt immer noch nicht klar, wie ich aus der Original-Shadow-Map die Shadow-Map für dieses Licht approximiere.
Für das Parallax-Mapping brauche ich doch erstmal eine Textur auf einem Objekt, die Shadow-Map liegt aber doch nur virtuell im Speicher. Er hat gemeint diese Eye-Vektor Berechnung würde durch die Parallelprojektion irgendwie entfallen, aber ich check gerade nicht, wie das funktionieren soll.

Ich hab mich auch mal in die entsprechenden Paper eingelesen. Bis ich das Verfahren halbwegs verstanden hab, hab ich aber auch jeden Satz 3x gelesen ^^

Falls jemand Spaß daran hat, mich zu erleuchten, nur zu :D

Mastermind

unregistriert

19

11.02.2010, 18:42

Smooth bedeutet übrigens in diesem Kontext nicht "weich" sondern glatt:

vgl:
http://de.wikipedia.org/wiki/Glatte_Funktion
http://en.wikipedia.org/wiki/Smooth_function

Werbeanzeige