Direct X 12 – Rendering Pipeline 渲染管线

本章节的主题是渲染管线(这tm不是废话嘛)。假设我们有了一个3D场景,并且有一个朝向和位置确定的camera,那么基于这个虚拟的camera,将整个3D场景转换为一张2D的图像的所有步骤就是所谓的渲染管线。这一章的内容更理论化一些,而在下一章节中,我们将会把这些理论只是转换为实践,也就是使用DX12来绘制3D场景。在我们开始学习渲染管线之前,我们必须搞清楚两点:第一,3D场景的假象(因为屏幕是2D的,但我们视觉上觉得画面上的物体是3D的);第二,什么代表了色彩以及色彩在DX12中的运算。

目标:

1. 了解如何用2D图像来显示一个有景深的3D场景。

2. 掌握如何在DX12中表现3D对象。

3. 掌握如何设置虚拟camera。

4. 理解渲染管线——如何通过2D图像来展示一个3D场景。

左边的侧视图中展示了一个3D场景与一个虚拟的camera;中间则是一个由上而下的俯视图。我们看到的灰色线条勾勒出的三角体空间就是camera或者观察者所能看到的区域;在该三角体空间之外的物体都不能被看见。右边的图像则通过一张2D图像显示了camera所看到的物体。

5.1 3D 假象(illusion,i社~)

在我们开始学习计算机图形学之前,我们可能都会想到一个问题,就是如何通过一个2D的屏幕来显示一个3D的世界呢?还好,文艺复兴时期的艺术家已经帮我们解决了这个问题。在本小节中,我们将归纳出一些技术,通过这些技术,我们可以将2D的图像看上去更“3D”。

假设你看见一条铁路,它是笔直的而且延伸到很远的地方。铁路的两条铁轨互相平行,但是如果你站在铁路上并观察延伸的铁轨,你将发现两条铁轨的间距将会越来越近,最终它们会在无限远的距离相交。而这个例子就是人类视觉系统的特征:视野范围内两条平行线相交于一个尽头。

上图中,视野范围内的几条平行线相交于一点。画家们有时称其为线性透视。

另一个人类视觉系统的例子是,物体离我们越近看上去越大,反之则看上去越小。例如,一间在远处小山上的屋子看上去很小,然而一颗离我们很近的树却看上去很大。下图展示了一些并排摆放的圆柱体,实际上这些圆柱体的尺寸是一样大的,但是随着相对于观察者的距离或深度增加,这些圆柱体看上去越来越小。同时,请注意这些圆柱体在地平线上是如何相交于一点的。

上面这幅图中,所有的圆柱体有着相同的尺寸和大小,但是我们看上去这些圆柱体正越变越小。

如下图所示,我们都看见过物体的重叠,也就是一个不透明的物体遮盖了在它后面的物体。而这个概念也体现了DX12中深度值(depth)的概念。我们已经在第四章中讨论了DX12是如何使用一个depth buffer来决定哪一些像素点需要被遮盖或者哪一些像素点不应该被绘制。

上图中的这些物体,因为他们都互相重叠了,所以物体的一部分被遮盖了。

下图中,左边的球体是无灯光效果的,而右边的是有灯光效果的。正如你所看到的,左边的球体看上去很平,或者他根本不是一个球体而是一张2D圆形贴图。因此,光线以及阴影对于描绘一个3D物体的形状和体积是十分重要的。

上图中,(a)一个无灯光效果的球体看上去就是2D的。(b)一个有灯光效果的球体看上去是3D的。

最后,请看一下,下面这幅图中的宇宙飞船和它的阴影。阴影有两个重要的作用:其一,它告诉了我们场景中光源的位置;其二,它告诉了我们这个宇宙飞船距离地面的大概高度。

我们之前所提到的这些例子,无疑是很常见的一些现象。然而记住这些简单的例子,在学习计算机图形学时是很有帮助的。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据