数万年前,当智人第一次走出山洞、凝望星空,构思出各种美妙的传说,这种对虚拟事物的想象带来了认知革命,也让智人登上了食物链的顶端。进化的车轮滚滚向前,对虚拟事物的好奇心延续到今天,依然流淌在人类的血液里。无论是《魔戒》里充满精灵和矮人的中土世界,《银翼杀手》里乌烟瘴气又赛博朋克的洛杉矶,还是《西部世界》里供游客恣意妄为的未来游乐园,都折射出人类对于虚拟世界的向往。

《银翼杀手2049》里的洛杉矶

20世纪末电子游戏的普及让这种向往终于找到了理想的载体。信息技术的蓬勃发展,使得游戏内容的制作越发精良、越发能调动起玩家的视听感官;而硬件与通讯的进步,降低了进入游戏的时空成本。现实世界的文明一步步走向了虚拟化,充满实感的游戏内容则从虚拟世界中不断脱出,两者的边界日益模糊。

于是我们看到,人们在动作游戏中飞檐走壁,在冒险游戏中探索未知,在策略游戏中指点江山,在模拟经营游戏中开基立业,在MMORPG游戏中理解成长、感受羁绊。在现实生活中无法充分体验的,在虚拟世界中用一些时间(和钱)都能够换取。

但人们并未满足于此。找到钥匙打开机关,使用魔法破解谜题,拾取装备武装自己,提升等级战胜怪物,送礼物提升NPC好感度,一切都在千篇一律、按部就班地发生。人们想要在虚拟世界里感受更多的真实、获得更大的自由。

人们并不是没有做过尝试。我们见证了《矮人要塞》里酒精中毒的猫,《荒野大镖客》里热胀冷缩的马蛋蛋,《太吾绘卷》里混乱不堪的人物关系,《塞尔达传说》里花样百出的捕鱼方式,这些灵光一闪的细节无一不映射出人们追求真实感与自由度的雄心壮志。但站在更高的维度上去看,历史上还没有任何一款游戏能真正构建一个逼真的虚拟世界。

《塞尔达传说》里的“炸鱼”

从理想主义的角度出发,暂时忘记技术的桎梏,我们认为虚拟世界的这种“逼真”至少应该满足三个关键点:大规模、永续性、自运转

大规模体现在空间层面。意味着整个世界的巨大复杂性,广阔的地图,大量的角色,丰富且充满细节的可交互物和交互方式。

永续性体现在时间层面。意味着整个世界的发展是永久的、持续的、有记忆的,每个未死亡的角色都会永久存在,每个对环境的改造都会被永久保留。

然而,这两者还只是基础,我们已经在开放世界里见到了大规模、在MMO里见到了永续性,但它们和“逼真”依然有距离。自运转,是始终缺失、却至关重要的部分。我们可以借用两部电影的设定,来感受这种缺失所带来的问题——“玩家光环”和“剧本重复”。

在《楚门的世界》中,整座城市是一个彻头彻尾的舞台,QQ靓号卖号所有的天气变化、人群聚散、故事情节全部围绕着楚门发生。现阶段的绝大部分游戏也是如此:比如在《GTA》里,路人只会配合玩家所在的位置来随机刷新,在玩家看不见的地方不会有任何事件发生,也不会对环境产生任何影响;在《蝙蝠侠:阿甘骑士》里,哥谭市的反派会等玩家完成支线后再开始大肆破坏,人质也会保持原地待命直到玩家前来营救。

《楚门的世界》里围绕楚门的车辆

而在《西部世界》中,Dolores每天醒来,跟父亲道早安,上午放羊,下午进城和Teddy谈恋爱,傍晚父亲被破门而入的强盗杀死,自己失去意识,然后在第二天又若无其事地醒来,如此往复。就像市面上几乎所有游戏中的NPC,要么永远站在原地等着玩家去触发剧情任务,要么永远按照规则日复一日重复做着同样的事,很难让人感受到他们是活生生的人。

《西部世界》里早晨醒来的Dolores

对于缺乏“自运转”的虚拟世界来说,整个世界仿佛数个预先设定好、环环相扣的齿轮,而玩家则是其中最大的那个。当且仅当玩家主动采取某个系统允许范围内的行为的时候,才会影响到世界的其他部分,否则整个世界是停止运转的。

相比之下,在一个自运转的虚拟世界里,玩家只是众多角色中平平无奇的一个nobody。不仅玩家会对环境产生影响,环境也会对角色(包括玩家和其他)产生影响,角色会自我成长,环境会自我演化。后三者都是“自运转”所独特具有的,也是带来真实感和自由度的重要方面。我们能在同一个虚拟世界中,看到《Minecraft》里玩家对环境不遗余力的改造,看到《塞尔达传说》里下雨对岩石、雷电、火、动植物生态的影响,看到《中土世界:暗影魔多》里能记住与玩家交互历史的半兽人队长,看到《星际拓荒》里沧海桑田、斗转星移的太阳系。整个世界不再围绕着玩家、不再受限于剧本,更像是一个星系里无数个相互作用的星球,有自转,也有公转。

当补齐了“自运转”这块拼图碎片,三个关键点终于形成了闭环。自运转产生了涌现性,一方面,大规模和永续性分别提供了足够多的内容和足够长的时间来确保涌现产生,另一方面,正是因为涌现性的存在,才使得有限成本下的大规模和永续性成为可能。一个栩栩如生的虚拟世界因此而跃然纸上。

当然,以上只是基于理想主义的一厢情愿。回归到实现的可行性上,大规模和永续性首先对美术侧的物体/环境表现、海量资源渲染,以及程序侧的服务器端性能、海量日志存储都提出了很高要求,自运转更是需要相当复杂的AI逻辑来支撑。虽然相比于状态机和行为树,近年来风生水起的目标导向型(GOAP,Goal-Oriented Action Planning)AI和系统驱动型(Systemic)游戏设计已经往前又迈出了一大步。但剩下的路,也许只有仰赖深度学习的力量。

从Atari到即时战略游戏,从躲猫猫到黑暗森林版的MMO,深度学习AI学会了解决越来越复杂的问题。有朝一日,如果我们能程序化地构建一个大规模、永续性的游戏环境,让成千上万由AI驱动的角色在里面自己采集、建造、生存、繁衍,通过模拟角色成长、环境变迁,以及环境与角色之间千丝万缕的相互作用来实现自运转,也许我们真的能构建出一个理想中的、逼真的虚拟世界。

Neural MMO中的“黑暗森林”

在2020年的今天,当虚幻引擎5的演示视频在朋友圈刷屏,当学术会议和毕业典礼移步到《动森》和《Minecraft》里举行,当马斯克“人类活在真实世界的概率只有十亿分之一”的论断言犹在耳,我们所处的这个世界不可避免地开始在现实与虚拟之间摇摆徘徊。这也赋予了“构建虚拟世界”这个命题更大的现实意义——也许我们不仅是在研究“那个世界”,更是在研究“这个世界”、研究我们自己。

我们距离构建一个逼真的虚拟世界还有多远相关推荐

  1. vue 圆形百分比进度条_快速构建一个圆形的进度条

    在一些特别生的网站上,用户需要一个可视化的是示,以表明网站资源仍然在加载.从Spinner到Skeleton屏幕有不同的方法来解决这类的用户体验效果. 如果我们使用的是开箱即用的解决方案,它为我们提供 ...

  2. 如何用 Swift 语言构建一个自定控件

    本文译自:How To Make a Custom Control in Swift 用户界面控件是所有应用程序重要的组成部分之一.它们以图形组件的方式呈现给用户,用户可以通过它们与应用程序进行交互. ...

  3. [译] 用 Redis 和 Python 构建一个共享单车的 app

    原文地址:Build a bikesharing app with Redis and Python 原文作者:Tague Griffith 译文出自:掘金翻译计划 本文永久链接:github.com ...

  4. 教你如何使用SwipeRefreshLayout来构建一个上拉加载下拉刷新框架

    前言: 基本上所以的移动端应用都有Listview(当然RecyclerView也一样),那必不可少的都会嵌入一个上拉加载下拉刷新的功能.这样能大大的减少用户的流量消耗,同样对于用户也有更好的用户体验 ...

  5. 使用Python构建一个推荐系统需要几步

    ​ 在我看来,作为一位中国人的我们不管做什么决定都在面临多种选择.例如,如果我这个时候想要买一本书,但是我却不知道我想看什么书.不知道类型.不知道方向,那么这个时候打开各种进行软件搜索可能会出现各种各 ...

  6. 构建一个你自己的类微信系统 -- 可扩展通信系统实践

    ##前言 正如你们所知的那样,微信是一个非常成功的在线服务系统,由几万台服务器组成的系统为几亿人提供着稳定的业务服务.可惜作为一个普通的工程师基本上不可能有整体设计这样一个系统的机会,即使加入xx 也 ...

  7. 如何构建一个大脑---为工程师们介绍神经生理学.

    日期: 2019.11.25 星期一 晚 作者: Julius Kunze (这个小伙是UCL博士, 我是看他写了基于Jax的神经网络框架而关注他的, 他的这个项目是属于刚刚起步阶段, 只有他自己1个 ...

  8. 当区块链与数字货币开始分野 区块链需要构建一个「生态」

    当区块链与数字货币开始分野,我们看到的是,越来越多的行业开始与区块链产生联系,越来越多的场景当中开始出现区块链的身影.区块链,俨然成为一个无处不在的存在.尽管区块链的应用遍地开花,但是,我们还应该看到 ...

  9. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

最新文章

  1. php mysql多重筛选,如何使用php、html、mysql构建一个多重分类选择列表
  2. 德勒报告:2018年全球生命科学发展趋势
  3. 还有王法吗?美国联邦调查局开发人脸识别系统,数据源涉及公民隐私
  4. auto_ptr使用总结
  5. 采用config方式灵活配置我们的Quarz.net中的Job,Trigger
  6. ruby 三目运算符_Ruby运算符
  7. java 蓝桥杯 数字游戏
  8. matlab中运用demod解调程序,matlab调制解调源码有代码解释原理分析
  9. mysql ndb 命令_Mysql入门基础命令
  10. bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)
  11. python7.2抛出自定义异常
  12. Struts 2拦截器
  13. 超大背包问题(01背包)
  14. Mysql为什么使用B+树(一)之红黑树简述
  15. C语言中的找特殊数字问题
  16. 仓库是时候实施物联网了吗
  17. 讲真,java学习是有些困难,但迎难而上正是男儿本色(附学习资料) !
  18. ORA-12154 问题解决办法
  19. Tomcat下载与使用教程(官网选择版本)
  20. javaWeb(购物车项目)

热门文章

  1. 让制作APP变成搭积木
  2. pytorch采用GPU加速方法
  3. 编程的修炼(中英双语)
  4. kafka linux 脚本测试,kafka shell命令操作
  5. android开发论坛!关于Android开发的面试经验总结,含爱奇艺,小米,腾讯,阿里
  6. 谈VI设计的审美情趣
  7. sap怎么删除服务器文件,SAP服务器的文件管理
  8. php删除网站多余空白页,删除多余空白页的三种方法
  9. Gsensor驱动概述
  10. SAP ABAP ZBA_R005获得事务代码分段,完成关键用户参数权限