UDN
Search public documentation:

DesignWorkflowCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3主页 > 虚幻引擎3基础 > Epic Games设计流程
UE3主页 > 角色美工 > Epic Games设计流程
UE3主页 > 环境美工 > Epic Games设计流程
UE3主页 > 关卡设计师 > Epic Games设计流程

Epic Games设计流程


从概念到完成


本文档的目的是让大家对Epic Games公司内部的关卡创建流程有一个深入的了解。

从美术概念开始


一旦项目的美术指导和设计指导已经认可了环境的概念观,那么这个环境概念观将会传给关卡设计人员和环境美术工作人员进行设计。

细分概念

关卡设计人员将会开始识别地图中的简单构造,比如建筑物将要在哪里放置建筑物以及可以使用哪些大致的图形来构建关卡的原型。

确定关键构造

美工人员及其指导将会确定主要的设置块,它们做为游戏中特定区域的标志性物体。 这些工作一般都先放在一边直到项目的后期才完成,因为大部分的网络都是模块化集合,可以在90%的世界中使用它。

获得模块化的网格物体集合

关卡设计人员和环境美工人员共同定义一组模块化网格物体块,这些网格物体由美工人员构建。 它们包括类似于装饰块、门、窗、墙、角落及这些网格物体的变种等的物体。

游戏性概念


在“概念”方面,我们认为美术概念和游戏性概念上有很大的不同,然而它们都有很重要的作用。 游戏性概念在初期阶段涉及到了关卡设计人员和程序员的很多交互。 美术概念涉及到了关卡设计人员和美工人员的很多交互,并且通常在游戏性原型没有完成之前美术概念甚至都不会开始。

设计人员/程序员间的交互

通过结合使用Unreal Kismet和引擎中现有的行为,关卡设计人员和程序员一同来勾画出游戏性观念的原型。 一般这个工作的完成是概念层次上的验证,它仅包含几何体和精确测试相关系统所需要的资源。 在项目过程中,关卡设计人员将会需要当前不存在的行为,这些行为将会根据时间的允许程度和游戏项目的需要情况来进行优先次序排列。

Kismet中制作游戏性原型

这个行为或者添加到Kismet中或者通过游戏代码提供。 在很多情况下,关卡设计人员将会在Kismet中创建需要的行为,然后程序员可以评估这些行为并尽可能地提高效率。

网格物体创建


我们的美工人员可以使用各种工具来创建人物和环境。

高多边形网格物体使用的工具

早期,网格物体的创建是在3D Studio Max中完成的,然后很多工作将会转换到Z-Brush中进行建模和细节设计。

低多边形网格物体

低多边形网格物体建模大多数都是完全地在3D Studio Max中进行的。美工人员创建一个中等级别分辨率的网格物体,然后把它移动到Z-Brush中进行细节处理,同时它也用于提炼低多边形网格物体。

展开UV贴图

当完成低多边形网格物体后,使用3D Studio Max的UVMap 和 UnwrapUVW修改器来创建网格物体的UV贴图。 3D Studio Max 8具有比3D Studio Max 7更多的高级功能。

从网格物体创建法线贴图

美工人员可以使用很多种不同的方法来从网格物体上创建法线贴图。 较老的方法是使用SHTools一同处理高多边形和低多边形网格物体。 在这种方法中,网格物体通常会被分解,从而可以避免那些分离的但又离得非常近的物体产生随机误差,比如手指、肩垫、以及嘴部的部分比如牙齿和舌头。 当然,较新版本的3D Studio Max (8及以上版本) 和 Maya也有处理网格物体的能力,并且很多美工人员已经转换使用它们了。

法线贴图通常总是会和一个次要的凸凹贴图相结合,比如纺织物图案。 SHTools和较新版本的3D Studio Max都支持这个功能。当然,类似于铆钉、螺栓、划痕及花边等的较小细节通常会从美术人员制作的预处理的法线贴图库中被合成到法线贴图中。 这将会使得建模的过程变得更加快,因为只有非常少的细节需要在多边形上建模。

材质创建


漫反射和高光创建

一旦创建了UV贴图,并处理了法线贴图,贴图美工人员开始着手创建物体或人物的贴图。 这通过UV贴图的布局来完成。在很多情况下,高光贴图是全色贴图,允许物体或角色的不同部分呈现出不同的材质,比如肉、铜、钢铁等。

在UnrealEd中创建材质

一旦物体或角色的主要贴图接近完成阶段,将会把贴图导入到引擎中,然后为那个物体创建一个材质。 在导入贴图的过程中使用DeferCompression标志可以节约很多时间,因为在包被保存之前,它将延迟把贴图压缩为DXT1 或 DXT5格式,因此可以在实验及调整最终贴图的过程中进行快速地导入。 创建一个新的材质,把贴图放到它上作为贴图样本,并且将其连接到适当的着色器节点(漫反射、高光、法线)上。

构建关卡原型


根据概念构建粗略的BSP模型

关卡设计人员使用环境的概念美术来决定关卡所需要的基本图形和布局来测试环境并创建游戏性原型。 在这个阶段,关卡的任何几何体上都只会很少或不应用材质,并只应用很少的光源。 几乎所有的构造都是BSP图元,这些图元稍后在构建通道中将会被静态网格物体或地形所替换。 在最终的关卡中将会有很少的图元,一般最终存在的图元主要是用于地面、顶棚或简单墙壁的图元。

粗略寻路BSP关卡

最初的寻路是非常简单的,主要适用于保证所有的玩家和AI角色都可以导航环境。 当设计出初始路径后,则开始游戏性测试。

在BSP关卡中进行游戏性测试

这时,已经可以在BSP关卡中进行游戏性测试了。 最初仅有关卡设计人员及关卡设计人员指导运行整个关卡,然后从那里进展到由设计团队的其他成员来从完成的各种状态来测试关卡。 如果关卡设计的是多玩家地图,在我们的测试实验室中有预定的游戏性会话,在游戏播放会话结束后将会给出评论。

游戏性粗略设计

这是决定某些游戏性元素是否适合这个关卡,一旦脚本是适当的,便可以调整难度和交战及拾取物的位置。 关卡设计人员在这时将会仔细检查整个关卡来放置游戏性物体比如弹药拾取物,同时也会进一步调整路径放置并开始为关卡设计基本的脚本。

脚本


Kismet介绍

Epic公司使用Unreal Kismet来完成几乎所有关卡和过场动画的游戏行为。 关卡设计人员负责所有脚本的适当放置,并负责报告脚本元素相关的问题。 在这时,关卡也会要求使用自定义的Kismet动作来执行关卡或游戏的特定任务。

使用Matinee书写随着时间变化的事件脚本

在我们的游戏中使用Matinee主要用于执行两个任务。 第一个是书写随着时间变化的事件脚本。 这可以像打开门那么简单,或像随着时间发生的可以改变物体上的材质并且可以导致其他Kismet事件被触发的一系列爆炸那么复杂。 在战争机器中使用的大多数Matinee都是用于执行较简单的动作,比如门。

向关卡中添加特效

关卡设计人员完成大多数的放置环境粒子特效(比如烟雾和火)以及稍后要通过Kismet触发的特效(比如飘落的灰尘)的工作。 大多数的特效都是通过Kismet来驱动的,这允许当不再需要它们时可以关闭它们,从而提升了性能。

网格物体化关卡


预留位置

关卡设计人员在关卡原型创建阶段通常都会使用预留位置。 设计人员经常使用有美术工作人员提供的大小和形状和最终网格物体近似的物体。 这个物体命名为和最终网格物体相同的名称,并且放在相同的包中。 这允许美术工作人员导入最终的网格物体及材质,并使得它们自动地传递给任何使用其相应预留位置的地方。

重新使用现有的网格物体

虚幻引擎3允许对放置在关卡中的物体进行非统一缩放。 我们广泛地使用这个功能来装配这个关卡,通过以多种方式使用一个网格物体,从而降低贴图和网格物体数据的内存消耗量。 这个应用的一个实例是使用一各建筑物上的门框来构建窗框,或者使用一个碎石堆构建一个远处的山堆。

网格物体应用的优化

其中一个对网格物体和内存消耗进行优化的比较简单的方法是使用通用浏览器的Primitive Stats(图元统计)部分来辨别那些不经常使用并且可以被其它已经一个用的网格物体替换的网格物体。 这个应用的一个实例是替换一个和其它圆柱体有很少不同但仅在环境中使用几次的柱子。 尽管基于每个物体来说它不会节约很多内存或性能,但是那个和其它网格物体结合一同删除时,产生的性能提高则很大。

照亮关卡


静态光源

静态光源用于照亮独立于动态场景元素(比如角色、物理物体或移动物体)的场景。 将会使用很多静态光源来照亮环境。 按住L键并点击表面,将会在这里添加一个光源。 从这些光源产生的引擎是静态的,这些阴影或者被烘焙到光照贴图或网格物体的顶点光照中。 这使光源的默认风格。

动态光源

有两种类型的光源可以影响动态物体。 一个是动态光源,它可以通过右击一个光源并从"Set what this light affects(设置这个光源影响的物体)"的列表下选择" affecting only dynamic objects (仅影响动态物体)"来实现。 这些动态光源将会仅影响设置了动态光照通道的物体,它默认情况下将包括人物、movers(类似于门的插值actors)和物理物体。 这些光源默认情况下在场景中投射昂贵的动态阴影,并且应该节约地使用它,因为每个影响一个物体的动态光源都在额外地渲染一遍那个物体。 设置光源为`affecting both dynamic and static objects(同时影响动态和静态物体)'将会导致光源影响世界中的任何东西。 这是我们场景中主要的阴影透射光源,应该非常小心地使用它,因为这是最昂贵的一种光源类型。 默认情况下设置为这种类型的唯一光源是定向光源类型,我们使用它来模拟太阳光。

Skylights(天空光源)

Skylights用于模仿半球体到整个世界的漫反射光照。 这用于为世界提供环境光照。 使用这些光源是非常便宜的。

反射光照

同时按下Shift和L键并左击,这将将会添加一个颜色为您点击的像素的颜色的光源,具有较低的密度和半径,用于模仿反射光照。 可以广泛地应用这个光照来提供更加真实的光照效果。

调制阴影

默认情况下,所有的投射阴影的光源都会计算它们是否被遮挡,以便在场景中产生精确的阴影。 设置这个光源使用调制阴影有利于使用阴影投射物轮廓的投射贴图来调制场景。 这是在世界中产生阴影时具有较高性能的方法,尽管它不像使用深度缓存阴影方法那样精确。 这种方法也允许我们控制阴影的颜色和密度。

动态载入


尚未完成。

切割关卡为动态载入部分

尚未完成。

使用体积进行动态载入

尚未完成。

内存统计

尚未完成。

性能优化


光照优化

在虚幻引擎3中,光照是一个最昂贵的东西,所以小心地使用它们是非常地重要的。 有很多工具可以优化光源,并且打算多数工具已经在UDN中进行了详细的介绍。LevelOptimization(关卡优化)中也有几个主题是关于光照优化的。

内存优化

在UnrealEd的通用浏览器中,有一个标签图元统计数据。 这个工具显示了当前关卡使用的所有网格物体所占用内存量。 我们监视和那个网格物体类似或一样的可以替换它的网格物体,来节约内存消耗。

这里是一些游戏中用于分析当前场景的命令:

Stat memory -显示每种类型的资源所使用的内存量的列表。

Stat d3dscene -显示了Direct3D的统计数据,说明了渲染了多少个三角形、以及渲染那一帧中各个部分所花费的时间(以毫秒为单位)。

附录


附录1: 导入资源到引擎中

大多数情况下,负责创建内容的美术工作人员也负责把这些资源导入到引擎中。 所有的静态网格物体都是通过使用3D Studio Max的Ascii Scene Export (ASE)格式导入的。 通过使用一个命名机制把它们导入到内容包中,以便稍后我们可以定位它。 贴图可以按照.TGA 或.BMP格式进行导入。 Targa格式支持24或32位贴图,然而我们仅支持.BMP文件的24-位贴图(没有alpha通道)。 我们也会在我们Perforce仓库的`artsource'仓库(depot)下也存储了所有的源资源。

附录2: 分配材质给资源

在导入一个.ase文件时,导入器将会检查应用到物体上的材质是否和当前加载到编辑器中的材质的名称相匹配。 如果发现它们匹配,它将会自动地分配那个材质。

在3D Studio Max中,这个过程通过命名那个材质来简单地设置。

如果您想为一个物体的所有实例都重新分配材质(比如改变门上的材质),那么请在通用浏览器中双击那个静态网格物体,打开LODInfo文本域,打开[0],然后出现材质列表。 改变材质是很简单的,只要选择您想改变的材质元素,在通用浏览器中找到新的材质,选择他,然后点击材质列表上的绿色箭头即可。

改变放置在关卡中的网格物体的材质将不会将该改变传递给那个网格物体的其它副本,所以这可以用于在不需要加载额外网格物体到内存中的情况下来创建那个网格物体的变种。

选择您想改变的放置在关卡中的网格物体。 比如,有两个并排放置的门,但是其中一个需要具有不同的材质。 您可以选择其中一个门,按下F4键来打开StaticMeshActor的属性窗口, 打开StaticMeshActor 项,然后打开StaticMeshComponent。 向下滚动到Rendering,然后点击Materials项。 它或许是空的,所以点击绿色的+图标。 这将会添加一个和应用到那个网格物体上的第一个材质相对应的元素。 如果您有两个材质要应用到门上,比如一个材质用于门的基础部分,一个用于窗子部分,并且您仅想改变‘第二个’材质,那么您可以像Material数组中添加两个元素,改变第二个,而不改变第一个。

现在要想改变应用到网格物体上的材质,请使用向前面介绍的一样的步骤来进行。 在浏览器中找到新的材质,然后在属性窗口中选择那个材质元素,并点击绿色的箭头来输入它。 现在其中一个门的颜色应该和另一个是不同的了,尽管它们都使用相同的网格物体。

附录3: 物理资源

关于导入具有简化碰撞的静态网格物体的参照信息页面是: 碰撞参考指南。 任何具有简化碰撞的静态网格物体都可以作为Rigid Body[刚体](物理物体)添加到世界中。

已经具有了使用PhAT创建的物理设置的骨架网格物体, 可以作为Physics Assets(物理资源)放置到世界中,并且它们可以和世界进行物理化地交互。

附录4: 物理材质

物理材质是指PhysX系统决定的当两个物体发生碰撞时它们的行为。 关于物理材质的参考信息以及它们是如何工作的信息,请参照页面: PhysicalMaterialSystem 。

附录5: 烘焙控制台游戏平台上播放的游戏

尚未完成。

附录6: Source Control集成

我们已经把source control (SCC)集成到了通用浏览器中。 这允许我们在编辑器中迁入和迁出内容包(但不是关卡)。 需要注意的是: 如果包不是最新的版本,它是不能被迁出的。 那时,必须关闭编辑器并把内容包同步到最新的版本才能进行迁出操作。

关卡必须在编辑器的外面进行迁入迁出。

Epic使用[[]作为内部的源码控制系统。

附录7: 内容管理

再次说明,Epic使用[[]来管理游戏内容。美工人员通常会迁出源包,把它们有的内容添加到那个包中,然后保存包。所有的美工人员几乎每天都可以访问和更新内容,所以他们总是可以拥有最新的内容。如果一个包被迁出了,那么您可以请求迁入它们 。

我们的包通常是150mb,然后我们将会继续,为给定的环境集合制作新的包。

比如,我们将建立一个像这样的环境包结构:

对于 COG_City:

  • COG_City_Doors
  • COG_City_Doors02
  • COG_City_Doors03
  • COG_City_Floors
  • COG_City_Floors02
  • COG_City_Floors03

请参照资源通道页面获得关于命名惯例和包组织结构的更多信息。

附录8: 编译

目前,每天都会通过编译脚本来搜索到最新版本的内容和代码,编译引擎和所有的游戏工程,为其添加唯一的标签,把所有的内容并把编译好的二进制文件迁入,然后在书写一个内部的通知邮件,告诉项目团队已经有一个新的版本。 所有的美工人员和设计人员在他们的系统上都有批处理文件,这允许它们同步到最近的完全编译版本。 这个有助于避免工作人员对正在使用哪个版本进行工作产生疑惑。。