普通视图

发现新文章,点击刷新页面。
昨天 — 2026年1月19日首页

《实时渲染》第2章-图形渲染管线-2.2应用程序阶段

作者 charlee44
2026年1月19日 22:08

实时渲染

2. 图形渲染管线

2.2 应用程序阶段

开发人员可以完全控制应用程序阶段发生的事情,因为它通常在CPU上执行。因此,开发人员可以完全决定其实现,然后对其进行修改以提高性能。此处的更改也会影响后续阶段的性能。例如,应用程序阶段算法或设置可以减少要渲染的三角形数量。

综上所述,一些应用程序工作可以由GPU执行,使用称为计算着色器的单独模式。此模式将GPU视为高度并行的通用处理器,忽略其专门用于渲染图形的特殊功能。

在应用程序阶段结束时,要渲染的几何图形被馈送到几何图形处理阶段。这些是渲染图元,即点、线和三角形,它们最终可能会出现在屏幕上(或正在使用的任何输出设备)。这是应用阶段最重要的任务。

该阶段基于软件实现的结果是它没有被划分为子阶段,几何处理、光栅化和像素处理阶段也是如此1。但是,为了提高性能,此阶段通常在多个处理器内核上并行执行。在CPU设计中,这被称为超标量构造,因为它能够在同一阶段同时执行多个进程。第18.5节介绍了使用多个处理器内核的各种方法。

在这个阶段通常实施的一个过程是碰撞检测。在检测到两个物体之间发生碰撞后,可以生成响应并将其发送回碰撞物体以及力反馈设备。应用程序阶段也是处理来自其他来源的输入的地方,例如键盘、鼠标或头戴式显示器。根据这个输入,可以采取几种不同的动作。加速算法,例如特定的剔除算法(第19章),也在这里实现,以及管道的其余部分无法处理的任何其他内容。

Footnotes

  1. 由于CPU本身的流水线规模要小得多,您可以说应用程序阶段被进一步细分为几个流水线阶段,但这在这里无关紧要。

《实时渲染》第2章-图形渲染管线-2.1架构

作者 charlee44
2026年1月19日 22:01

实时渲染

2. 图形渲染管线

链条的坚固程度取决于它最薄弱的环节。 --匿名者

本章介绍实时图形渲染的核心组件,即图形渲染管线,也简称为“管线”。管线的主要功能是通过给定虚拟相机、三维对象、光源等,生成或渲染二维图像。因此,渲染管线是实时渲染的基础工具。使用管线的过程如图2.1所示。图像中对象的位置和形状由它们的几何形状、环境特征以及相机在该环境中的位置决定。对象的外观受材料属性、光源、纹理(应用于表面的图像)和着色方程的影响。

转存失败,建议直接上传图片文件

图2.1. 在左图中,一个虚拟相机位于金字塔的顶端(四条线会聚的地方)。仅渲染视图体积内的图元。对于透视渲染的图像(如这里的情况),视图体积是一个平截头体(frustum,复数为frusta),即具有矩形底部的截棱锥。右图显示了相机“看到”的内容。请注意,左侧图像中的红色甜甜圈形状不在右侧的渲染中,因为它位于视锥体之外。此外,左图中扭曲的蓝色棱镜被剪裁在平截头体的顶平面上。

我们将解释渲染管线的不同阶段,重点是功能而不是实现。应用这些阶段的相关细节将在后面的章节中介绍。

2.1 架构

在现实世界中,管线的概念以许多不同的形式表现出来,从工厂装配线到快餐厨房。它也适用于图形渲染。管线由几个阶段组成[715],每个阶段执行一个更大任务的一部分。

每一个流水线阶段都是并行执行,但是其都依赖于前一阶段的结果。理想情况下,一个非流水线系统然后被分成n个流水线级,可以提供n倍的加速。这种性能的提高是使用流水线的主要原因。例如,可以由一系列人快速准备大量三明治——一个准备面包,另一个添加肉,另一个添加浇头。每个人都将结果传递给排队的下一个人,然后立即开始制作下一个三明治。如果每个人需要20秒来完成他们的任务,那么每20秒一个三明治的最大速度是可能的,每分钟三个。流水线阶段并行执行,但它们会暂停,直到最慢的阶段完成其任务。例如,假设肉类添加阶段变得更加复杂,需要30秒。现在可以达到的最佳速度是每分钟两个三明治。对于这个特定的管线,肉阶段是瓶颈,因为它决定了整个生产的速度。据说浇头阶段在等待肉类阶段完成期间饿死了(顾客也是如此)。

这种管线结构也可以在实时计算机图形的上下文中找到。实时渲染管线粗略划分为四个主要阶段——应用程序、几何处理、光栅化和像素处理——如图2.2所示。渲染管线引擎用于实时计算机图形应用程序,其核心正是这种结构;因此这种管线结构是后续章节讨论的重要基础。这些阶段中的每一个通常本身就是一个管道,这意味着它由几个子阶段组成。我们区分此处显示的功能阶段及其实现结构。一个功能阶段有一个特定的任务要执行,但没有指定任务在管道中的执行方式。一个给定的实现可以将两个功能阶段合并为一个单元或使用可编程内核执行,同时它将另一个更耗时的功能阶段划分为几个硬件单元。

转存失败,建议直接上传图片文件

图2.2. 渲染管线的基本结构,包括四个阶段:应用程序、几何处理、光栅化和像素处理。这些阶段中的每一个本身都可以是一个流水线,如几何处理阶段下方所示,或者一个阶段可以(部分)并行化,如像素处理阶段下方所示。在这个例子中,应用程序阶段是一个单一的进程,但这个阶段也可以是流水线或并行的。请注意,光栅化阶段会查找图元内部的像素,例如三角形。

渲染速度可以用每秒帧数(FPS)来表示,即每秒渲染的图像数量。也可以用赫兹(Hz)来表示,它只是1/秒的表示法,即更新频率。仅说明渲染图像所需的时间(以毫秒(ms)为单位)也很常见。生成图像的时间通常会有所不同,具体取决于每帧期间执行的计算的复杂性。每秒帧数用于表示特定帧的速率或一段时间内的平均性能。赫兹用于硬件,例如设置为固定速率的显示器。

顾名思义,应用程序阶段由应用程序驱动,因此通常在通用CPU上运行的软件中实现。这些CPU通常包括能够并行处理多个执行线程的多个内核。这使CPU能够有效地运行由应用程序阶段负责的各种任务。一些传统上在CPU上执行的任务包括碰撞检测、全局加速算法、动画、物理模拟等,具体取决于应用程序的类型。下一个主要阶段是几何处理,它处理变换、投影和所有其他类型的几何处理。此阶段计算要绘制的内容、应如何绘制以及应在何处绘制。几何阶段通常在包含许多可编程内核和固定操作硬件的图形处理单元(GPU)上执行。光栅化阶段通常将三个顶点作为输入,形成一个三角形,并找到该三角形内的所有像素,然后将这些像素转发到下一个阶段。最后,像素处理阶段对每个像素执行一个程序以确定其颜色,并可能执行深度测试以查看它是否可见。它还可以执行逐像素操作,例如将新计算的颜色与先前的颜色混合。光栅化和像素处理阶段也完全在GPU上处理。所有这些阶段及其内部管道将在接下来的四节中讨论。有关GPU如何处理这些阶段的更多详细信息,请参见第3章

昨天以前首页

《实时渲染》第1章-绪论-1.1内容概览

作者 charlee44
2026年1月18日 21:09

实时渲染

1. 概述

实时渲染是指在计算机上快速渲染图像。它是计算机图形中交互性最高的领域。图像出现在屏幕上,观看者做出动作或反应,这种反馈会影响接下来生成的内容。这种反应和渲染的循环以足够快的速度发生,以至于观看者不会看到单个图像,而是沉浸在一个动态的过程中。

图像的显示速率以每秒帧数 (FPS) 或赫兹 (Hz) 为单位。FPS为1时,几乎没有交互感;用户痛苦地意识到每个新图像的到来。在大约6FPS 时,交互感开始增强。视频游戏的目标是30、60、72或更高的FPS;只有到达如上的速度,用户才好专注于行动和反应。

电影放映机以24FPS的速度显示帧,但使用快门系统将每帧显示两到四次以避免闪烁。此刷新率与显示率分开,以赫兹 (Hz)表示。照亮框架三次的快门具有72Hz的刷新率。LCD显示器也会将刷新率与显示率分开。

以24FPS的速度观看屏幕上显示的图像可能是可以接受的,但更高的速率对于最大限度地缩短响应时间很重要。仅15毫秒的时间延迟就会减慢并干扰交互[1849]。例如,用于虚拟现实的头戴式显示器通常需要90FPS以最大限度地减少延迟。

实时渲染不仅仅是交互性。如果速度是唯一的标准,那么任何快速响应用户命令并在屏幕上绘制任何内容的应用程序都符合条件。实时渲染通常意味着生成3D图像。

交互性和对三维空间的某种连接感是实时渲染的充分条件,但第三个元素已成为其定义的一部分:图形加速硬件。许多人认为1996年推出的3Dfx Voodoo 1卡是消费级3D图形的真正开始 [408]。随着这个市场的飞速发展,现在每台计算机、平板电脑和手机都内置了图形处理器。图 1.1 和 1.2 显示了一些通过硬件加速实现实时渲染结果的优秀示例。

图1.1 Forza Motorsport 7 的镜头(图片由 Turn 10 Studios 提供,Microsoft)

图1.2 巫师3中呈现的Beauclair城市

图形硬件的进步推动了交互式计算机图形领域研究的爆炸式增长。我们将专注于提供提高速度和改善图像质量的方法,同时描述加速算法和图形API的特性和局限性。我们无法深入涵盖每个主题,因此我们的目标是展示关键概念和术语,解释该领域最强大和实用的算法,并提供指向获取更多信息的最佳位置的地址。我们希望我们为您提供理解该领域的工具的尝试被证明是值得您在本书上花费的时间和精力。

1.1 内容概览

以下是对本书章节的简要概述。

第2章,图形渲染管线。实时渲染的核心是获取场景的描述,并将其转换为我们可以看到的内容的一系列步骤。

第3章,图形处理单元。现代GPU使用固定功能和可编程单元的组合来实现渲染管线的各个阶段。

第4章,图形变换。图形变换是操纵对象的位置、方向、大小和形状以及相机的位置和视图的基本工具。

第5章,着色基础。首先讨论了材质和灯光的定义,及其在表面外观(无论是逼真的还是风格化的)的实现中的使用。介绍了其他与外观相关的主题,例如通过使用抗锯齿、透明度和伽马校正提供更高的图像质量。

第6章,纹理。实时渲染最强大的工具之一是能够在表面上快速访问和显示图像。此过程称为纹理化,并且有多种应用方法。

第7章,阴影。为场景添加阴影可以增加真实感和理解力。介绍了用于快速计算阴影的更流行的算法。

第8章,光照与颜色。在我们执行基于物理的渲染之前,我们首先需要了解如何量化光线和颜色。在我们的物理渲染过程完成后,我们需要将结果数量转换为显示值,考虑屏幕和观看环境的属性。本章涵盖了这两个主题。

第9章,基于物理的着色。我们从头开始了解基于物理的着色模型。本章从潜在的物理现象开始,涵盖各种渲染材质的模型,并以将材质混合在一起并对其进行过滤以避免混叠和保持表面外观的方法结束。

第10章,局部照明。探索了描绘更精细光源的算法。表面着色考虑到光是由具有特征形状的物理对象发出的。

第11章,全局光照。模拟光与场景之间多次交互的算法进一步增加了图像的真实感。我们讨论了环境和方向遮挡以及在漫反射和镜面反射表面上渲染全局照明效果的方法,以及一些有希望的统一方法。

第12章,图像空间效果。图形硬件擅长以快速的速度执行图像处理。首先讨论图像滤波和重投影技术,然后我们调查了几种流行的后期处理效果:镜头光晕、运动模糊和景深。

第13章,超越多边形。三角形并不总是描述物体的最快或最现实的方式。基于使用图像、点云、体素和其他样本集的替代表示各有其优点。

第14章,体积和半透明渲染。这里的重点是体积材料表示及其与光源的相互作用的理论和实践。大到大气效应,小到头发纤维内的光散射,都是该仿真的现象范围。

第15章,非真实感渲染。尝试使场景看起来逼真只是渲染场景的一种方式。其他风格,例如卡通阴影和水彩效果,也是值得被讨论的。还讨论了行和文本生成技术。

第16章,多边形技术。几何数据来自广泛的来源,有时需要修改才能快速良好地呈现。介绍了多边形数据表示和压缩的许多方面。

第17章,曲线和曲面。更复杂的表面表示提供了一些优势,例如能够在质量和渲染速度之间进行权衡、更紧凑的表示和平滑的表面生成。

第18章,管线优化。一旦应用程序运行并使用高效算法,就可以使用各种优化技术使其更快。找到瓶颈并决定如何解决它是这里的主题。还讨论了多进程处理。

第19章,加速算法。更快的让渲染完成。涵盖了各种形式的剔除和细节渲染级别。

第20章,高效着色。场景中的大量灯光会显着降低性能。在知道表面片元可见之前,进行完全着色,是浪费性能的另一个来源。我们探索了多种方法来解决这些和其他形式的着色效率低下问题。

第21章,虚拟现实和增强现实。这些领域具有以快速和一致的速度有效地生成逼真图像的特殊挑战和技术。

第22章,交叉测试方法。相交测试对于渲染、用户交互和碰撞检测很重要。此处提供了针对常见几何相交测试的各种最有效算法的深入介绍。

第23章,图形硬件。这里的重点是颜色深度、帧缓冲区和基本架构类型等组件。提供了代表性GPU的案例研究。

第24章,展望未来的一些图形技术。

由于篇幅限制,我们在realtimerendering.com上制作了一个关于碰撞检测的免费章节,以及关于线性代数和三角学的附录。

❌
❌