透明着色器允许下面的对象显示在顶部

时间:2015-01-29 10:09:40

标签: unity3d shader transparent

在我的场景中,表情符号(带有png图像的四边形)放置在Y:0处,点(带有平铺3X3的四边形)放置在Y:-0.25处。 我需要用于表情符号的着色器是透明 - 漫反射,因为我正在使用圆形png图像。

但我在下面使用的点数显示在笑脸之上。使用像漫反射这样的任何其他着色器解决了问题,但笑脸变成了正方形。

截图: enter image description here

如果您需要进一步澄清,请随时提出。

编辑: 我已经从检查员面板上附上了笑脸和圆点的着色器细节。 链接:http://postimg.org/image/cvws1os7d/

编辑2: 我发现问题应该在MainCamera上,尤其是距离& "视野"。 我需要使用" Perspective"作为投影类型,140作为视野。

如果我将投影类型更改为“正交”,问题就完全解决了。

以下屏幕截图显示距离和视野如何控制笑脸上点的外观。

截屏1: Y位置:8.48 视野范围:30 链接:http://postimg.org/image/s31tttrkp/

截屏2: Y位置:9.7 视野范围:30 链接:http://postimg.org/image/f71sq0y4b/

截屏3: Y位置:11.41 视野范围:30 链接:http://postimg.org/image/3uk4az3d3/

屏幕截图4: Y位置:1 视野:140 链接:http://postimg.org/image/bul9zwg7z/

这可能是一个线索吗?

2 个答案:

答案 0 :(得分:2)

如果您使用Sprite Renderer组件渲染图片,则必须使用Sorting LayerOrder in Layer参数更改渲染顺序,而不是更改Y位置。

可以通过单击"默认"添加排序图层。并选择"添加排序图层。"。通过将图层拖动到不同的顺序来更改图层的顺序。使用Order in Layer时,会先渲染较小的数字。这意味着较高的数字将被绘制在较低的数字之上。

enter image description here

答案 1 :(得分:2)

关于透明度通常如何实施的一些信息(不仅仅是Unity)。

同时,可以按任何顺序绘制不透明对象(即使按照前后顺序对它们进行排序最终可以依赖于早期的z-cull来提高某些GPU性能)。可以使用存储在z-buffer中的深度值推断出哪些像素可见。

您不能依赖z-buffer来提高透明度。 对于渲染半透明对象,一种典型的方法是在所有不透明对象之后绘制它们,并按照从前到后的顺序对它们进行排序(首先绘制距离相机较远的透明对象)。

现在的问题是:你如何对物体进行排序?使用透视相机和通用形状的网格the solution is not obvious

对于平行于ortographic相机视图平面的四边形网格,z顺序是隐式正确的(这就是为什么它总是适合你)。 您还可以注意到摄像机位置会影响绘图顺序,因为使用透视摄像机时,顺序计算为对象位置和摄像机之间的距离。

那么在您的特定用例场景中,您可以使用Unity3d做什么? 几个技巧:

  • 明确设置材料的render queue
  • 在着色器中明确设置render order(与上述类似,但等同于具有相同着色器的每个对象)
  • 使用Offset将深度伪装到着色器中(在您的情况下不是那么有用,但值得知道)

希望这会有所帮助


修改

我不知道,camera transparency sorting mode似乎可以自定义。所以这是另一种解决方案,如果您想使用透视相机,也许最适合您的情况。