在《蜘蛛侠》中,工具对于游戏的品质可以说是愈发重要,说是和runtime相提并论也不过分,也正是工具的出色发挥,能支撑spiderman的优秀品质。
这里主要谈三个方面:
- houdini流水线来生成场景以及细节
- lod&光照
- 编辑器升级历史
houdini流水线
从gr开始,houdini近几年谈的比较多了。
spiderman可以说用的比较重度,覆盖的范围非常的广,可以说主体都覆盖了:
- 路面,路径,路面细节
- 建筑,各种装饰
- 车辆,特效等
- 一些gameplay事件
houdini的流水线也比较复杂和长:
这部分的构建可以说比较强大了。
然后在实际应用中有几个要点:
- 分治:做好模块化,一个区一个区的来生成
- 简化:尽量保持流程简单,减少耦合,减少策划美术的选项
- 清晰化:了解到整个自动化生成流程,与传统手摆很不一样,上游改动会影响到下游
- 打好tag,自动生成的,手摆的,都要有不同的区分
LOD
spiderman里lod一大特色就是3d imposter,一个是保持了ps4该有的品质(billboard式的imposter就太low了),一个是维持了很高的性能
是这样的一种面数极低的imposter,而且组织方式是以一个zone为单位,内部imposter的贴图达成atlas,然后以类似cubemap的方式来sample(mesh不存uv)
生成3d imposter mesh的过程就是:
- 合并能和的面
- 内部面都去掉
mesh本身: - 没有normal和uv,完全通过position来反算(normal因为都是axis aligned)
光照的probe摆放
光照是IBL是realtime生成的envmap,生成为position通过houdini+美术手摆来完成。
diffuse lighting是offline baked lightgrid(算是一个irradiance volume),hdr格式,在一个volume里,生成大量的256分辨率的cubemap,然后convolve到hdr的颜色+方向;
spiderman里也有time of day, 所以是cook了四套。
关于这个volume based GI,现在知道的方案是:
- 战神4,蜘蛛侠:offline baked,蜘蛛侠bake多套用于多个时段
- 荒野大镖客:听开发者说是volume的方式,是不是realtime 生成的不知道
- division系列:是offline bake surfel信息,然后实时生成GI Volume
一定程度上可以说是比较成熟的方案了。
编辑器本身
- 制作蜘蛛侠,内部包括map editor, fx editor, cinematic…一共有12个editor
- 早先是html5的然后逐步迁移到qt的c++的
- 使用json做配置文件
中间h5编辑器到c++也展现了其比较务实老练的一面,如果全都推到重来肯定是最方便的。
但是团队是一步步来做的:
- 始终保持格式兼容
- 老的h5不再开发,只是做一些debug
- 逐步迁移
DDL(data definition language)
这是挺有意思的一个点,实际在insomniac,战神中有应用。
和同事也有一些讨论,可能后面专门总结一个文章较好。
简言之,就是定义meta信息(可以使用xml,json,protocal buffer等等),然后生成头文件,编译到项目里。
好处若干,有的是未来跨平台,跨语言,有的是data driven,让策划美术可以使用等等。
reference
- Tools for ‘Marvel’s Spider-Man’: Editing with Immutable Data
- Procedurally Crafting Manhattan for ‘Marvel’s Spider-Man’
- ‘Marvel’s Spider-Man’: A Technical Postmortem
- ‘Marvel’s Spider-Man’: Procedural Lighting Tools