Unity3D 渲染优化流程

渲染简述

 渲染流程,其实就是CPU和GPU在互相协同工作。我们要知道每一帧,CPU和GPU在做什么。我们先了解从加载到内容,然后到CPU读取内存数据,再到向GPU发送渲染指令的过程是怎么回事。我们列出以下流程。

1.)加载阶段,就是把场景中对应引用的纹理,网格,灯光信息的数据加载到内存中也就是RAM(运行时内存,PC电脑上就是内存条里面),这个运行时内存是专门给CPU去访问的。

2.)CPU收集场景信息阶段,CPU会根据当前Unity场景相机等等一系列设置,去判断那些物体应该被渲染,然后进行逻辑上的过滤,获取到需要渲染的数据

3.)DrawCall阶段,这个是整个渲染阶段,CPU工作量最重的一个阶段,DrawCall需要收集的数据信息有,CPU会从高RAM内存中读取网格,纹理,光照数据等等数据. 然后CPU调用图像编程接口(OpenGL),以命令GPU进行渲染的操作.

 CPU和GPU通过使用一个命令缓冲区实现并行工作。命令缓冲区包含一个命令队列,CPU向其中添加命令,GPU从中读取命令,添加和读取是相互独立的,因此使得CPU和GPU可以独立工作。命令缓冲区中的命令有很多种类,DrawCall就是其中一种。

我们经常会发现,Gpu渲染能力比较强大, 所以经常出现Cpu会花费大量的时间在提交DrawCall的路上,造成Cpu的过载,Gpu确会出现空闲。(每一次CPU到GPU的渲染流程,都是一帧,卡帧就是这样发生的)

4.)CPU为GPU创建一个数据包,被称为batch(批渲染),每一个bacth最少包含一个或者多个DrawCall。对于CPU来说上Bacth和DrawCall的区别不大。但对于Unity而言,它可以多个Draw Call合并成一个Batch去渲染

5.)SetPassCall阶段,DrawCall的下一阶段,主要是DrawCall的命令通知GPU去渲染指定的网格。

通俗点说,就是执行Shader中的Pass.在Shader中有一个Pass的概念,比如一个Shader有2个Pass,那么实际上应用这个Shader的物体会按照Shader的Pass定义顺序渲染2遍,每一遍都是用对应的Pass渲染。Unity的官方文档里面解释SetPassCalls就是Shader中的Pass被切换的次数,因为每个渲染批次都会设置一个Pass,一个Pass就会对应一些渲染状态,当渲染状态变化时候就必须开始新的批次,但是新的批次下Pass可能没有变化.

每个Pass会调用一次Set pass call,但多个相同多Pass材质的mesh只会对每个pass执行一次set Pass call,而不会对每个mesh执行一次.(就是不同的Mesh如果使用的材质一致,那么SetPassCall对应只会执行一次 )

6.)GPU按照CPU发送的指令顺序处理这些这些指令

以上过程会重复执行,直到所有CPU发送的任务都被GPU完成。

CPU渲染优化

  1. 每一帧CPU都会有三个渲染任务  确定渲染的物体--->从RAM中读取渲染需要的数据打成命令包--->发送命令给GPU
  2. 这三个渲染任务允许多线程执行,命令可以通过多线程发送到命令缓冲区。GPU会不断的从命令缓冲区获取渲染命令。这个是称之为多线程渲染。Unity中PlayerSeting可以开启多线程渲染。
  3. 发送命令到GPU花费时间过长是引起CPU限制的最常见的原因,其最耗时的操作是SetPass call。如果CPU限制是由发送命令到GPU引起的,那么降低SetPass的数量通常是最好的改善性能的方式

GPU渲染优化

  1. 顶点处理。顶点处理是指选需要渲染网格中每一个顶点的工作,顶点的消耗 主要在两个方面,一是顶点的数量,二是GPU对每一个顶点的操作复杂度(shader中的一些顶点运算)
  2. 填充率。也就是屏幕像素填充率 是GPU每帧可以渲染的像素数量。影响填充率的因素主要有三个: 分辨率,纹理(使用较多或者较大的纹理都会增加填充率),特效屏幕后处理
  3. 显存带宽。主要是纹理加载到显存中会显著增加显存使用,使用的纹理太大,也会导致GPU无法快速处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值