Unity中GPUInstance详解
为什么要用GPUInstance
在没有GPUInstance此技术之前,对于像草地、树木,割草游戏,它们往往是数据量很大,但同时又只存在微小的差别如位置、旋转、颜色等。如果像常规物体那样进行渲染,所使用的绘制指令必然很多,资源占用必然很大,一是cpu对gpu提交数据的次数(包括设置数据buffer,渲染状态以及调用对渲染原语的绘制即drawcall),二是gpu上的绘制(包括顶点处理和像素绘制),随着场景物体的提升,cpu和gpu的压力都会上升。一个合理的策略就是,我们指定一个需要绘制物体对象,以及多个不同的参数,然后根据参数在一个绘制调用中绘制出来——这就是所谓的GPU实例化。
GPUInstance原理
Gpu Instance就是用来解决这一问题的,对于使用 同一网格 和 同一材质的物体们,它使用少量的渲染调用(DrawCall),渲染同一网格的多个副本,也就是说在渲染时, CPU 可以把 它们的不同的属性(位置,大小,旋转,颜色等) 和 其它Instancing 材质信息组装成一个 Buffer(实际上就是一个数组) 传给 GPU 的一个缓存区。GPU 在渲染这些物体时,会有一个 全局的 SV_InstanceID 即 数组的 下标,每渲染完一个物体就 ++SV_InstanceID,这样我们每个物体就可以根据这个 id 拿到自己的 位置颜色等信息啦。这样我们渲染这些物体时就只需要一个 DrawCall 即将 数组 传给 GPU 缓存区,就可以渲染大量的物体。
官方链接介绍Unity - Manual: GPU instancinghttps://docs.unity3d.com/Manual/GPUInstancing.htmlGPUInstance使用方式
1.unity自动进行
系统会自动对场景中符合规范的,被开启GpuInstance的对象进行Instance合批处理,依靠GameObject,自然沿袭unity的剔除、矩阵运算等,方便调试,但是性能不如后者。最大批处理数量, 实测2019.4,Editor PC,最大数量511。512则会增加批次。
其他测试参考:Unity Instancing batch的最大数量计算与测试_无加冰嘅可乐的博客-CSDN博客
2.手动调用。使用Graphics.DrawMeshInstancedIndirect等API,需要自行计算剔除等运算。
- DrawInstanceMesh:Unity - Scripting API: Graphics.DrawMeshInstanced
- 一次调用Mesh的数量有限,最大为1023个模型
- 材质球必须开启GpuInstance,如果不开启就会出发异常
- 属性赋值使用MaterialBlockProperties的Array方法群..
DrawInstanceMeshIndirect:
- 一次调用没有限制副本数量,
- 材质球不需要开启Instance
- 执行效率更高
DrawMesh:
- 使用这个API, 只要材质球使用同一个,并且材质球开启了GPUInstance也会被自动Instancing合批的.
GPU Instance合批技术是不支持 SkinnedMeshRender的,不过可以转换为Mesh Render以支持,一下链接可以详细阅读
Unity官方开源的Animation Instacing:Animation Instancing: SkinnedMeshRenderer | Unity Blog
博主:Unity中使用GPU Instancing优化SkinnedMesh渲染_unity调用gpu生成mesh_xoyojank的博客-CSDN博客
Unity中的静态合批,动态合批,SRPBatcher,GpuInstance - 知乎
U3D优化批处理-GPU Instancing了解一下 - 知乎
GitHub - vanCopper/Unity-GPU-Instancing: Unity GPU Instancing
GPU Instancing 深入浅出-基础篇(3) - 知乎
【GPU Instance】从入门到过载 - 知乎
Unity中GPUInstance详解相关推荐
- Unity中Scale详解
1.缩放变换 Scale代表的是缩放. 通常意义下的缩放变换,指的是利用缩放矩阵和物体的齐次坐标相乘而进行变换,缩放矩阵形如: Scalex代表x轴方向的缩放 Scaley代表y轴方向的缩放 Scal ...
- Unity动画系统详解10:子状态机是什么?
摘要:除了使用Layer还有没有更好的组织状态的方式呢?感觉一个Layer里面状态多的时候,还是很显得很乱. 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这是复(yu)习( ...
- Unity动画系统详解9:Target Matching是什么?
摘要:在游戏中,经常有这种情况:角色的手或者脚需要在特定时间放在特定的位置.比如角色需要用手撑着跳过一个石头或一堵墙,或者跳起抓住房梁.Target Match就是让动画的特定片段去匹配特定的位置. ...
- Unity动画系统详解5:BlendTree混合树是什么?
摘要:"Animator中有一个功能,用来解决多个动画之间的混合,经常用于移动动画之间的混合,这个功能叫做BlendTree,混合树." 洪流学堂,让你快人几步.你好,我是跟着大智 ...
- 零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏
零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏 六大推荐理由 理由一:系统 理由二:详细 理由三:专业 理由四:图解 理由五:深度 理由六:实例 一键直达:<UGUI 控件详解 ...
- Unity动画系统详解4:如何用代码控制动画?
摘要:通过上一篇咱们知道了播放动画需要使用Animator,那么如何用代码控制动画呢? 洪流学堂,让你快人几步.你好,我是跟着大智学Unity的萌新,我叫小新,这几周一起来复(yu)习(xi)动画系统 ...
- Unity动画系统详解8:IK是什么?
摘要:IK是Inverse Kinematic的缩写,也就是反向动力学.是根据骨骼的终节点来推算其他父节点的位置的一种方法.比如通过手的位置推算手腕.胳膊肘的骨骼的位置. 洪流学堂,让你快人几步.你好 ...
- Unity动画系统详解6:如何做好角色的移动动画?(Root Motion详解)
摘要:Root Transform是body transform在Y平面上的投影,并且是运行时计算的.每一帧Root Transform的变化实时计算.然后Transform的变化会被应用到GameO ...
- Unity动画系统详解3:如何播放、切换动画?
摘要:[长文预警,建议先收藏]有了模型和多个动画以后,在Unity中如何控制它们的播放和切换呢?本文带你一站式解析Unity的Animator模块. 洪流学堂,让你快人几步.你好,我是跟着大智学Uni ...
最新文章
- [日常] Go语言圣经-Deferred函数
- VTK:Math之HomogeneousLeastSquares
- Hyper-V 和Ubuntu Server 16.04 配置静态IP
- 『设计模式』设计模式--原型模式
- VS2008 开发设计MOSS工作流 URN 注意了
- 理论基础 —— 排序 —— 直接插入排序
- docker go get问题_创建优化的Go镜像文件以及踩过的坑
- 农夫山泉终于“玩砸了”
- GitHub上传文件的过滤规则 -- windows下
- 非参数统计的Python实现——符号检验
- 菜鸟入门:电脑常用的9个小知识点
- isSelected() 的使用
- 又一恶意软件:1000多名受害者均在韩国,不排除其他地区被攻击的可能
- Hadoop-之性能测试(基准测试)
- 【工控协议专题01】Modbus协议原理与安全性分析
- drbd+keepalived nfs高可用方案实践
- python时间复杂度和空间复杂度是指,时间复杂度与空间复杂度
- 【学习笔记】李宏毅2021春机器学习课程第6.2节:生成式对抗网络 GAN(二)
- ASP.NET - 查询邮件及邮件内容
- 机器学习之依概率收敛与一致估计(相合估计)
热门文章
- debian 11 apt 安装软件报错:Media change: please insert the disc labeled
- 查看Debian版本号的方法
- windows/linux 系统U盘制作系统盘(实战,简单)
- 前端学习: 用css设置文字样式
- Spring Boot+Vue项目学习总结
- clover安装黑苹果10.15.3常见问题集合
- flash 嵌入html代码,flash嵌入html在html网页代码中嵌入Flash文件的解决方案(下).doc...
- python学生成绩管理系统【完整版】
- 【STM32Cube】学习笔记(二):超声波传感器
- 新时代城市规划建设需新基建与传统基建携手共同打造