2025年中国专业摄像机行业综合概况
2026/1/14 23:50:30
a.静态批处理定义 静态批处理(StaticBatching)是Unity用来减少CPU Draw Call开销的一种批处理方式,它将多个静态对象(位置,旋转,缩放 都不会在运行中改变的物体)的网格数据合并成一个或少量的大网格,从而一次性提交给GPU绘制;前提条件:想要进行静态批 处理的物体需要勾选Static中的Batching Staticb.主要原来 Unity加载场景时,将使用相同材质的静态物体的网格数据合并成更大的网格;在渲染时,这些静态物体就能通过一次DrawCall 一起绘制一般静态批处理功能都是默认开启的,不管在内置渲染管线还是SRP中 Player Settings ——>Other Settings ——>Rendering ——>Static Batchinga.必须是勾选了Batching Static的物体 b.必须是相同材质(渲染状态必须一致),不同材质的对象会放入不同批次 c.每个静态批次最多可以包含64,000个顶点,如果超过这个数目,Unity会创建另一个批次 d.进行静态批处理的对象,运行时不能改变Transform(位置、旋转、缩放),否则会失去批处理资格 e.运行时不能修改网格,比如通过脚本代码调用相关API修改网格数据等 f.动态创建的静态对象不会进行静态批处理,运行时如果动态创建静态对象;这些对象如果不做处理,并不会被静态批处理 因此我们需要尽量把想要进行静态批处理的对象放在原始场景中a.首次绘制:CPU → GPU数据上传 静态批处理的合并操作完成后,合并后的网格数据会被存储在CPU的内存中(RAM);当游戏第一次渲染这个静态批次时,CPU会 执行"数据上传"操作:把合并后的顶点、索引、法线、切线等完整数据,从CPU内存拷贝到GPU显存(VRAM)中,并在显存中创建 一个持久化的缓冲区(通常是顶点缓冲区 VBO+索引缓冲区 IBO)上传完成后,CPU会记录这个缓冲区在显存中的"地址",后续绘制只需要调用这个地址即可b.后续绘制:直接复用GPU显存数据 从第二次绘制开始,CPU不需要再传输任何网格数据,只需要向GPU发送绘制指令:-指定要使用的显存缓冲区地址-传递材质、光照等少量动态参数-触发 GPU 的渲染管线执行绘制 GPU收到指令后,直接从显存的持久化缓冲区中读取网格数据,无需等待CPU的二次传输c.数据从显存释放的唯一条件 只有满足以下任意一种情况,显存中的静态批次网格数据才会被释放,下次再渲染时才需要重新上传-该静态批次所属的场景被卸载(比如:切换到其他场景)-手动调用了释放显存的API(比如:Unity中的Mesh.UnloadMeshData())-游戏退出或应用被系统回收资源