首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院GPU Instancing测试
2018
09-03

Unity3D研究院GPU Instancing测试

GPU instancing 很早就支持手机了(Android只支持Opengl ES 3.0),但是我一直不知道将它应用到哪里,刚好最近在调研这个我对它又重新测试了一下。

如果是不动的物体勾选static静态合并批次(40-50帧率)

Unity3D研究院GPU Instancing测试 - 雨松MOMO程序研究院 - 1

自定义Shader中勾选Enable GPU Instancing

Unity3D研究院GPU Instancing测试 - 雨松MOMO程序研究院 - 2

帧率竟然还不如静态合批次(帧率 30-40)

Unity3D研究院GPU Instancing测试 - 雨松MOMO程序研究院 - 3

自定义Shader

所以,静态不动的物体就没必要用上面的方法了,于是我又测试了Graphics.DrawMeshInstanced()方法,终于满意了。(稳定60帧)

Unity3D研究院GPU Instancing测试 - 雨松MOMO程序研究院 - 4

Graphics.DrawMeshInstanced()方法不需要游戏对象以及游戏组件的额外开销,在Update()方法中一气呵成,不过它也有限制,最多可以画1023个。
还有个方法是Graphics.DrawMeshInstancedIndirect()它没有画多少的限制,而且更加灵活,我也搞了好一会儿才在游戏中跑起来,后来才知道它不能再手机上用,只有PC上可以.

在shader中接收位置 颜色 矩阵

在代码中将位置 颜色 矩阵传进去就行了

如果是发生移动的物体顶点数量在900以内会动态合并批次,如果需要支持更多的顶点GPU Instaning的优势就更明显了。 目前来看草、石头、植被、比较合适用它。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

留下一个回复

你的email不会被公开。