《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第二章 渲染管线 The Graphics Rendering Pipeline

写在前面的话:因为英语不好,所以看得慢,所以还不如索性按自己的理解简单粗糙翻译一遍,就当是自己的读书笔记了。不对之处甚多,以后理解深刻了,英语好了再回来修改。相信花在本书上的时间和精力是值得的。

—————————————————————————————————————————————————————————
“链条的坚固程度取决于它最薄弱的环节”

        这章讲的是实时渲染的核心内容,图形渲染管线,通常简称为管线。管线的主要功能是通过给定一个虚拟摄像机一些三维物体光源等来生成或渲染出一个二维图像,因此渲染管线是实时渲染的基础。图2.1描述了渲染管线的过程。物体在图片中呈现出的位置和形状由他们的几何形状、环境特征以及摄像机在环境中的位置决定。物体的外观由材质属性、光源、表面贴图以及渲染方程决定。

图2.1 在左边的图中,位于锥形顶端处是一个虚拟摄像机,只有在摄像机视体里的图元才能被渲染。在透视投影(本例所示)中,视体是一个平截头体。右边的图表示的是摄像机看到的内容。注意左边图中的红色甜甜圈形状的物体并没有被绘制,因为它位于平截头体之外。同理左图中的蓝色扭曲棱体超出平截头体上半部分裁剪掉了。

接下来我们将详细介绍渲染管线的各阶段的功能而不是其实现, 各阶段的应用细节将会在后面章节介绍。

2.1  Architecture 架构

       在现实世界中,管线这个概念被应用到了各行各业,例如工厂的生产线、快餐厨房。在图形渲染管线中,每个阶段都有着大量的工作量。

        渲染管线各阶段是并行执行的,每个阶段又都依赖上一个阶段的结果。理想上,一个非管线系统被分成n个管线阶段可提高n倍性能。能提高性能是使用管线的主要原因。举个例子,一部分人一起准备着大量的三明治,一个人负责面包,一个人负责给面包加肉,剩下的人负责给面包加入浇头。每个人将处理完的三明治交给下一个人进行处理,然后继续处理下一个三明治。如果每个人需要花费20秒处理完手里的一个三明治,那么每个三明治的完成速度最快是20秒,每分钟3个。虽然管线各阶段是并行执行的,但是他们在最慢的阶段完成任务之前会被停止。举例,如果在加肉环节,加入的肉多了,需要花费30秒,那么一分钟最快只能生产2个三明治。对管线而言,加肉阶段就是瓶颈,它决定了整个生产过程的速度。加入浇头阶段(消费者一样)在等待加肉阶段完成之前都处于一个饥饿状态。

        这种结构的管线也应用到了计算机图形实时渲染环境中。一个粗糙的实时渲染管线被分为4个阶段:应用阶段,几何处理阶段,光栅化阶段和像素处理阶段,如图2.2。这个结构是计算机图形实时渲染应用程序的核心,也是后续章节讨论内容的基础。这些阶段本身可以成一个管线,可由几个子阶段组成。我们在这里是按照功能和实现方式区分的。每个阶段都有着明确的工作,但是没有指出工作执行的特定方式。例如一个指定的实现方式是联合两个阶段为一个单元,或者使用可编程核心执行,同时将另外一个更耗时的阶段划分成几个硬件单元。

图2.2 渲染管线的结构粗糙的分成4个阶段:应用阶段(application)、几何处理阶段(geometry processing)、光栅化阶段(rasterization)和像素处理阶段(pixel processing)。每个阶段本身又可以是一个管线,如几何阶段可以分成几个子阶段,绿色矩形所示;或者如像素处理阶段所示,一个阶段(或部分)可以平行处理,粉红色矩形所示。图中,应用程序阶段是一个单一处理过程,但是这个阶段也可以分成多个子阶段或者多个平行阶段。注意光栅化阶段是在判定那些像素在一个图元(例如一个三角形)中。

        渲染速度用每秒多少帧(FPS)来表示,也就是每秒可渲染多少张图。也可以用赫兹(HZ)来表示,赫兹表示每秒更新的频率。当然用时间毫秒来表示也行,也就是渲染一张图所用的时间。生成一张图所用的时间通常不一样,取决于每帧的计算复杂度。FPS不仅可表示特定帧的速率,也可以表示一段时间内的平均速率。Hz通常用于硬件,例如屏幕刷新速率,通常是个固定速率。

        顾名思义,应用阶段由应用程序驱动,因此应用阶段是应用在运行在一些通用CPU上的软件程序中。这些CPU通常是多核的,有多线程并行处理的能力。应用阶段可利用CPU高效处理大量的工作 。这些工作按程序需求可分为传统的碰撞检测、全局加速算法、动画、物理模拟等等。应用阶段下一主要阶段是几何处理阶段,这一阶段主要是处理变换、投影以及其他的各种类型的几何处理。在这阶段主要是计算什么被绘制,如何绘制,绘制在哪。几何处理阶段很明显是应用在图形处理单元(GPU,拥有很多可编程核心)和一些固定操作硬件中。光栅化阶段通常是利用三个顶点作为输入,形成一个三角形,然后找到三角形中所有的像素,然后将这些像素转发到下一阶段。最后,像素处理阶段对每一个像素执行一段程序来决定像素的颜色,是否进行深度测试来判断是否可见,是否和上一个颜色混合出新的颜色。光栅化阶段和像素处理阶段都是整个阶段在GPU中执行。下面四个小节将介绍这四个阶段及其子阶段。更多关于GPU如何处理这些阶段将在第三章详细说明。

2.2 应用阶段

        应用阶段通常在CPU上执行,开发者有完全的自主权。因为,开发者可以完全决定它的实现,并可在后期修改来提高它的性能。这一阶段的改变对后续阶段的性能同样产生影响。例如,在应用阶段的一些算法或者设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值