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.rhkb.cn/news/372584.html

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

相关文章

Python基础知识——(001)

文章目录 P4——3. 程序设计语言的分类 1. 程序设计语言 2. 编译与解释 P5——4. Python语言的简介与开发工具 1. Python语言的简介 2. Python语言的发展 3. Python语言的特点 4. Python的应用领域 5. Python的开发工具 P6——5. IPO编程方式 IPO程序编写方法 P7——6. print函…

C++内存的一些知识点

一、内存分区 在C中,内存主要分为以下几个区域: 代码区:存放函数体的二进制代码。 全局/静态存储区:存放全局变量和静态变量,这些变量在程序的整个运行期间都存在。常量存储区:存放常量,这些值…

电竞玩家的云端盛宴!四大云电脑平台:ToDesk、顺网云、青椒云、极云普惠云实测大比拼

本文目录 一、云电脑概念及市场需求二、云电竞性能测试2.1 ToDesk云电脑2.2 顺网云2.3 青椒云2.4 极云普惠云电脑 三、四大云电脑平台综合配置对比3.1 CPU处理器3.2 GPU显卡3.3 内存 四、总结 一、云电脑概念及市场需求 在数字化时代的推动下,云计算技术日益成熟&a…

pnpm介绍

PNPM 是一个 JavaScript 包管理器,类似于 npm 和 Yarn。它的全称是 "Performant npm",主要设计目标是优化包的安装和管理过程,以提升速度和效率。PNPM 的主要特点包括: 符号链接(Symlink)&#x…

Studying-代码随想录训练营day33| 动态规划理论基础、509.斐波那契函数、70.爬楼梯、746.使用最小花费爬楼梯

第33天,动态规划开始,新的算法💪(ง •_•)ง,编程语言:C 目录 动态规划理论基础 动态规划的解题步骤 动态规划包含的问题 动态规划如何debug 509.斐波那契函数 70.爬楼梯 746.使用最小花费爬楼梯 总结 动态…

音频demo:使用opencore-amr将PCM数据与AMR-NB数据进行相互编解码

1、README a. 编译 编译demo 由于提供的.a静态库是在x86_64的机器上编译的,所以仅支持该架构的主机上编译运行。 $ make编译opencore-amr 如果想要在其他架构的CPU上编译运行,可以使用以下命令(脚本)编译opencore-amr[下载地…

hdu物联网硬件实验3 按键和中断

学院 班级 学号 姓名 日期 成绩 实验题目 按键和中断 实验目的 实现闪灯功能转换 硬件原理 无 关键代码及注释 /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached…

[图解]SysML和EA建模住宅安全系统-13-时间图

1 00:00:00,480 --> 00:00:02,280 首先,我们来看,图画在哪里 2 00:00:02,290 --> 00:00:04,380 这个图 3 00:00:04,390 --> 00:00:06,180 你看,它是描述,刚才讲的 4 00:00:06,190 --> 00:00:09,010 描述这个活动 …

ISO 20000认证:驱动企业IT服务管理变革的利器

在信息技术驱动商业发展的今天,企业对高效、可靠和安全的IT服务需求日益增长。ISO 20000作为国际公认的IT服务管理标准,能够帮助企业在竞争激烈的市场环境中脱颖而出,实现IT服务管理的全面提升。本文将深入探讨ISO 20000认证如何帮助企业优化…

Linux忘记密码重置root密码、重置普通用户密码

重启看到选项按e reboot 或 init 62、移动到Linux开头的行在末尾添加 rw init/bin/bash3、按下Ctrlx引导启动 mount -o remount,rw /输入命令回车更改密码,输入新密码,别用小键盘,容易出错 passwd输入两次校验,出现updated successfully就…

进程,进程的调度,进程的调度算法(详解)ฅ( ̳• · • ̳ฅ)

目录 😇进程的概念: 😚进程的组成: 🥰进程的调度: 一.进程调度的概念: 二.进程调度的方式: 三.进程调度的时机: 🤪进程的调度算法: 一.先…

Python 中什么是局部变量和全局变量

在Python编程中,理解变量的作用域是非常重要的。变量的作用域决定了变量在程序中的可见性和生命周期。Python中有两种主要的变量作用域:局部变量和全局变量。 1. 局部变量 1.1 定义 局部变量是定义在函数内部的变量,只能在函数内部访问。局…

纯前端低代码开发脚手架 - daelui/molecule

daelui/molecule低代码开发脚手架:分子组件开发、预览、打包 页面代码示例、大屏代码示例预览 可开发页面组件 可开发大屏组件 项目git地址:https://gitee.com/daelui/molecule 在线预览:http://www.daelui.com/daelui/molecule/app/index.…

分布式一致性算法:Raft学习

分布式一致性算法:Raft学习 1 什么是分布式系统? 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。这些节点可能位于不同的物理位置,但它们协同工作以提供一个统一的计算平台或服务。分布式系统…

Leetcode 295.数据流的中位数

295.数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: Media…

【笔记】太久不用redis忘记怎么后台登陆了

!首先启动虚拟机linux的centos7 2.启动finalshell 我的redis启动在根目录用 redis-server redis.conf --启动 systemctl status redis --查看redis状态 是否active redis-cli -h centos的ip地址 -p 你要用的redis端口号(默认为6379) -a 你…

UDP通讯实现

服务器端&#xff1a; 1.获取套接字 int fd;fdsocket(AF_INET,SOCK_DGRAM,0);if(fd<0){perror("socket");exit(0);} #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); -domain: 指定通信域&…

LInux安装

目录 1. LInux优点 1.1 安全性高 1.2 稳定性和可靠性高 1.3 开源和免费 1.4 资源利用效率 2. Linux虚拟机下载 2.1 VMware安装 2.2 虚拟机安装 2.3 Centos7下载 2.4 简单设置Centors-7 2.4.1 首次进入 2.4.2 联网设置 2.4.3 自动联网设置 2.4.4 自动锁屏设置 Li…

Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测

章节内容 上一节我们完成了&#xff1a; Hive中数据导出&#xff1a;HDFSHQL操作上传内容至Hive、增删改查等操作 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&am…

C++初学者指南-5.标准库(第一部分)--顺序容器

C初学者指南-5.标准库(第一部分)–顺序容器 文章目录 C初学者指南-5.标准库(第一部分)--顺序容器标准顺序容器常见特点规律性&#xff1a;复制&#xff0c;分配&#xff0c;比较类型推导(C17)常用接口部分 array<T,size>vector\<T>C 的默认容器快速回顾迭代器范围插…