2016-09-12 1 views
0

Я пытаюсь написать простой frag/vert shader, который, в зависимости от того, находится ли он в диапазоне света, нарисует соответствующий цвет либо из «освещенной» текстуры, либо из «неосвещенной» текстуры.Как получить значение Range в Shader?

Поэтому мне нужно сравнить расстояние между светом и диапазоном света. Я искал все виды вещей, но я не могу найти способ доступа к значению диапазона света. Есть ли способ сделать это? Если нет, есть ли какие-то производные данные, которые я мог бы использовать в качестве альтернативы?

Update

Я был в состоянии найти этот метод here, который кажется наиболее перспективным до сих пор, однако после игры вокруг немного, я все еще не могу показаться, чтобы получить то, что мне нужно. Есть некоторые разговоры о том, что _LightMatrix0 не заселен. Может ли кто-нибудь подтвердить?

Update 2

Я нашел переменную unity_LightAtten в документации Unity Shader Variables. Однако это используется только для затенения Vertex Lit, что не совсем идеально, особенно учитывая отсутствие поддержки консоли. Может ли быть способ передать эту переменную в Forward Rendering?

ответ

1

Вы можете пройти Light.range в шейдер, используя Material.SetFloat. Для этого вам нужно прикрепить скрипт.

+0

ohh, обещаю ... У меня будет удар и вернусь сюда, спасибо! но как бы я различал разные огни? – LeftRight92

+0

Используйте разные названия для своих огней. Затем найдите эти gameObjects по имени в скрипте. [GameObject.Find] (https://docs.unity3d.com/ScriptReference/GameObject.Find.html) – zwcloud

+0

Это первое решение, к которому я стремился, но как вы узнаете, какой свет используется в текущем Пассе в шейдере ? – LeftRight92

Смежные вопросы