2016-09-12 5 views
0

Ich versuche, einen einfachen Frag/Vert-Shader zu schreiben, der je nachdem, ob er im Bereich eines Lichts liegt, die passende Farbe entweder aus der "beleuchteten" Textur oder aus der "unlit" -Textur zeichnet.Wie erhalte ich im Shader den Wert eines Lichtbereichs?

Daher muss ich den Abstand zwischen dem Licht und der Reichweite des Lichts vergleichen. Ich habe alle möglichen Dinge gegooglet, aber ich finde nicht, dass ich einen Weg finde, auf den Bereichswert des Lichts zuzugreifen. Gibt es einen Weg dazu? Wenn nicht, gibt es irgendwelche abgeleiteten Daten, die ich als Alternative verwenden könnte?

aktualisiert

ich diese Methode here zu finden, war in der Lage, die für ein bisschen nach dem Spielen um, ich kann immer noch scheint nicht zu bekommen, aber bisher die vielversprechendste zu sein scheint, was ich brauche. Es wird darüber geredet, dass _LightMatrix0 nicht ausgefüllt wird. Kann jemand bestätigen?

aktualisieren 2

fand ich die Variable unity_LightAtten in der Unity Shader Variables Dokumentation. Dies wird jedoch nur für Scheitelpunkt-Schattierungen verwendet, was nicht gerade ideal ist, insbesondere in Anbetracht der fehlenden Konsolenunterstützung. Könnte es eine Möglichkeit geben, diese Variable an Forward Rendering zu übergeben?

Antwort

1

Sie können Light.range in den Shader unter Verwendung Material.SetFloat übergeben. Sie müssen ein Skript anhängen, um dies zu tun.

+0

ohh, vielversprechend ... Ich werde einen Stich bekommen und zurück hier, danke! aber wie würde ich zwischen verschiedenen Lichtern unterscheiden? – LeftRight92

+0

Verwenden Sie verschiedene Namen für Ihre Lichter. Finde dann diese GameObjects anhand des Namens im Skript. [GameObject.Find] (https://docs.unity3d.com/ScriptReference/GameObject.Find.html) – zwcloud

+0

Das ist die erste Lösung, die ich erreicht habe, aber woher weißt du, welches Licht im aktuellen Pass im Shader verwendet wird? ? – LeftRight92

Verwandte Themen