我已经为我的像素化iOS应用程序编写了一个GLSL着色器,以在Unity3D中使用。它有1个问题:
1)效果并不总是跟随月亮,并且 2)照明看起来不像像素化。
我稍微解释一下。该着色器旨在在月亮在其后面时对前景对象产生照明效果。我有一个精灵,通常显示为全黑色(如剪影),但当月球物体足够靠近它时,它会显示纹理的细节,就像这样: 实际的精灵(没有着色器)看起来像这样: 我这样做的原因是为了只使用一个纹理来制作光照贴图。但是,它存在两个问题:
1)当我靠近屏幕边缘时,光效不会完全跟随月亮。我不确定这是否与TEXCOORD1变量的错误使用有关。我制作了一个覆盖整个屏幕的精灵,以便您可以看到它如何不跟随月亮。这是我的测试场景中出现问题的图片。有一个全屏的带有黑色条纹和透明度的精灵,可以清楚地显示效果的位置。我想消除这种不同步,因为它使光线看起来不真实。
这是一个unitypackage的链接,您可以使用它来查看着色器的效果。只需在场景播放时尝试移动月亮即可。
1)效果并不总是跟随月亮,并且 2)照明看起来不像像素化。
我稍微解释一下。该着色器旨在在月亮在其后面时对前景对象产生照明效果。我有一个精灵,通常显示为全黑色(如剪影),但当月球物体足够靠近它时,它会显示纹理的细节,就像这样: 实际的精灵(没有着色器)看起来像这样: 我这样做的原因是为了只使用一个纹理来制作光照贴图。但是,它存在两个问题:
1)当我靠近屏幕边缘时,光效不会完全跟随月亮。我不确定这是否与TEXCOORD1变量的错误使用有关。我制作了一个覆盖整个屏幕的精灵,以便您可以看到它如何不跟随月亮。这是我的测试场景中出现问题的图片。有一个全屏的带有黑色条纹和透明度的精灵,可以清楚地显示效果的位置。我想消除这种不同步,因为它使光线看起来不真实。
2) 产生的照明效果非常锐利-- 我认为,如果每个像素都像SpriteLamp中一样单独点亮会更好。我知道这与着色器中舍入片段坐标有关,但由于我从未真正知道我的着色器变量的值,因此我似乎无法正确地解决这个问题。
我可以对距离进行四舍五入和向下取整,但然后我会得到这个结果,它遵循了月球的距离,但不遵循原始精灵中的像素。虽然存在像素化,但我们最终得到的是这种奇怪的曲线跨越了本应只有一个像素的区域,如果你能理解我的意思的话...
我需要的更像是这样。您能看到原始纹理的每个像素都被点亮了吗? 这是着色器本身的链接: http://pastebin.com/0zbqrP57。它基本上是默认的Unity精灵着色器,但在SampleSpriteTexture函数的结尾添加了一些代码。这是一个unitypackage的链接,您可以使用它来查看着色器的效果。只需在场景播放时尝试移动月亮即可。
https://drive.google.com/open?id=0BxCQjUHiAAQWZGpPZ3R2SExTcXc
我的问题:你有关于如何解决这些问题或者它们的解决方案吗?