To美术-渲染管线及优化方向(CPU方向)

一、CPU与GPU

1、CPU与GPU的区别

请添加图片描述

橙黄色:控制单元   橙红色:存储单元  绿色:计算单元

CPU:结构组成复杂、控制逻辑丰富,计算量小,适合复杂运算
GPU:结构组成简单,核心数量多,计算量大,适合简单运算

CPU:以i7-10700为例,有8核心16线程
GPU:以RTX2060为例,有1920个Cu核心,每个CU核心包含了64个流处理器,即1920*64=122880个流处理器计算核心

CPU相对于GPU就像老教授和小学生,拿i7-10700和RTX2060举个例子,出一套小学数学试卷,老教授刚做一道题,两千多名学生一人一题早就交卷子了。如果套高数卷子,老教授做完学生们一道也不会做。

2、CPU渲染与GPU渲染

 2.1、CPU渲染

  由于CPU的内核较少,资源的可用性也有限,所以渲染速度通常比GPU慢

  CPU渲染更注重精度和渲染细节,能够渲染出更准确和细致的光影效果。同时还可以通过更高的内存带宽来处理复杂的算法,掌握更高的渲染技能

 2.2、GPU渲染

  每个核心处理一个像素,渲染速度要比CPU快很多

  通常可以更快速地呈现动态光影效果,例如全局光照和环境光遮蔽。但在精确度上,由于GPU渲染使用了一些近似计算方法,因此在某些情况下,细节可能会略有差别

二、渲染流水线

应用阶段
几何阶段
光栅化阶段

 Draw Call就是在应用阶段产生的,本文侧重介绍应用阶段,其他阶段有兴趣的可以参阅:

https://blog.csdn.net/u012722551/article/details/104276327?spm=1001.2014.3001.5502

三、应用阶段都负责了些什么?

 应用阶段由CPU负责,准备好场景数据、剔除掉不可见的物体、设置耗每个模型的渲染状态,设置好后传给GPU

 3.1、数据加载到显存中

  将渲染所需数据从硬盘加载到内存中,网格纹理等数据又被加载到显存中(一般加载到显存后内存中的数据就会被移除)
请添加图片描述

 3.2、设置渲染状态

  这些状态定义了场景中的网格是怎么被渲染的。例如,使用哪个顶点着色器, 片原着色器,光源属性,材质等。
请添加图片描述

 3.3、调用Draw Call

  Draw Call 就是一个命令,它的发起方是Cpu,接收方是Gpu。这个命令仅仅会指向一个需要被渲染的图元列表,而不会包含任何材质信息。
请添加图片描述

三、为什么Draw Call多了会影响帧率

 在每次调用Draw Call之前,CPU需要向GPU发送很多内容,包括数据﹑状态和命令。在这一阶段,CPU需要完成很多工作,例如检查渲染状态等。而一旦CPU完成了这些准备工作,GPU就可以开始本次的渲染。GPU的渲染能力是很强,渲染200个还是2000个三角网格通常没有什么区别,因此渲染速度往往快于CPU提交命令的速度。如果Draw Call的数量太多,CPU就会把大量时间花费在提交Draw Call 上,造成CPU的过载

请添加图片描述

 命令缓冲区中的虚线方框表示GPU已经完成的命令。此时,命令缓冲区没有可以执行的命令了,GPU处于空闲状态,而CPU还没有准备好下一个渲染命令

四、优化方向

 1. 合并网格

  相同材质的模型合并成一个网格

 2. 合并材质

  能用相同材质的尽量用相同材质

 3. 静态合批

  静态合批前提是使用相同的材质、运行时不能移动、旋转、复制
  静态批处理会导致内存和存储开销

 4. 动态合批

  Cocos、Laya这些WebGL的引擎没有该功能
  动态合批是专门为优化场景中共享同一材质的动态GameObject的渲染设计的。目标是以最小的代价合并小型网格模型,减少Drawcall
  动态合批是前提是使用相同材质,Unity自动处理的
  动态批处理会产生一些 CPU 开销
请添加图片描述

 5. GPU Instancing

  GPU Instancing 没有动态合批那样对网格数量的限制,也没有静态网格那样需要这么大的内存,它很好的弥补了这两者的缺陷


  美术如何使用GPU Instancing?
  方法1. 针对重复的物体(网格、材质一样),可以在DCC软件上导出一个,再在引擎上copy实例化出来多个,在引擎的场景上摆好位置
  方法2. 针对于方法一,不熟悉引擎,或者不习惯引擎里的操作,不想在引擎上摆,想在DCC软件上摆,怎么办呢?
     美术可以在DCC软件上只建出一个重复的物体,再通过实例化的方式实例化出来,在DCC软件上摆好位置,切记摆好后不要重置轴或者修改某个模型。导到引擎里后,把这些重复性的模型的网格全部改成其中一个即可。
     这个方法的原理就是在DCC软件上记录好每个Instancing的模型的位置信息,再在引擎上使用





一个物体中,为什么建议把透明的部件和不透明的部件分开?

场景里太多透明的物体为什么会很耗?

透明物体之间渲染层出错是什么原因?怎么解决?

下回分解(GPU的优化)…

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

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

相关文章

吴恩达机器学习笔记2.1 - 什么是机器学习

吴恩达机器学习笔记2.1 - 什么是机器学习 最早的机器学习 1959年,亚瑟塞缪尔(Arthur Samuel)将机器学习定义为“Field of study that gives computers the ability to learn without being explicitly programmed”(无需编程即可学习的研究领域&#xf…

ROS中不同文件之间的引用小结

在比较大的一些程序中,往往会涉及到一些不同模块的调用,如果这些东西放在一个.cpp文件内,这个文件会变的特别长,因此会使用多个文件互相引用。那么如何在ROS下进行这种不同文件下的引用呢,根据最近所学,简单…

tomcat 安装和优化

tomcatat tomcat和http一样,都是用来处理动态页面的 tomcat也可以作为web服务器,开源的 php.php tomcat.jsp nginx.html tomcat使用java代码写的程序,运行的是java的web服务程序 tomcat的特点和功能: 1、servlet容器&…

MySQL——第一次作业

部署MySQL 8.0环境 1,删除之前存在的MySQL程序 控制面板删除 2,删除完成后下载MySQL 官网: https://www.mysql.com 在window下下载MSI版本 3,自定义安装 4,配置环境变量 1,系统高级系统设置 2&#xff…

子序列问题

目录 最长递增子序列 摆动序列 最长递增子序列的个数 最长数对链 最长定差子序列 最长的斐波那契子序列的长度 最长等差数列 等差数列划分II-子序列 声明:接下来主要使用动态规划来解决问题!!! 最长递增子序列 题目 思路…

如何通过文件分发系统,实现能源电力企业文件的安全分发流转?

随着企业业务的快速发展,能源电力企业会在全国乃至全球,设立总部-分部-办事处/网点等多层级的结构,因此会涉及自动化的文件分发的业务场景。文件分发系统是一种将文件从一个地方自动传输到多个接收者的过程,可以提高工作效率&…

香港优才计划多少分获批成功率高?一文看懂各分数段获批情况!

有留意香港优才计划的朋友,应该都了解过,申请优才计划采用打分制,得分多少与最终获批有密不可分的关系。但有一点要提前清楚,申请优才不是得分越高就一定能获批,也不是得分低就一定没希望。 香港优才计划能否获批成功…

正确理解驱动电流与驱动速度

本文主要阐述了在驱动芯片中表征驱动能力的关键参数:驱动电流和驱动时间的关系,并且通过实验解释了如何正确理解这些参数在实际应用中的表现。 驱动芯片概述 功率器件如MOSFET、IGBT需要驱动电路的配合从而得以正常地工作。图1显示了一个驱动芯片驱动一…

迅狐抖音机构号授权矩阵系统源码

在数字化营销的浪潮中,抖音以其独特的短视频形式迅速崛起,成为品牌传播和用户互动的重要平台。迅狐抖音机构号授权矩阵系统源码作为一项创新技术,为品牌在抖音上的深度运营提供了强大支持。 迅狐抖音机构号授权矩阵系统源码简介 迅狐抖音机…

新版Android Studio中设置gradle的JDK版本

旧版android studio 在旧版(具体哪个版本号之前搞不清了)中设置JDK版本在>File——>Project Structure——>SDK location——>Gradle Setting——>Gradle SDK 新版android studio 某次更新后发现SDK location下找不到Gradle Setting选项…

通过Vxlan实现数据中心互联有感

随着企业的发展,为满足跨地域运营、用户接入、异地灾备等场景,越来越多的企业通常在多地域部署多个数据中心。 数据中心互联DCl(Data Center Interconnection)是不同数据中心VM之间互相通信的一种解决方案使用VXLAN、BGP EVPN等技术,使数据中…

uniapp+uview实现手机端上传照片带水印(保姆级全过程)

目录 前言:实现思路 步骤一、在界面使用uview的u-upload组件、放置canvas标签 步骤二、在afterRead方法中获取照片url,并创建画布生成水印,再将生成水印的照片上传到服务器 1、afterRead方法 2、照片加水印的方法 3、上传照片至服务器 …

zookeeper加入开机启动项

Windows的任务计划程序(Task Scheduler)是一个强大的工具,允许你安排程序在特定时间自动运行,包括开机时。 打开任务计划程序: 按下Win R键,打开“运行”对话框。输入taskschd.msc并回车,打开…

Python编写网络嗅探器程序捕获和显示IP数据包的头部信息

Python编写网络嗅探器程序捕获和显示IP数据包的头部信息 抓取网络数据包并解析其中的IP首部信息,并通过GUI界面显示解析结果。程序展示了如何使用Python的socket和ctypes库来捕获和解析网络数据包,并使用Tkinter创建一个简单的GUI界面来显示捕获到的IP头部信息。这…

日志服务SLS入门指南

日志服务SLS入门指南 什么是日志服务SLSNginx日志采集部署Nginx创建Logstore接入数据 数据脱敏创建脱敏Logstore数据加工 告警设置添加告警规则查看告警 写在最后 什么是日志服务SLS 在说到日志服务SLS之前,首先了解一下什么是日志服务SLS?日志服务SLS是…

PHP项目中的前端页面随意点击卡片后会重定向到首页或登录页

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

pycharm使用micropython

一、打开设置 2、搜索micropython、安装、重启 3、第5步需要设置成你插的电脑USB口,一个一个试 4、 5、 6、OK

手机数据恢复篇:优秀的 iPhone 数据恢复汇总

如果您不幸遭遇 iPhone 死机、进水或死机,一切还不算晚。您可以使用 iPhone 数据恢复应用恢复文件、照片、应用数据、消息等。 使用以下选项,您可以恢复 iPhone 上的少量内容、特定项目或所有内容。有些应用程序甚至提供修复工具来修复最初导致数据丢失…

这组杭州亚运会可视化大屏,绝对引领了时代。

本期分享杭州亚运会的可视化大屏,非常的震撼,杭州不愧为我国互联网最发达的的城市之一。 怒赞!!!

暑期旅游怎么玩?开发旅游小程序让出行变简单

暑假正值旅游旺季,旅游小程序的出现为旅行带来了许多便利。随着移动互联网的发展,旅游行业也在不断寻求创新与变革。旅游小程序为游客提供了更加便捷的旅行体验,通过旅游小程序,用户可以了解旅游信息、旅游服务、在线咨询等&#…