初识Gpu Instancing

368 阅读2分钟

初识GPU Instancing

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈

1.什么是GPU Instancing

  1. GPU Instancing 使用少量的draw calls就可以一次绘制或者渲染大量的相同Mesh的对象

  2. GPU Instancing在每次绘制时仅调用相同的网格,每个对象可以拥有不同的参数(颜色/缩放/旋转等)

  3. GPU Instancing 可有效的降低场景内的draw calls,提升场景的渲染效率

2.为什么要用GPU Instancing

很多游戏场景中有大量的重复物体,这些物体都是同一个mesh 比如:游戏中的草地, 树木,建筑等等.如果这些物体每个都单独的渲染,就会导致draw calls特别高.

3.GPU Instancing与合批的区别

有人就问了,使用合批技术(静态合批/动态合批等)也可以有效的降低 draw calls, GPU Instancing 与合批有什么区别呢

合批的详细讲解会在后面讲解.

4.如何使用GPU Instancing

GPUInstancing-0.png 如果你的Material下面有这个选项说明你的材质球支持GPU Instancing,你只需勾选此选项即可.

如果不知支持请修改你的Shader.

image-20220117231230088.png

如图, 在不勾选 Enable Instancing的情况侠, 随机生成1万个 Standard Shader 的 Cube, 可以看到Batches数量达到了 2326个,但是这些明显都是同一个mesh.

image-20220117231553852.png

在开启GPU Instancing 之后, 直接降到了12, 降低draw calls的效果还是很明显的.

4.注意事项

  1. Unity 自动选取要实例化的网格渲染器组件和 Graphics.DrawMesh 调用, 不支持SkinnedMeshRender
  2. Unity 仅在单个 GPU 实例化绘制调用中批量处理那些共享相同网格和相同材质的游戏对象
  3. Android 上的 OpenGL Core 4.1+/ES3.0+ 支持