当不要脸已成习惯,当山峰也没有了棱角,当招人这么困难的时候,我还是在篇头植入的招聘。
坐标山东青岛市北,招聘日系画师,其他岗位目前公司没有说,有意思的可以入群私聊。
然后再说一下QQ群,山东手游研发聚集地335772557,进群先看公告,要是抱着我要学习的心态进群的话,那你就失望了,因为是个死群。
偶尔心情好的是时候会发个技术链接。
接下来进入正题!!
感谢ZY的测试package!
怎么决定两个透明物体的渲染谁先谁后呢。。
易得证(大家都知道,如果不知道的话,我也当大家都知道了):在unity中(其他引擎我不知道哟),透明物体的Z是一般要关闭写入的。那么谁离相机近谁就先渲染。
这个规则看起来没有什么问题,但是,但是,但是。。。。
①如果两个离的很近的物体,会有ZFighting问题。这是问题一。
②如果两个离的比较近的物体交叠着,相机在运动,比如lookat一点旋转运动,两个物体会在某一时刻分别离相机的距离很近,这就会有跳动。这是问题二。
③离相机近,是物体的pivot里相机近,还是物体的center里相机近。这是问题三。
先说一下问题一。
说起ZFighting,易得证。shader中搞个offset不就好了,于是就有了
再说一下问题三和问题二。
这就有的折磨人了,我这里只说一下我的测试结果,测试不一定就是对的。
两个图片一个是pivot在center上的,一个是pivot 偏离的center
然后三组
从左往右,第一组是两个相同位置的“Pivot在中心的物体”。
第二组是两相同位置的“一个pivot在中心一个偏离中心的物体”。(物体的中心在世界中心点(0,0,0))
第三组是两个相同位置的“Pivot偏离中心的物体”;
然后我注视世界中心点,旋转相机。
这是三组都分别在相同位置,得到的结果:
对于这种结果,我也不知道改怎么得到疑似结果。毕竟float也是有误差的。
这是中间那组pivot偏离中心的物体在y轴上有0.005f的位移,两边的都分别在相同位置,得到的结果:
然后我们看中心那组的结果。
这是pivot在世界中心(0,0,0)的物体得到的结果:
这是pivot偏离中心的物体在y轴上有0.005f的位移得到的结果:
DynamicBatching我禁用之后也测试了,结果一样。由于两边的两组是第一组和第三组。得到了疑似的结果:这个距离指的是物体中心点到相机的距离,而不是pivot与相机的距离。
这个结果并不是绝对的结果,我只是简单的测试了,测试的内容也比较单一,测试的物体也是一个完全对称的正方形的面片。测试过程也是只用眼睛观测,没有用数据记录说明。这个距离也有可以能是aabb的中心与相机的距离。这个测试就暂停了。所以这个结果并不是一定正确的。
刚才只是梳理的一些问题,接下来才是重要的内容。
方案一:
刚才已经说了一个方案了,shader中加入offset。可以一定性的解决一些问题。问题是:两个shader,并且很多情况不太适合。
方案二:
既然是距离决定排序,那么在透视相机下的排序,显然要比正交相机下复杂。于是那就修改透视相机下的透明物体的距离计算。
正交也好自定义也罢,看项目来吧。
程序大哥的话。。。
缺点:世界上没有完美的解决方案。
方案三:
还是距离,既然相机的Clipping planes near 和far。。。这里就说到这吧,大家应该很明白这两个值的差值越大带来的影响。
方案四:
然后在说一下,一个shader怎么解决这个问题。
每一个物体的vertex都是有ID的,美术在制作过程中会经常有attach的。attach就会影响vertex的ID,比如A去attachB,那么原来A的vertex在新物体中,vertex的ID是从1开始的,那么B就是从A的vertex数量+1开始的。
unity渲染的时候,是从1开始的。我瞎说的。
这里就上做测试的过程了。直接给正确结果吧。
美术阶段,选中地面,attach另一个。resetXform。
方案五:
https://software.intel.com/zh-cn/articles/alternatives-to-using-z-bias-to-fix-z-fighting-issues/
https://blog.csdn.net/tinyhum3d/article/details/7256040
方案六:
这是最重要的方案。google或者百度