Jump to content
Unity Insider Forum
Sign in to follow this  
Seyshiro

Lichtbrechung mit Shader Graph

Recommended Posts

Hi@all,

Ich hoffe, dass sich der ein oder andere schon ein wenig mit Shader Graph auseinandergesetzt  hat und mir sagen kann, ob es schon möglich ist, damit einen transparenten Shader mit Lichtbrechung umzusetzen.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

@malzbie Danke für die schöne Erklärung.

Ist das Erstellen so eines Fake-Lichtbrechungs-Shaders für glatte Oberflächen auch mit dem Shader Graph möglich? Und wenn ja, wie kann ich das am besten umsetzen? Mir fehlt da irgendwie der Ansatz.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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. :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×