cpu缓冲区大小怎么设置_浅谈渲染流水线之CPU和GPU之间的通信

本篇主要带大家了解渲染流水线,要想了解渲染流水线,首先我们要了解什么是流水线。

No.1 流水线的概念

假设,老王有一个洋娃娃的工厂,一个洋娃娃的生产流程可以分为4个步骤:

1.制作洋娃娃的躯干

2.缝上眼睛和嘴巴

3.添加头发

4.给洋娃娃进行最后的产品包装

在流水线出现之前,只有在每个洋娃娃完成了以上这4个步骤之后,才能开始制作下一个洋娃娃。

如果说每个步骤需要的时间是1小时的话,那么4个小时才能生产一个洋娃娃。

但是后来人们发现一个更有效的方法,即使用流水线。

虽然制作一个洋娃娃仍然需要4个步骤,但不需要从头到尾完成全部的步骤,而是每个步骤由专人来完成,所有的步骤并行进行。

也就是说,当步骤1完成了制作躯干的任务并把其交给步骤2时,步骤1又开始进行下一个洋娃娃的制作了。

使用流水线技术可以提高单位时间的生产量,当流水线处于饱和时每1个小时就可以生产一个洋娃娃。

No.2 什么是渲染流水线

渲染流水线的工作任务在于由一个三维场景出发、渲染一张二维图像。

换句话说,计算机需要从一系列顶点数据、纹理等信息出发,把这些信息最终转换成一张人眼可以看到的图像。

而这个工作通常是由CPU和GPU共同完成的。

渲染流水线从概念上大致可分为:

1.应用阶段(输出渲染图元)

2.几何阶段(输出屏幕空间的顶点信息)

3.光栅化阶段(输出图像)

本文主要介绍第一个阶段:应用阶段

应用阶段主要有以下三个部分:

1.数据的加载

所有渲染所需的数据都需要从硬盘中加载到系统内存中。然后网格和纹理等数据又被加载到显卡上的存储空间(显存)中。
这是因为显卡对于显存的访问速度更快,而且大多数显卡对于内存是没有访问权限的。

注意:当渲染数据(顶点的位置信息、法线方向、顶点颜色、纹理坐标)加载到显存中后,内存中的数据就可以移除了,但对于一些数据来说,CPU仍然需要访问它们(用于碰撞检测的网格数据)。

那么我们就不希望这些数据被移除,因为从硬盘加载到内存的过程很耗时。

2.设置渲染状态

什么是渲染状态呢?一个通俗的解释就是,这些状态定义了场景中的网格是怎样被渲染的。

例如使用那个顶点着色器/片元着色器、光源属性、材质 等。

如果我们没有更改渲染状态,那么所有的网格都将使用同一种渲染状态。

3.通知GPU开始渲染

相信接触过渲染优化的同学对DrawCall并不陌生。实际上DrawCall就是一个命令,它的发起方是CPU,接收方是GPU。

这个命令仅仅会指向一个需要被渲染的图元列表,而不会再包含任何材质信息---这是因为我们已经在上一个阶段中完成了!

当给定一个DrawCall时,GPU就会根据渲染状态(材质、纹理、着色器等)和所有输入的顶点数据来进行计算,最终输出成屏幕上显示的那些漂亮的像素。

而这个计算过程就是后续篇幅我要说的几何阶段和光栅化阶段的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值