Rockstar如何将《侠盗猎车手3》的庞大城市塞进PS2的32MB内存:流媒体和五大优化策略
Game Maker's Toolkit
总结:
《侠盗猎车手3》(GTA3)在PlayStation 2上实现了一个奇迹:将一个4公里宽、总计约130MB的自由城塞入仅32MB的内存芯片中。Rockstar通过以下核心策略和优化解决了这一挑战:
- 流媒体系统: 游戏将城市划分为数千个小扇区,并根据玩家位置动态加载和卸载当前可见区域的模型和纹理。
- 细节层次(LOD): 远处物体只加载简化的低多边形模型,靠近时再无缝替换为高细节模型,以减少内存占用并避免突然出现。
- 内存池优化: 对非城市资产(如车辆和行人AI)进行严格的内存分配管理,例如将可同时加载的车辆类型限制为8种,以确保城市流媒体有足够的空间。
- 碎片化管理: 实现了定制的内存管理器,通过合并和移动内存块、积极释放内存以及标准化资产文件大小来防止内存碎片化。
- DVD寻道优化: 重新组织DVD上的资产布局,将相关资产捆绑存放,并复制常用资产到不同位置,以减少光驱寻道时间。
- 减缓玩家速度: 限制车辆最高速度,在特定区域增加空气阻力,并修改城市布局(例如在主干道放置大型建筑),以防止玩家跑得太快导致游戏无法及时加载世界。
通过这些巧妙的工程技术,Rockstar成功地在有限的硬件上打造了一个沉浸式的开放世界,为后续系列奠定了基础。
《侠盗猎车手3》(GTA3) 在视频游戏史上留下了浓墨重彩的一笔,它不仅奠定了最赚钱系列之一的基础,还开启了开放世界游戏浪潮,并引发了媒体的广泛关注。然而,这款游戏最令人惊叹之处在于,Rockstar North(当时名为DMA Design)如何将一个4公里宽的纽约市缩影——自由城,塞进PlayStation 2(PS2)仅32MB的内存芯片中。
为了理解GTA3的成就,需要简要了解游戏中的内存工作原理。
- PS2的存储介质与内存对比:
- DVD: 容量高达4.7GB,足以存储整个游戏的所有模型、纹理、音效和广播电台。但其传输速度极慢,约为每秒5到6MB,无法实时加载资产。
- 内存(RAM): 只有32MB,不到DVD容量的1%,但速度极快,可达每秒3.2GB,非常适合实时加载资产。
- 传统游戏加载模式:
- 传统游戏会将当前区域所需的所有数据(模型、纹理、动画、音效等)从DVD加载到内存中。
- 当玩家离开该区域时,这些资产会被清空,新区域的资产会被加载进来,通常伴随着一个加载画面。
GTA3的开放世界设计与传统游戏加载模式不符,因为它没有明确的区域划分或加载门。
- 城市资产大小: 自由城包含数千个独特的模型(建筑物、车辆、行人等),总计约77MB;以及数千种不同的纹理(材质、标志、角色皮肤等),额外45MB。总计约130MB的数据,远超32MB的内存预算。
- 城市区域划分:
- 自由城被分为三个独立的岛屿:工业区波特兰(Portland)、市中心区史丹顿岛(Staunton Island)和豪华郊区海岸谷( Shoreside Vale)。
- 这些岛屿被视为独立的关卡,在它们之间穿梭时会有快速加载画面。
- 但即便如此,每个岛屿本身(例如波特兰约40到50MB)仍然太大,无法完全装入内存。
- 初始设计尝试:
- Rockstar最初的设想是简化城市模型和纹理,使其能够全部装入内存。
- 然而,技术总监Obbe Vermeij表示,这种做法“导致城市看起来平淡无奇”,因此被放弃。
游戏的技术主管Adam Fowler提出了一个更具野心的解决方案,即“流媒体”技术。
- 城市扇区化: 自由城被划分为数千个小扇区。
- 动态加载与卸载:
- 游戏在玩家周围创建一个不可见的方框。
- 该方框内所有扇区所需的模型和纹理都会加载到内存中。
- 随着玩家在城市中移动,游戏会加载进入新扇区的模型和纹理,并卸载离开扇区的资产。
- 由于新加载的模型总是离玩家较远,DVD加载的短暂延迟不会被玩家注意到。
- 这项技术被称为“流媒体”。
通过在PC版GTA3上运行并结合进程监控器以及修改后的游戏源代码,可以直观地看到流媒体的运作。
- 文件加载验证: 当玩家驾车行驶时,进程监控器显示txd.img(纹理)和gta3.img(模型)文件正在加载小块数据。通过文件偏移量,可以定位到正在加载的具体资产,例如一个餐馆的标志。
- 可视化流媒体: 由于流媒体系统与摄像机绑定,直接展示会随摄像机移动。通过获取GTA3源代码并修改,可以固定摄像机,清晰展示城市资产的动态加载和卸载过程。
- 游戏在玩家前方秘密构建世界,并在玩家身后默默删除世界。
- Rockstar不再试图将整个城市装入内存,而是创建了一个移动的“窗口”,只显示足以维持视觉效果的城市部分。
- 消除规模限制: 艺术总监Aaron Garbut表示,这项技术“有效地消除了规模和细节上的许多限制”,只要玩家周围的区域能装入内存且能足够快地从DVD读取数据,他们就可以随心所欲地建造城市。
流媒体技术发展史 [07:13]
GTA3并非首个提出动态加载资产概念的游戏,但它是首个将其应用于稠密城市环境的游戏。
- 早期流媒体应用:
- PlayStation 1游戏《凯恩的遗产:灵魂之食者》(Legacy of Kain: Soul Reaver) 将世界分割成小块,线性排列,玩家接近边界时即预加载下一块。
- 这种技术被广泛用于《杰克与达斯特》、《银河战士Prime》、《神秘海域》和《战神》等游戏。
- 许多游戏角色缓慢挤过狭窄通道,正是为了给主机争取加载下一区域的时间。
- GTA3的创新: GTA3是首款将流媒体应用于无法预测玩家路径、无法通过门或电梯隐藏加载的密集城市环境的游戏,实现了真正的360度自由探索开放世界。
这项雄心勃勃的计划带来了五个主要挑战,Rockstar需要逐一解决。
- 问题1:弹入(Pop-in)现象: 如果资产只在玩家周围紧密加载和卸载,远处的物体就会突然出现,破坏沉浸感。
- 解决方案:细节层次(LOD)系统:
- 游戏会检查大范围的扇区,但在远距离区域,只加载大型结构,如建筑物、桥梁、船舶和起重机。
- 这些远距离结构使用简化的低多边形模型和低分辨率纹理(被称为“冒牌货”)。
- 当玩家足够靠近时,真实的高细节模型和纹理会加载进来,并平滑地过渡覆盖低多边形版本。
- 岛屿LOD: 其他岛屿(如波特兰、史丹顿、海岸谷)在地平线上也有低多边形模型作为替身。史丹顿岛甚至根据观察方向有两个不同的模型,以节省渲染资源。
- 通过这种方式,自由城既能保持远处的城市天际线,又能在近处提供细节,同时节省大量内存。
除了城市流媒体,32MB的内存还需要承载其他重要系统。
- 内存分配挑战:
- 32MB内存还需要存储动画、行人AI、物理计算、玩家车辆位置等数据。
- 只有一小部分内存(例如《圣安地列斯》中约13.5MB)专用于城市流媒体。广播电台直接从DVD播放,不占用内存。
- 因此,所有其他系统都必须经过高度优化,为城市流媒体腾出空间。
- 车辆池优化:
- GTA3有大约60种独特的车辆模型,总计约10MB。不可能全部加载。
- 游戏实施了严格的车辆池管理:任何时候内存中只能加载8种车辆类型。
- 当一辆车生成时,它必须使用这8个槽位中的一种,或替换掉一个旧的车辆类型。
- 这个限制解释了游戏中车辆类型重复出现,以及当你寻找某种特定车辆时,整个城市似乎都在开这种车的现象。
动态加载和卸载资产会带来内存碎片化问题。
- 问题2:内存碎片化:
- 从内存中移除小资产会留下“内存孔洞”。
- 即使总空间足够,但如果这些空间被分割成许多小块,一个更大的新资产也无法连续存储,可能导致内存溢出和游戏崩溃。
- 解决方案:定制内存管理器:
- Adam Fowler编写了一个定制的内存管理器,可以合并和移动内存块以避免碎片化。
- 该管理器还能在需要时积极释放内存,例如删除摄像机后方的物体或远距离天际线上的大型建筑物。
- 标准化资产大小: 另一个巧妙的技巧是将许多资产文件设定为相同的大小。例如,超过500个模型和纹理是2KB,416个是4KB。这样,资产在加载和卸载时可以无缝地互相替换,填补内存中的空隙,完全避免碎片化。
- 严格测试: Fowler会将玩家角色绑定到波特兰的火车上,让游戏在五台PS2开发套件上运行一夜,以测试内存管理器的稳定性。最初游戏在几分钟内崩溃,经过多次迭代优化,最终实现了整夜不崩溃。
DVD的物理特性也带来了挑战。
- 问题3:DVD寻道:
- CD和DVD设计用于线性读取(如音乐或电影),数据以连续螺旋形式存储。
- 但游戏需要不断地跳到光盘的不同部分(寻道)来加载各种资产,这涉及到激光头机械部件的加速、移动和减速,非常耗时。
- 解决方案:减少寻道时间:
- 资产在光盘上的优化位置: Rockstar通过物理上优化资产在光盘上的位置来减少寻道时间,将城市同一区域的资产捆绑在一起,这样激光头就不必移动很远就能获取下一批建筑物或道路数据。
- 优先级队列: DVD读取代码会获得一个资产加载队列,但它会优先加载那些最接近当前读取位置的资产,而不是严格按照请求顺序。
- 重复常用资产: 团队甚至尝试在DVD上复制资产。例如,将树木和路灯等常用模型的多个版本放置在光盘的不同位置,比每次都寻道回单一模型更高效。这项技术至今仍在游戏开发中使用,例如《漫威蜘蛛侠》中邮箱模型在蓝光光盘上有数百份副本。
- 硬件耐久性考量: Rockstar曾担心持续寻道会损耗PS2的DVD驱动器,但最终证明该技术并未造成硬件损坏。
即使经过所有优化,DVD读取速度仍然是瓶颈。
- 问题4:玩家速度过快: 如果玩家在自由城中移动过快,他们可能会超越流媒体系统,看到世界突然出现,甚至跌入“蓝色地狱”(未加载的虚空)。
- 解决方案:强制减速:
- 车辆速度限制: 汽车被设定了严格的最高速度。
- 秘密增加空气阻力: 在城市某些区域,开发人员秘密地增加了车辆的空气阻力百分比,虽然玩家不易察觉,但足以让光盘有时间跟上加载进度。
- 取消飞行载具: 游戏中的唯一飞机Dodo的机翼被剪短,使其几乎无法飞行。这是出于技术限制而非9/11事件后的内容审查(如视频中辟谣)。飞行会暴露流媒体技术的边缘情况以及城市未碰撞的屋顶和蓝色虚空。
- 调整城市布局: 波特兰最初有一条贯穿整个岛屿的主干道,玩家可能在此加速。为了解决这个问题,在主干道中央放置了一栋大型建筑,迫使玩家减速。
- 游戏内测试: 视频作者通过游戏内加速作弊和最快车辆试图超越流媒体系统,成功观察到世界部分在加载。在正常游戏中,这种情况几乎不会发生,这证明了Rockstar系统实现的卓越。
GTA3的流媒体技术和一系列巧妙优化是其成功的关键。
- 成就总结: Rockstar成功地将大约130MB的城市数据塞进了PS2的32MB内存中,通过不断地将身后建筑和树木“抛弃”,为前方商店和桥梁腾出空间。
- 为后续作品奠基: 这些技术奠定了《侠盗猎车手》系列后续作品的基础:
- 《侠盗猎车手:罪恶都市》(Vice City): 通过在高空飞行时只显示低多边形模型来支持直升机飞行,为远处天际线预留了内存。
- 《侠盗猎车手:圣安地列斯》(San Andreas): 移除了岛屿间的加载画面,部分原因在于城市之间有大量空旷的乡村区域,使得一个城市在玩家到达另一个城市前完全从内存中卸载。
- 技术的延续: 即使现代硬件拥有GB级别的RAM和SSD,流媒体技术和巧妙优化仍然必不可少,因为游戏世界的细节和丰富度也在不断提升。例如,《侠盗猎车手4》和《侠盗猎车手5》中仍然通过放置路障来阻止玩家速度过快。即将推出的《侠盗猎车手6》也将继续使用这些技术,甚至可能包含《侠盗猎车手3》中的部分代码。