Unity中GPUInstance详解

news2025/1/16 13:42:05

为什么要用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
  1. 一次调用Mesh的数量有限,最大为1023个模型
  2. 材质球必须开启GpuInstance,如果不开启就会出发异常
  3. 属性赋值使用MaterialBlockProperties的Array方法群..
  • DrawInstanceMeshIndirect:

  1. 一次调用没有限制副本数量,
  2. 材质球不需要开启Instance
  3. 执行效率更高
  • DrawMesh:

  1. 使用这个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】从入门到过载 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.3 向量与矩阵的范数

学习目标: 要学习向量与矩阵的范数,我会采取以下几个步骤: 了解基本概念:首先,我会了解向量和矩阵的范数的基本概念和定义,以及它们的性质和特点,这是理解和掌握范数的基础。 学习具体算法&am…

Nacos简介、基本概念、基本架构、安装部署

官网:https://nacos.io/zh-cn/ 官方文档: 什么是 Nacos Github:https://github.com/alibaba/nacos,阿里巴巴开源项目。 简介 什么是Nacos? Nacos:(Dynamic) Naming and Configuration Service&#xf…

空间相关性----地理探测器--学习记录

目录 相关教程--软件及数据准备 R语言数据分析1、R包、数据准备、GD综合代码2、分异及因子探测---q值 gd3、交互作用探测---评估因子gdinteract4、风险区探测--显著性--gdrisk()5、生态探测---交叉影响--gdeco() 数据准备注意:使用Arcgis首先创建.gdb(本…

数学建模第二天:数学建模工具课之MATLAB绘图操作

目录 一、前言 二、二维绘图 1、曲线图、散点图plot 2、隐函数、显函数与参数方程的绘图 ①ezplot ②fplot 三、三维绘图 1、单曲线plot3 2、多曲线plot3 3、曲面 ①实曲面surf ②网格曲面mesh 四、特殊的二维、三维图 1、极坐标图polar 2、平面散点图scatter …

学网络安全都是一群什么人?

大家好呀,我是知了姐,又是一期学员故事栏目~ 3月下旬知了堂信安方向开新班,知了姐跟着去采访,了解到新学员们的求学故事,嘿你别说,虽然大家出身专业不同、经历背景不同,如今却在同一个地点相遇…

CAMX大气臭氧来源解析模拟

查看原文>>>基于CAMX大气臭氧来源解析模拟与臭氧成因分析实践技术应用 随着我国经济快速发展,我国面临着日益严重的大气污染问题。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因…

【微信小程序】生命周期,插槽和组件间通信

一、组件的生命周期 1.1 组件全部的生命周期函数 小程序组件可用的全部生命周期如下表所示 生命周期函数参数描述说明created无在组件实例刚刚被创建时执行attached无在组件实例进入页面节点树时执行ready无在组件在视图层布局完成后执行moved无在组件实例被移动到节点树另一…

实战案例|聚焦攻击面管理,腾讯安全威胁情报守护头部券商资产安全

金融“活水”润泽千行百业,对金融客户来说,由于业务场景存在特殊性和复杂性,网络安全必然是一场“持久战”。如何在事前做好安全部署,构建威胁情报分析的防护体系至为重要,实现更为精准、高效的动态防御。 客户名片 …

Flink系列-8、Flink DataStream的简介和API开发

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:https://flink-learning.org.cn/ 目录 流处理的介…

开放式耳机真的比封闭式强很多吗?推荐几款主流的开放式耳机

​开放式耳机,顾名思义,就是通过骨头振动来传导声音的耳机。相比于传统耳机,它的声音传输更加开放,不会对耳膜造成压迫感,也不会对耳膜旁的内毛细胞造成损害。因此开放式耳机既是运动蓝牙耳机,又是音乐蓝牙…

MAC 通过 brew安装 redis 并且设置开机启动

一.安装 mysql 1.安装 mysql 1.安装 redis brew install redis2.查看 redis 安装目录 brew list redis 记住安装目录 3.启动 redis 进入到安装目录下面 cd /opt/homebrew/Cellar/redis/7.0.11 cd bin ./redis-server 二.设置开机启动 上面安装好之后,redis 虽然能正常…

个性化的客户服务策略(二)

继续上次的策略,今天我们继续分享接下来的几点提供更加个性化的客户服务的方法。 6)利用社交媒体发挥自己的优势 请求进入社交媒体渠道原因有很多。例如,愤怒的客户可能会对帖子发送直接消息或评论,因为它感觉更直接,…

【刷题之路Ⅱ】LeetCode 3381.搜索旋转排序数组ⅠⅡ

【刷题之路Ⅱ】LeetCode 33&81.搜索旋转排序数组Ⅰ&Ⅱ 一、题目描述二、解题1、方法1——暴力法1.1、思路分析1.2、代码实现 2、方法2——二分法2.1、思路分析2.2、代码实现2.3、升级到81题2.3.1、改进思路分析2.3.1、改进代码实现 3、改进二分法3.1、思路分析3.2、代码…

STM32F407ZIT6 国产替代者NS32F407ZIT6 NS32F407ZGT6 软硬件通用 无需修改任何程序代码

NS32F407ZIT6 NS32F407ZGT6 器件基于高性能的 ARM Cortex-M4 32位 RISC 内核,工作频率高达 168MHz。 Cortex-M4 内核带有单精度浮点运算单元(FPU),支持所有 ARM 单精度数据处理指令和数据类型。它还 具有一组DSP指令和提高应用安全性的一个存储器保护…

Windows环境下调试DAB-DETR与Deformable-DETR

先前都是在服务器上运行DETR的相关程序,服务器使用的是Linux,所以运行较为简单,但如果想要简单的debug的话就没必要使用服务器了,今天便来在Winodws环境下调试DETR类项目,这里以Deformable-DETR与DAB-DETR为例。 首先是…

深度测评全新大模型「天工」,这些AI体验太香了

ChatGPT火了后,很多人都在关注“国产ChatGPT”的名号究竟花落谁家。 事实上,名号不重要,体验才是王道。ChatGPT能够火成“史上增长最快的消费者应用”,关键在于把体验提升到了新层次。毕竟对于用户来说,并不清楚产品背…

【WSN定位】加权质心定位算法-Matlab代码

文章目录 1. 质心定位算法2. 加权质心定位算法3. 部分代码展示4. 效果图展示5. 资源获取说明 摘要:质心定位算法(Centroid Algorithm)是 Nirupama Bulusu等提出的一种无需测距的粗精度定位算法。质心算法的基本思路:利用未知节点通信范围内的所有锚节点进…

树莓派下编译 PyMiniRacer

文: fasiondog 因需要在树莓派(及其其他各类派)下使用 akshare,但 akshare 的依赖库 PyMiniRacer 缺少 arm64 架构的包(该包已经不再维护),故在此记录下在 linux arm64 架构下编译 PyMiniRacer 的过程。有…

【微信小程序】 权限接口梳理以及代码实现

​ 1、权限接口说明 官方权限说明   部分接口需要经过用户授权统一才能调用。我们把这些接口按使用范围分成多个scope,用户选择对scope进行授权,当授权给一个scope之后,其对应的所有接口都可以直接使用。 此类接口调用时: 如…

小红书报告:2023美妆个护白皮书解读

导语 面对风云变幻的市场,消费行业始终是增长的重要引擎之一,其中美妆个护行业在过去六年里(2016-2022年)仍保持高增速与消费潜力 。 新的一年,市场呈现什么新变化,品牌又有哪些新动作?本期为…