2013-02-16 15 views
13

Ich habe vor kurzem weiche Schatten mit Voxel-Kegelverfolgung in OpenGL 4.3 implementiert, indem ich einen Kegel in Richtung des Lichts gezogen habe und Opazitätswerte akkumuliert habe. enter image description hereVoxel Cone Verfolgte weiche Schatten

Der Schlüssel Sache, die ich zu lösen oder zu verbergen versuchen ist die sehr voxelized Schattenwirkung als die verstopfte Oberfläche des Okkluder näher kommt, sowie die klaren Flecke im Schatten aufgrund der Oberflächen voxelization verstecken. Ich verwende Voxel mit niedriger Auflösung 64x64x64; selbst wenn ich Voxel mit höherer Auflösung verwende, werden jedoch einige der Voxel niedriger Auflösung auf einer höheren Mip-Map-Ebene immer noch in der Spur erfasst.

Also hier ist, was meine erste Idee ist: Ich möchte in der Lage sein, die weichsten Teile des Schattens zu halten, der am weitesten entfernt ist und die Teile des Schattens, der näher am Okkluder ist, mit einer Schattenkarte zu ersetzen. Die Schattenkarte wird verblassen, wenn sie weiter von jedem Okkluder entfernt ist, und ich werde sie irgendwie in die Schatten mit den Kegelspuren einfügen.

enter image description here

Kann jemand denken Sie an einen Weg, um einen Schatten weg auf Abstand von jedem Objekt für einen Schatten-Karte basierend zu verblassen und dann haben sanft miteinander vermischen, in den Kegel-verfolgt Schatten?

Eine andere Idee, die ich habe, wäre es, Schatten auf Oberflächen zu strahlen, die näher an einem Okkluder sind, aber das wäre wahrscheinlich zu teuer.

Alternativ würde ich andere Ideen begrüßen, um meinen Soft Shadow-Algorithmus zu verbessern.

Ich habe auch ein Video zu zeigen, sie in Bewegung setzen:

https://www.youtube.com/watch?v=SUiUlRojBpM

haben noch keinen Weg gefunden, die Abschattung Problem zu beheben.

+1

+1 - endlich wieder eine Frage, das ist nicht auf einem Anfänger Niveau und macht mein Gehirn kitzeln :) Lass mich sehen, was ich mir vorstellen kann ... – datenwolf

+1

In der Konus-Ablaufverfolgung Algorithmus verwenden Sie den Alpha-Wert des Voxels geben Sie an, ob das Voxel besetzt ist oder nicht? Wenn dies der Fall ist, liefert der Standard-Mipmapping-Algorithmus in opengl möglicherweise keine korrekten Ergebnisse. Verwenden Sie auch eine sparse Voxel Octree-Darstellung? – Slicedpan

+0

Für die indirekte diffuse und spiegelnde, Abtastung der 3D-Textur durch Versatz in allen 6 Richtungen um 1 Voxel - für jeden Mip-Level. Ich schätze das gibt mir 2x2x2 "Bausteine", wenn ich die Theorie richtig verstanden habe. Ich zeichne den Kegel auf, bis der Deckkraftwert 1 wird und er meine definierte maximale Entfernung erreicht. Mir ist aufgefallen, dass das Standard-Mipmapping nicht sehr flüssig ist, also sollten sich meine Ergebnisse verbessern, wenn ich 3x3x3-Bausteine ​​verwende - bei etwas höheren Performance-Kosten? Ich verwende keine Octree-Struktur, aber dies ist auf der Liste der Dinge zu implementieren. – gboxentertainment

Antwort

0

Nun, in diesem Fall können Sie es tun, indem Sie mehr Lichter hinzufügen. Sie können dem Original mehr Lichter hinzufügen und dann den Schatten eines Lichts mit den Schatten einer Gruppe näherer Lichter zusammensetzen. Das ist der "Flächenlicht" -Effekt.

2

Ich vermute, die "Clear Spot" -Artefakte auftreten, weil große Voxel Größen nur teilweise mit Geometrie gefüllt sind: "akkumulierende Opazität Werte.". Wie viele Samples nehmen Sie bei der Konvertierung von gerasterten Pixeln zu Voxeln? Wenn das Sample-Volumen/Voxel-Volumen klein ist, kann es Probleme bei der korrekten Wiedergabe von Transparenz geben - es wird Rauschen durch hellere Bereiche angezeigt.

Ist die Transparenzrichtung Ihrer Voxel ebenfalls abhängig? Based on the author's original paper. Die Richtungsabhängigkeit ist wichtig, um sicherzustellen, dass halbtransparente Voxel korrekt wiedergegeben werden.

A quick picture to explain

„für eine Schatten-Karte und haben es dann sanft miteinander vermischen, in den Kegel-verfolgt Schatten?“

Das scheint, als ob Sie sich irgendwie in den Fuß schießen. Sie erhalten einen noch größeren Leistungstreffer und erhalten die Nachteile von Shadow Mapping und Voxel Cone Tracing. Die Voxel-Kegelverfolgung ist teuer, kann aber schöne weiche Schatten und globale Beleuchtung erzeugen. Shadow Mapping ist besser für harte Schatten und ist schneller für kleinere Szenen, aber wenn du mehr Geometrie hinzufügst, zeichnest du das gleiche Zeug mehrmals neu, mindestens einmal für jedes Licht.

Tolle Arbeit übrigens.Ich habe Ihr Problem bei der Voruntersuchung meiner eigenen DirectX-Implementierung der Voxel-Cone-Tracing-Methode entdeckt.

[Bearbeiten]

Ich erkannte, dass ich einen Fehler im Bild gemacht. Das Bild rechts sollte 4/64 statt 4/16 sein. Ich habe die Z-Dimension vergessen.

+0

Freut mich, dass andere Personen auch an dieser Technik arbeiten. Ich verwende keine direktional abhängige Transparenz. Ich hatte ursprünglich geplant, meine Oberflächenvoxelisierung durch eine feste Voxelisation zu ersetzen, die die Löcher beseitigen sollte und auch "hohle" Spiegelreflexionen eliminieren sollte (d. H. Meine Spiegelreflexionen sind aufgrund der halbtransparenten Mischung von Voxeln transparent). Meine Angst, richtungsabhängige Voxel zu verwenden, ist, dass es deutlich mehr kosten würde als die Verwendung fester Voxelisation. – gboxentertainment