2016-09-12 83 views
0

我想写一个简单的frag/vert着色器,根据它是否在光照范围内,将从'点亮'纹理或'未点亮'纹理绘制合适的颜色。如何在Shader中获取Light的Range值?

因此,我需要比较光线到光线范围的距离。 我一直在Google上搜索各种东西,但我似乎无法找到访问光源范围值的方法。有没有办法做到这一点?如果没有,是否有某种衍生数据可以用作替代方案?

更新

我能找到这个方法here,这似乎是最有前途的,到目前为止,打不过绕了一点后,我似乎仍不能得到我所需要的。有一些关于_LightMatrix0未被填充的讨论。有人可以确认吗?

更新2

我的Unity Shader Variables文档中找到的变量unity_LightAtten。但是,这仅用于Vertex Lit着色,这并不完全理想,特别是考虑到缺少控制台支持。 难道有一种方法可以将这个变量传递给转发渲染吗?

回答

1

您可以使用Material.SetFloatLight.range传递给着色器。你需要附上一个脚本来做到这一点。

+0

哦,很有希望...我会刺伤并回到这里,谢谢!但我怎么区分不同的灯光? – LeftRight92

+0

为你的灯使用不同的名称。然后在脚本中按名称查找这些gameObjects。 [GameObject.Find](https://docs.unity3d.com/ScriptReference/GameObject.Find.html) – zwcloud

+0

这是我达成的第一个解决方案,但是如何知道当前在着色器中使用哪盏灯? ? – LeftRight92

相关问题