US1L2——渲染管线-应用阶段
US1L2——渲染管线-应用阶段
知识必备——CPU和GPU
-
CPU:中央处理器,负责算数运算、逻辑操作、数据传输等通用计算任务,同时还管理和调度计算机的资源
(在游戏开发中 — CPU 就主要负责游戏逻辑处理,如角色移动,动画切换,寻路等等)
-
GPU:图形处理器,是专门用于图形和并行计算的处理器
显卡就是搭载 GPU 的硬件设备,显卡包含一个或多个GPU芯片,还包含显存(用于存储图像数据)、显示接口、视频解码器等等
(在游戏开发中 — GPU 负责将画面渲染相关处理)
简单来说:CPU 主要处理操作系统管理、程序执行、通用计算等等,而 GPU 主要处理图形渲染、图像处理等等
渲染管线的应用阶段
渲染管线的应用阶段中大部分的内容都和渲染无关(比如:游戏逻辑处理、动画更新、物理模拟、场景管理等等)
当应用阶段完成后,后面的几何阶段以及光栅化阶段将开始处理和图形渲染相关的数据和操作。
那么应用阶段为什么会归纳到渲染管线中呢?
那是因为应用阶段为渲染管线的后续提供了最重要的内容 —— 数据
应用阶段主导者是 CPU,在这一阶段,我们**将渲染需要用到的数据传递给 GPU 用于后续的两个阶段的处理**
渲染管线(流水线)中的应用阶段,主要是 CPU 主导的阶段,
它为渲染完成的最主要的工作就是提供后续的渲染数据,比如:
顶点、法线、切线、纹理坐标、变换矩阵、材质属性等等,
在应用阶段中,我们主要就是按照 Unity 的规则进行游戏开发即可,
DrawCall 过多时,性能瓶颈是由 CPU 造成的,我们可以用批处理技术优化它
应用阶段为渲染准备了些什么?
- 把不可见的物体数据剔除
- 准备好模型相关数据(顶点、法线、切线、贴图、着色器等等)
- 将数据加载到显存中
- 设置渲染状态(设置网格需要使用那个着色器、材质、光源属性等等)
- 调用 DrawCall(CPU 通知 GPU 使用相关的数据和渲染状态进行渲染)
渲染管线(流水线)中的应用阶段,主要是CPU主导的阶段, 它为渲染完成的最主要的工作就是提供后续的渲染数据
比如:
顶点、法线、切线、纹理坐标、变换矩阵、材质属性等等
在应用阶段中,我们主要就是按照 Unity 的规则进行游戏开发即可
我们需要注意的就是关于 DrawCall 的优化
DrawCall
我们之前在讲解UI相关知识点时,提到了 Drawcall,也知道它会影响我们游戏的性能
一次 DrawCall 其实就是 CPU 命令 GPU 进行渲染的命令,为什么 DrawCall 多了会影响性能呢?
主要的性能的瓶颈是 CPU 造成的,每次调用 DrawCall 之前,CPU 需要向 GPU 发送很多内容,包括数据、状态、命令等等。
如果 DrawCall 过多,CPU 就会把大量的时间花费在提交 DrawCall 上,造成 CPU 过载,让玩家感受到卡顿
使用批处理,可以有效的减少 DrawCall,从而提升性能表现:
- 合并网格(可以将静态物体合并网格)
- 共用材质(在不同网格之间共用一种材质)
- 合并图集(2D 游戏和 UI 中,可以将多张图片合并为一张大图)
等等