传统的虚拟3D技术回顾
在了解TessellATIon技术之前,我们是有必要了解一下一些技术背景的,这一节,我们会介绍一些在TessellATIon技术之前的图形图像学的技术。
前面我们已经详细介绍了一个3D程序是如何被创作出来的,是如何被一个图形芯片运算并且显示出来的。但是,在图形图像学发展的过程中,最大的矛盾还是性能 和效果的矛盾,也就是说如果3D程序设计师需要创作出非常逼真的画面的时候,就必须使用更加复杂的3D模型,而这就需要图形芯片具备更高的性能,这当然也 是显卡和显示芯片行业发展的最大的动力所在。
但是随着时间的推移,随着显示芯片技术的发展,我们却看到了另外一些情况,这就是3D图形设计师在开发程序的时候,不得不考虑他们的软件的通用性是不是够高,因为如果设计的游戏只有R600或者G80能够运行的东的话,可能他们的软件或者游戏根本就卖不出去了。还有一个因素是设计更加复杂的3D模型无疑会给游戏开发带来更大的成本问题。
在这样的背景下,图形芯片厂商以及微软,早就开始算计这件事情了,他们想出了各种各样的方法来让3D模型保持简练的同时来获得更加逼真的效果。
通过纹理贴图获得“质感”
在3D图形诞生的第一天可能就有的技术就是通过最普通的贴图做这件事情。我们知道,绝大多数表面都是有凹凸的质感的,图形学最初的解决方法其实就是利用纹理贴图的处理来让模型看起来更真实。
例如一个砖墙的墙面的纹理贴图,游戏开发者会在做贴图处理的时候就通过将处于阴影位置的变暗,将迎光面做亮等手段来表现一个表面凹凸的情况。
图形图像学的专家们和图形芯片的厂商其实早就看到了 前面几种技术的局限性,早就在考虑用什么方法能够获得真正的更加细腻的效果了。
当然最传统的想法就是增加模型的细节了,电影走的就是这个道路。随着电影中用到3D虚拟形象的增加,电影中的模型的细节程度也在不断的增加。从早期的《玩具总动员》到最新的《蜘蛛侠3》《金刚》等等影片,我们可以看到他们的区别。
但是这种“解决方案”就是没有解决问题,因为电影公司可以用成百上千台工作站做长达数个月的渲染。而我们需要的是能够互动的实时运算。
我们知道,如果3D模型需要做的更细腻,就需要用更多的多边形,也就是需要有更多的顶点来描述一个模型。更多的顶点带来的问题就是运算量的增加,和数据传输的瓶颈效应。
我们知道,早期的图形芯片只能处理象素信息,后来才能够处理顶点的几何位置变换。但是顶点的信息全都需要从CPU传输到显卡上,几年前,还是AGP时代的 时候,过于复杂的模型的顶点势必会和纹理数据抢带宽。因为我们所运行的不是静态画面,而是动态的3D程序,里面的每个顶点都会发生位移,每个时刻都有海量 的顶点位置信息需要产生,需要去传回CPU做游戏逻辑和物理模型的处理。
鉴于这种情况,显示芯片厂商早就想出了一种非常巧妙的解决方法,这就是位移贴图(Displacement Mapping)。位移贴图的核心就是在显示芯片内部创建新的顶点,使之具备更高的细节。而这些顶点的创建完全是显卡完成的,它们的位置也是已有的模型的 顶点决定的。
位移贴图(Displacement Mapping)的原理是这样的:
首先游戏开发者会提前准备一个高度图(height map),这个高度图的意义有点类似于法线图,但是它表示的是一个平面上各个凹凸的点距离基础平面的高度情况。高度图通常是一张黑白的图,用灰度来表示高度的值。
当这个模型被读到显卡里面以后,首先需要进行的是对网格进行细分,细分的结果就是创建了很多新的顶点,显示芯片然后根据高度图将这些顶点的位置重新定位,顶点的位置坐标正是由高度图所决定的。
这样的好处是,这些诞生的顶点是真实存在的,但是并不会牵涉到大量的数据传输的需求,每个时刻这些顶点都是重新诞生的。而从效果而言,这样达到的效果和使用更复杂的效果是完全一致的,所以位移贴图达到的效果是前面的技术望尘莫及的。
位移贴图的优缺点
位移贴图的有点就是效果是最好的,它产生的顶点都是真实存在的,而且比单纯的增加模型的复杂程度的方法来的要好,要节约一定的运算资源。
但是毕竟位移贴图需要大量的顶点运算工作需要做,所以效率并不是很高,这一概念截至目前只有一些演示程序能够使用这一技术,游戏开发商还是不愿意将鸡蛋放到这个篮子里。
位移贴图需要和大家说明的是,虽然顶点的创建和显示全是在显示芯片中完成的,但是处理器在这个过程中仍然要做不小的运算。这在微软的DX10提出之前都是必须要做的。
神奇的小数点——细分网格算法中小数位的意义
在前面介绍的三种算法中,后两种算法采用的参数都是浮点数,为什么要这样呢?难道只是简单的区别是否在中心部分继续细分么?小数部分的数值究竟起什么作用呢?
在R600的TessellATIon技术中,参数的小数部分表示的是第二次网格细分的位置。如果参数是1.1,那么第一次细分就是在两个顶点中心,第二 次细分就是在距离中心全长的1/40处,如果是1.5,第二次细分就是在距离中点全长的5/40处。如果参数达到了2.0,就正好是做了两次等分。
TessellATIon技术的应用