游戏世界编辑器
Jason:所有商用游戏引起都有某种形式的世界编辑器(game world editor),这些编辑器用于定义世界组块,并填入动态和静态元素。
Jason:游戏世界编辑器通常可以设置游戏对象的初始属性,多数世界编辑器也会以某种形式让用户控制游戏世界中动态对象的行为,控制行为的方式可以是通过修改数据驱动的配置参数或者使用脚本语言编程。
1.典型功能
世界组块管理:
世界创建的单位通常是组块(chunk)。世界编辑器可以创建、命名、合并、删除组块。
可视化游戏世界:
世界编辑器把游戏世界的内容可视化,对用户是一个重要功能,因此几乎所有游戏编辑器都提供世界的三维透视或者正交视角。
-
一些编辑器直接整合自制的渲染引擎至工具中,去提供这些世界视图。
-
一些编辑器把自身整合至三维软件如Maya、3Dmax,从而使用这些工具的视图。
-
一些编辑器会通过与实际的游戏引擎通信,利用游戏引擎来渲染三维视图。有些甚至直接整合至引擎本身。
编辑器基本功能:
自由摄像机:让视角能在在世界内自由移动。
选取功能:可以选取个别元素来进行编辑。有些引擎支持多个同时选取。
图层:一些编辑器支持将对象用图层分组,能够隐藏无关的图层,是分工的重要工具。
属性网格:
Cre:类似Unity的Inspector窗口。
游戏世界的静态和动态元素,通常会有多个可编辑属性(property/attribute),多数世界编辑器会使用能滚动的属性网格(property grid)显示当前选取对象的属性。
属性可以是简单的键值对,有些编辑器支持更复杂的属性例如数组或者复合数据结构。
- 选取多个对象后的编辑方式:
支持多对象选取的编辑器,也可支持多对象编辑。其中一个问题是如何处理选取中不同类型对象,每个对象有相同和不同的属性。
- 共通属性的获取:
- 自由格式属性:自由格式属性通常实现为一个键值对表,用户自由编辑每个自由格式属性的键、数据类型和值。
- 对于使用类继承的游戏对象:游戏对象经常会继承自一个基类,选取不同类型对象时,编辑器可以编辑基类属性并隐藏子类属性。
- 对于组件化的游戏对象:游戏对象可包含多个组件,选取不同类型对象时,编辑器可以修改每个共通组件的属性。
对象放置:
许多世界编辑器都会提供基本的平移/旋转/缩放工具,通常可以用Handle进行操控。还包括一些snap辅助工具。
世界组块读写:
不同引擎对于世界组块的读写粒度差异很大,数据格式也有很多选择。有些引擎使用自定义的二进制格式,有些引擎使用XML文本格式。
快速迭代:
Jason:优秀的游戏世界编辑器通常都会支持某程度的动态微调功能,供快速迭代(rapid-iteration)。 实现机制有很多,重要的是要给用户足够短的往返迭代时间(round-trip iteration time)(即从改动到该改动在游戏中显现效果之间的时间)。
有些编辑器在游戏本身内执行,让用户即时看到改动的效果。另一些编辑器能连接至运行中的游戏。
也有一些编辑器作为一个独立工具完全在离线状态下运行。这些工具有时可以令运行中的游戏动态更新被修改数据。
2.集成的资产管理工具
Jason:有些引擎中游戏编辑器管理整个游戏资产数据库,无论是动画、音频、网格、材质、纹理、着色器。例如虚幻引擎的编辑器UnrealEd。
Jason:UnrealEd直接整合到游戏引擎中,因此编辑器中的任何改动都能即时套用在运行中的游戏动态元素里。这种做法能轻易实现快速迭代。
资产调节管道什么时候处理资源:
Jason:资产调节管道(ACP)负责把游戏资产从多种来源格式转换为游戏引擎所需格式。通常是两个步骤,首先从DCC导出为平台无关中间格式,然后资产会转换为特定平台优化的格式。
Jason:不同工具的关键区别是第二步的优化过程在哪个时间点执行。
- 一些引擎在导入资产时就会处理优化资源。
- 一些引擎(例如Source和雷神之锤)把资产优化延后至烘焙关卡、执行游戏之前。
- 还有的引擎(例如光环Halo)可以任意时刻转换原始资源。这些资源在第一次载入至引擎前转换至优化格式,并把结果缓存避免每次都进行转换。
(END)