流行3D技术解释

来源:百度文库 编辑:神马文学网 时间:2024/04/29 04:47:14

当程序员完成对3D模型各个多边型的构造以后,他们就开始着手往多边型上贴纹理了。刚才我们也看到了,只完成多边型构造的3D模型很难看,如果游戏中的物体像刚才的那幅女Model那样不进行贴图处理,这样的游戏还有谁会来玩?假设在一个游戏里出现一棵树,我们就必须在象征这棵树的3D模型上贴上与树皮类似的纹理,那么这个3D模型才像棵树嘛(你有见过没有树皮的树吗)。通过往3D模型上贴上纹理,我们就能构造出一个真实的3D世界。而特塞尔是就是这个纹理(其实它也是一幅图像嘛)的最基本构成元素,它就是纹理(这幅图像)的像素单元。

像上面的一幅图,这种较大的材质位图如果用来贴在3D模型上,那么就被称之做纹理了。多边型贴上了上面这幅纹理以后,你说会不会像红泥地呢?

大家有没有想到,当纹理贴到多边型表面的时候,由于不是每个多边型的大小都一样,并且绝大多数的情况下它们的大小与纹理大小完全不同。因此,在两个多边型粘合的边缘部分,纹理由于不规范相交而造成错体,就是叠合不起来,图像就有缺陷。

于是,各大显示芯片厂商提出了双线性、三线性和各向异性抗混叠功能,就是为了尽可能地掩饰纹理交叠错误这一破绽。

我们前面说过了,如果同一面积里的图像像素增多,那么图像就会更加清晰。那么如果纹理使用更多像素构成的图像,那么我们不就能获得更为真实和清晰的3D造型吗?事实上真的如此,可惜的是现在由于硬件方面的制约,我们只能在游戏中使用不高于256x256像素大小的纹理进行贴图。新一代的图形加速芯片,像TNT2、Savage4和ATI Rage128,当然包括最新的显示卡Geforce256、Savage2000和Naplam等都支持2048x2048像素大小的大型纹理,现在等待的就是各大游戏厂商的支持了。首先支持512x512大小纹理贴图的是Quake3。我们发现使用了大

纹理贴图的Quake3画面,特别是墙壁显得特别得真实。游戏支持大型纹理必将成为未来的趋势。特别是最近我们看到的一些新兴的纹理压缩技术,通过类似于JPG的? 算法,抽出相近的颜色,因此能大幅度减少纹理的容量,使采用更为大型的纹理而又不影响速度成为了可能。代表的技术有S3的S3TC和3dfx的FXT1,它们两者都能提供6:1以上的纹理压缩能力。

三维像素Voxels

Voxels,其实就是一个立体的像素,它有一个额定的体积,因此,除了需要平面的X轴和Y轴的坐标表示以外,它还需要一个Z轴的坐标来确定它在三维空间中的位置。我们可以这样看,它就是一个边长为一个像素(Pixels)组成的正方体。通过把这样许许多多的三维像素叠合起来,也可以构成各种各样的3D模型。可我们平常用得更多的还是多边型拼凑方法,这又是为什么呢?

一个三维像素的容量(占用的内存空间)因为还要包含Z轴的数据,因此占用的内存明显要比像素(这里指平面的)多得多。并且,由于使用三角型拼凑方法,除了顶点外,面通过连接各个顶点就可以了。但如果使用三维像素,这里还必须使用大量的语句来描述三维像素叠合的方法和内容。因此,使用三维像素来构成真实的3D模型必将占用大量的资源,除此之外,还会大幅度降低显示的速度,因为要处理的内容比采用多边型构成方式时多了几乎成千乃至上万倍。

还有一个很重要的原因是,如果使用三维像素构成一条直线,那么当我们离得很近来观看这条线的时候,我们就会发现它是一点一点的,为什么?因为你看到的就是构成这条线段的各个三维像素啊。但如果使用顶点做图法,系统会自动把两个顶点用一条直线连接起来,无论离得多近来看,还都是直线一条。

因此,就目前来说,3D游戏的模型制作中三维像素Voxels还没有什么用武之地,我们普遍采用的还是三角型的构图方式。

色彩深度Colors and Depths

近来网上网下争论得最厉害的莫过于游戏中究竟要不要采用更高位数的颜色这一问题。最明显的就在于Voodoo3仅支持16位色,而TNT2支持高达32位色的渲染。那么是否就能立刻断定TNT2的画面质量会比Voodoo3要好呢?为了回答这个问题,我们必须先了解什么是颜色深度。

上面的这幅图就是采用16位色进行渲染的,我们可以注意到,在光轮处有一层层明显的红色向黄色过渡的色带。这是什么呢?

我们知道,16位色能表现的最大颜色数为2^16次方=6,5536种,在上面这幅图中,因为在颜色过渡的地方使用的颜色超出了16位色所提供的范围,因此在颜色过渡的地方就出现了明显的色阶。为了避免这些情况的出现,人们提出了更高的色彩深度标准,24位色,24位色能提供2^24=1670,0000种颜色。可以说,人眼能看到的颜色种类也就是那么多了,所以有人把24位色称之为全彩色。更高的颜色深度能使图像色彩还原更为准确。因此,我们可以肯定的是,更高的色彩深度的确能提高图像质量。但问题是,24位色或更高的32位色有一个明显的缺点,它所占用的存储空间比16位色的要大-为了描述更多的色彩,必须使用更多位数的调色盘,占用的存储空间自然就增加了。因此,16位色也并不是一无事处,至少在现今显卡性能不高的情况下能大幅度提高渲染的速度。当需要的时候,你还可以进行适当的处理来获得更好的过渡效果,我们把这种处理称为抖动。

那么,这个16位,24位或更高的颜色深度是怎样生成的呢?当我们向一个像素填上色彩的时候,我们使用的是通过按一定比例混合红(R)、黄(G)、蓝(B)三种颜色(RGB三基色)来获得所需的色素。应该注意到,我们只能使用仅有的3种颜色来获得其它的色素,并且因为16位中的每一位都仅对应一种特定的颜色。当我们使用的是第16位颜色,也就是最后一位颜色的时候,我们发现并不能很清楚地把这种颜色划分成三种颜色混合的色素。16/3会出现小数位啊,因此,在实际中,色盘里是这样划分的。红色占了5位的空间,绿色占了6位的空间,而黄色占了5位空间。因此,如果我们认真看看调色盘就能发现,绿色部分占的位置要稍大就是这个原因。

采用了32位色的渲染后,我们发现色阶现象完全消失了,色彩过渡得非常平滑,因此,我们可以确定,使用更高的颜色深度肯定能提升画面品质。但为什么在玩目前的游戏时发现两者之间的差别没有那么大呢?这是因为现有的游戏在制作时多是用16位色的原图,因此你在玩(重放)的时候,无论是使用16位还是32位色的渲染方式,得到的效果都差不多,但某些游戏已经为了32位色做了充分的优化,如果你有机会玩玩Motorhead这个游戏,你就能很清楚的分辨出16位色和32位色的不同了。

相关报道