3D渲染
摘 要: 当今计算机已发展到了一定的程度,能胜任的工作也越来越复杂,从其融入人类社会的程度就可窥一二,计算机的3D渲染技术也很复杂,涉及的领域也很广,本文简单介绍3D渲染过程和其中涉及到的一些技术,主要是坐标系变换,裁剪,光照,着色和纹理贴图。
关键词: 3D ,基础,渲染,
引言
3D渲染离不开计算机图形学,而计算机图形学(Computer Graphics)是研究怎样用计算机表示、生成、处理和显示图形的一门学科[1]。只要是在计算机上显示图形就离不开计算机图形学。而计算机图形学的基础就是数学计算,可以说数学是计算机的基础,所以要显示图形就离不开数学计算,当然本文这里说的不是显示图形的硬件中的工作原理,虽然硬件中也是有的。由于我们需要的最终效果是在2D屏幕上的画面,就需要如何在2D屏幕上绘制的功能。然而在这之前需要的是一个在计算机中建立的3D世界。有了3D世界的数据才能进行处理。所以我们需要一个计算机可识别的3D世界。
3D世界
这是一个有限大小的世界,毕竟计算机不是万能的,这个大小要根据需求和要达成的效果去定义。有了这个可以容纳物体的空间之后,就需要放入一些东西。我们将使用多边形作为3D世界构建的基本元素,一般都是用三条边即三角形,因为足够的三角形可描述任一曲面和其他复杂的几何模型,而多边形是由线组成,线则由点组成,在一般的3D渲染过程中这三者的几何定义都是不可缺少的。使用3维坐标系-X,Y,Z三个坐标值来在这个3D世界中定位一个放入世界中的多边形。坐标系也分左手和右手坐标系[2],区别在Z轴正方向相反,然而多数情况下都使用左手坐标系,有了位置信息后,可将上述的多边形放于3D世界中,要处理这个3D世界中物体的移动、旋转等需要多个坐标系空间。分别是:
物体坐标系(局部坐标系)(3D)
世界坐标系(3D)
摄像机坐标系(3D)
屏幕坐标(2D)
物体坐标系也称为局部坐标系就是相对物体的坐标系,通常以物体的中心为此坐标系的原点,然后通过平移到世界坐标系,之后我们要选择一个视角来观察这个世界,通常假设有一个摄像机作为这个视角,摄像机拍摄到的空间为一个锥形体。将物体的世界坐标转换到摄像机坐标系中,然后就可以进行裁剪操作了,最后映射到屏幕坐标中就可以显示画面了。当然这时候显示出来的也就是线条,虽然在逻辑上定义了多边形,但显示的实际上只有线(线组成了多边形)。但此时没有裁剪,物体间在Z轴上的关系无法体现出来。
裁剪
裁剪是从数据集合中抽取所需信息的过程,它是计算机图形学中许多重要问题的基础[3]。上述的裁剪是在物体转换到摄像机坐标系中之后,对物体的剔除操作。摄像机坐标系是以摄像机为基准的坐标系,摄像机决定了我们能看到什么,它就是我们的在3D世界中的眼睛,眼睛看到的最远距离并不是无限远,通常摄像机会定义最近和最远可拍摄到的Z值,这将被视为摄像机的可见空间,在这个可见空间内才会继续处理多个多边形之间的遮挡关系和隐藏面消除,著名的有Z缓存和1/Z缓存算法对多边形进行排序来达到隐藏面消除[4][7],不在这个空间的就会被剔除,减少我们在之后要处理的数据,裁剪是3D渲染中很重要的部分,在这方面有很多算法,裁剪之后将对此进行着色,就是填充多边形上的颜色,使得3D世界中的几何物体具有色彩,使其更逼真。
着色
着色之前还需要介绍光照模型,光照模型是模拟真实效果所需的,要真实的模拟阴影、镜面反光效果等都需要光照,有了光才能对这个3D世界模拟明暗处理,光照又因光源的类别常分为定向光源、点光源、聚光灯[4],这三种是最常用的光源在3D渲染中,光照同时还需要物体的材料属性配合才能发挥出良好的作用,这些属性分别是:环境颜色、散射颜色、镜面反射颜色、亮度和发射光的颜色[5],光照计算会在着色之前被应用于物体上计算组成物体的各个顶点的颜色和面的颜色,常用的着色算法为Grouraud,Phong[6][9]等等,对多边形进行着色,这样处理之后可以得到有着阴暗变化的一个实体,而不是未着色前的线框。然而这样还不能表现具有粗糙表面的物体.
纹理映射
为了解决这个问题就有了纹理映射技术,这种技术又有很多的运用方式:
凹凸贴图映射,环境映射,纹理滤波,Mipmapping和三线性纹理滤波,透明度和alpha混合,使用Grouraud着色处理的纹理映射等[4][8][10],用于对物体表面进行贴图操作。应用了上诉的技术可基本实现一个3D渲染引擎,但要实现一个良好的渲染引擎还需要考虑很多,比如硬件的性能和兼容性,在计算机日益发展的现代,虽然计算机的运算能力上也是越来越强,能够应用的算法也是越来越多以及为了更真实的模拟,更多运算也是少不了,这就加重了CPU的计算负担。因此为了处理3D渲染中的大量运算,现在主流的显卡都支持GPU来替代CPU进行图形需要的矩阵运算等,为了减轻CPU的负担,同时现在也引入了Shader Model(SM)[11],现在它已发展到5.0版本被应用于DirectX11,用于更高效的处理3D中的着色过程。
小结
本文介绍的也只有一部分,更多先进的技术和细节还未介绍,但上面的技术对于描绘3D渲染整个过程是足够了,但要做一个应用却是不够的。现在主流的3D渲染引擎渲染出来的画面已经非常真实了,很多算法都被应用于其中,但这些算法也都在改进,也有新算法被创造,硬件也随着进步,相信未来的3D渲染画面会更加真实。
参考文献:
[1] 潘云鹤,董金祥,陈德人. 计算机图形学原理、方法及应用. -2版(修订版) 北京: 高等教育出版社, 2003.12 26~28
[2] (美) Fletcher Dunnlan Parberry 3D数学基础:图形与游戏开发 ,17 - 23 89~95
[3] (美)David F.Rogers著.石教英 彭群生等译.计算机图形学的算法基础 第二版 机械工业出版社 2202.1 131~238
[4] (美) Andre LaMothe 著 李祥瑞 陈武 译 3D编程大师技巧(下册) 人民邮电出版社 487~540
[5] (美)OpenGL体系评审委员会 Mason Woo Jackie Neider Tom Davis Dave Shreiner /著 吴斌 段海波 薛凤武 / 译 OpenGL 编程权威指南 第三版 中国电力出版社 2003.5 149~186
[6] 刘波 基于DirectX9的3D游戏引擎渲染系统的研究与实现 硕士论文 沈阳工业大学 11
[7] 王兰芳 殷路 结合层次遮挡图和图像缓存的快速消隐绘制算法 《电脑开发与应用》2009年08期
[8] 薛守良 苏鸿根 一种凹凸贴图新算法 《计算机应用与软件》2004年07期
[9] Fast Phong Shading - Bishop
[10] Paul Haeberli and Mark Segal , Texture Mapping as a Fundamental Drawing Primitive ,June 1993
[11] SAVEN 张利东 Shader Model 3.0深度分析 《微型计算机》2005年第23期 120-125