Game Engine Architecture by Jason Gregory:1.7 工具和资源流水线(1)
来源:互联网 发布:我知这个世界本如露水 编辑:程序博客网 时间:2024/05/22 07:50
任何游戏引擎都会用到大量的各种格式的数据,如游戏资源、配置文件、脚本,等等。图1.31描述了现代游戏引擎中用到的一些类型的数据。粗黑箭头展示了数据是如何从创建它们的最原始的工具转换到最终的游戏引擎中去的。细灰箭头则表示了表示了这些各种各样的资源如何关联或者引用其它资源的。
1.71 数字内容创建工具
游戏天生就是多媒体应用程序。游戏引擎的输入数据来自于非常多的格式: 3D网格数据,图片(位图),动画数据,音频数据...所有这些源数据都需要由艺术家(artists)创建和处理。这些arists使用的工具叫做数字内容创建(digital content creation, DCC)应用程序.
一个DCC应用程序一般目的在于创建这些数据中的一种 - 不过其中有的工具能创建多种。例如,Autodesk's Maya和3ds Max是两种流行的可以用来创建3D网格和动画数据的工具。Adobe's Photoshop及一整套软件目标则在于创建和编辑图片bitmaps(textures).SoundForge是一个非常流行的创建音频的工具。而有的游戏数据则不能用现成的工具生成。比如大多数游戏引擎都提供一个自定义的游戏世界编辑器。不过,有的引擎确实还用现成的工具用作游戏世界编辑。我曾经看到有游戏团队使用3ds Max或者Maya作为游戏世界编辑器,有的写了自定义的插件来帮助使用者,有的则没有插件。如果你去问大多数游戏开发者,他们会告诉说他们还能记得曾经用一个简单的位图编辑器来制作高度图(height field),或者手动把场景的布置信息手动输入到文本文件里面去的日子。工具不需要很好看 - 游戏团队将会使用任何可用的工具把事情搞定。那说明,如果游戏开发团队想要按时间进度来高效开发产品,工具必须非常易于使用,并且要绝对的可靠。
图1.31 Tools and the asset pipeline
1.7.2 资源调整流水线(Asset Conditioning Pipeline)
DCC程序所使用的数据格式极少有适合拿来直接在游戏中使用的。主要原因有两个:
1. DCC程序中模型在内存中的数据往往比游戏所需要的复杂得多。例如,Maya存储了场景节点的有向非循环图(directed acyclic graph, DAG),附带有非常复杂的网状关联。它存储了所有的关于这个文件的改动的历史。它记录了场景中的每个物件的作为3D坐标变换的位置、朝向、缩放等信息,分为平移、旋转、缩放、剪裁部分。游戏引擎仅仅需要其中很小的一部分信息用于模型在游戏中的渲染。
2. DCC程序的文件格式往往读取速度太慢,并且有的还是一个封闭的私有的格式。
因此,DCC程序创建的数据一般导出为一个更标准的格式,或者用一个自定义的格式用于游戏。
一旦数据从DCC程序中导出,在送给游戏引擎之前还需要进一步进行处理。如果游戏工作室要它的游戏运行在不止一个平台上时,这种中间文件格式还可能为不同的平台作不同的处理。例如,3D网格数据可能被导出成一个中间格式如XML或一个简单的二进制格式。然后把具有相同材质的网格合并,或者把对引擎来太大的数据拆分。网格最后可能被组织成一个适于在特定硬件平台读取的内存布局。
从DCC程序到游戏引擎的流水线有时候被称为数据调整流水线(asset conditioning pipeline)。每个游戏引擎都有某种形式上的这个玩意儿。
1.7.3 3D模型/网格数据
你在游戏中看到的几何体一般由两种类型的数据构成。
1.7.3.1 笔刷几何体(Brush Geometry)
笔刷几何体是用一些凸壳体(convex hulls)定义的,每个凸壳体由多个面定义。笔刷一般由游戏世界编辑器创建和编辑。这是一种创建可渲染几何体的老式的方法,不过仍然在使用。
优点:
* 快速且易于创建
* 游戏策划能存取 - 经常用来设计用作游戏原型的关卡
* 能作为碰撞数据和渲染数据使用
缺点:
* 低精度 - 难以创建复杂形体
* 不支持有关节的物体或者动画角色
1.7.3.2 3D模型(网格Mesh)
对需要更多细节场景物体,3D模型(也被称为网格)是比笔刷几何体更高级的选择。网格是由三角形和顶点组成的复杂的形体(网格也可能由四边形或者其它可再分的几何面(surface)(译者按:如六边形什么的)构成,不过今天的图形硬件,由于几乎专门用于渲染光栅化三角形,所有的几何形体都优先转换为三角形渲染)。一个网格一般由一个或多个材质作用在它上面,用于定义视觉效果(颜色,反射性,凹凸程度(bumpiness),散射贴图等). 在本书中,我将使用网格(mesh)这个术语来指一个单独的可渲染的形体,而模型(model)用来指一个合成的可能包含多个网格,加上动画数据和其它被游戏使用的数据的物体。
网格一般是由3D建模工具如3ds Max, Maya, 或SoftImage制作的。一个相关的比较新的叫作ZBrush的工具,允许使用一种比较直接简单的方法来制作高精度的网格,最终导出一个带有法线图(normal map)的低模来近似表现细节。
必须为DCC工具(Maya, Max等)写导出插件以用来提取数据并用一种游戏引擎可识别的格式存储到磁盘上。DCC工具提供了一个标准的或者近似标准的数据格式,但没有哪一种是完美的适合游戏开发的(可能COLLADA除外)。所以游戏开发团队一般创建自定义文件格式,并使用相关的导出插件。
- Game Engine Architecture by Jason Gregory:1.7 工具和资源流水线(1)
- Game Engine Architecture by Jason Gregory:1.7 工具和资源流水线(2)
- Game Engine Architecture by Jason Gregory: 目录
- Game Engine Architecture by Jason Gregory: 序
- Game Engine Architecture by Jason Gregory:2.1 版本控制(1)
- Game Engine Architecture by Jason Gregory:1.2 什么是一个游戏
- Game Engine Architecture by Jason Gregory:1.5 游戏引擎概况
- Game Engine Architecture by Jason Gregory:2.1 版本控制(2)
- Game Engine Architecture by Jason Gregory:1.4 不同类型的游戏引擎(1)
- Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构(1)
- Game Engine Architecture by Jason Gregory:1.1 一个典型游戏团队的结构
- Game Engine Architecture by Jason Gregory:1.3 什么是一个游戏引擎
- Game Engine Architecture by Jason Gregory:1.4 不同类型的游戏引擎(2)
- Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构(2)
- Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构(3)
- Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构(4)
- Game Engine Architecture by Jason Gregory:1.6 实时游戏引擎架构
- game engine architecture---1.6
- VC6.0中gdiPlus的使用以及一个小例子
- 数据的导入
- 面向对象汇编程序设计 ObjAsm32
- OGRE最简单的射线拾取详解
- 摄像头捕捉程序 VC
- Game Engine Architecture by Jason Gregory:1.7 工具和资源流水线(1)
- EXCEL插入柱形图
- 3.16 淘宝前端应用与发展 小马演讲
- HQL的几个小问题
- 换一种方式做加密—著名程序员刘涛涛谈扭曲加密变换技术
- 插入饼图
- SecureCRT 完美代替超级终端
- 深入了解汇编的第一个简单程序(对初学者很重要)
- 插入折线图