在我的场景中,笑脸(带有 png 图像的四边形)放置在 Y:0 处,点(带有平铺 3X3 的四边形)放置在 Y:-0.25 处。
我需要用于笑脸的着色器是透明漫反射,因为我使用的是圆形 png 图像。
但我在下面使用的点显示在笑脸上方。使用任何其他着色器(如漫反射)可以解决该问题,但笑脸变成了正方形。
Screenshot:
如果您需要更多说明,请随时询问。
编辑:
我已附加检查器面板中笑脸和点的着色器详细信息。
关联:http://postimg.org/image/cvws1os7d/ http://postimg.org/image/cvws1os7d/
编辑2:
我发现问题应该出在主相机上,尤其是距离和“视野”上。
我需要使用“透视”作为投影类型,使用 140 作为视野。
如果我将投影类型更改为正交,问题就完全解决了。
下面的屏幕截图显示了距离和视野如何控制笑脸上的点的外观。
截图1:
Y位置:8.48
视野:30
关联:http://postimg.org/image/s31tttrkp/ http://postimg.org/image/s31tttrkp/
截图2:
Y 轴位置:9.7
视野:30
关联:http://postimg.org/image/f71sq0y4b/ http://postimg.org/image/f71sq0y4b/
截图3:
Y 轴位置:11.41
视野:30
关联:http://postimg.org/image/3uk4az3d3/ http://postimg.org/image/3uk4az3d3/
截图4:
Y位置:1
视场角:140
关联:http://postimg.org/image/bul9zwg7z/ http://postimg.org/image/bul9zwg7z/
这可以作为线索吗?
仅提供一些有关透明度通常如何实现的信息(不仅由 Unity 实现)。
同时,不透明对象可以按任何顺序绘制(即使按照从前到后的顺序对它们进行排序最终可以依靠早期的 z 剔除来提高一些 GPU 性能)。可以使用存储在中的深度值来推断哪些像素是可见的z-buffer http://en.wikipedia.org/wiki/Z-buffering.
您不能依赖 z 缓冲区来实现透明度。
对于渲染半透明对象,典型的方法是在所有不透明对象之后绘制它们,并按从后到前的顺序对它们进行排序(首先绘制距离相机较远的透明对象)。
现在的问题是:如何对对象进行排序?使用透视相机和通用形状的网格,解决方案并不明显 https://www.opengl.org/wiki/Transparency_Sorting.
对于平行于正交相机视图平面的四边形网格,z 顺序是隐式正确的(这就是为什么它总是适合您)。
您还可以注意到相机位置影响绘图顺序,因为对于透视相机,顺序是根据对象位置和相机之间的距离计算的。
那么你能做什么Unity3d
,在您的特定用例场景中?
几个技巧:
- 显式设置渲染队列 http://docs.unity3d.com/ScriptReference/Material-renderQueue.html材料的
- 显式设置渲染顺序 http://docs.unity3d.com/Manual/SL-SubshaderTags.html在着色器内部(与上面类似,但等于具有相同着色器的每个对象)
- 使用伪造深度Offset http://docs.unity3d.com/Manual/SL-CullAndDepth.html进入着色器(对你的情况来说没那么有用,但值得了解)
希望这可以帮助
EDIT
我不知道的是,相机透明度排序模式 http://docs.unity3d.com/ScriptReference/Camera-transparencySortMode.html似乎可以定制。所以这是另一种解决方案,如果您想使用透视相机,这可能是最适合您的情况的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)