游戏开发55课 性能优化12

news2024/11/14 4:20:49

 

4.9 带宽优化

带宽优化的目的是减少CPU与GPU之间的数据传输。

4.9.1 LOD(Level Of Detail)

LOD即细节层次,根据物体在画面的大小选用不同级别的资源,以减少渲染和带宽的消耗。LOD在图形渲染中应用广泛,适用的对象有模型LOD,地表LOD,材质LOD,植被/树LOD,灯光LOD,纹理LOD(MipMaps)等等。下图所示的是物体离相机越来越远,采用不同LOD的物体,其中LOD0精度最高,LOD2精度最低。

Unity引擎是通过LODGroup组件实现模型LOD的。(下图)

4.9.2 GPU Instance

GPU Instance技术应用于绘制相同Mesh的多个实例,每个实例都可以有独自的参数(如Color/Position/Scale等)。这种技术可以减少带宽,只需传入一份Mesh数据,就可以绘制任意多个实例。常用于绘制建筑,地表装饰物,粒子,草,树,植被等等。

上图所示的场景共有1900多个小球,但Batch数只有24,这就是开启了GPU Instance的效果。但它对平台有一定要求:

4.9.3 GPU Skin

CPU Skin最基本的角色动画实现方式,它可以方便地实现很复杂的动画操作,如融合/渐隐/组合/串接等等。但它的缺点也显而易见,占用大量CPU计算性能,难以并行计算,每帧需传送模型顶点数据到GPU,增加带宽负载。

GPU Skin的做法是将骨骼矩阵列表作为Uniform传入Shader,然后在Vertex Shader中对模型顶点进行蒙皮计算。它可以并行计算,减轻CPU负载,此外,由于每帧传入GPU的数据是骨骼矩阵,不是顶点数据,极大降低了带宽负载。

当然,GPU Skin也有缺陷。它会提高GPU负载,最高骨骼数往往受限于平台(如OpenGL ES 2.0不能超过250个Vector4数据量),而且也不利于做复杂的动画操作。Unity引擎可以在PlayerSettings面板开启GPU skin(下图)。

此外,GPU Skin还可以结合GPU Instance技术,以渲染大量相同角色的骨骼动画。详见这里。

4.9.4 GPU粒子

GPU粒子的优缺点和GPU Skin类似,支持粒子的并行运算,减少带宽负载,但它同样难以实现粒子的高级特性(软粒子/碰撞等)。Unity对模型粒子做了特殊优化,支持GPU Instancing(下图)。

4.9.5 正确使用Buffer标记

OpenGL的Buffer标记有以下几种:

GL_STREAM_DRAW
GL_STREAM_READ
GL_STREAM_COPY

GL_STATIC_DRAW
GL_STATIC_READ
GL_STATIC_COPY

GL_DYNAMIC_DRAW
GL_DYNAMIC_READ
GL_DYNAMIC_COPY

  1. DRAW:Buffer数据将会被送往GPU进行绘制。

  2. READ:Buffer数据会被CPU应用程序读取。

  3. COPY:Buffer数据会被用于绘制和读取。

  4. STATIC:一次修改,多次使用。可用于静态模型顶点数据。

  5. DYNAMIC:多次修改,多次使用。可用于带动画的模型顶点数据,粒子系统的数据。

  6. STREAM:多次修改,一次使用。可用于特殊场合,比如编辑器数据。

Buffer的标记各有用途,所以选择合适的类型可以减少带宽负载和显存占用。

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

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

相关文章

au cs6七线阁教程 笔记

01 驱动 asio 02 I 监听 R录音 一般是单声道 03 调整音量声相 04 导出 删除轨道文件 07 删除选区 自定义波形剪辑颜色 录音激活后,监听才能激活 08 自动控制 默认控制音量: 09 效果器: Vst3 dll 插件 独立效果器面板,实时&a…

[附源码]Python计算机毕业设计SSM基于框架预约挂号系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【leetcode】对称二叉树

一、题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 二、代码思路 详细题解地址 思路有…

初识Dockerfile

初识Dockerfile Dockerfile 就是用来构建 docker 镜像的构建文件,命令脚本! # 创建一个dockerfile文件,建议 Dockerfile # 文件中的内容 指令(大写)FROM centosVOLUME ["volume01","volume02"]CMD echo "-------e…

【总复习】操作系统

操作系统总复习第1章 操作系统引论第2章 进程的描述与控制第3章 处理机调度与死锁第4章 进程同步第5章 存储器管理第6章 虚拟存储器第7章 输入/输出系统第1章 操作系统引论 1、操作系统的概念(定义) 操作系统( Operating System,…

力扣(LeetCode)1691. 堆叠长方体的最大高度(C++)

动态规划 状态计算 : f[i]{cuboids[i][2]if 不存在kmax(f[k])cuboids[i][2]if k∈[1,i−1]f[i] \begin{cases} cuboids[i][2] &\text{if } 不存在k \\ max(f[k])cuboids[i][2] &\text{if } k \in [1,i-1] \end{cases}f[i]{cuboids[i][2]max(f[k])cuboids[i][2]​if 不…

I-02Python自带编辑器IDLE的使用教程

目录 前言 正文 1. 开启行号功能 2. 运行代码,自动保存 3. 放大字体 4. 附常用快捷键 前言 IDLE是在安装python的时候自带的一个编辑器。 拥有基本的python编程的环境, 常用功能点: 代码自动补齐Debug模式python文档 你肯定想说&…

论文笔记-时序预测-Pyraformer

论文标题: Pyraformer: Low-Complexity Pyramidal Attention for Long-Range Time Series Modeling and Forecasting 论文链接: https://openreview.net/pdf?id0EXmFzUn5I 源码链接: https://github.com/alipay/Pyraformer 摘要 根据过去的…

(6)Pytorch常用函数

Pytorch用到的函数 文章目录Pytorch用到的函数1、tensor.eq()和tensor.lt()2、3、torch.pow()4、torch.clamp()5、item()和tolist()说明 1、发现了官方说明文档,使用这一套是最好的! 2、in-place操作说明,这是一个要被抛弃的方法,…

ArcGIS基础:获取栅格数据边界的线要素和独立格网面

本操作是为了提取栅格DEM数据的边界数据: 看一下原始数据:是一个非常普通的DEM栅格数据。 【方法:1】:使用【栅格范围】工具,通过搜索工具进行查找,如下所示: 该工具可以直接提取栅格外边界数…

将Bean交给Spring容器管理有几种方式?

将Bean交给Spring容器管理有几种方式? Spring核心 Spring核心是 IOC 和 AOP 。 所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。 至于更详细的说明,或者去深入理解Spring这两大核心&#x…

手写Spring4(Spring属性填充)

文章目录目标设计思路项目结构一、实现1、定义属性2、定义属性集合包装类3、类引用(bean类型)4、Bean定义补全5、Bean 属性填充二、测试1、准备2、测试案例3、测试结果目标 这一章节目的是接着前面的实例化策略实现后,进行属性填充&#xff…

MybatisPlus概述及使用

文章目录MybatisPlus1、介绍1.1、概述1.2、特性1.3、 支持数据库1.4、框架结构2、起步依赖与核心接口2.1 起步依赖2.2 BaseMapper3、快速入门3.1、导入依赖3.2、SpringBoot配置文件3.3、实体类3.4、Mapper接口3.5、引导类增加MapperScan注解3.6 测试4、注解4.1 TableName4.2 Ta…

《从总账到总监》读书笔记

书本封面 内容简介 这是一本用小说体例写作的财务专业书籍。工作中如何将财物数据业务化,找到绩效管理的关键点?在人工智能都会写诗的时代,财务这门学科是否会毫无价值?以及在未来,财务人员应该具备哪些专项能力才能不…

Java#34(多线程)

目录 线程(thread): 是一个程序内部的一条执行路经(之前写的代码中,main方法的执行就是一条单独的执行路径) 单线程: 一个程序只有一条执行路线 多线程: 指从软硬件上实现多条执行流程的技术 一.创建多线程 1.继承Thread类 2.实现Runnable接口 3.利用Callable, FutureT…

8 标志寄存器

标志寄存器 CPU 内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有以下3 种作用。 用来存储相关指令的某些执行结果;用来为CPU 执行相关指令提供行为依据:用来控制CPU 的相…

Pyinstaller打包exe程序

Pyinstaller和Nuitka是两大热门的python打包路径,学习Nuitka可以点击Nuitka入门学习。本文主要介绍Pyinstaller打包过程。 1.创建python虚拟环境 在conda中创建一个虚拟环境,用于程序打包,可以使打包程序占用空间最小 使用一下指令&#x…

一个超方便将现有博客生成vuepress2文档站的插件

闲来无事,研究了一下vuepress2和它的插件机制,写了一个可以一键通过已有博客生成vuepress2的文档站的vuepress2插件vuepress-plugin-blog-sync 效果 在vuepress2中简单引入即可达到将政采云掘金博客一键生成vuepress2页面,效果✨ 详见Demo …

38_SPI通信原理

SPI接口简介 SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI,是一种高递的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,…

蔚来智驾功能大更新:与其叫NOP+,不如叫NAD-

HiEV消息(文/张祥威)赶在2022年最后一个月,蔚来的自动驾驶大招露出了冰山一角。 2020年10月,蔚来国内首家推送高速场景下的领航辅助NOP(Navigate on Pilot),当时只有特斯拉实现了类似功能&#…