Jump to content
Unity Insider Forum

Lichtbrechung mit Shader Graph


Seyshiro

Recommended Posts

Lichtbrechung in Echtzeit ist so ne Sache!
Dabei ist es egal ob du Shader Graph oder ein anderes nodebasierendes System nutzt oder den Shader selber schreibst. Man kann es sicherlich für manche Dinge faken, aber echte Lichtbrechung wird nicht schnell genug berechnet sein um dann auch noch spielen zu können.
Ich komme aus der 3D Schiene und weiß wie lange sowas rechnet, wenn es physikalischen Ansprüchen genügen soll.

Jedes tranzparente Material hat einen anderen Brechungsindex, also den Wert um den sich das Licht bricht, wenn du nicht senkrecht da drauf schaust.
Das ginge noch zu faken, weil man diesen Wert im Bezug zur Kamera evtl. einberechnen könnte. Es ginge also evtl, für einen klaren Bergsee.
Für eine richtige Berechnung kommt aber noch das Medium an sich hinzu und dessen Dicke. Das bedeutet also dass der Shader, z.B. bei einem Kristall oder einem Wasserglas, beidseitig sein muss und beide Seiten zur Brechungsberechnung hinzu gezogen werden müssen. Außerdem gibt es innerhalb des Mediums auch noch Reflektionen, man sieht also die Rück-, bzw. Innenwand eines Glases. ( Ok, die sind jetzt nicht sooo wichtig) Trotzdem: Licht fällt auf das Wasserglas und wird (Brechungsindex von Rund 1.5) gebrochen, es geht durch das Glas hindurch und wird beim Austritt wieder  gebrochen. Jetzt ist es im inneren des Glases und da ist vielleicht Wasser drin. Also eine neue Brechung (Wasser hat einen Brechungsindex von rund 1.3). Aus dem Wasser hinaus, ins hintere Glas rein, dort wieder hinaus. Mächtig viele Berechnungen und die Formel dafür ist fieß! Und das musst du bei einem gewölbten Glas für alle Bereiche/Pixel extra machen, denn je flacher der Winkel, desto stärker die Brechung.

Deswegen wirst du es für Echtzeit nur Faken können und auch nur für glatte Oberflächen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke, dass das möglich wäre. Mit Shader Graph sollte man alle Shader erzeugen können, die auch per Code erzeugt werden könnten.
Mit Shadern selber habe ich aber leider nicht viel am Hut, deswegen kann ich dir dazu nichts sagen.
Nur die Vorgehensweise könnte ich erklären.
Ein Tranzparenzshader nimmt ja auch irgendwie die Info hinter der tranzparenten Fläche auf und vermischt sie z.B. mit Materialfarben.
Diesem müsste mann dan einen Versatz beibringen. Je nachdem in welchem Winkel die Kamera suf die Fläche schaut, ist der Versatz anders. Schaut man senkrecht drauf, ist es wie bei einem normalen tranzparenten Shader. Je flacher der Winkel wird umso größer wäre die Brechung, also der Versatz des Dahinterliegendem.
Muss also irgendwie über die Normalen des Körpers plus Zusatzwinkel gelöst werden können.

Vielleicht hat @Zer0Cool ja eine Idee dazu. Der kennt sich mit shadern gut aus. :)
Zer0cool, komm herbei, wir brauchen dich hier!

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 months later...

Neuigkeiten!
Die High Definition Render Pipeline ist jetzt in der Lage schicke Lichtbrechungen zu erzeugen.
Hier ist der Uity Blog dazu:

https://blogs.unity3d.com/2018/09/24/the-high-definition-render-pipeline-getting-started-guide-for-artists/

Hat zwar jetzt nichts mit Shader Graph zu tun, aber vielleicht interessiert dich das trotzdem. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...