撰写了文章 更新于 2017-05-08 06:25:51
Steam Dev Days 2016 图文版——(20-23)
20. 多人游戏的反作弊
By Simon Allaeys and Aarni Rautava (Easy Anti-Cheat)
图20.1
大家好,感谢你们的到来。我叫Aarni,他叫Simon,我们来自Easy Anti-Cheat。
图20.2
首先简单说说我们是谁,还有我们为什么在这。Easy Anti-Cheat最初是作为Counter-Strike的第三方解决方案,现在我们已经有一个14人的专业团队,我们在处理作弊方面有了很长的一段历史。
我们内部有三个单独的团队,其中一个团队致力于客户端的反作弊方案,另一个团队致力于服务器端的玩家行为分析,剩下的一个团队致力于机器学习,差不多就是坐在前面两个团队中间彼此帮助。
我们现在有差不多30个游戏在工作中,其中有很多在Steam平台上,也有很多类型,比如FPS射击游戏、MOBA、MMORPG等等,因此我们也看到非常大范围的作弊。
图20.3
在这次演讲中,我们会谈到『什么是作弊』、『谁在作弊』、『他们为什么要作弊』、『作弊是如何实现的』,以及最后的『反作弊是什么』。
(Simon部分)
图20.4
好的,让我们来讲讲作弊。
图20.5
我们将作弊定义为『获取不公平的优势』。在竞争性活动中,作弊总是存在的,想一想牌类游戏、大富翁(Monopoly)和体育运动。可能在场的所有人在人生中都曾经至少作弊过一次——即便只是赢你哥哥一场大富翁。作弊也会发生在赌博或是其它有金钱动机的活动中。
如果你将在线作弊和线下作弊作个比较,你会发现它们是完全不同的。在线下世界中,我们有社交体系,如果你作弊了,那么就会产生真实世界的后果;而在internet上,大部分都不是这样的,它是匿名的,你非常容易就能隐藏你在作弊的事实。同时,在线游戏的作弊在近几年来变得越来越简单,原因就是软件越来越多也越来越容易获取了,我们也看到了有些玩家社区更经常将作弊视为可以接受的东西。
图20.6
我看看这个视频怎么了(没播放出来,点了下鼠标,视频略)。这是某个人使用『Rage Cheating』的短视频,为了方便观看进行了加速。他使用了很多种作弊,其中一种就是『Chameleon Hack』(变色龙作弊器),你可以看到玩家的模型,随着队伍颜色也不一样,而且在小地图中也可以看到。也有一个ESP(透视)给你提供玩家名字、他拿的什么武器以及骨架等等。如果你足够仔细看的话,你还会发现这个人还爆头了每个人,准星其实都没有移动过。这个就是作弊器的用法,让屠服务器的过程更有趣。而显然,对于一个游戏里的其他玩家来说,这一点都不有趣。
图20.7
对于作弊本身,在『不公平的优势』定义下,允许什么而不允许什么是非常取决于游戏和内容的。我们大概将作弊的种类分了个类。第一个是『利用』(exploits),比如说按像素点行走或是人物堆叠,这一般不是什么大问题,除非是在锦标赛或是竞争性比赛当中。我们还有很多『自动操作』(automation)作弊,比如宏命令、自动操作一系列键盘按键。在很多游戏中,这是可以接受的,在有些游戏中是无法接受的。在这个下面我们还有『自动瞄准』(aim bot)、『自动扳机』(trigger bot),基本上所有能自动化用户操作的东西。还有之前视频里看到的『覆盖层』(overlays),你会有ESP来提供更多的信息,还有类似的『雷达挂』(radar hack)可以提供别人在地图位置的详细信息,以及『警告挂』(warning hack)会告诉你是否有敌人瞄准你或是是否有人看到你等等。最后就是完全操纵游戏的作弊,『飞行挂』(fly hack)、『加速挂』(speed hack)、穿墙挂『noclip』,任何能黑入到游戏来让你作弊的东西。
图20.8
为什么这是有重要的?基本上这都与玩家有关。在我们做游戏的时候,我们想要人们说这是一个优秀的游戏,你可以得到好的评测,所有人对游戏都是积极的评价。
图20.9
我们再来看一看商业模型。玩家们通常商店里发现了你的游戏、他们玩了它、对它感觉很棒、他们继续会玩它、然后他们会告诉他们的朋友等等,而这些评测会帮助加速获得新玩家。所有这些都会在最终转换成收入,这部分你又会重新投资到获取玩家注意的游戏内容和特性上,或是重新投资到获取新玩家的广告上,或者你会选择投入下一个游戏中。
图20.10
而我们不愿意看到的是这样的评测,『这个游戏应该被从Steam上移除,因为它的管理很差,还有作弊和bug。』这样的玩家大部分都会停止玩这款游戏,他也不会告诉他的朋友去玩这个游戏,而最终这样的差评会导致新用户获取的减少。这样一来……任何一个好的商业模型都是一个循环,你获得的收入越多,你能产出的游戏内容也就越多,然后你就能获得更多的收入。如果你最终变成了恶性循环的话,可能就很难从中出来了。
图20.11
所以你可以看出是谁触发的作弊行为。
图20.12
让我们先来定义一些名词,同时这也是我们这次演讲的原因。我们有『黑客』(hacker)、『提供者』(provider)、『作弊者』(cheater)。『作弊者』就是人、玩家、作弊的用户,他们使用的是『黑客』制作的软件,这些人会做一些功能、注入到游戏的注入技术、以及几乎所有的作弊相关的R&D(research and development,研究和开发)。在他们中间的就是像发行商一样的作为分销平台的『提供者』,他们会做作弊器的品牌推广、社区的管理、支付方式,如果他们是相当大的发行商的话,他们还可能会做本地化来覆盖到更多的国家。将『黑客』和『作弊者』区分开始非常重要的,他们是不一样的。『作弊者』利用『黑客』,『黑客』制作了软件。
图20.13
首先来看看『作弊者』,我们确定了几个主要的人物类型。其中最著名的就是『破坏者』(griefer),这些人会在周五傍晚买一箱半打装(6-pack包装)的啤酒,买上10个游戏帐号,然后通过每个账户开始破坏,在每个服务器上进行暴力作弊。好在这只是『作弊者』中的少部分人,要我说做多的一部分是『休闲作弊者』(casual cheater)。他们只想要让游戏更容易,在他们自己游玩的时候更开心,他们不一定会想要破坏其他人的游戏体验,而这些人也很可能在他们玩的每一个游戏中作弊。然后就是『成就党』(achiever),他们想要赢得每一次比赛,他们也不想被抓住自己在作弊。接下来容易被忽视的群体,我们称他们为的『维护者』(vigilante)和『追随者』(follower)。『维护者』是作弊的受害者中的一类,他们会上线去搜索他们自己的作弊器,去复仇他们自己所受到的的伤害。他们的『追随者』通常是非常容易被感情支配的玩家,当他们发现有些东西失去控制的时候,他们会想要继续玩这个游戏、会想让游戏对他们能保持乐趣。
之后我们谈到反作弊策略的时候,也需要考虑到这些人物类型,因为有些玩家是你想要永久封禁并移除出你的游戏的,而其他的你只想保护他们,给他们提供良好的体验。
图20.14
同样我们来讲一讲『黑客』。我们只确定了三种关键类型。第一个是『脚本编写者』(scripter),他们是最大的一个群体,他们会复制粘贴任何他们能找到的东西,进行很多的实验,同时黑多个地方做出简单的作弊器。然后就是『资深黑客』(senior hacker),他们更专业,会做出功能丰富的作弊器并可能进行商业化。这些人通常也是非常非常好的码农,或是专业的逆向工程师,或是一个有非常强大的后端软件开发背景的人。最后一种我们经常看到的是『研究者』类型,他们只是出于兴趣进行逆向反作弊或是游戏的挑战,他们更专心于验证概念,而不是商业可用的作弊器。
图20.15
『提供者』位于两者之间。最初总是在一些『开放性社区』开始,你可以获得很多免费的作弊器,非常容易获取它们。你也会成为一个初级游戏『黑客』,从这里你会知道关于它是怎么实现的一些知识。然后就是『作弊器发行商』,他们将作弊器商业化提供给最终用户,这也是相对比较容易获取的,只要你有PayPal或者信用卡就可以。这些作弊器的价位差不多在每月5美元到每月25美元之间。最后一种就是『封闭式社区』的私人作弊器,一般来说非常难获取它们。社区是基于声誉的,你需要有现有用户的介绍或是在其它社区中声誉良好。我们也看到过你需要经过Skype采访或是发送你的护照复制文件,这样在你要搞他们的时候,他们就知道你是谁。同样,由于它们是私人作弊器,所以经常也是数量有限的,只有前20个或者前100个购买人能买到,而且价格也相当昂贵,每月40美元也不会意外。在同一种类型下,我们也看到了非常私人化的作弊器,某个人会出价500美元到1000美元之间来获得非常私人化的作弊器。这些作弊器从功能上来说通常是非常简单的,比如只是『自动瞄准』或者『透视』,但是他们是非常私人化的,也应该是完全检测不到的。
图20.16
它是一门生意,也是一门产业。从公开作弊器开始,它会逐渐变为专用、昂贵的作弊器。如果你去看那些大型的商业『提供者』,他们通常是非常合法的商人,他们在他们居住的国家有注册成一家真实的公司,他们会支付税费,有时候还会进行管理。通过检查这些公司的税收记录,我们发现一个单人的作弊器『发行商』每年能赚50万到100万美元之间,而对于团队来说,通常会更高,差不多是一年150万美元为标准。我们估算了全球市场的大小,至少有1亿美元。这是一个相当大的产业,也解释了为什么游戏『黑客』会如此有动力地继续支持游戏,因为这差不多就是他们的生计、他们谋生之道。
当你看作弊的时候……轮到你了。
(Aarni部分)
图20.17
作弊。
图20.18
作弊通常在普通地、自然地游玩游戏开始。可能我们所有人在玩游戏的时候偶然发现过一个游戏的小错误,有时候会给你超过其他玩家的优势。举个例子,掉到了地图地下之后,你可以看到所有人,而他们看不到你图20.18右上角;或者是不知为何对别的玩家变为隐身状态。在设置游戏的时候,你可能会找到一些本不该存在的控制台变量或是选项。比如你找到了开发者意外留下的debug渲染模式,允许你启用线框渲染(wireframe rendering),能透过墙显示物体图20.18右下角。可能很多人也试过修改——比如说磁盘上的游戏存档文件,让后再加载游戏看到『哇,我有无限的某个值了』。这些都很快就能修复,你能很快修复它们,比如强制验证变量值,发布的游戏中取出debug控制台,还有就是检查……比如如果你移除硬盘上的一个文本或是文件,它会使你能够有透视的效果,那么游戏客户端就可以判定这个文件必须被加载,否则——我不知道——它可以崩溃或是阻止运行游戏。
图20.19
也有一些工具是专门设计用于绕过这些限制的。比如使用Cheat Engine时,你可以修改持有的子弹数量、经验值、绕过强制数值、重现debug控制台。能真正修复它的唯一方法就是授权的游戏服务器、不要发布有debug选项的游戏。常见的解决方法还有使用代码混淆技术和加密技术来加密变量,这可以让使用这写工具更难一些。同时反作弊也可以阻止这些工具运行所用的基础技术。比如在Cheat Engine启动加速作弊模块的时候,它弹出错误提示,程序会出错而游戏则不受影响。
图20.20
那么作弊器是怎么制作的呢?我回过头看了看我自己的经历,我的编程其实是通过作弊器开始的。我当时在玩Counter-Strike,这是我最喜爱的游戏之一。我看到了有些人在作弊,然后我就去了哪些开放式的作弊论坛,那里有非常非常多的教程、示例,从『如何制作非常复杂的作弊器』到『如何编译程序』都有,而我当时还从来没有安装过Visual Studio。
就在这么几行代码的复制和粘贴下——因为我肯定不懂我在做什么——,我做出了wallhack透视挂的代码,『做』,毕竟不是我写的。我也不懂游戏是如何运行的,我甚至都不懂透视挂是怎么运作的,直到后来才懂。我花了好几年时间才开始去看实际游戏的代码和去理解游戏是如何运行的。
游戏引擎使用OpenGL、Direct3D等等这样的dependencies的好处就是,我可以非常容易地将它加载到下一个游戏中,因为大部分游戏都是用OpenGL和Direct3D进行渲染的,我也不需要担心当时第一批反作弊会检测游戏自身的代码。这就是作弊器看起来的样子,它总共有大概20行的代码和前面的开头图20.20右后方代码。基本上这就是你在Counter-Strike或是其它射击游戏中作弊所需要的全部了,你只需要能通过墙看到敌人。
之后我想做更多……更好的作弊器、更高级的作弊器,所以我就去学如何做ESP透视挂。它使用游戏引擎来从中拉取信息,显示玩家的名字、武器、在玩家周围画出方框等等图20.20 右前图片。在这个时候,我开始黑入游戏引擎,因为同样地,很多游戏使用一样的引擎,我可以使用同一个作弊器就支持两个或三个游戏。
图20.21
另一个容易程序设计和编码的就是制作bot程序。这些程序会自动化游戏,它们通常以网络协议为目标或是向游戏窗口发送模拟输入指令,它们会识别像素,这样就能获知游戏状态了。
图20.22
比如这个就是一个bot程序(视频略),这个bot其实完全是外部的Python脚本,它没有实际的游戏代码,它也不加载游戏。即便是这样,服务器仍然验证通过了客户端,它会每10秒踢出左边的玩家,而玩家会自动加入到服务器10秒。如果你时时刻刻都这么做,你其实可以在游戏里获得很长的时间。而对于真实玩家,这看上去就很奇怪,这一点也不有趣,你只是看到僵尸们到处走动并且一直从游戏里消失。
图20.23
更高级的作弊器可以在游戏中加入新功能。比如在加入游戏内作弊菜单,这样你就可以在游玩的时候进行设置。你可以做出非常好看的覆盖层,比如你可以加入IRC(Internet Relay Chatting,在线聊天)窗口。很多作弊器也会加入贪食蛇游戏,这样在你等待匹配游戏的时候你可以用它来消磨时间,此外还有很多像『Pong』这样的游戏。
最简单的就是在游戏代码中内嵌补丁,比如这个使用的是OpenGL的渲染功能。你可以在代码上打上补丁、跳转到作弊代码、进行作弊行为、然后再跳转回原始游戏代码。
另一种挂载劫持代码流的方法就是……比如,找到引擎接口,更改它的功能指针,也就是说取代调用原始的游戏代码,实际调用的是作弊器代码。接口挂钩的一个好处就是,它通常更容易在游戏更新中存活下来,因为游戏引擎一般不会有很大的改变。
还有很多其他的技术来达到相同的效果,也能在很多的游戏上有效。比如在expecting handling(预期处理)上用些小伎俩,引起失效的游戏状态,比如覆盖一些动态的数据引起游戏的崩溃,然后你可以有一个合法的预期处理来修复这个崩溃、恢复程序,而过程数据就会在你想要的地方了。你也可以利用硬件debug断点,而不需要更改任何指针。这不会改变代码,而是告诉CPU『当你读取这个地址的时候,或是你在执行这个地址的时候,我想要设一个例外,让我来控制它』。有很多类似这些的技术,他们有缺点也有优点。
图20.24
注入作弊器功能的技术也被用于保护作弊器自身。通常在保护作弊器的时候,他们通常会进入到核心模式(kernel mode),这样他们就可以使用DKOM(direct kernel object manipulation,直接内核对象操作)、interrupt hooks(中断挂钩)、system service hooks(系统服务挂钩)、VAD(virtual address descriptor) hiding(虚拟地址描述符隐藏)——让作弊器躲过内存扫描器——这样的技术。这些技术也善于在DRM中作弊,让反向解析作弊器更困难,来做出硬件锁。比如当你下载任何一个私人作弊器的时候,第一次运行的时候它们会锁到你的电脑上,而作弊器有他们自己的专用后台,可以监视作弊器的使用率。比如说如果你在5分钟内运行了3次作弊器,它们会自动锁定账户,管理员会检查你做了什么。举个例子,如果他们检测到你在使用一个调试器,那么他们再也不会向你提供这个作弊器了,游戏结束了,你要从头开始。而在反作弊行为中,这通常是最费时间的部分。
图20.25
在此之上还有非常高级的作弊器,它们通常是设计得非常好的软件。它们是模块化的、拥有很多即插即用的功能。作者对于操作系统构造、游戏引擎有着非常丰富的知识,可能拥有指做游戏的经验。他们会在内核当中隐藏得很深,也不会留下痕迹,而且他们甚至会用合法的软件来加载他们的作弊器,这样就使得作弊器对系统来说变得是隐形的了。同样,这让定位和反向工程变得更难。举个例子,这张图来自于一个容易被攻击的虚拟机内核驱动,通过复杂的开发,你可以任意的修改内核地址中的内存。通过这些,有些作弊器就会加载像是未签名的黑客驱动程序,它们会关闭内核中的特定安全措施。你可以利用很多的工具自动化进行这一步,让你能安装即用。
然后是反作弊。
(Simon部分2)
图20.26
关于反作弊,有很重要的一点需要说明的是,世界上不存在无法黑入的游戏。蛋糕个谎言(The Cake is a Lie. 传送门梗)。(笑)
图20.27
图20.28
我们个人将反作弊看待成一个策略,而你需要认真考虑作弊创造了什么价值、人们为什么要这么做,以及作弊的成本是什么?如果你能够改变这个风险-收益的平衡,那么你就可以阻止作弊的行为。
图20.29
我们先来看看如何降低收益或者说价值。在游戏设计的早期,你已经需要开始考虑反作弊的理念并且如何在设计中和反作弊相配合了。一个很好的例子就是这个,Dota 2。他们使用了战争迷雾,在服务器端就过滤了所有不在玩家视野内的其他玩家位置,这样作弊器就无法做出『开图挂』了。其它的例子还有World of Tanks(坦克世界)、War Thunder(战争雷霆),弹道轨迹都是在服务器端进行计算的,如果你作弊使用自动瞄准的话,服务器就会纠正你的行为。这一个办法在现在的PC游戏中运作得非常好,而站在我们角度,我们非常好奇这个怎么应用到VR中,因为你在VR中并不能去纠正游戏本身。
图20.30
另一个是游戏机制。一个非常好的例子就是Facepunch Studios制作的Rust,这是一个生存类沙盒MMO游戏,里面有一群又一群的玩家整天耗在里面、收集资源、建造更大的基地。这些基地里有所有的战利品,也有只能使用密码解锁的门。一开始的时候,大家会去暴力破解这个四位数的密码,他们要么花了很多耐心来手动尝试所有可能的组合,要么就会使用类似AutoHotkey这样的软件来自动化这个步骤,在数秒中内侵入成功。他们解决的方法是——仅仅用了很少的改变——,每次你输入一个错误密码,角色就会被电击一次,你输入错误密码越多,电击的伤害就越高,大概在5-10次之后,你就会死亡。这个方法有效解决了所有的暴力破解。
图20.31
在降低收益之后,你也可以想想如何增加风险。同样地,我会给你们一些例子。比如游戏价格,我不认为这是你反作弊策略的一部分,但这也是影响玩家在你的游戏中使用什么样的作弊手段的因素之一。如果他们买一份游戏要花60美元,那么他们基本上不可能会被连续封禁2-3次,因为这个成本实在是太高了。f2p游戏和售价低于20美元的游戏则更容易发生作弊行为——尤其是如果你进了Humble Bundle或是G2A上面出售的账户只要2-3美元。
图20.32
还有账户的价值。比如在Steam个人页面上,人们更倾向于收集很多个游戏、想要建立起自己的声誉。他们会获得好友、开始交易等等。当他们账户上出现这个标签的时候,比如一个游戏封禁,这会使得他们在社区里看起来很糟糕。处于这个目的,Valve提供了几个API来帮助进行反作弊。其中一个就是RequstPlayerGameBan(请求对玩家进行游戏封禁),这个指令其实很简单,就是一个封禁Steam的个人页面的HTTP命令,就像图里的一样。在Steam合作页面中,他们还允许你设置你最喜欢的反作弊,然后这个反作弊救国接管所有的API集成。
图20.33
还有一个可以考虑的是排名(天梯)匹配和分级的游戏体验。如果在玩家们进入更竞争性的玩家基础前需要花几天的时间进行升级,那么这就意味着如果他们被封禁了,那么之后会很乏味、需要花很长的时间回到他们之前所在的地方,这简直是种折磨,这样他们就很容易在一次又一次重复这么做中感到厌倦。在一些游戏中,你可以看到一些例子,比如前20小时你需要在一个新手服务器上玩,而不是进入真正的服务器。你也可以使用一些强制性的教程,对于新手玩家来说是有趣新颖的,而如果作弊者做了10次、20次则会非常的无聊。
图20.34
最后一个就是聚焦于作弊器本身,当你减少它们的供应量的时候,你实际上增加了作弊器的价格,让作弊的成本更高。
图20.35
而这就是反作弊着手解决的地方。
图20.36
基本上所有的反作弊都会检测作弊器。有很多种方法可以这么做,其中一种就是统计学,这种方法非常适用于让游戏摆脱破坏者,你可以立刻踢出或是封禁所有作弊得非常明显的人。它还有一个好处就是它是完全在服务器层面的。不过当玩得非常好的玩家和非常狡猾的作弊者的水平出现重叠的时候,它的局限性就出现了。
另一种非常常见的方法是扫描签名。这个和传统的反病毒方法相似,过程差不多就是反作弊会收集作弊器、制作签名。我们会非常小心地制作这个签名,这样就不会和合法的软件发生冲突或是发生假阳性了。当运行的时候,反作弊会在内存里扫描是否有这些签名。它非常好用,但是同样也有缺点,你需要知道你在找的作弊器是什么。
第三种方法就是使用启发式算法,这种情况下你不是在寻找特定的作弊器、不是在扫描特定的模式,而是寻找代码流的行为。你会寻找系统调用哪里出现了问题、或是引擎的行为是如何的,所有东西是不是都是正常的。这样就可以指示出玩家是不是在作弊。同样地,这个方法也有缺点,如果系统中存在Rootkit或是一个病毒,那么它就会发生冲突,在这种情况下会被触发。
总的来说,它们都不是完美的,你需要结合它们来填补所有的漏洞。
图20.37
对于检测作弊器来说,大部分的检测手段你都需要先发现作弊器。对于这个情况——到目前为止最大的——或者说最著名的作弊地点是美国和欧洲,还有就是相对独立的俄罗斯,在这些地方是相对比较容易渗透进入、获取这些作弊器并制作它们的签名的。但是在此之外还有很多的封闭式社区——在我们看来——我们在芬兰,但是我们看到了很多作弊社区分布于韩国、中国、泰国、菲律宾等每个东南亚的国家,而由于语言和文化的屏障,可能我们很难渗透并获取作弊器。所以大部分反作弊会允许玩家举报作弊器的数据,在玩家们举报之后,他们就可以对作弊器进行研究和反向工程等等。同样还有针对作弊器论坛、作弊器提供者的人工扫描,尽量获取到作弊器,破解DRM,填补上所有的漏洞。现代的反作弊也开始向着机器学习方向发展,你可以使用启发式算法来发现什么有可能是新的作弊器、什么可能不是。比如你将离散或是边缘的案例聚集起来,启发式算法就会发现『这里有100或是200个玩家在用一个相同的奇怪的数据』,然后你再人工地进行研究,你就可以发现他们在使用的是什么作弊器了。
图20.38
防作弊也是非常重要的一件事,你能看到很多反作弊服务在这么做,而且也有几种实现的方法。其中非常常见的,同时也通常是第一步的就是使用代码混淆,可以摆脱很多种常见的用于制作作弊器的工具。由于更高级的『黑客』会绕过它,所以你也能看到很多的内核反作弊,也就是内核模式下的反作弊,它们会sandbox自己的进程,阻止常见的注入技术,比如说阻止外部的进程获得你的游戏进程的handle,或者阻止这个进程读取内存等等。
图20.39
反作弊中还有一个很重要的部分就是你需要能不断地进行更新,因为它总是出于被攻击的状态。你需要良好的推送更新的方法,要么就是和游戏的更新结合在一起,要么就是单独地更新。这样你就可以最大化利用反作弊技术,比如说你使用了统计学方法,那么你可以更改服务器规则;使用了签名,你可以扫描到新的数据库文件;启发式算法中,你可以推送新的模型来检查特定的算法。
图20.40
我们知道很多的工作室在自己做(反作弊)。我们听说过很多的故事,所以我们想要说一些比较简要的建议和想法。
当你们自己做的时候,首先你要确保能保护公司的资源。你需要独立那些运行作弊器的机器,网络也是需要物理上独立的,而且你也要一直使用一个VPN,这样你的IP地址就不能被作弊器提供者追踪到了。
同时你们也要确保能保护好你们的敏感信息。在作弊器运行的时候不要登录Gmail,他们可能可以获取到你们的邮箱、密码,然后窃取所有个人信息。Skype也是一样的,Skype在硬盘上储存登录信息,获取并上传这些信息是非常容易的。还有就是支付方式的信息,他们会获取到你们的信用卡。最后就是源代码,有些作弊器会寻找.c和.cpp后缀的文件,然后将它们上传到他们的后端。
最后,在你准备开始的时候,你还要需要做好打算、分配好资源,准备迎接这场永远不会结束的战斗。这一部分……
图20.41
也就是这一块,保持在控制之中。
图20.42
你需要做好心理准备,挑战者会一直出现,总会有人想要破解你的解决方案。
那么如何处理呢?
图20.43
首先你要有社区管理,确保在出现作弊者的时候,向社区承认这个事实,不要否认,然后对修复这个问题展现出决心。另一方面,避免更多的作弊的公开宣传,我们通常不推荐宣布封禁名单之类的事情,因为没有数字就是好数字。比如如果你封禁了12,000名作弊者,有人会说『这个数字太多了,这个游戏里所有人都在作弊,所以我也应该作弊』。而如果你的封禁的规模很小,比如封禁了200个作弊的玩家,那么你就会被批评说没有抓到每个作弊的人。所以最好直接封禁,玩家们会在没有作弊者的时候注意到的。
同样地,不要做出承诺或是声明,你不能承诺说下周就解决。你可以以此为目标,但是没必要做出一个承诺。同时你要确保玩家能保持专注于游戏内容,在论坛和Reddit上,你不会想看到那些关于作弊的主题淹没了那些关于游戏本身的主题。你最好将它们汇集起来,给他们提供能够讨论的平台,也要保证游戏内容的关注度。
图20.44
在游戏设计阶段,务必要提前做好计划。尽可能地不要相信客户端——这也取决于游戏类型,在一个快节奏的第一人称射击游戏中,你可能无法应用权威服务器这样的设计,不过你可以将玩家血量、弹药数目、经验等等这些内容放到服务器端。在出现漏洞(exploit)的时候,尽快地作出反应,这样也能展现出你的决心,让他们能信任你作为一个游戏开发者可以解决这个问题。
图20.45
对于你个人而言,你需要尽量脱离和这个问题的关系。尤其是在你参与到实际游戏开发过程的情况下,你不要参与到冲突当中,没有必要到Twitter上引战。同样也不要太个人化,你是在解决一个技术问题,而不是人的问题。在公司中,你也要将反作弊的工作人员和游戏设计的人员隔离开,即便他们需要讨论解决一些构架上的问题,你也不需要在日常会议中围绕作弊,导致大家都忘了自己是在做游戏而不是反作弊。最后就是不要低估作弊,因为不可能一下子就能解决,它是在不断地前进的。
图20.46
最后,不管你做了什么,你都要向鸭子一样:一直保持冷静,展现出你能掌控、有信心,但是在背后要尽全力来解决它。
今天要说的就是这些。非常感谢Valve Anti-Cheat的工作人员能让我们来到这里,谢谢大家的倾听。
如果你们有什么问题,尽管问。
(观众掌声)
(Q&A部分)
提问者1:
我能问一个问题吗?(Simon:问吧)我们常见的一个作弊器是加速挂,它可以改变处理器返回的计时功能。有什么能对抗它的好方法吗?
Aarni:
你的问题就是,如何阻止作弊器让游戏加速?
提问者1:
是的。我们会调用一个变量去问:『从上一帧之后过去了多久?』它们(作弊器)和会修改这个变量返回的数值。
Aarni:
有几个方法可以解决这个问题。你不需要对客户端测算它运行了多久之类的东西,你要做的就是阻止作弊器获取游戏内存的权限。作为一个外部进程,如果作弊器不被允许获取到游戏进程的内存进行读写的话,那么它就不可能挂钩那些变量并返回给你伪造的值。或者你也可以——之前关于接口挂钩作弊器的那页也提到了,你可以重定向你的系统调用指令到复制的代码上。这么做的话,每当你的游戏客户端发出调用指令的时候,比如在这个情景下调用查询性能计数器,它就不会调用作弊器的加速模块钩,而是会直接调取本地的路径。这也是我推荐的一个技术,不过我更推荐前面那个技术。
你还能做的是——因为像作弊器这样的东西为了修改内存、进行变量挂钩,它们需要能改变页面保护。当你去掉这个技术的时候,它们就无法让代码页面变为可写状态了,也就无法将挂钩放置进去获取控制权了。
希望这些对你有用。
提问者1:
谢谢。
提问者2:
你们好。你们可以简单总结一下你们提供的服务吗?就是Easy Anti-Cheat。
Simon:
可以非常简单地说一下,因为我们不是来做广告的。我们是一个外包服务,主要专注于打包(wrap)游戏进程,而不是深度集成入游戏中。我们也负责所有与作弊相关的问题,这也是为什么我们专注于full stack,我们有用于防护的内核驱动,我们也做检测,我们在后台也分析很多不同种类的游戏行为和代码流行为。
提问者2:
那么你们有跟个人的开发者有过合作吗?还是说是可以应用到很多游戏上的整体解决方案?
Simon:
它可以应用到很多游戏上,但是它也需要集成到游戏当中,所以我们也跟游戏开发者有直接的合作来进行集成。
提问者2:
好的,很棒。谢谢。
Simon:
谢谢。
提问者3:
你好。你刚刚提到了很多游戏由服务器主导(authoritative),这样能阻止很多问题的发生。我的问题是,你们有在客户端主导的游戏中遇到过很多问题吗?很多的工作都是在客户端完成,而我们只是告诉服务器我们刚刚做了什么,而不是服务器主导、告诉玩家发生了什么。这个的意义在于,客户端主导的代码比起服务器主导的是更容易的。所以你们在客户端主导的游戏或是游戏引擎中有遇到很多可以通过变为服务器主导解决的问题吗?
Simon:
是的,我们看到了很多。尤其是在较早的游戏中,你经常能够看到。而且我也认为这是一件需要在早期就做的事情,因为在打磨和正确应用它们之前,你需要非常迅速地迭代你的功能、获取反馈。在很多情况下,我们看到开发者们倾向于将它应用到客户端上,如果他们收到的反馈还不错的话,他们就会这么做。
提问者3:
总体来说,如果我们都去使用服务器主导的模式,会对未来反作弊更好,而我们可以让大家这么做。这是我问这个问题的本意。
Simon:
是的,当然是这样。
提问者3:
非常感谢。
Aarni:
对于这个问题,尤其是在做原型的时候,大部分都是在客户端这边完成的,然后再转移到服务器端。还有一点需要牢记的是,举个例子,如果你在做一个第一人称射击游戏,由于在玩家射击的时候,他们需要立刻接受到反馈,那么游戏引擎就需要支持类似于修正和预测这样的功能。目前我们仍然不清楚怎么的做的一点是,在VR游戏中的(反作弊)。在很多游戏中,如果玩家走到了一个糟糕的位置
(卡住什么的),服务器会把他移回来,这是完全没问题的;但如果你是在VR体验中,我不是很清楚你突然位移的话会发生什么,这可能是有些人在解决的地方。
提问者3:
谢谢。
Aarni:
谢谢。
提问者4:
你们好。当开发者们遇到假阳性,并因此封禁了不应封禁的人的时候,你们有什么建议?
Aarni:
就是尽快的解封他们。(笑)
提问者4:
好吧……(笑)
Aarni:
然后对此进行一些交流,和玩家解释为什么会发生这样的事情。这件事比较微妙,因为……我们在检测的时候也会看到这样的现象。这也是要做防护的一部分原因,因为当你检测到的时候,你就需要封禁他们,不管你用什么样的方法,你都会面临假阳性的风险。比如说在统计学中经常发生假阳性;又或者扫描签名可能做得很粗糙,会因为合法的软件而触发;启发式算法中,它也能因为一些不常见的东西而触发。从这个角度来讲,防护总是更好的。
提问者5:
你们好。我碰到了一个问题,在尝试做服务器主导的反作弊时,我总是会造成很大的延迟。我怕的是……我觉得我可能制造了太多的overhead,导致了更大的延迟——尤其是在玩家的距离很远的情况下。但是我又担心将这个授权给玩家。我要问的就是,我的担忧是不必要的吗,还是说这种担忧是合理的?
Aarni:
我要说的是,你的担心并不是不必要的。当然这取决于引擎,不过通常来说你可以想象到你能看到的代码,别人也能看到。举个例子,如果你有做出折衷或是出现了漏洞,如果它是和用户授权有关的,那么修复它就非常重要,总有人会找到它的,千万不要低估它。如果你要做一些基本上没人会去尝试的折衷方案,我会推荐你将它放到不会直接影响游戏的地方,或者让别人不要看到它。但一些关键的东西,比如在射击游戏中我对其他玩家造成了多少伤害,我可以保证他们(作弊器)会首先就测试这一部分。
Simon:
即便反过来说,也是受害者做决定。上帝模式是很容易应用的,所以最好还是放到服务器端。
提问者6:
你们好,谢谢你们的演讲。以前我做过Half-Life的mod和Source的mod,而所有的那些Counter-Striker作弊器理所当然地……人们就会在我的游戏中用它们,看上去很棒。但是作为一个mod开发者,你根本没有资源对此做什么。你们有什么给这些资源有限的人的建议来解决这个问题?
Simon:
这种情况下……我们是一个反作弊公司,你如果需要节约时间用于实际的游戏开发的话可以外包给我们。
提问者6:
是的,但是mod不会让你赚钱。
Simon:
哦对,是的。(笑)是……
提问者6:
在一个单人开发者的能力范围内,你们有什么能做的吗?并不一定要消灭,只要减少就可以。
Aarni:
关于这一点,不管你要用来做什么,或者说不管你选择什么,只要你不要在上面花太多时间,不让它变成你的第二职业。这是我的建议。
Simon:
在一些比较基础的方面,混淆部分代码会挺有用的。还有就是运行VMProtcet或是Themida(系统保护软件)这样的软件。
Aarni:
在社区里可能会有人又黑了它,但是这也通常意味着他们对游戏富有激情,所以会有人想要证明『我可以保护游戏,我知道引擎』。谁知道呢。
提问者6:
谢谢。
Simon:
就到这里吧。
Aarni:
好的,谢谢大家。
(观众掌声)
21. 利用简单图像制作精品VR
By Nat Brown (Valve)
(观众掌声)
图21.1
大家好啊,我叫Nat Brawn,在Valve的VR团队工作。我大部分时间都花在非Windows的Steam和SteamVR,所以你现在能看到SteamVR和VR头显是在Linux平台上的,如果你有兴趣的话可以看一看。
图21.2
今天我要讲的是,让你的VR能让能最大化利用用户的硬件并拥有尽可能大的受众。在未来,硬件的规模会发生变化,更多的消费者会拥有更高端的设备,VR设备也会变得更加高端。我们在过去一直不断地在讲如何优化渲染、改变VR的工作量。这一次,我不会过于详细地深入这部分内容。我会将我们学到的内容作为高层次的建议,因为我觉得在SDD,我们想要做的是跟你们分享我们发现哪些是最优方案。我们只是分享,而不会告诉你『你要这么做,这个是VR的接口指南』。我们想分享我们觉得有用的东西来帮你节约一些时间,我们也想知道你们是否觉得它有用。
我会先从定义我们认为的适配(scaling)在不同角度上的含义开始。我会谈到在VR中的适配有什么是相同的、什么是不同的。我知道你们当中有很多人来自世界各地并且在编写游戏,你们会对我要讲的内容中的一部分有所了解,不过VR有些区别。然后我会深入地讲解一些我推荐你们使用的用于适配的工具和资源,这部分会稍微详细一些,所以到时候别睡着了。OMG,有时候会翻页(幻灯片翻了一页)。最后我会再绕回来在哲学上讲一讲适配,比如你会什么应该这么做。这里面有很多的原因,而不仅仅是范围或是非黑即白,我会谈到很多个论点。
在你听完这个演讲后,请记得适配会让你的游戏更好、更好看、能在更多的硬件上运行,最终会让消费者高兴——我们做的所有东西都是出于让消费者高兴——,那么我们也能高兴。
图21.3
首先,什么是适配?适配就是将你的内容和玩家的硬件相适应。通常这基于他们的CPU或是GPU的性能,但是在一个有多种硬件的生态环境中,比如我们所在的PC游戏,VR适配也要适应不同的头显设备和输入设备。你们当中有多少人试过了新的手柄原型?哦,好的,顺便说一句,如果你们还没有试过,在今晚的happy hour或者说social hour上你们还有一个机会。我们非常希望你们都能给我们反馈。希望你们有机会试一下,非常抱歉排的队伍有些长。
适配并不是VR游戏的独有概念,如果你做过别的编程比如你是Windows程序员或是移动端程序员的话,我们做了很多不同的软件适配来让软件和设备的性能相适应。由于PC硬件是如此地多样化,我们通常都会最大化图像质量最来让用户尽可能地利用他们的硬件——无论它是什么——,而我们也不一定会去测试所有的硬件,所以适配和微调在游戏当中尤为突出。
哦我做了什么,不小心跳过了一张。这个触摸板太敏感了。
图21.4
这张图看起来像不像你们游戏UI的调整?我喜欢自己改造和调整,我从小开始就一直这样做,但有的时候我在PC游戏里能调整的数量让我想起了这张图——Microsoft Word里的工具栏。这时有发生。
图21.5
我们再多想一想的话——刚刚那是一个非常好的过度手动调整的例子——,游戏中好用的其实有三种不同类型或是说不同等级的适配。第一级的适配就是手动调整。用户手动调整一些参数的设置来改变游戏使用硬件的方式。第二级是稍微用户友好一些的,当你的游戏检测到系统的参数,比如屏幕分辨率、GPU类型、CPU性能,它就会基于它看到的更改设置。第三级我们认为非常有趣,它也适用于VR,我来告诉你为什么。它更加用户友好,你的游戏是动态地进行适配,甚至是在运行的时候实时进行在系统中进行改变。这不仅仅是跟GPU工作量有关,如果有人加入了一个手柄,通常你都要重启游戏对吧?这就比较烦人了。
图21.6
我给你们展示一些非VR游戏的例子,它们非常有趣。后排的人可能看得不是很清楚,这是一张Dota 2的视频设置页面的截图。在第一次运行Dota 2的时候——可能很多的玩家在别的游戏里根本不会去更改这里的设置——,但是Dota 2会告诉玩家『我现在使用的是基础设置,我会检测到全屏游戏分辨率是什么,我会尽量让帧数达到30帧以上』。在使用基础设置下,还有一个滑块在『最快』和『效果最好』之间,这个滑块会基于对于硬件的分析确定它的位置。它会检测很多东西,甚至是……oops,你这幻灯片真滑溜啊,我们往回倒一张。好了。它会检测系统信息,甚至在后台它还会进行一些性能测试,它会进行一些渲染来看看你的这个GPU实际能做到什么,因为可能它发售的时候还没有这个GPU。它可能会对进行稍微调整光照渲染(Light Pass)、环境光效(World Lighting)、环境光遮蔽(Ambient Occlusion)、阴影(Shadow)、法线贴图(Normal Maps)等等,这些都会通过检测来进行设置。
图21.7
但是你也可以选择使用高级设置,将这些选项更改成任何你想要的样子——可能你想要进行截图而并不在意是否有30fps这样的游戏性,所以要有非常好看的渲染效果;可能你有一个FreeSync显示器,显示器能做到让它在110Hz的刷新率下运行。可能游戏自行设置调整的时候可以给你很好的60fps的体验,但是在一些性能比较紧张的情况下,屏幕上出现了太多的角色或是太多爆炸效果,你的帧率就会下降从而让游戏体验变得很糟糕。在VR也是一样的,我们会让人们进行调整,因为他们会说『这破坏了我的游戏体验,我要把它调低一些,这样即便画面便复杂了,整个游戏也能在60fps的状态下运行』。这就接下来我要给你们看Dota 2中一些例子的原因。
图21.8
这张图里,我拿了一台使用Intel集成显卡的笔记本,将所有的设置都调到了最高,这样的Dota 2渲染效果非常好。所有内容都是动画化的,有非常棒的环境遮蔽光效、高清晰度的纹理,非常的复杂,但是它运行时候只有8fps。(观众笑声)
图21.9
然后我就让系统自行进行调整,是的,让系统自己进行了调整。它关闭了抗锯齿、环境光遮蔽、阴影效果、高清晰度的纹理,甚至那些到处飞的蝴蝶也没有了——虽然说实话它们不应该出现在战场上,但它们就是在那里,(观众笑声)而且在你边上飞也挺好的。让我在这两张幻灯片里来回切换一下(文章附图自己看吧),你就能发现有什么不同了。原来的样子,之后的样子。
图21.10
让我们再放大看看。哦,这里有四只之前提到的蝴蝶中的一只。这张图是放大之后的细节,看起来非常不错。
图21.11
这张是在30fps下运行的样子。你现在可能明白了这个调整的改变有多么巨大。能用一台11英寸的Macbook Air在30-40fps下玩Dota 2是一件很棒的事情,你也可以使用高端的Titan系列在更大的屏幕下运行游戏。我觉得这非常棒。
图21.12
我也要给你们看看输入设备的适配是怎么样的。作为游戏开发者,我们对我们做的这些UI都很习惯,我们想要同时支持键鼠输入和手柄输入。我跟很多的开发者交流过,他们都不喜欢在做这种选项的UI上花时间,而在另一方面,PC游戏又需要这样的能让玩家进行更改的UI。
图21.13
另一个例子是我们提出的这个UI。一方面这是一个大型的UI,有些复杂、也有很多的选项。另一方面我们将这个UI和映射拉取到了程序之外,我们将它放到了overlay中的Steam配置中,让程序能重复使用这个UI,这样用户就能对设置和重新映射感到更加一致。同时在加入这个重新映射层后,我们也让社区可以分享他们最喜欢的设置,人们可以对设置进行投票,而你的配置会一直伴随着你,我觉得这非常棒。
图21.14
对于它带来的便利,我再举一个例子——如果你没有去听昨天的一个关于Steam手柄API的演讲——不是Steam手柄/API,而是Steam/手柄API——,在你的程序中使用的是『动作』,你的程序想要的是『动作』这样的概念,而不是实际的硬件输入活动。我们能做的就是,在程序这么做的情况下,它们对PS DualShock 4手柄和Steam手柄的混用也可以平滑无缝地做出反应,玩家们也能得到正确的UI——不论它是『A』、『△』、『X』还是『B』。如果你没有听这个演讲的话可能要等上几天了,(不过现在你点前面的链接就可以)这是一个关于将输入拉取出来让它能重新绑定的演讲,而我认为这也是你未来要做的适配之一。我玩的很多游戏——我还在玩老游戏——在运行的时候都非常的困难或者说痛苦,因为我要去改变所有的设置。所以如果你想要你的游戏在未来更有趣,比如说5年之后,那么不论你是2D还是VR——在VR下会更困难一些——,做这个所谓的『适配工作』是个非常好的主意。
图21.15
我之前所有谈到的东西对于游戏开发者来说,都不是什么新奇的东西。如果你对于游戏开发不了解的话,它们看起来可能有些可怕,但它们现在比过去简单多了,看看现在的输入API就知道了。对于大多数情况来说,我们已经意识到了『痛点』在哪里,而我们也已经开始解决它们。接下来我要将一些VR性能上的『痛点』。
图21.16
VR增加了一些非常让人讨厌的麻烦,它们让整个事情变得更困难。它不仅仅是关于『怎么方便用户,能不能选择他们的输入设备』或是『它能不能在更低端的硬件上运行』,而且还有VR中非常的基础的东西。
这些让人讨厌的麻烦有四类,第一类就是你必须不间断地保持一个很高的帧率同时对于输入的反应延迟也要非常短。如果由于CPU或GPU的问题,帧率出现了一点降低、或是动态同步出了差错,那么它就会破坏VR的魔力和乐趣,也会让人们感到恶心。如果你的引擎无法达到帧数要求,我们可以做到,之后我们会讲到。引擎或者说VR系统可以重复利用上一帧渲染的画面进行重现,玩家完全错过一帧——这点非常让人恶心——这样的现象就不会出现。Joe(虚拟现实的哲学)也提到了我们有很多随之而来的新工作要做,我们一直都在致力于解决这个问题,因为图形渲染这个领域是我们无法完全预测未来的,我们无法知道用户会做什么。在第二点的时候,我会就这个谈更多。我们会继续致力于这个领域,不过我们认为通过重现来填补缺失的画面绝对是一种保障措施,也是你需要对程序进行性能优化或是适配的信号。我们不希望你依赖于重现来保持帧率,除非——只有在这个除非之下才是情有可原——,除非用户在使用的GPU低于你推荐的最低配置。如果用户使用的是低于推荐配置的GPU,一切就要另说了。
图21.17
第二点非常困难、同时我也敢说你们当中很多人遇到过的约束就是,玩家在VR中有非常令人难以置信的镜头控制。在传统的第一人称射击游戏中,我是在一条路径上移动的,身体周围有庞大的碰撞体积,我不能把我的头贴到墙上、我的枪放在这里也不能拿到眼前看,而在VR中我能这么做,我还可以躺在地板上,看看那个很好看的展柜下面是什么,而不是一个我无法看的东西。所有那些我们用于限制玩家、改变他们能到达的地方的热点图,在VR中都消失了,我们失去了这些限制视角的工具。那么……我看看,应该是在下一张幻灯片。
图21.18
就这一点我要再讲一些东西。在我演示VR的时候,我一般会将Tilt Brush(游戏链接)作为第一次的体验。我这么做是因为它对于人们而言是非常直观的,他们会说『哦,我在画画』,然后他们就会在身前画出一些2D的东西,然后我会告诉他们『往边上走走』,然后他们就会『哇,原来我还可以走到边上』。当我告诉他们躺到地上网上看他们画出来的东西的时候,他们都惊呆了,这么做之后他们就能明白VR是什么了。这可能是打破以前设计成2D的游戏的思维最好的一个例子,没人想到过可以从下往上看。
图21.19
另一个我们用的示例就是在这个Aperture Robot Repair的机器下方看。Alex Vlachos(感受一下简历)讲过他的经历,有一次他要给一个人进行演示,他离开了一会儿进行了一些谈话,当他回来的时候,那个人躺在地上往上看人物模型,Alex就说『你在做什么呢?』当时的效果一点也不好,因为没人想到过要优化这个部分。
图21.20
最后一个,抱歉,倒数第二,或者说最后一个跟图像相关的VR适配问题,比起传统游戏而言,玩家们有更多的期待看到自己能直接操纵物品。也就是说无论你在他们面前放了什么,他们都想能操纵它。这也就意味着如果他们看到了一个书架上面有书,他们可能会把所有书都拿下来、把它们堆起来,然后去另一个房间把那里的书也拿过来——到最后可能就有了好几千本书,他们会将之堆起来,然后可能去做射击它们或是推倒它之类的你的物理引擎或是图像引擎还没有准备好的行为。这就是人们会在VR里做的事情。实际上,如果你尝试加上一些限制比如『你一次只能从书架上拿20本书』,人们就会觉得这个游戏很蠢,为什么会只给20本书。这些东西就会破坏玩家的沉浸感,所以我们要找到一种解决方案。
图21.21
VR适配的最困难的一点是,现在还在VR和VR头显的非常非常早期。你们刚刚看到了我们的原型机,它跟第一个Mr. Hat完全不一样,也跟发售的Vive手柄完全不一样,而这仅仅是一个原型机而已。在座的人当中可能有些人也获取了SteamVR跟踪技术的许可,来制作各种各样的外设。他们会有一些好想法,我们也会有一些好想法,我们希望所有人都能对外设有好的想法。关键就在于,在VR中,我们还处于木质鼠标和木质电脑外壳的阶段,如果你们有看过早期的鼠标配置的话,你们会觉得它很疯狂的。它就是一个木质盒子里面有个滚轮,在1968年对于第一个使用它的人来说可能跟现在Mr. Hat对我们来说一样地让人惊叹,『哇,这真是太惊人了。』而Mr. Hat以后也会像这个鼠标在现在的你看来一样的简陋,可能都不需要40年。鼠标用了40年的时间来让(第一个鼠标)看起来很蠢,而对我们来说用不了多久就能有不同的控制器。
但不管怎么说,这只是输入设备。头显和刷新率也会大幅度地增加。这儿有人为PS VR进行过开发吗?有人吗?有几个人对我说过,『我觉得90Hz太可怕了,120Hz还差不多。』这样的事情还会发生,头显里也会出现更高分辨率的屏幕。如果你的游戏想要从今天开始能持续到明年甚至是后年、有一个较长的寿命的话,我们希望你能考虑到所有都在快速改变的事实。我们需要你做的东西是在售的,而想要一些『死的』、『陈腐』的程序——我们也希望你不这样做。如果你不想这么做的话,那你也不是必须要这么做,但是你可以使用一些非常简单的步骤来适配到新的硬件上,这样你就能获得更多的销量,也能从顾客那里获得更多的反馈。
图21.22
那么你应该怎么做这项工作呢?我好像在前面花比预期要多的时间来讨论问题是什么,那么我们在适配方面要做什么呢?这部分演讲是关于一些特定的资源,也是我们在几个领域中最值得推荐的实践。不过我希望你们能明白,我们也想从你们这里获取意见,如果你有非常推荐的实践、如何对输入进行反应、如何更高效地渲染或是你在做什么,我们也非常愿意听到这些内容——还有你的合作伙伴——,请在社区中进行分享。
图21.23
我会先这从两个当中不太复杂的开始——虽然也不能说它不复杂——,那就是将游戏适配到不同的输入设备上。我之前谈到Steam手柄和DualShock 4手柄的时候有稍微提到过,我们有将输入抽象化的需求。直到现在,如果你要为VR编写一个游戏的话,你还是会在SteamVR中遇到图中的几个设备。正因为它们的形状不同……oops,我又那么干了(犯错页),我日常更多地使用Mac,所以如果触摸板的方向是想法的,我有时就会出错。不同形状的手柄需要不同的按键映射,在之前的游戏中通常都会在内部掌控所有的映射和映射UI,而使用外部的重映射接口会让开发者和玩家更易用。在VR中,我们需要在这些不同手柄上有重映射『动作』到不同按键上的能力,这些手柄有的拥有摇杆、有的拥有电容式传感器、有的握柄键(grip button),以及很多其它的按键。
图21.24
所以在OpenVR中,我们有个method的集合接口,叫做IVRSystem。在IVRSystem中——这个东西一点也不难——,它作为VR中的输入循环的一部分,在你向系统寻求一个活动,比如说按下按键或是获取当前姿态的时候,你请求的是『活动』并获取到手柄状态。手柄状态是由这些常量所定义的,这个是系统按键、这个是握柄按键、这个是按键A、这些是轴数据,如果在场有人在为新硬件做驱动的话,通常你会在OpenVR和硬件的接口下编写一个dll,你会在硬件活动和IDE——比如系统按键——之间进行映射。在另一方面的程序层面,程序获取到的是活动,比如系统按键或是握柄按键,或者是轴的数值。在OpenVR中,我们为重映射稍微留了一些开放空间,只不过还没有到达跟Steam手柄的重映射一样的细节程度,不过如果你需要的话,我们确实是留了一些空间的。在IVRSystem这一部分中还有其它的method,你也可以去看看,比如说你可以获取一个按键的名字作为展示给用户的按键名——举个要用到这个功能的例子:制作UI。
图21.25
这就是你要处理的完整代码结构,你从OpenVR输入队列读取到活动,并返回一个VRControllerState的structure值。你们当中有很多人在使用Unity,它被应用到了很多不同的输入活动中,但是如果你打开C#代码,你可以看到几乎完全一样的代码结构。你懂的,我现在给你们看得可能比你们日常编程所需要看到的更深层一点,不过这就是OpenVR中flow up的,并且已经为你进行抽象化、去掉了背后的不同的手柄。在返回VRControllerState的structure值后,你会知道哪些按钮被触摸到或是按下了,哪些模拟按键或是摇杆是在什么样的状态。
图21.26
这点我在前面说到驱动的时候说到过。这就是在VR中变得更复杂的地方,也就是我之前提到的一致的最终游戏UI,在你教玩家哪个按键控制什么的时候,应该在什么地方给他们提示?我们都想要做这样的UI(如图),在教程或是游戏的某个阶段教给玩家『你要按这个来完成这个动作』。但是在VR中,手柄的模型是不一样的,对吧?你们看到的手柄原型机的模型跟现在的Vive手柄是完全不一样的。说它完全不一样其实也不对,Vive手柄和Mr. Hat手柄也挺相似的,但是还是有些许的变化和不同。
幸运的是,我们知道,或者说我们预料到了,又或者说我们计划到也想要各式各样的输入设备,因为我们想要看到人们实验VR中最佳、最符合人体工程学、人们最喜欢的外观是什么。我们做的就是让新的输入设备可以提供它们的3D模型,也可以提供3D或是说准3D的设备上的组件模型。如果你拿起过Vive手柄并按下扳机的话,你会看到扳机的移动,你会觉得『喔,这有点怪怪的』或者是『这挺棒的』;或者你在移动手指的时候也会在触摸板上看到一个小的触摸点。这不是我们写的特殊的代码,它不是定制的代码,而是任何做了硬件的人都能通过提供信息让VR系统准确地做一样的事情的通用代码。
这个由Tilt Brush写的代码——我记得这个是Tilt Brush写的——,无论你怎么移动你的手柄,Tilt Brush写的这个代码会将这些提示信息正对到你的面前。任何人都可以为任何手柄进行编写,因为我们做的就是,你可以通过这样类似的4个API来枚举组件。你可以使用『::GetComponentCount』;然后可以使用『::GetComponentName』,这样你就可以展示它们;你还能使用『::GetComponentButtonMask』,将这个按键和某个我们已知的IDE联系起来,这样就能在后台生成活动;最后你可以使用『::GetComponentState』来提供给你『RenderModel_ComponentState_t』这个参数,告诉你坐标系是什么、如果想要悬浮提示栏的话哪个位置放它会比较好。
在我准备这次演讲的时候,我意识到做个示例程序来展示所有组件的所有标签,对于OpenVR SDK来说是个非常好的范例。我已经把它记到了笔记本上,会在空闲的时间去做一做。如果你们有空闲时间想要尝试这些东西、提交拉取的请求的话,我会看一看的,我很乐意看到。输入部分就讲到这里,接下来是适配用的图形工具和资源。
图21.27
如果你是一个非常底层的程序员,这里有2小时时长的视频……哦,出了点问题……有两个非常棒的2小时时长的视频。(第一个视频中,)Alex深入讲解了渲染技术很多细节、VR的Sterile渲染中的适当调整后的细节和材料、如何对CPU模拟和GPU渲染进行排序——因为你想要在下一帧的模拟在某些东西上有良好的开端,在什么时候读取姿势、什么时候开始提交渲染调用指令来满载GPU,而不会想让泡沫到处漂浮。
第二个演讲的时间今年3月份,它讲了更专业的渲染技术,给我们带来了比上次GDC中还要深入的内容。它里面有讲了多个GPU的渲染技术,在我之后要谈到适配和自适应质量的图像技术和背后的合理化上进行了详细的阐述——比我还要详细。我会给你们一个概览,虽然只是个概览,但是对于不编写引擎的人来说也比他们需求的要更详细。不过我觉得对于我们来说,理解这么一个术语、在某个程度上理解我们的引擎在做什么是非常重要的,因为这样我们就可以更加信任它们,也能在debug的时候理解发生了什么、明白性能跟踪等等里面发生了什么。所以即便你不会去写底层的引擎,我也还是要和在场的所有人用同一页幻灯片说一说自适应质量是什么,我希望这能有用。
Oops,我看看能不能翻回去。
图21.28
好了,自适应质量就是动态地改变渲染设置来保持帧数、同时最大化GPU能力的一种方法,这样你就可以将适配提高到更好的硬件或是复杂度不高的场景上——或者从另一个角度上看是降低。还记得我说过有些人会躺在机器人下面吗?在以前,我们不会允许有人这么做,但是我们现在无法进行控制,所以我们就需要找到一种方法来适应玩家可能会到的地方。这就是自适应质量的意义。自适应质量有两个目标,第一个是降低能让人恶心、引起长时间上一帧重现的掉帧概率——偶尔的上一帧重现是可以的,它是保险措施,也是存在的意义,但是长时间的重现是我们想要避免的,所以我们会自适应适配来避免停留在重现太久。第二个目标是能在GPU空闲循环时提高质量。比如——我要举的这个例子也是Alex用过的例子——,在Aperture Robot Repair中,你们可能都尝试过这个demo,它也是我们用来VR性能测试的、检查你机器的表现性能、然后给你一个0-11分——还是10分?我记得是11分,好像能到达11分的——之间分数的demo。在这个demo中,它不会改变背后的着色器代码或是渲染通道什么的,Alex能通过自适应质量技术进行调整,来——我可能稍微夸大了一点——让Aperture Robot Repair能在Nvidia(GTX)680这个4年前的GPU上运行。这非常棒,我们可以说『嘿,虽然这并不是超高质量,但是680可以胜任VR硬件。它可以处理跟踪、可以填充像素,只不过没有高端电脑那么好而已。』
图21.29
好处就是……我是不是跳过了什么?哦,找到了。哦不,我确实跳过了什么。抱歉,我应该用自己的的Mac的。好了。哦不对。这就是PowerPoint,当你往回翻的时候,动画效果都不会出现。
自适应质量的好处有些非常明显,而有些并不明显。非常明显的好处就是,如果你做了自适应质量系统,你可以降低GPU的最低要求,而且你可以在不改变代码的情况下在更低端的机器上运行。
稍微不明显一些的好处是,你实际上改变了你的美工处理素材的方式。在过去,当我要从头到尾浏览我的游戏的时候,我会看到一些性能上的热点图,然后就会告诉美工团队『这块区域的模型、纹理太复杂了,我们能不能下调整个区域的整体的质量』,从而达到一致的帧率。然后美工就会去简化一些素材,接着整个场景就会有简化的素材——即便是在两年之后的GPU可以处理(高质量素材),它也会有简化的素材。(自适应质量的)目的就是,玩家可能会看到高质量素材的稍低质量渲染版本,但是这些高质量的素材还是存在的。你的素材团队、美工团队不会花时间做出前面提到的妥协,他们不需要参与到性能的调整中,将他们解放出你的工作流总是好的,他们可以专注到他们擅长的地方去制作高质量的素材,而让渲染器专注于在游戏进行中需不需要进行微调。
另一个明显的好处是,既然我们调整了整个算法来达到帧数要求,不会出现重现(reprojection)也不会去重现(reprojecting),我们不会重现,,也不会让人感到恶心。我们仍然有这么一个安全措施,但是会更少地用到它,我们更倾向于在有需要时使用稍微低一些质量。
前面这些都是可以预见到的好处,有一个无法预见到并且最棒的好处是,我们的程序在所有的硬件上看上去都更好了,随着新硬件的不断推出,程序会越来越好、越来越好。不管你是不是认为素材取决于你喜不喜欢用电,我们都最大化利用了GPU,这些算法的调整能让GPU维持在完全被利用的状态。你为这些晶体管付了钱,你就应该利用它们。这就是我们做的。
图21.30
有一些设置是你无法调整的,而有一些是你可以调整的。在Dota 2中……还记得在Dota 2中我关闭了所有的设置吗?我关闭了环境光遮蔽和阴影,小植物和蝴蝶也不见了。我无法动态地开关蝴蝶的出现。而在VR中,当我移动并看有一大堆蝴蝶,我不能仅仅将它们关闭,而可以更改它们的分辨率、更改不响应内容的东西——比如说,我不能在砖头的时候增加或是移除阴影。有些东西是我可以加入的,而有些东西是我不能加入、改变或是调整的。
这里列举了一些能进行调整的东西。最容易实现、并且有巨大影响的我们常用并且认为效果最好的是,调整渲染的分辨率或者说动态分辨率,以及改变MSAA的级别或是其它你在用的抗锯齿算法——MSAA在VR中是非常棒的算法之一,另一个算法是你自己的适配中的大量渲染目标,不过这个就不是今天要讲的了。最下放的两个『固定视网膜中心渲染』(fixed foveated rendering)和『径向密度遮蔽』(radial density masking),如果你对它们有兴趣的话,Alex深入地讲解了它们。关键就在于,这些是我们已经发现的东西,你可以深入挖掘去发现你能做的其它东西。你会找到一些非常针对你的游戏的东西,比如你可以为一整个区域关闭粒子系统,这也是行得通的,只不过这不是我用到的例子。所以注意寻找那些能以合理的方式调整并有视觉效果的东西。这些都对视觉效果有影响,这就是你要找到,它的调整能不能对视觉产生影响。
图21.31
我等会儿要给你们看一个视频,让你们看看Aperture Robot Repair的调整是怎么样的。不过我先给你们看看这一张幻灯片里的表格。这些是Alex在起源引擎里内建的、逐帧基础上提交给VR的动态等级。
当我们启动的时候,我们会从默认的等级0开始,也就是4×MSAA、分辨率1倍的放大——这里的分辨率是指VR中推荐的渲染目标,它实际上已经比显示器大小要大了。显示器大小是一个固定的大小,我们已经要求你们渲染成更大的渲染目标,因为有些形变或是别的会让它尺寸变小。在这个等级上,我们会说『获取渲染系统给你的渲染目标尺寸』——顺便一提,这些数值都是提供给Vive头显的——,1倍的意思就是VR告诉你的目标尺寸。你可以将任意的你想要的尺寸提交到OpenVR中,而OpenVR会说『我偏好的渲染目标尺寸是这个』,你可以提交一个大很多的渲染目标,它会进行压缩,然后继续做它该做的事情——当然你也可以提交非常小的。这就是这个表格讲的东西,它就是在你的代码中有些等级会说『我在等级0,我可以向上适配到等级6为止』,也就是8×MSAA……哦,这个好像少了『scale』,抱歉……,以及1.4倍的分辨率——这是个相当大的渲染分辨率了。它也可以一直向下适配。
下面有两个比较有趣的东西,这是你可以选择的选项,基于有没有文本,你可以决定表现可以有多差。我们发现,如果你有人们需要读的文字的话,即便你把文字做的比一般的允许自适应质量的情况下还要大,你也不会想要低于0.81倍的推荐渲染目标尺寸。如果没有文本的话,你可以降得更低。在你有文本,或者是没有文本的时候,在我们的应用、或者说起源2引擎里还有其他的给非常最低等级的东西。在最低的等级,我们会应用『放射线密度遮蔽』(radio density masking),因为这能允许更少地像素填充率——在不同的引擎或是不同的显卡中这个可能不一样。而有文本时,我们会给系统给提示。如果我们有文本,那么就不能低于0.81倍,而我们做的就是告诉系统『现在进行重现是可以的了,如果你需要重现我没有意见。』因为如果我不进行重现的话,文本就会很难辨别。
这些就是你要调整的东西。你可能也有一些其它不同于文本的东西,之前的那些只是我们测试过的东西。当你使用这些适配的时候,它们可能对你的程序而言是不同的。这些不是绝对的,这不过展示是我们如何看待它的窗口而已。
图21.32
(视频略)这个就是Aperture Robot Repair在自适应质量下运行的样子。在屏幕的中央是……这是一个滑块,它在负和……这些就是我在上一张表格里给你们展示的,它在-4和+8(+6吧?)之间移动。当你移动头部的到一个非常简单的区域时,你会注意到质量的适配等级上升了。当你走向一些比较复杂的模型时,我们就得下调质量来保证帧数。当我们走向一个有很多复杂纹理的面板时,我们会再下调一点。当我们靠近看机器人的时候……可能还要稍微等几秒……,面对这面没什么复杂度的墙我们就可以上升到超高的质量。在越来越多几何图形、纹理等等进入的时候,质量就会发生适配。
这里面有趣的东西是,我们在逐帧、逐帧地改变质量等级,而不是在场景之间更改质量。自适应质量其实是以每秒90次的速度进行改变,它确实让你碰到了引擎层面,做了一些有意思的工作。
图21.33
为了达到这个目的,你实际上需要……比如说为了决定『我在等级0,现在有更多GPU剩余时间,我要用它来渲染更高级的渲染目标,这样就可以有更高质量的画面』,或者『我花的时间太久了,我要怎么怎么做』,你需要能测量你的GPU工作量。GPU工作量不总是固定的,可能里面会有泡沫。VR系统中的GPU的工作量是相当容易改变的——虽然很小,但是很容易改变。它小是因为我们没有太多要做的,我们要做的只是色差校正(chromatic aberration correctness)和镜头畸变(lens distortion)。有时候如果你靠近Chaperone边界(Vive加入摄像头保证走到预设边界的时候能看到现实图形)的时候,我们还要画一些Chaperone边界,对吧?如果一个程序有很多的覆盖层,我们也要画覆盖层。如果你用前置摄像头来做一些安全性上的功能,那么我们就还有更多的工作要做了。所以说工作量不是特别大,但是仍然还是有些工作要做的。
图中你能看到两个点。这里(左边)的这个绿色小点,我们进行了一些清理和设置,让GPU做好准备,告诉驱动VSync在哪里,以及想要什么时候开始工作——来设置一个时间点——,最后在提交之后、在程序提交了内容之后……这张图看起来有点像是『我向GPU提交完内容后,更准确地说是compositor,由compositor来决定开始工作』,但实际情况不是这样的。如果你的GPU是这样(很快开始)工作的,那么compositor仍然会在之后才会完成工作,因为它想要等待一会儿在接近VSync的地方再进行工作。你在这里可以问系统花了多少时间、以及还有多少时间剩余。为了达到这个目的,你就需要询问VR系统、需要询问compositor,这可以通过一些API命令完成,我在之后会讲到。
图21.34
这里面有一件比较古怪的事情是,如果你仔细想想,VR系统只在完成工作和才能知道你花了多少时间、以及GPU的使用率是多少。所以当你问系统『我花了多久?这个循环中我是不是没时间了?』的时候,系统只会告诉你之前帧的所有信息,明白了吗?也就是说,你的GPU的查询已经慢了1帧,这就是我想让你考虑的东西。另一件事情就是,对我们来说,在起源2引擎里,队列里也有几帧还在显示中、并不能进行处理。在已经有了渲染命令、设置命令和清除命令开始之后,你才会看到这里有红色的这个渲染帧1、然后是橙色的渲染帧2。我们获取计时器是在这里(箭头),可能我们可以对正在进行的渲染帧2做些什么,但是在我们的情况下无法做到,因为在有机会获取这个计时信息之前,我们就已经做完了游戏模拟(game simulation)和渲染准备(render prep)。渲染准备差不多就是:我设置了一个渲染目标,对吧?我不可能改变它到很靠后,而是要让它在VSync之前提交写东西,不然就会给之后的执行留下一个巨大的气泡。
这就意味着,如果有人将头转到一个有非常多细节的地方,性能会跌到顶上——(应该是)跌倒底部,顶上是飞到(笑)。如果性能表现会很糟,你其实无法有一个完美的指示器进行指示,你无法知道下一帧会很烂——甚至有可能是下一帧和下下帧都出现了问题。正因为这样,你的算法需要稍微……这并不是很难,只不过你的算法需要做些事情。
图21.35 pdf中最下一行缺失文字为『next frame is above the high threshold(90%), drop 2 levels, wait 2 frames』
如果你的目标是保持70%-90%的GPU利用率,那么你要做的就是,如果你只有……如果在一帧结束的时候,你剩余时间不到10%的话,也就是说你测量到了10%,而这个数据是上一帧的,那么你就需要告诉自己,『如果之前没有达到过90%以上,而现在我到达了90%,事态正在变坏』,所以你要做的就是尽快将质量等级下调2级。差不多也就是你要告诉自己,『不管下一帧的提交的数据——可能在2帧之后,也可能是1帧之后,这取决于你的系统——是什么,我需要将适配往回调』。
如果你检测到你的GPU利用率很低,那么你也应该保守地提升(画质)。也就是说,如果(利用率)高,那么你需要快速下调;如果(利用率)低,你需要缓慢地平稳上调:如果你发现自己没有使用足够的GPU时,只要上调一个质量等级就行。在我们大量测试中,我们发现它具体来说就是,如果最后3帧都在70%的阈值之下,那么上调等级,在之后2帧不要做任何事情。差不多就像是,迈出1步、等3帧、再迈出1步。这听起来需要很长的时间,但是我们现在在说的是3帧,也就是33ms,在电脑世界中,这是非常慢的,但是在我们眼里,这其实还可以。
最后点相当重要,因为你的头可以转得相当快,而复杂度也会因此变化得相当快,所以你可能不会有一个反应足够快的指示器。即便我们告诉你,在90%使用率后尽快降低(画质),但是结果经常说不够快的。如果你只是这么做,即便你降低了三个甚至是四个质量等级,你仍然会有一大堆的重现或是丢失帧。相反地,你在开始超过85%使用率的时候就应该准备加入线性的重现了。如果在几帧之内,你的使用率从65%跳到了85%,那么你可能就在一个非常糟糕的难以拉回画面质量来避免丢失帧的轨迹上。所以你需要保持跟踪的状态,如果轨迹上是朝着90%去的,而且你知道无法在1-2帧内刹住车,那么就要稍微提前一些进行降低。我们发现,通过这种与每帧的少量数据分析相结合,实现保持帧率、几乎完全避免重现是非常容易的,非常棒。
不好意思,稍等一下(喝水)。
图21.36
我看看……我稍微还有点时间,所以我额外讲点东西。
最后我要说的是一件事是,在图像自适应质量方面,我们设定了一个规则,我们都认为它非常重要——我们设置了一个10%的下限。虽然我前面说了最好能利用到整个CPU(应该是GPU),因为你花钱买了这些晶体管,最好去用到它们,但是做系统的人好像也很喜欢这些晶体管。Windows偶尔会用一些晶体管去做别的事情,比如——我不是很清楚——更改时钟或是移动窗口——我不是很清楚它们会做什么——,但是它们确实偶尔会占用一些GPU。如果你不留一点空间的话,它们就会影响到你,让你变得不连贯。留下一些空间,让大家都能有足够的时间完成工作。
最后一点就是,我们以前经常会谈到11.11ms,然后觉得『这是个很难的目标』,但实际上,目标比这个还要难,因为目标其实是10ms。你肯定……我们发现让所有东西都为VR服务是不可能的,在多任务操作系统中,我们还需要留下一些空间给其它的东西,这样才能获得稳定的表现。
图21.37
我会快速地讲一讲这些资源,它们稍微简单一些。自适应适配是一个工具,我希望你们都可以考虑到这点。如果你想知道自己是否需要自适应适配或是想进行了解的话,那么你可以使用这些工具。这里有一个VR帧计时工具,是内建在SteamVR中的,你可以将它呼出,它会基于IVRCompositor::GetFrameTiming和IVRCompositor:: GetFrameTimeRemaining这两个API给你展示很多信息,我们会在工具里用它们给你展示正在发生什么的图表。
图21.38
这是SteamVR中帧计时(Frame Timing)窗口可以展示什么内容的一张截图。这张图一方面来说,在去年我们会说『这看起来很棒,你的程序完全在掌握中。每帧有5.5ms的剩余时间,完全没问题。』另一方面,我们再看(这张图)就会觉得『等一下,你这里完全可以做更高的画质。你可以提高适配等级,使用更多的GPU,让眼睛前的画面更好。』
图21.39
在深入挖掘详细信息后,你会看到很多有趣的信息,你能看到程序进行等待姿势(WaitGetPoses)、呈现(Present)等等不同的提交数据给API的步骤在常规调取队列中的位置是什么。你可以从中看到一些有趣的东西,比如……oops,我要跳过这张。
图21.40
比如,这就是一个很有趣的例子。在这张图里,红线就是在调取『WaitGetPoses』,『WaitGetPoses』是你向VR系统请求头显——和手柄?应该只有头显的——的姿势,这样你就知道如何设计图像了。你需要等待这个,明显在这张图中,这里发生了错误。如果我是在某个人的程序中看到了这个,然后他们表示『哦,是啊。我用的是Unity』,我就会告诉他们『行,你去看看Unity的性能跟踪,看看到底发生了什么。你这里的某个渲染线程彻底停止了,导致WiatGetPoses的常规序列比原本应该花的时间更久。』这个东西就算是你正确地优化了图像,你程序里一些奇奇怪怪的东西仍然会触发重现,也能导致你的自适应质量起伏不定。也就是说,自适应质量并不会将你从修复代码bug中解放出来,你仍然需要看看这些帧计时跟踪,看看有没有出错的东西。所以像这样的红线『WaitGetPoses』的峰值,基本上所有这些东西都有需要检查的地方。社区里有很多不错的关于如何解读这些跟踪的讨论,我在前面已经放了一些链接(Frame Timing、Installing GPU View后面这个地址已经失效)了。
图21.41
这是我给你们看的Frame Timing工具的最后一个例子。这块红色的区块显示,当这个程序进入重现阶段时,它停留一段时间,停留了大概200帧,也就是2秒左右。这是很长的一段时间,如果你在你的程序里发现了这个现象,你应该告诉自己——虽然这是一个绝佳的进行自适应质量的机会——你应该告诉自己,有东西出问题了。顺带一提,这不是说在自适应质量中,你应该停止你以前经常做的调整内容的东西,自适应质量是另一个额外的工具,这个工具可以确保你适配到更好的硬件上,而且传统游戏中的旧技术仍然可以用。
图21.42
关于自适应质量,我最后要说的一点是,如果你用的是Unity,那么你就走运了。我们为Unity做了一个能在动态分辨率通道下进行自适应质量的渲染器。Unity和Unreal引擎也都在慢慢加入很棒的自适应质量功能。我们给你们展示了香肠是如何制作出来的(整个流程),有些关于针对GPU进行质量适配、GPU每次运算发生了什么这样的东西,可能会稍稍体现到你的引擎中,当他们宣布加入了某个功能的时候,我们就能知道说的是什么了。
如果你曾经在你的项目中尝试过Lab渲染器,并且它没法用的话,首先,我很抱歉,其次,再尝试一次,给我们一些反馈,我们会修复里面看起来运作得不太好的bug。这是还在进行中的一项工作,我们希望能跟你们一起解决。
我还有几分钟的时间,所以我接下来要回过头讲一些别的东西。
图21.43
我们认为你应该花时间做一些自适应质量的工作,它可以让你挑选合适的最低配置。PC硬件实在是太多样了,而VR硬件会更多样,在现在这样的早期阶段,也不断地有新的硬件出现。我们喜欢那些在PC领域的玩家,他们混合搭配CPU、GPU、主板、I/O系统等等。而这一点非常棒,因为这就意味着创新的发生、意味着实验探索的发生,但是这也是困难的。VR让它变得更加复杂,但是这些技术可以让你创作的内容存活更久,我们觉得这很棒。它会给你的内容带来更久、更广的接触面,以及更长时间的吸引力。
最后,进行这个自适应适配也对整个生态系统有好处。它对你有好处,对硬件制造商也有好处。当硬件制造商做出了……就说是10K VR头显吧,如果这个硬件制造商……如果他们可以获取你去年写的内容,而它也能大幅度提高质量并适配到这个超高端的设备上,而且你的素材、你的内容也是可适配的,你可以适应新的输入设备,那个硬件……我向你保证那个硬件开发者会做出更好的头显,因为他们有很多软件可以用于测试。如果你的软件到达了极限,并不能驾驭一个更高端的头显,那么就会像……当你第一次在商店看到4K电视机的时候,每个人都觉得『可是这个只是1080p内容放大了而已』,它并没有最大化……并没有让人们想要买4K电视机。你们就有机会将你们的内容做成能让硬件更好、能让整个生态系统更强大,形成一个良性循环。当有能在他们的系统上运行的内容的时候,做出很棒的工作对他们来说会简单很多。
图21.44
我还有很多张幻灯片……不能说很多张,还有几张幻灯片关于能用什么做出很棒的VR,不过我要跳过他们了。你可以在我们之后放到网上的资料里看到,因为我觉得我们已经讲了很多不错的话题了。
VR的适配就是适应到机器的要求上,它跟普通的PC游戏有点不同、也有点相似。加入它可以对整个生态系统都有好处,如果你们这么做的话,我们可以获得更棒的硬件、控制器和设备。我们很乐意倾听你在做什么。如果你们有一个工程师,如果你们在做自定义的引擎,如果你们对引擎供应商有什么我们能帮到的反馈,请联系我们,因为我们非常需要你们来为VR和OpenVR出力,所以请让我们帮助你们。
谢谢大家。我会在附近等你们的问题。
(观众掌声)
附未进行演讲的幻灯片:
22. 健康的发行商关系
参与人:Nigel Lowrie (Devolver)、 Schall (Sega)、Chris Kramer (Digitalmindsoft)、Tom Buscaglia(电子游戏律师)
主持人:Connor Malone (Valve)
Connor:
好的。谢谢大家的到来,希望你们都享受SDD。我的名字是Connor Malone,我在Valve的Steam商业团队工作。
电子游戏的世界一直在变化,每天都有新的创新性和创造性的内容发布,对于成功一个独立的游戏开发者来说,这是一个再容易不过的时候了。但是反过来说,市场的竞争也非常激烈,成为一个独立的游戏开发者是一次高危的风险投资。出于这个原因,电子游戏发行商可以提供资金、工具和协助,来帮助游戏开发者成功。
这次座谈会的目的就是来谈谈并提供一些知识和见解,关于『你作为一个开发者是否应该考虑和游戏发行商签约』以及,如果你这么做了,『你能做什么来最大化这个关系,并形成一个互惠互利的合作关系』。
今天到来的帮我进行这些内容的有这四位男士,他们有丰富的行业中的知识和经验。我们希望可以提供一些非常有信息量的价值,帮助你做一些明智的决策。那么请你们介绍一下自己吧。
Nigel:
我叫Nigel Lowry,我是一个小型游戏工作室Devolver Digital的合伙人之一。
Chris:
我叫Chris Kramer,我运营了一个游戏公司10年了。希望能为你们解答一些问题。
James:
我叫James Schall,是Sega的DDD(Digital Distribution Director,数字分销总监)。
Tom:
Tom Buscaglia,游戏律师。我作为独立游戏开发者的代表人已经有25年了。
Connor:
很棒。好的,首先我要抛出的问题是,你们会如何将『与合作伙伴的健康关系』或者说『开发者和发行商之间(的健康关系)』这样的想法提取成几个关键词?
Nigel:
我觉得……我们之前讨论过这个问题,我有一点自己的看法。做这样的事情很难,要我说的话就是『尊重』。互相尊重彼此作为发行商和开发者的技能,你能做到和不能做到什么,这可以影响到这段关系之后可以有多健康。然后就是『坦诚布公』,这看起来很显然,但是就是需要在什么东西顺利、不顺利、推迟、非常棒的时候能够坦诚布公。这样一种的开放的交流方式是其它所有你认为可以形成健康关系的基础。
Chris:
我认为开发者和发行商应该对游戏做出相似规模、相似等级的贡献。他们应该对游戏的美国方面都是有激情的,和合作伙伴一样有激情来做出对所有人都有好处的贡献。
James:
是的,我也觉得对双方来说,『激情』是非常重要的,这个激情不仅仅是想要成功的想法,同时也是对产品的质量。还有就是『信任』。
Tom:
好像都被说完了。(笑声)我认为,在关系中存在一定的灵活性也是很重要的。最好的游戏都是通过不断迭代而来的,而不是用一些大家都知道的参数来形成关系,所以知道什么时候变通、什么时候不能变通也是很有用的。
Connor:
往回一步,就成为独立开发者而言,在独立游戏方面他们要面对的商业上的挑战有哪些?以及他们如何下定决心『我应该保持独立,靠自己继续制作游戏』还是『我需要一些帮助来获得商业上的成功』?
Nigel:
我们每次都这样一个个轮着说吗?好吧,我知道了。
Connor:
我们这次先从Tom开始吧。
Tom:
每次从那边开始,最后再轮到我的话,我可能就忘了问题了。(笑)在几年前,就比如说4年前,人们问到这个问题的时候,我的客户会说,『我们甚至都没考虑过要有发行商』。我们现在在Valve大会上做的这个东西有些奇怪,因为某种程度上来说,你知道的,Valve为所有人都改变了游戏,尤其是对发行商来说。在那段时间之前,如果你没有一个发行商的话,你甚至都不能进入到市场。Steam让所有人都能直接接触到他们的最终用户,这改变了一切。它已经如此的成功,长期以来一直都很棒。如果你看过最开始的幻灯片的图表的话,现在有超过500个游戏被提交——每个月还是每星期还是每天来着?我不清楚。
Connor:
月。
Tom:
嗯。但是可发现性『discoverability』成为了一个巨大的问题。我有一些客户,他们发布了……我知道有这么一种说法,如果我做了一个优秀的游戏,人们就会去玩它。但现实却是,你做出了优秀的游戏,但是没人看到它,他们也不会去玩它。你(Connor)刚刚说了什么?这星期有多少游戏在促销中?
Connor:
一周特惠(weeklong deals)大概有430个左右。
Nigel:
天哪。
Tom:
在过去,你只要将你的游戏促销,你就会获得关注。而现在超过400个游戏在促销中,一下子,推出游戏的能力已经不够了。开发者擅长于指做游戏,开发商有一系列特定的很多开发者没有的技能,比如对游戏进行营销的能力、创造需求的能力、交叉推广的能力,等等。我认为在现在,这些是你需要重视的东西。这是个不同的角色,提供资金当然很重要但是我认为更重要的是对可发现性和用户获取性的帮助。
Nigel:
随着数字化的分销,资金支持已经发生了迅速的改变,现在不仅仅是发行商能提供所需的资金、或者说全部的所需的资金。可发现性也是个问题。我认为我们之前稍微谈到过的『desirability』现在也是一个很大的问题了,因为除了你以外,还有很多的游戏……是的,还有很多的游戏,也就是说还有很多非常有竞争性的生意,对吧?这时候就需要你能做出真正不同的东西来吸引人们的注意——并一定是所有人,可以是一小部分人,之后会有受众随之而来。
确保……我认为最大的问题一直就是『质量』,对吧?现在非常注重这个,如果你有些独特的、不同的、高质量的东西,你就会脱颖而出——无论是通过例如Steam平台、Twitch主播、还是口口相传等等可发现性的改变。这可能有些过于简化了,但是拥有很高的质量仍然是将你区分出来的首要的事情。我觉得很多人有这个问题,他们忽略了这一点,而去做一些特性之类的东西,仅仅是因为他们觉得这样可以卖出更多游戏。
James:
是的。当我跟一些开发者交流的时候,他们想要知道一些的技巧和提示,比如『我要做什么』、『如何登录Steam平台』——你懂的,这不简简单单是『如何将我的游戏放到Steam平台』这么东西,这种技术向的会话其实非常简单,而是『我发布之后会发生什么』、『现在发生了什么?』、『我已经发布了,我已经做出了自己的努力,我已经做了自发行、自营销,我不知道下一步要做什么』。这就是我们可以提供帮助的地方。
Nigel:
准备好成功,也要准备好失败。很多人有时候都不一定会想得这么远。
James:
就是这样的规划,你需要有一个长期的规划。你们都知道,在Sega,我们不只是发布游戏、然后觉得『这就是我们的发布页面,我们已经完成了』,我们对游戏的走向是有策略的。比如某个游戏是在2010年发布的,而我们至今还在为它发布新内容。这一点非常重要。
Chris:
我觉得,明白你想要什么类型的公司也是非常重要的。如果你只想要专注于开发游戏,那么你绝对需要一个发行商。我这么说的意思就是,如果你做自发行,你会忙于处理一些跟开发游戏无关的事情。你需要明白你想要做什么,『我能做到吗?』、『我有合适的人来做吗?』、『我有资金做这个吗?』
Connor:
那么开发者要怎么样才能承认自己不能那么做呢?可能他们把游戏放上了Steam,销量数字不如他们的预期,这时候他们才发现『可能我在商业方面做得还不够』。有没有什么机会进行挽救之类的呢?
James:
有的。这个时候会发生的对话就是,(开发者)会惊讶于『发布我的游戏很简单,放到Steam上也很简单,按下那个按钮、打开销量的大门也很简单』,(但是发行商会说)『哦,好吧,但是现在发生了什么?这些才是你需要做的』。在大多数情况下……在某些情况下,我们会进行讨论。
Tom:
我认为一部分是,制作游戏是非常难的,制作游戏的人通常是全身心投入、富有激情和专注的,但是在很多情况下,他们就像地鼠一样钻在制作游戏这个小洞穴里,而不会去关注商业前景,也不会去关注市场。
Nigel:
他们有时候还不会去看发布日历(注:为了避免与大作或是竞争性产品撞车,通常会制定发布日历来寻找空档)。
Tom:
是的。就好比那个在DS上做了2年游戏、回过头来发现已经没有DS的人一样,就只能『oops』了。还有就是不要将你的……这点非常有趣,因为Steam大会其实在很多方面来说只是一个商业会议,而不是设计什么的。我觉得在这里的人可能已经意识到了,商业非常重要,要将它跟游戏设计一样严肃对待。我现在是建立在我们谈论的游戏是优秀的这么一个假设上,它是高质量的,如果人们玩过它的话会愿意玩它。这是一点。
另一点是,新的『影响者』BS(我猜是broadcast streaming的简称)让所有人都为之疯狂。我觉得游戏应该是互动的,而不是你看别人玩的东西。不过这是另一个完全不同的主题了。但是如果你在2年前看这个市场,里面是没有『影响者』的,几乎没有YouTube玩家,也没有数十万粉丝的Twitch主播,而他们现在可以对你的游戏是成功还是失败产生巨大的影响。你需要知道正在发生些什么,你需要将它和工作室中其它的东西一样严肃对待。
Nigel:
顺着这个话题,我们已经讨论过你能做什么来恢复(销量)。不过我觉得——这只是我个人对于这个问题的观点——,你这时候才发现『我有些事情没做』,这已经太迟了。我觉得从很多角度来说,都是太迟了。是的,你确实能做一些事情来尝试恢复,但是开发者事先有计划、策略是决定性的,不管它(计划、策略)是他们自己的还是与发行商、合作伙伴或是顾问一起定的。因为一旦你的游戏推出后,如果评测……用户的评测是好的,但是卖不动,那么这是有原因的。没错,可能会有一个小的窗口来进行恢复,但是我觉得如果你对于成功和失败之后要做什么没有计划,这个窗口很快就会关上的,因为下个星期还有500个游戏会推出。
Chris:
我觉得你们都在说,『你们有很多的发布日期(可选),但是只有一个发布版本。』
Nigel:
是的。
Chris:
而我觉得这很重要。你需要在一开始就做出正确选择。
Connor:
很棒。
Tom:
我认为,有一个优点……这个我们之前讨论进行这次座谈会的时候谈到过,你可能会犯错——每个发布游戏的人都会犯错——,所以我能看到的和开发商合作的一个优点是——我觉得可能这个要打上一个问号——,发行商1年会发布10个左右的游戏——可能是6个,可能甚至是15、20个——,所以毫无疑问他们会犯错,但是同时他们已经犯了很多错了,如果他们是敏锐的,那么他们就知道自己在做什么、每次都会从中学习,所以你就可以利用他们独有的一系列技能这个优势。我觉得获得这些技能对于一个独立开发者来说是比较困难的事情,除非你在做第3、第4个游戏。
Connor:
好的。如果你们处在开发游戏的位置上,你们意识到了需要帮助、想要找一个发行商,你们的步骤是什么?你们会如何进行这个流程,在开发者和商业上给你带来最大的好处?
Nigel:
你(Chris)想先说吗?因为你两者都做过。
Chris:
其实因为回音,我错过了整个问题……有人先来吗?
James:
从我们的角度来说,我们会围绕的问题是『我们如何找到内容?』我们有一个团队会到处走动、到处看看,而且也有源源不断的内容排着队找到我们。所以跟开发商联系、提问题、出现在展会上、出现在开发商也可能在的地方并展示你的东西。拥有一个优秀的游戏——这是另一件会让你引起注意的事情——,你可能不能像想象中卖出那么多,但是我可以肯定你已经被注意到了,因为很多发行商每天会花很多时间在Steam上淘金。我的团队一直会讨论Steam上出现的游戏并进行分享,『看看这个,这个很棒』。我觉得,只要不断地尝试出现在人们面前就行,这是从开发者角度来说的。
Nigel:
当我们从开发者那得到pitch(注:用于进行简短介绍、吸引投资的内容)的时候,不管是通过在活动中和他们相遇还是通过email,在他们跟别人聊之前,第一步就是要将他们的游戏提炼成能迅速理解的东西。哦,我才注意到这可能是我个人的观点,可能对所有人不适用。不过50页的文件对我来说是没用的,2页的文件并附带上一个视频或者可玩内容、一两张gif之类的……我们之前签约过在Twitter上看到的有gif图的游戏,因为这太容易理解了,你看一眼就能知道游戏的一切。在这个年代,视频内容和Twitch是无论如何都可以做到的,所以先进行这些步骤。当你接触一个开发商的时候,你不能说『这是Call of Duty和Rocket League的结合体』,不然别人就会觉得『这TM是什么意思?』
Connor:
这可以是个很棒的游戏。
Nigel:
对,其实非常不错,你们觉得呢?(观众笑声)有人想做这个吗?我明天就在门口签约。(笑)
Tom:
不过你知道的,人们过去非常擅长这方面。在直接营销出现之前,或者说直接接触到最终用户之前,如果你不知道如何做pitch,我记得我在几年前为IGDA一本关于如何pitch你的游戏的白皮书。如果你没有一个1页的文件和10页左右的关于你的游戏是什么的presentation这样的pitch deck的话,那么你很快就会被打上『在他们去找发行商的时候,他们都不知道在干嘛』的烙印。
我曾经有个客户,他说『你要去PAX EAST了,能不能到时候看看有没有人对我的项目感兴趣?』我说『好啊,给我发一份pitch deck。』然后他就给我发过来一本art book,而不是pitch deck。问题就在,他已经做出了一个游戏,非常地不错,有数万的用户,但是他从来没有像发行商做过一次pitch。你应该将自己放到发行商的立场,想想『他们需要知道什么才会进行考虑?』因为跟你(James)说的一样,会有一大堆这样的东西。我曾经在GDC上看到过发行商在连续4天里进行了20场连续不断的会议。
Nigel:
天哪,杀了我吧。
Tom:
试想一下你在那样的环境中要做些什么。你需要好好想想如何进行你的presentation,你需要知道你的需求是什么,这非常重要。你需要什么?你是只需要分销的协助,还是可发现性的帮助?你需不需要钱?你需要多少钱?你是不是现实的?有一大堆的因素,在你跟发行商交流的之前你就应该准备好。
我知道你(James)曾经这么经历过过,你看到了一个游戏,并且很喜欢这个游戏,你会跟他说『这个游戏不错,我知道你在找一个发行商,我们能为你做什么吗?』他们就会一脸茫然的说,『我……不知道』。
James:
有时候开发者并不知道他们需要什么。我们曾经讨论过现在的销售游戏的方法,你谈的不能是税金、瞒报、安全等等这些东西,人们理所当然地会被吓到,因为从来不会想到这些东西。我建议对发行商进行研究,因为每个发行商都是不一样的。由于我们用于获取东西的方式的不同,我们跟其它的发行商也不一样。你应该像去进行工作面试一样,试着去找到更多东西——你在去工作面试之前都会好好研究一下要去的地方,这也是一样的。你会知道你是要以带着块冲浪板、戴着耳环出场,还是需要穿上正装、讲解一个48页的幻灯片。这其实就是如何是最佳的。所以和之前跟这个发行商合作过的开发者也聊聊,如果你真的想要成功,而他们做得不错的话,没准他们会跟你说的。就像我们跟开发者聊一样,开发者跟开发者聊也是可以的。
Nigel:
看看这个发行商之前有过跟什么开发者和做过的背景,跟他们聊聊。查查他们的历史、看看发行商,再看看steamspy,看看他们之前做的怎么样。发现那些成功的人,然后把他们放到一边,去跟那些『不成功』的人谈谈。因为你可能会发现他们跟发行商的接触非常愉快,但是可怕的是总有一个原因让他们『不成功』——或者别的你想要形容的词。我觉得跟其他开发者聊聊是非常重要的,因为他们也想跟你聊聊,他们想告诉你他们的经历。非常就是这样的。
Chris:
发行也是一样的,你只有一次机会。一次机会,而它要见效。你需要为pitch付出努力,你需要明白你要谈的人是谁,对于你要谈的公司,你可以做很多的研究,他们有什么样的偏好。当然,你开发完成度越高越好。如果你展示的是能玩的、能享受的东西,这也会提升你的几率。
James:
是的。
Connor:
好的。接下来的情景是,你找到了一个感兴趣的发行商,他们也对你pitch给他们看得东西感到兴奋。当没经验的开发者决定和看起来为他们的游戏提供了不错的报价的发行商签约的时候,有哪些他们可能会忽视的错误或者说东西呢?
Nigel:
我觉得太兴奋是一个问题。正如你说的,他们会很兴奋,但是太兴奋也会是个问题。保留你的其它选项,可能由于他们或是你自己的选择,发行商会退出运营,所以你最好别只和一个人谈、把所有鸡蛋都放在一个篮子里。不要太害怕,也不要太兴奋,试着保持冷静,因为我觉得很多时候开发者们会因为有人在意他们的游戏而兴奋,不管它们是不是大的媒体。你们会太专注在这个上面,所以保留你的其它项,确保你进行了自己的研究。不要因为Sega想要和你谈谈就变得兴奋,即便Sega非常棒。你要继续跟他们谈,同时也要保证保留了其它选项,而你也不要因为『有人对我的游戏感兴趣』而变得太兴奋——这很容易发生。
James:
我同意我们是很棒的。从『和另一个发行商交谈』的角度来说,你要确定你非常了解协议——不管他们可能会给你看的是什么。你要获得建议和支持。
Tom:
我不认为在你谈判完成了整个交易之后,你还能做出去找另一个发行商的决定。
Connor:
会怎么样呢?
Tom:
这是你最后做出的决定。在你签字的时候,你就做出了这个决定。在此之前,还只是谈判。我记得几年前的情况,我要跟两个发行商签订合同。在我们制定细节的时候,其中一个坚持保留IP,而另一个没有。第一个很死板,而第二个更灵活一些,所以我们最后选择了他们。
制作了一个游戏2年,有人非常非常喜欢并且他们也愿意帮助你将它带到市场,这是非常让人欣喜若狂的。它甚至可能会使最亮的星星都变得盲目。
James:
我觉得我们这一方也有一些责任。如果我们去……应该是PAX吧。我们去了PAX,当我和一个同事经过一个摊位,并且留下我们的名片的时候,我们非常清楚地记得那个人可能立刻看到了我们的名片,然后就变得非常地兴奋。我们随后只是表示了『我觉得你的游戏不错,我们来谈谈』,来保证人们不会过度地……沉迷于此。这就是我遵循的方法,保持开放的心态、并进行交谈。
Chris:
当你获得了第一次的报价,你会变得兴奋,你会对此变得超级开心,就像爱你个是美梦终于成真一样。但是你需要花时间来考虑它,你也需要花时间来进行反思,确保这是你想要进行的交易。有时候就应该说,『好吧,这个报价不错,但是它对我们来说没用,因为这不是一个合适的发行商、不是合适的环境』。
Connor:
Tom,你在你的例子中提到了IP这个知识产权是关键。你能再详细地讲讲它对于开发者来说是如何一个有价值的谈判筹码吗?
Tom:
如果你去看看现有的顶层的独立开发者,比如Valve——我以前一般是用id Software举例,不过现在他们已经不是独立的了。公司创造价值的其中一种方式就是持有知识产权。在某些例子中,比如Epic(Games),知识产权同时包括了他们可以在想要的时候卖给Microsoft的游戏产权,以及他们剥离成一个完整的单独产业、并且也做得非常好的技术内容。
保留对IP的控制权,不仅仅是所有权,这一点是非常清晰的。有一群……我们可以现在就说,有一群bottom feeder(形容没用、底层、渣滓)一样的发行人员,他们自称是发行商,但是他们想做的只是窃取你的想法、获取所有的利益,而将你变成一个得不到利益的承包者。现在有很多这样的人,他们自称『indie』这个、『indie』那个,但是并没有什么保障。在他们的交易中我看到的其中一件事情就是,『他们让我保留了IP』,但实际上虽然他们让你保留了IP,但是你永久性地、独占地、无需版税地将跟所有权相关的所有权利都授权给了他们。如果你把知识产权的所有权利都给了别人,但是仍然拥有它的话,那么你拥有的只不过是一个空壳产权,因为你不能用它做任何事情。所以不仅仅要保留对知识产权的所有权,而且要保留知识产权权利的控制权。
在和任何一个发行商协商的时候,你需要尽可能减少任何能干扰到产权关系的内容。有的时候,可能因为你缺少谈判的能力,或者可能仅仅出于想要要让你的工作室活下去的迫切需要,你需要做出一些妥协,但是你并不需要对所有东西都做出妥协。你应该尽可能少地让步,在每一次进行斗争。站在你的利益上谈判,而不是站在发行商的利益上,我觉得这是开发者们需要一直做到的。可能大家不一定会赞同我的观点,但是我要说的是,让他们为他们的生意谈判。他们经营了一个成功的企业,他们知道如何在他们的利益上进行合同谈判,那么你就应该找到你需要的东西、站在你的利益上进行谈判。我想到还有一点就是,他们都是非常好的人——他们所有人,即便蛇也是好的。是的。但是你应该看的是交易,而不是人。
Connor:
你提到了……有什么情况是放弃IP也没关系的?还是说这是最坏的情况?
Tom:
我们现在要在一个小时里讲一些很复杂的东西,不过我会讲讲这个的。Chris,我们在某天晚上讨论过这个。有的时候,你的游戏和IP并不重要,它是一个一次性的东西、没有续作的权利、没人会为这个游戏做一部动画。这种情况下如果你需要资金来做游戏的话,可能你就会(放弃IP)了,虽然理想状态下是保留所有的权利。我看到过一些例子,比如说附属权利,可以将角色和其他的知识产权用到除了游戏以外的东西上,包括模型、饭盒、标准时长电影等等。很多情况下,如果他们有能让他们比你将IP利用得更好的专业性和网络,我通常就会看到这样的授权。但是一样地,达成协议还是要尽可能少(地让步)、抓住每个机会。
Nigel:
不要放弃利益的控制,这是最关键的一点。如果因为有人能用它做个电影而想要放弃一小块,这是没问题的,但是不要放弃利益的控制。因为你不会想……即便是一次性的,你也不会想要第二天气来看到他们用你的IP做了3个解谜游戏,这样的感觉很糟糕。我的推荐是,在你谈判的时候,有可能的话,甚至不要把它拿到桌上来讨论。我们跟一些工作室规模稍小的开发者合作,如果你是个小型工作室的话,拥有不仅仅是控制权、而且是IP的完全的控制权是非常关键的。在谈判的时候,我不会谈到它。如果他们想要(授权IP),我认为他们会跟别的人谈。
James:
从我的角度来说,它(IP)不是我们有意向需要的东西。我们希望能和想跟我们再次合作的人建立起关系,并培养这种关系,拥有一个长期的成功的发展前景。我觉得如果太强硬的话,可能会破坏它(这种关系),所以近期我们做的东西有非常高的成功率。
Tom:
这很好。但是还是时常发生比如,续作权,人们会要求拥有续作权。发行商可能有100种方法可以用于限制(开发者)工作是。老实说,很多这些老派的人在他们有独占的进入市场渠道的时候,都会做这种勾当,就是有这么一些小人的存在,他们有着一样的态度。要我说的话,『你们获得的只有钱,我们获得了一个游戏,你们什么都没得到。你们以买游戏为生,你们没有游戏。而我们有游戏。』(他们)丢失了态度,很多时候就是态度的问题。(观众掌声)
Connor:
好的,继续。假设我们的情景是,你们作为开发者已经成功地和一个发行商谈判到你满意的程度,一切都在平稳运行,突然你碰到了一个障碍,开发遇到了问题,你可能会错过发售日期什么的。在这种不顺利、碰到问题的情景下,可能会违反合同、可能是很严重或是变得很严重的事情——开发者们遇到这样的情况的时候,发行商会怎么看待?
Nigel:
我觉得这就是我们之前谈到的『开放的交流方式』。它不应该是提前一天说『我们在这个节点可能要推迟了』,因为我觉得这是一个很糟糕的交流方式,也很难获得信任。即便不能数个月之前,也应该在数周前进行沟通『我们落后了一点』。那么你就可以开始调整,(跟他们)说『可能这件事是我们要做的』、『可能我们要跳过这次PAX』——因为准备这次PAX可能要2周时间做一个demo、1周时间的行程、1周时间的恢复,因为你累的跟狗一样,这么一来你就发现你落后了1个月。所以你需要提前计划这些东西,在发生前就和发行商或是合作者进行沟通。
合同里也要加入『如果延迟了会发生什么』,你不会希望说『嘿,你猜的到吗,游戏要推迟6个月』,而发行商会……你会发现他们的的真实面目的,他们可能会做一些不好的事情,比如开始拿走IP、改变收入分配等等,因为你现在处于不利的地位、处在延期游戏的一半进度中。我觉得这些对话应该发生在协议流程中,在开发过程中也应该提前进行,而不应该在节点的前一天进行(摊手动作)。
Tom:
我觉得你要牢记的是,当你在合同上签字的时候,合同关系就开始了,它之后是不会结束的。每当合同条款出现变动的时候,它都应该被编写进去,作为补充条款。这个问题不大。如果你有了能让游戏更好的想法,你会想要和发行商进行讨论,可能还需要更多的钱和时间。我觉得很多人会困惑的是,如果产品的进度出现了推迟,虽然对于发行商来说是艰难的,但是它对开发者更是致命的。因为『我们的游戏要推迟一个半月』意味着,你会尝到6个星期的管理费用和消耗费用的苦果。开发商们不喜欢这个是因为这会打乱他们的发售安排,(而对于开发者)你是在扼杀工作室。所以你要做的是预期内的推延。
另一个会成为问题的是,在你向发行商交付产品的后,发行商要么就发现它出了错、将它发回,要么就是很长时间才能批准它——通常来说,在你提供账单之前,都需要他们批准一个交付版本。这经常就会造成对开发者非常不利的推迟,因为他们不得不自行筹资或是搞清楚怎么做。在批准和提交账单中也有一个延迟,发行商想要30天甚至是45天之后支付的现象一点也不少见。这么一来,你提供了一个交付产品,但是你有30-45天得不到付款。我的意思是,最好就是在提供账单的时候就进行付款,就应该一直是这样。Microsoft就是这样的,他们批准交付产品后,第二天你就在银行里能收到直接存款了,不过如果你看一看合同,上面其实不是这么写的。其他的公司在这方面会慢很多。
这些就是你制定发布计划时需要考虑到的。当有什么东西变糟的时候,你去找你的发行商,说『你看看这个,我们需要更多的时间来做』。还有一点比较奇怪的是,当发行商开始要求更多特性、并不想要为之付钱的时候,当他们开始变成游戏设计师的时候——我知道你们不会这么做,我们也谈到过,但是有些开发商会。
Nigel:
我设计了所有我们的游戏。(笑声)每个游戏都是我一人负责的。
Tom:
我知道你很厉害。他们会去找一个懂一点电子表格什么的制作人,有时候连资格都没有,然后他们就会告诉你如何做他们的游戏。或者他们会让市场部门参与进来,帮助你设计一个更好的游戏。这简直就是个灾难。
Connor:
作为开发者,针对这种情况你们会如何保护自己?比如说你的合作者、发行商想要说『我们想要你做这个、这个、还有这个』,你们会回到合同阶段吗?还是说有其它的途径?
Tom:
你需要知道说『不』。大家的共识就是,独立开发者有更多预算的游戏,比如你得到了7位数(的预算),你更有可能会碰到这种情况。因为筹码更高了,风险也就更高了,而他们也只是要保护他们的投资。他们冒着极大的危险,并且也想要成功。我不否认所有这些的意图都是好的,他们提的很糟糕的方案初衷都是好的——不然就是开发商太烂了。
Chris:
你们是有合同的,这个合同是双方的。你的发行商要遵循它,你也要遵循它。这就是你(Nigel)说的,『尊重』。如果你作为一个发行商能够尊重开发者,那么你就会遵守你的承诺、遵循你的合同,就这么简单。如果你和一个不是这样(尊重开发者)的发行商合作,那么他就是一个不称职的发行商。
Nigel:
这是非常明显的一点。合同,我觉得我们很多人,尤其是我交流过和合作过的开发者——规模小一点的那些——,他们看到合同的时候就像是『好的,我签下字就可以从发行商那里获得钱和资源了』,但是你也要——正如你(Chris)说的,它是双方面的,它也能保护你。你需要仔细看看详细条款,确保它并不只是保护发行商,而是也要保护开发者。所以它一般都是双方面的。不管推迟上市还是什么,它都要阐明会发生什么,而不是这个是处罚、这个是出发。它需要阐明,如果在晚了1个月或是6个月等等之类的情况下,——这个是我们认可的条款——对于发行商来说,6个月的开发成本相当于额外的收入分成或者类似的东西。或者有时候会富裕出3个月的时间之类的……我同意它是双方面的,你也要将它看作是保护你的东西。
Connor:
好的。我们之前谈过的一点,有一种趋势就是,开发者们在合同里好像害怕去运用这些权利。你们觉得这是为什么?James,你对为什么他们不想要跟作为发行商的你接触要有何见解?
James:
从我个人的经验来说,开发者和发行商之间的协作和交流,这是通往成功的道路,而不是隐藏太多的问题。
Tom:
我觉得他们就是想要被喜爱。实际上,每个这样的合同都有、或者说都应该有一个自动条款(auto provision)。这一点可能在通过Steam销售时不是必须的,因为你可以使用Steam销量和他们提供给你的数据进行追踪。但是通常来说需要去审查他们的账本来确定净收入的组成是什么样的,也就是发行商和开发者分配的部分。从总收入中除去的用于计算净收入的部分,它们是需要准确计算的,然后钱也要是准确分配的。你可以一年做一次,这个成本有点高。如果出现了多于5%或是10%的误差,那么这个审查的花销通常就由发行商承担。
但是开发者们不会去这么做,因为他们不想让别人觉得自己难以相处。但是对我来说——可能我就是那种契约型的人——,执行你的合同权利不是变得难以相处,而是变得专业。如果你觉得这里有问题,你就应该去检查它们。几年前我跟Epic的Mark Rein一起参加过一次座谈会,他说他们对首批游戏中的一款进行了审查,结果是他们之前花了很多时间对非常非常狭义的净收入进行了谈判。他们合作的发行商——这里就不提他们的名字了,其实也是因为我不记得了——在用他们的财务部门……这里面没有恶意,他们的财务部门一直在所有的合同里使用的是标准的净(收入)定义。他们之前为了谈判一个更好的报价,做了所有的事情,但这个短了他们的数额有数十万美元,如果他们没看看,那么他们至今也不会知道。你想要信任你的发行商,但是照顾好自己的生意仍然是你的责任。
Chris:
我觉得这跟经验有关。我的意思是,发行商在商业上通常比开发者的进入时间要长。你是第一次交易,你当然不会想要把一切搞得一团糟,而发行商在商业里待了这么久,他们有自信,他们是有经验的人,而你只是在做第一个项目的小小的开发者。你当然知道应该把事情变得更复杂一些,但是关键就是,要作为一个成功的商人,你要明白你需要追逐你的利益。
James:
而且你也要了解他们。我觉得还有一点非常重要的事是,在条款里的很多东西有可能会有些让人困惑,或者这个条款你听说过,但是实际上并不了解它的含义——我知道有这么些人——,我遇到过一些人,他们不知道他的含义,他们不敢询问,因为『我不想让他们知道我不懂我在谈什么』。
当涉及到获得款项之类的东西的时候,这就只是商业上的经验了,而不是和开发者或是发行商有关的东西,它只是纯粹地理解你刚刚完成的交易里的数学是怎么计算的。你只要简简单单地用一个单位进行计算,然后搞清楚我得到的东西的含义是什么,有时候这个有可能会让人困惑。比如说,我过去的工作是负责零售和销量,由此就对这两个名词是什么就产生了困惑,而他们不是互斥的,而是对这个的含义对比那个的含义产生了一个完全的误解,而这确实在某些情况下会产生数百万美元(的误差)。所以你要反复确认数字都是什么,进行深入的调查,使用一个单位并搞清楚『哦。这个的含义是这个。我明白了』。
Nigel:
还有询问别人,有些其他开发者也在做这个。如果你望而生畏或是没有时间之类的任何原因,你可以问其他开发者,他们会告诉你的。尤其是规模较小的开发者,你们可以去论坛,他们会在上面讨论的。所以,如果你不知道这些名词的含义,或者你认为这些名词里有太多的条款,你应该去问别人,他们会告诉你的。
Tom:
但是保密条款说了我不能谈论这个。
Nigel:
没人会知道的。
Tom:
好吧,你们是在进行假设,假设有这么一个情况。
Chris::
如果在这个问题中,你是和专家交谈,你不需要提供准确的细节。很多情况下,如果你是跟律师交谈,你可以分享你的信息,这是完全没问题的。你要跟这些人的交谈。跟律师或是商业专家谈论你的问题,这是完全不会有问题的。而且实际上,作为一个公司,你也有责任这么做,因为你需要降低你的公司的风险。尤其是涉及到员工的时候,你要对你的行为负责。如果仅仅是因为你不想跟那些愿意提供给你建议的人交谈,导致你要冒完全没必要的风险,那么这就相当于拿你的公司和你的员工的未来在赌博。而这是不对的。
James:
是的。
Connor:
很好。Chris,我要直接问你一个问题。之后,我觉得可能让观众参与提问可能会很有价值,所以在这个问题之后,如果你们想问我们这些组员一些问题,那么请去过道的麦克风那边,我们可以回答你们的问题。
Chris,你两者都当过,你为发行商开发过游戏,现在是独立地(发行)。如果你能回到过去再和一个发行商合作,你会如何使用你的经验和知识来获得不一样的经历?以及你从中学到了什么?
Chris:
我想先说一些东西。我觉得很多开发者需要明白,他们不是在开发梦想中的游戏,他们也不应该开发梦想中的游戏,相反地,他们应该发展一个梦想中的团队。团队是负有责任的,团队就是价值,团队也会带给你产品。你的团队越好,你的产品就会越好。你要摆脱『你在做你一直想做的游戏』这种想法,这是不会发生的,因为有越多的人参与到开发中,也就意味着你对游戏的影响越小。这一点是我希望能在创办公司、开展业务之前知道的。这实际上是找到方法……去找到非常棒的能给你提供你需要的知识、经验的人,而你要知道的是,你的公司像是一个有机的东西,它需要成长、需要维持。然后……你再问一下你的问题,抱歉。
Connor:
好的。
(好像是会错意了哦,理解成了『你们(观众)开始问问题吧』)我们从那边开始吧。
(Q&A部分)
提问者1:
我想问的问题是,有时候开发商更熟悉市场,他们可以从反馈和社区中获得很多信息。我们如何决定发行商应该在多大程度上参与到游戏性的开发当中?谢谢。
James:
我可以回答这个问题。我们有很多的经验和理解,因为我们在Steam上有400个SKU(Stock Keeping Unit),这个数量是很多的。这么多可以供我们学习的,我们也理解了很多。但是,当涉及到游戏开发的时候,这是开发者的事情,好吗?我们会提供尽量多的支持和服务,来让开发者能做出最好的游戏。设计游戏和深入参与完全不是我们的工作。我们可以提供建议和反馈,但是开发是开发者的工作。……给他们汇钱,这是我们作为发行商能做的,而游戏的开发,是他们的事。
Nigel:
这个……不好意思,你先说。
Chris:
谢谢。从开发者角度来讲,他们应该一点都不参与进来。不过我觉得某种程度上取决于你有什么样的经验。有些制作人非常棒,有些人有大量的经验、可以分享给你很多的知识。我之前也说过,并不是要做你梦想中的游戏,所以你要倾听你获得的建议,不要羞于问你的发行商和制作人的观点是什么,你要反思。可能听从他们是有价值的,可能他们是对的,可能你错了,而你只有在倾听这些人的时候才能搞清楚是不是很这样。
Nigel:
我说过,开发商可以回答很多关于市场的知识,对吧?他们有经验。市场是在不断变化的,但是基于他们所致力的类别和游戏的种类,他们有能力可以回过头看看他们过去做了什么,可以提供很多见解。但是对于游戏自身……是的,我同意,让游戏开发者来做。像你(James)说的,发行商可以提供一些服务,比如说游戏性测试、QA测试、带到活动上等等。这些当然会对游戏的设计有影响,但并不是要发行商告诉你怎么做。他们有他们自己的观点,(如果让我来设计)我确定我会立刻把每个游戏都变成Red Dead Redemption(荒野大镖客)。听取你的团队和你的社区的话,利用发行商来获得更多的信息、更多的数据,而不是直接要求他们对游戏做什么。
Connor:
这里。
Tom:
我要再说一点。
Connor:
稍等。
Tom:
每次我看到发行商的营销部门因为觉得他们了解市场而参与到让游戏更好的时候,对于开发者来说都是一次灾难。发行商只知道什么是已经发生了的,他们并不知道将会发生什么。如果你想要你的游戏非常地成功,并且成为热点,你需要知道将会发生什么,除非你能足够幸运地迎合上要发生的事情。而他们是不知道的。(观众掌声)抱歉。
Connor:
没事,谢谢。这里。
提问者2:
你们好。我在想,这些合同谈判里面会有什么样的元素?比如说在3A级别,你放弃的东西或者说发行商需要的东西有什么不同吗?独立游戏开发者确切的需要是什么呢?想要游戏控制权、IP的控制权、收入分配之类的东西?我从来没看过一份独立游戏的发行合同,我对此并不熟悉,所以这中间有什么不同的元素吗?如果我要和开发商交谈,我应该期待什么?
Nigel:
在基本层面上,他们不会有很大的不同——我指的是你们要求的东西和发生的制衡关系。
Tom:
数字是不一样的。
Nigel:
数字确实大有不同,是的。(笑声)
提问者2:
是什么形式?他们是如何不一样的?
Nigel:
显然,资金的规模不一样,游戏本身的资金。还有这个游戏的市场营销、测试,可能纯粹的就是产品的数量会不一样——大部分情况下。
对于你问的问题的其它部分,我的理念是,IP应该保留给发行商,哦对不起,开发者。你看到了吗,我刚刚差点被你误导了。(笑声)
Tom:
对你来说,他就是个发行商。(笑声)
Nigel:
IP应该留在开发者那里,尤其是在独立游戏层面,我觉得这非常重要。至于创作控制权,我也觉得应该保留。不仅仅是游戏的创作控制权——它可能比较明显——,还有就是市场营销的创作控制权,你的游戏是如何展现给世界的、你的游戏是如何被谈论的。你有能力对你不喜欢的呈现方式说不,这是你可能做了10年的东西,所以你要确保你保留了市场营销的创作控制权。
差不多就是这样的几个小点,(还有)收入分配,这些都是非常个体化的。老实说我不能告诉你,因为它们都是个体化的案例,而且你作为开发者带来的风险、和我做为发行商带来的风险是非常大的。你可能刚开始这个项目,你也可能在这个项目上做了5年、把你和你姐的积蓄全花在了这上面,对吧?所以这里面有很多风险,而你应该补偿这样的风险,所以这些的变数都很大。不过我觉得在基础层面上,确保你保留控制权,『控制权』这个词我觉得非常重要,在独立游戏发行合同里非常重要。
除此以外,这两者之间的差异可能其实是很小的。如何协商出合同、每个人的角色和职责,我觉得是相当相似的。
Tom:
我觉得元素都是一样的,但是……我是说,我见过26、27页的发行合同,我也确定你们不用27页的。
Nigel:
5页。
Tom:
是的,没错。
Nigel:
最后一页就只有我的一张照片。
Tom:
很多情况就是,跟像Ubisoft或者Microsoft这样的公司(合作),他们已经经历了如此多次的迭代。每次有什么发生错误的时候,他们不会重写合同,而是往里面加入更多的废话,最终合同就变成了像Windows一样臃肿的东西。它里面有太多东西了。
Nigel:
说话注意点……(Take shots)
Tom:
但是你不会想要自找麻烦,你不会想找个律师把这些内容都挑拣除去,所以就只能这样了。一些高预算的东西,比如……我不知道有没有人在随便什么渠道看到过,我记得在Activision的诉讼案(suit)里,West和Zampella起诉了Bungie游戏Destiny的合同(注:2010年棒鸡开始『命运』的开发时,正好是其与动视暴雪签订10年发行合同的时候,新IP的知识产权归棒鸡所有。合同的详情就在West和Zampella离开动视暴雪之后的诉讼动视暴雪的案子里披露了,由此公众知道了合同的细节。顺便科普West和Zampella创办的Infinity Ward在2003年被动视收购,代表作为COD系列。2010年已经合并的动视暴雪将这两位创办人以『违反合同和命令』的理由辞退。彼时COD的IP版权还在动视暴雪手中,他们寻找证据起诉动视暴雪以夺回版权,阻止暴雪对此IP的继续开发。最终败诉。棒鸡的代表作有光环系列。)。这是一个长达10年交易、有3个(应该是4个)主要的游戏、大量DLC、价值5亿美元的合同,当然肯定也捆绑了义务来做这个游戏。即便期间Bungie相当受制于Activision,但是他们保留了知识产权的权利。
这些问题是独立游戏合同中不需要面对的,即便是Microsoft的标准发行合同书。我知道Chris Charla在ID@Xbox做了不错的工作,他将之前26还是27也的合同精简到了6页。我也看到了Sony做的成为PlayStation开发者的需要点击的协议是……我记得是47页。
James:
哇。
Tom:
它让我头都痛了,而我是以读这种东西为职业的。
Connor:
好的。谢谢。现在到这边。
提问者3:
大家好,我的名字是Jose,来自Headless Chicken Games。我的问题是,拉美开发者需要解决的一件事情是,当我们接触发行商的时候,你们也说过,永远也不会太早,但是大多数情况下,总是太晚了。因为他们期待的游戏是要80%或是90%完成度的,而大多数情况下,在这个时候他们就会说『嗯……这个游戏差不多完成了,但是它不适合』。我们如何能找到一个点,这样我们可以早早地开始做出一些对你们和我们都有利的东西?你们要找的是什么?你们一眼先看到的是什么?是美术还是音乐还是游戏性,还是说非常完整的纵切面?你们是如何去找到那些能让你们感兴趣的东西的?
James:
我不认为这是一个明确的东西。我觉得这是对话,你要和人进行交谈。我永远不会说一个游戏太迟,即便一个游戏准备好发布了,仍然还是会有有趣的事情可以做的,比如我们可以为已经发布的游戏制作一部续作,这也是一个策略。所以从我的经验来说,我不会说在某个点是太晚了——也不会太早。如果你能联系(发行商),那么你就去联系。
Nigel:
确实是取决于游戏。关于游戏性……举一个我比较熟悉的例子,Hotline Miami只有纯粹的游戏性,没有别的东西,只有10关
(其实是20关),这就是它如何运作的。非常快速简单地介绍完这个游戏,你就能看到乐趣所在。取决于游戏,可能是叙事,也有可能是画面——可能画面上最有冲击力的部分,而你制作的基础就是这个——,也有可能是游戏节奏,什么情况都有可能。但是你要定义……我之前也提到过,定义你的游戏,当你到了能够呈现它的状态、并且说『这已经能足够了解我的游戏了』的时候,这时候呈现它应该是个不错的主意。同时你不要将它看作是一次性的pitch。有时候人们会做一个出来然后说『我要和游戏发行商某某某在GDC会面,这(GDC)是我的大舞台』,我觉得这是危险的。你知道么,利用这次机会或者是更早的机会说『你们好,这是我在做的游戏。这是它的一小部分,现在没有什么可玩性,我想在明年的E3上』——或者是PAX,或者给你发一个版本——『再展示给你一次。』不要将它看作是一次性的工作面试,你只是告诉他们定个时间而已,对吧?它有可能是要持续6个月甚至是1年的对话。
Tom:
或者好几年。还有一点就是……抱歉。
Chris:
你先说。
Tom:
其实永远不会太迟。我有些客户已经发售了游戏,而一个发行商找到他们、想要他们……这很奇怪,迟到的是开发商,他们想要……我的客户在所有主机、所有平台上有数字版分销,而这个开发商找到他,想要做他的游戏的零售分销业务。他们想要将它放到盒装中、放到商店里。这没什么坏处,对吧?再赚点钱也挺好的。也有一些发行商会找到某个有PC发售的人,然后说『我们想要把它移植到PS4或是Xbox上』之类的。
所以事实上就是,我认为,跟发行商对话永远是不会完全结束的。(否则)你可能在跟错误的发行商进行对话。他们对产品有投资的组合(portfolio),他们想要这些里的一个……他们想要不同类别的、不会互相竞争的项目。如果你带着某个类别的游戏找到某个开发商,而他们已经支持了这个类别的另一个游戏,并且发售时间段跟你的一样,那么他们是不会跟你谈的。这跟你的游戏具体怎么样的是没有关系的,这只跟他们整体的商业模型等等其它会影响到他们决策流程的东西有关。所以不要太往心里去,而且实际上有那么多的发行商,是吧?
Chirs:
我的上一次pitch是2页,里面大部分都是里程碑。我想告诉你的是,跟发行商建立关系,和你的pitch是怎么样的、你的游戏进度有多远、你制作的游戏类别其实没有太大关系。你需要信任,和发行商建立信任的关系。如果你能信任,那么就没什么的了。你跟发行商的关系越好,或者你跟发行商合作得越多,你的游戏就越容易被签约。
Connor:
很好。
提问者3:
谢谢。
Connor:
这边。
提问者4:
你们好。我要问的是……(工作人员帮忙调整话筒)谢谢。我要问的问题是来自一个不太确定是不是要发行商的开发者的角度。从一个已经发布过一个成功的游戏的独立游戏工作室的角度来讲,他们有时间和金钱来做下一个游戏。在他们最需要的是市场营销的时候,发行商和市场营销公司相比,它的优势是什么?
James:
我要说的是,fraud(盗版?)、安全、IT支持、创造性……,不仅仅只有市场营销、商业上的东西,还有大量你可能突然需要的服务。如果你在Steam之外进行工作,fraud可能会影响到你,你可能都没有注意到,但是肯定有影响到你——或者是如果你在其他地方提供了Steam码(code
,我猜可能是key的意思)。税收、财务上的建议、HR建议,等等这些都能帮到你。如果你觉得这些要求、所有保持运作的东西你已经都有了,那么你继续运作就行,不需要它们;但是如果有些东西困扰你到夜不能寐,那么可能你就需要有人帮助了。不过这都是由你定的。
提问者4:
谢谢。
Tom:
我觉得你应该自己做。(笑声)
Nigel:
闭嘴啦,Tom。(笑声)
Tom:
怎么了哦,我道个歉。
Nigel:
其实你应该这么做。
Tom:
如果你有发布过游戏,你的工作室是个品牌,而且你也有很多追随者——第一批的独立开发者,我不觉得他们需要发行商,因为他们已经创立好了。第二批的也差不多在一个让人满意的位置上。过去这几年里,整个大环境已经改变了,但是如果你还是有一个成功的游戏、如果人们喜爱它、如果你已经和社区建立起了关系、并有能力制作下一款游戏,那么可能PR就足够了。或者你可以找个人跟你合作,比如让你的游戏登陆到主机平台——如果你现在没有在做这个——,这是一个非常不错的关系。
Chris:
我想要补充的是,如果你这次跟发行商合作了,并不意味着下一次你无法离开发行商。如果你没有这类知识、不确定你能不能自己做,发行商可能是有用的。而另一方面,市场营销公司也了解市场,但是他们不能给你提供反馈、更深入的知识,他们也不如发行商那样理解销量。这里面有很多要学习的,可能你在下一款游戏就可以利用这些信息和知识了。
Tom:
而且在发行商身上,你需要做和PR公司一样多的审查。
James:
是的。
提问者4:
非常感谢。
Connor:
我们还以一个问题的时间。还在排队的人请在会议后找我们,我们会尽量帮助你的。就这里的人吧。
提问者5:
好的。你们好,我的名字是Eric Langkamp,现在在Exalted Guy Interactive。我的问题其实是基于Jose(提问者3)的问题,你们谈到你们要处理大量的IP,当你们看到那些要资助的潜在IP的时候,是那些符合你寻找的特定模式的那些更吸引你,还是说你在寻找的是下一个潮流?
James:
这是一个很棒的问题。最近人们形容Sega成一个强大的战略游戏公司。我们目前是强大的战略游戏公司的原因就是我们近期发布的游戏。我们仍然在寻求做别的东西、对事物非常感兴趣。如果有什么看起来很棒,并且适合我们公司、人们也发自内心地对它富有激情,那么它就会变成值得讨论的东西。Sega在过去,我指的是10年、15年之前,Sega是一个想要在所有类别都发售游戏的公司,所以我们就去尝试每个类别的东西,但是并不是很成功。因为这是需要激情的,而之前做的只是……因为有些洞需要填补,所以将产品放到那些洞里;而不是说『我们来把它做成一个很棒的游戏吧,我们跟他们合作,因为这样我们就可以发布一些公众喜爱的东西,然后我们就可以为这个产品制定策略和寿命周期。』这就是我的感受。
Nigel:
我要说的是,在Devolver,我们不会特意去找类别或者是我们觉得会是潮流的东西。但是当你进行pitch并研究发行商的时候,取决于你的游戏的类型和类别,有些(发行商)确实比别的更合适。有些发行商非常擅长Point&Click冒险类游戏,他们非常了解市场,他们也为你和你的游戏建立好了受众。所以你要看看你在做的游戏类别是什么,迎合那些发行商。当然你也可以去跟那些多种类别混合的发行商谈谈,但是可能某个发行商会更适合,因为他们完全了解这个市场。
James:
我又想到了一点,『可发现性』。如果你做了一个产品,你可能会觉得它和某个发行商发布的其它游戏相符合。而在Steam中,作为一个发行商,你可以跟通过自己的产品跟那些人进行交流,这就增加了Steam以外的可发现性,这是目前非常重要的。所以你可以试着想一想,『我有了这么一个游戏,并且和那个游戏很相似,我可以去和那个消费者群体交流。我可能不能在Steam上做到,但是那个发行商可以,所以不如和那个发行商合作,这样我就可以跟他们的顾客交流了,我们也获得了双赢。』这也是你要考虑的,也就是你进行交流的受众,以及它们是不是合适的。我觉得,比起发行商考虑你来说,你要更多地考虑发行商。
Tom:
我希望你能有机会能时不时做出一个不能归类到类别里的IP。
提问者5:
是的。
Tom:
因为作为一个行业,我们需要它。还有那么多没有被发明出来的东西。即便它不能归类到任何类别里,我认为它还是大部分取决于它具体的内容。如果你找到了跟以前任何东西都不一样的某个东西,但是你很喜欢、而且它也很有兴趣的话,那么我觉得如果你只是因为它不能归类而不能支持它的话,那就是犯下一个大错误了。我觉得你要做的就是将它展示给Wired杂志的人,让他们为它做个特性,因为他们不会为下一款RPG做新特性的。
(不理解这个梗)
Nigel:
最重要的一点是,老实说,我们没一个人知道,对吧?我们真的不知道。
Tom:
是的,我们只是在猜。
Nigel:
之前有个幻灯片,就是有一些流行游戏的那一页,我那天晚上冒着冷汗就被惊醒了,我就在想,如果Stardew Valley给我进行了pitch,我会通过它吗?我可能会,因为它不是我的游戏的类型。仅仅就是因为你觉得它有些不同,或者是它不合适、没有追随潮流,这些我都是不怕的。有些游戏就像是直接飞入平流层的火箭一样……甚至是对于1-2个人的小型工作是来说,小有所成也是巨大的成功了。所以我不会因为背离了潮流路线而害怕。
Chris:
如果你觉得你在做下一个潮流游戏,那么你就做吧,发行商会找到你的。
提问者5:
非常感谢。
Connor:
好了,感谢大家。
Tom:
我们非常乐意。
(观众掌声)
23. 沟通的艺术:解密创作关系
By Andrea Wicklund (Valve)
(观众掌声)
(PS.本次演讲中,幻灯片页面多次没有出现在视频中,部分页面对应为个人脑补充)
图23.1
大家下午好。我的名字是Andrea Wicklund,在Valve工作已经有差不多10年了。
我们安装好了喷雾机了吗?没有。好吧,没有喷雾机。不过还好我有个遥控器。(猝不及防的冷笑话)
我今天来这里是要讲『沟通的艺术:解密创作关系』,我知道这有点含糊不清,不过我们会深入讲的,到时候你就知道我的意思了。
图23.2
有多少人玩过你画我猜(Pictionary)这个游戏,举个手。嗯,很多人玩过。你们玩过的这些人当中,有多少人被从你画我猜里踢出过?真的吗,不只有我一个人?真的?好吧,我曾经被提出你画我猜过。某种程度上这是一个自尊心驱动的故事,在高中的时候,我带着自尊心和我的团队——我们当时都非常年轻——,我是那个画画的,所以你懂的,接下来发生了什么。我得说,我们势如破竹,我在上面画画,我的团队答出正确答案,直到在某一分上,我这么做的时候(画画的手势),我觉得是张非常棒的画,但是我的团队答不上来,然后我继续画……倒计时结束了,铃声响了,我们没有获得这一分。我就这样丢了这分,对于团队来说我就像是个jerk一样,但理所当然地,这种沟通上的障碍都是他们的错。(笑)这其实没什么关系,不管怎么说,游戏还是会继续的。
你们还记得TV情景剧Friends(老友记)吗?别害羞,有人看过吗?有人还记得Monica吗?如果你不知道Monica,谢谢你的勇敢。如果你不记得Monica,她是以有好胜心、进取心著称的。
图23.3 原始为动图
随着游戏的进行,对方获得的分数越多,我就越不能保持冷静。我后来对团队来说真的就变成了一个jerk。他们做的是什么呢?他们炒了我,我被禁止参加你画我猜,他们把我踢出了局。我得承认的是,我当时是个高高在上的小公举(diva,不知道怎么用标准词汇准确翻译了),导致交流中出现的问题无法解决。我至今都不玩你画我猜。
图23.4
关于Friends就说到这里,我们来谈谈沟通。这也是你们今天来这里的原因。
非常幸运的是,我在很早的时候就从那次经历中学到了,没有人愿意和小公举共事,也促使我开始探索沟通的艺术——这也是你们在这里的原因,万一你之前不知道的话。
在准备这次演讲的时候,我跟很多来自不同领域的不同公司的人进行了交谈。有Neat Company(一家软件公司)的Joaquin Homer、Marvel(漫威)的Karla Ortiz、HoloLens(Microsoft的智能眼镜)的Judd Chevrier、League of Geeks(Armello开发商)的Trent Kusters和Ty Carey、Playdead(Limbo、Inside开发商)的Marek Bogdan,以及Valve的一些同事,其中包括了我们新加入Valve的参与制作了BioShock 1和2的Dean Tate。
你么我就直奔主题,告诉你这个秘密。你们在沟通中遇到的所有的问题的答案就是——
图23.5
『谁』。能选择跟『谁』合作,就是你获得良好沟通的方式。认为你自己是个完美的人(a great catch off the bat),而由你来选择跟谁合作。问题解决。
图23.6
不过在我说的这个『谁』里面,还有几个部分,『技能水平』和『人格』。技能这个非常直观。我们假设你已经注意到了这个,你周围有很多在他们领域非常熟练、有不同水平才能的人,你不需要担心这方面。以这个为前提,我们来谈谈『人格』。换个词来说,就是『吸引力』(affinity)。
图23.7
『吸引力』就是对一个人、一个东西,或是一个想法、一个相似者、一段关系等等天生的喜好和吸引。才能非常重要,但是你首先要能相处。在原始才能中找到合适的,就像是一双Nike鞋一样,你知道表现会很好,但是如果你买错码了,那么你就会起水泡、鞋子会很紧、你的脚都要蜷缩在一起。我刚刚把雇佣人和买一双鞋做了对比,我知道在场至少有一个人同意我的说法。(可是是谁呢)能够鼓舞士气的人会有良好的前景,他是务实的、是一个良好的沟通者。找到这些东西,你就可以让你的团队形成非常良好的沟通。这就是为什么Valve的招聘流程是最重要的。
图23.8
我来讲一个故事,基于我刚刚所说的内容的一个关于成功的故事。(主角)并非Valve,而是Neat Company。我跟他们中的一个聊了聊,实际上他并不能给我一个关于沟通障碍的例子。我非常想要一个很好的故事,这样我就可以跟你们讲一个有趣的失败,但是他并没有。我就想,『这怎么可能呢?』
首先,它是从一个小团队开始的,他们从学校开始就互相认识了。所以他们立刻就有了『吸引力』,他们知道彼此的优点和缺点,他们也知道彼此的工作流程。当他们一起组成一个公司的时候,这简直就是小菜一碟。这就是窍门,就是这样而已。和那些能相处的、也有技能的人一起工作。我讲完了,谢谢大家。(观众掌声)不,我只是开个玩笑,开个玩笑。你们看起来就像是『Andrea,不是吧,等等,不应该是这样的』。没错,这不现实。
图23.9
如果相处的不好,或者说在沟通中出现了一些障碍,你该怎么办?对我们来说,一直保持好相处的状态是一种奢侈品,在你的生活中、或是在你的公司——不管你身处在哪里。有时候我们就是会遇到不顺心的事情。为团队寻找『吸引力』是需要一些努力的,当你们冲突很多的时候,它会需要非常多的巧妙处理。
图23.10
那么是什么呢?这就到了『信任』该出场的地方,是时候该构建起『信任』的基础了。它不仅仅适用于我们行业,也适用于任何一个关系:你的婚姻、友谊、和宠物相处等等。牢固的关系依赖于信任。这是沟通的基础层面。同样地,这也是在你的团队伙伴擅长于他们所在领域的前提下。
你的团队几乎就是另一种婚姻,知道彼此的优点和缺点。信任他们能做好他们的工作是必须的,允许团队在他们的自己的领域中是自由的。这样会是怎么样的呢?
图23.11
『信心』。信任和你共事的人,对他们的技能有信心,同时也在你自己的领域中是舒适的,这样你可以允许别人进来,对你需要做的事情提供帮助。同时,要知道什么时候要说『我不知道』或是寻求帮助,这也是信任,对于你的状态保持真实。
『放权』。将权力下放给团队里的人,让他们去做他们的事情,那么他们会为你竭尽全力。伴随而来的还有『个人权威』或者说『自主权』。让他们去做他们的事情,允许他们在他们的领域是权威的。
现在我们已经知道了这些,那么如果你还没有做到这样的『信任』的话,你应该怎么建立起一个呢?
图23.12
『语言』。在沟通最前线的是『语言』。知道如何在何时正确地使用语言,是成功沟通的关键。这是一门艺术。由于我是一个美术人员,我要专门地谈谈创作关系。再说一次,这也适用所有的关系,但是我会专门从美术人员的角度来讲这些关系。不用谢。(笑)
图23.13
举个例子,一个程序员和一个美术人员,这是两个不同的领域。你们会有一样的眼光,但却有完全不一样的词汇。为了相处,你需要努力去说另一个人的语言,学习重要的词语、他们说的含义是什么,说一些他们需要听到的词语来展示你投入了精力。一旦做到之后,这时候你知道这不是你的擅长的东西,你就需要往回退一步。
图23.14
『语言』的一部分是『词汇』,也就是你使用的词语,暗语(code words)什么的。对于每个具体的关系,你要知道彼此的暗语,也要清楚地知道你能明白彼此的词汇。经常我以为一个词的意思,跟你以为的它的意思是非常不一样的。我拿艺术中的术语举个例子,
图23.15
一个需要区分的术语就是『work in progress』(进行中的工作)和『finalized』(完成的)。
图23.16
这是Karla Ortiz的作品。她是一个在Marvel的美术人员。她已经在游戏行业里好几年了,而现在去了Marvel。这就是她定义的『进行中的工作』。这是她的定义。知道这个在她眼里看来是什么,可以对如何进行交流反馈提供帮助。
图23.17
这张图就是她的『完成品』。
图23.18
另一个词汇的例子,知道它们的定义也非常重要,那就是『写实』(realistic)和『风格化』(stylized),更多美术上的术语。我个人最喜欢的另一个容易混淆的词就是这个『风格化』。很多时候,『风格化』这个词被抛出来的时候,人们脑中立刻就会想象到卡通化的东西,比如说Mickey Mouse(米奇)。
图23.19
他是老鼠的一个风格化版本,也正好是一个卡通形象。但这并不意味着全部的『风格化』都是卡通。
图23.20
『风格化』的定义就是:『使用艺术化的形式和习惯来创造效果;不是自然的或是天然形成的』。
图23.21
举个例子,这是一个苹果的3D模型,边上是Apple的苹果,这个公司是一个苹果的风格化版本。你能看到在3D模型中,纹理是非常写实的,看上去就像是你能伸手拿到它一样;但是Apple的图标或是说logo就非常的风格化了。
图23.22
在Valve的游戏里,你也能清楚地看到它。比如说,左边的这个是Left 4 Dead里的Zoe,她是对角色的写实演绎。在她边上,右边这个,是完全风格化的Team Fortress 2里的Heavy。注意纹理、外形和比例,它们互相有什么差别。
美术上的决定是在每个角色的开发中做出的,而他们都有不同的词汇被有意地应用到了整个游戏当。知道这些不同也可以对你的创作交流产生帮助。
图23.23
除了词语之外,还有『图像』。图像也会交流。Bless you(应该是某人打了喷嚏吧)。词汇的错误传达在其它不怎么方便的方式里也存在,使得事情花上比所需要的长很多的时间。你知道这么一句陈词滥调吧,『一图胜千言』(没图说个jb),是吧?嗯,使用图像是另一种交流方式。有时候这比使用你的方式解释某个东西更高效。坦率的说,有时候你就是需要停止说话,看一些图片,用一用老Google。
图23.24
我的一个同事告诉我一个关于他之前做的游戏的故事,他最后把使用图片变成了最高效的交流方式。他的团队里的美术人员一直在看宫崎骏的电影,寻找风格化的灵感。他们将这个美术方向提议给了团队里的其他人,但是令他们意外的是,有很多的反对的声音,这对他们来说很困惑。于是他们就继续解释了他们的意思,也没有获得通过。在几次让人沮丧的沟通之后,美术人员终于发现他们没有将他们的点传达。所以他们停止了交谈,拿出了几张图片。
图23.25
对他们来说,他们想到的是这个例子(左)——宫崎骏电影中经常出现的这种画出来非常华丽的背景和类似水彩的纹理。但是团队里剩下的人想到的是这个(右)——宫崎骏的扁平化的人物。看到区别了吗?
图23.26
图23.27
你可以看到背景和角色的渲染方式是相当地不同的。
图23.28
两个(想法)都没有错,它们都是参考的宫崎骏。但是它需要这样的图像区分,才能正确地传达他们所参考的是什么。比起使用语言,使用图片的沟通会更加简单。
我们现在已经清楚了参考宫崎骏的图像目标是什么,我们来说明一下『目标』(goals),以及跟你的团队、你共事的人同步(on the same page)的重要性。
(小声地)哦,我点的太快了,停一下。我这是按得不亦乐乎啊。(音量正常)好了。(小声地)我退回得不够多,等一下。(音量正常)好了,刚刚的沟通是多么地高效。(笑)再说一次,高效地使用语言可以有效地避免变得沮丧或者——按下触发器太快。
图23.29
随时都要清楚地了解『目标』——全程、总是、整个流程中。确保每个人是同步的。如果目标是明确地,并且对团队里的每个人来说都是一样的,那么问题解决的流程就更容易转变成一个解决方法。(小声地)好的,我现在要按下按钮了。
图23.30
(音量正常)好的,我们来看看这个三角形。将一个作品看成一个整体的体验,这就包括了机制、美术和音效,所有这些都在一块里面、一个包装里面。三角形中每个角落的目标协同工作。
我们来更近距离地看看左下角的这个角落,也就是『美术目标』。具体有感受(feeling)和情绪(mood)。我说了『感受』这个词,我知道这有点吓人,之后我也会用『情绪』(emotion)这个词的,所以你们做好准备吧。(笑)
图23.31
深入这部分就又要回到『语言』上了。问你自己『使用感受的词语,有什么描述词能总结它呢?』使用情绪上的术语来沟通创作目标。『描述词』(descriptor)。
图23.32
『我希望玩家感到迷失和害怕。』(小声地)这时候如果有台喷雾机就好了(这梗还挺深啊,现在才抖包袱)。(音量正常)『我想要这个空间感觉起来是寒冷和极端的,或者是茂盛和欢迎的。』
图23.33
一些不好的描述词的例子就是,『我们需要一个很棒的重生室』或是『就让它看起来很酷就行』。这勉强还行,但是我保证我觉得看起来很棒的东西和你觉得看起来很棒的东西会有很大的差别——当然也可能没有,但是你并不知道这里(指了指脑子)发生的是什么。
图23.34
在游戏设计时进行的这些决策中,美术在体验中扮演着非常重要的角色。这张来自Portal 2的概念美术图是一个完美的例子,它显示了使用高效的描述词能如何进行图像转化。你有没有感受到渺小、迷失和害怕?这张图非常不错,是Jeremy Bennett画的。
图23.35
现在我们来看看它们(三个角)是如何一起运作的。再拿Team Fortress 2为例,美术、机制和音效,它们都在那个三角形里互相影响,来构建游戏体验。他们被开发到一起,并和谐地融合在一起。
图23.36
或者是这个非常棒的游戏,Inside。作为玩家,我们是在美术中的,它的体验是完整的。
图23.37
不过美术还不仅仅是这个,它也可以是你对游戏的第一感受。看一看Steam——我确定你们都有——,游戏的体验可以瞬间就通过缩略图进行传递——立刻的、第一次读到、第一印象。美术就是游戏的品牌,是玩家们对产品首次进行互动的部分。这并不是个巧合,有很多问题解决最终进入到美术的决策。这也不仅仅是情绪上的,这是科学。
图23.38
再回过头想想这个三角形,正如游戏机制和音效工程一样,美术也有技术组成部分,需要有好几年的教育和经验,跟任何的科学一样。
图23.39
同时,它也像数学一样,是基于一系列的『问题解决』上的。美术也是『问题解决』,将它看待成和写代码一样。花点时间,坐在椅子里,进行尝试。它会如何改变你的认知呢?它会影响你和美术人员的交流方式吗?
我经常碰到的中断,其实是在说明问题的阶段。我这么说的意思就是,我给出的是我『认为』的解决方案,而不是清晰地沟通实际问题是什么。这就非常有局限性了。当给出一个局限的解决方案后,它会切断通向其它解决方案的道路。信任有技术的美术人员在他们的领域是专家,他们有非常广阔的解决方案,远远超过你脑海中有的。要相信一个正确框架下的问题,而不是提供数学,可以造就出一个自信的解决方案。换句话说,尊重你的美术人员的专业性,或者从整体上说就是(尊重)你的同伴的专业性。
图23.40
再回到Karla,她告诉我一个关于她过去在一个游戏公司的故事,这个公司现在已经不存在了。当时有个程序员觉得自己有责任每天给她一些『输入』,走到她的桌子前给她提供一些她没有要求的解决方案。然后就,你知道的,这样的……她有一段时间还无所谓,但之后就开始变得让人泄气了,因为美术肯定不是他的专长,他提供的解决方法对他来说毫无用处。最终因为感到不受尊重——我不是说要去做这个,坐在你的椅子里、尝试这个方法,这不是我要给的建议,这只是个故事——她开始对他的行为进行了礼尚往来。她走到他的桌子前,给他一大堆关于他在写的代码等等之类工作的主意。他也一直挺礼貌的,直到有一天他终于说了,『这一点也没用,为什么你要一直试着做我的工作?』她就像是,『对啊,bingo。』然后他就明白了,他不再去她的桌子,她也不再去他的桌子。我觉得你们抓到要点了。
图23.41
Karla的故事很好地引出了我们的这个话题,『反馈』。这是『信任』和『语言』走到一起的地方。数字美术中有一点是,作品总是在显示器上展示的,在美术人员的身后(指幻灯片)或是身前。这看起来像是一个公开的邀请,顺便做一些反馈或是评论。但这非常打扰人,尤其是当它还是未完成作品的时候,这真的会让美术人员脱离正轨。
图23.42
问问你自己,『我应该什么时候提供反馈?什么时候应该让他一个人待着?』如果你没见过这张图的话。它来自于一个叫Hovering Art Directors的Tumblr页面。(观众笑声)这是现实生活中的。(笑声)
还有就是,『我什么时候停留?』我觉得他停留了一会儿。『我给出反馈的影响是什么?』、『到目前为止,我给出的反馈产生的影响是什么?』、『这是不是我的专长?』。为反馈建立一个框架来缓解尴尬。这是一个非常好的、有用的建议。『制定反馈时间表』,给美术人员提供空间,让他们创作能进行presentation的美术作品。
图23.43
最后总结一下就是,你要知道提供反馈、做出决策的责任,以及它对于你们的信任关系的作用是什么,你会如何传达它、如何使用语言和词语。比起随机地丢下过多的反馈,创造并保持信任的环境可以带来更多的好处。工作关系比『一直让它完美』要重要得多。更新可以之后再做,但是破坏了信任则是永久性的伤害。
图23.44
这里我要讲另一个故事,一个能表达我接下来要讲什么的好故事。这个故事来自于位于澳大利亚的League of Geeks里的Trent。
他的团队里有个美术人员在为Armello做卡片的插图(illustration),他在这块也做了很久了。但是Trent当时发现,在适配(缩放)上面出现了一个问题。插图中的有些元素的适配是关闭的。问题就在于,这一块已经开发很久了,如果Trent立刻就给反馈的话,它基本上会导致推翻重来。这样就会花费更多的时间、需要美术作品被抛弃、人们的感受就会受到伤害,到时候就会变得一团糟;而回报就是,插图中所有元素的缩放会是正确的。不过他还有一个选项,那就是简简单单地『随它去』,看看会发生什么,保持在大家的理智,这并不是世界末日。
图23.45
他选择了这么做,他选择了『随它去』。结果就是这个华丽的插图,由Adam Duncan制作。由于它最终是如此好看,适配的问题就成了过去式。Trent也发现了,一个良好的关系比让弄好它重要得多。
图23.46
这让我非常欣赏。反馈不一定总是负面的。事实上,我认为当它不是负面的时候,它是最好的。
『欣赏』非常重要,而且经常就半途而废了。别这样,别让它半途而废了。人类完全就是在赞美中成长的。你只要看看Facebook、Instagram这样的社交媒体,人们会拍一些自拍照,想要获得更多的『like』——每个人都想要被喜欢。这只是我们的天性,并没有什么错。
所以发自内心地互相欣赏,就和——如果不是更的话——建设性的反馈和团队沟通一样重要。如果你有好听的话要说,那么你就说出来,不要以为每个人都知道你有多么欣赏他们。他们不知道。我不能做到再强调它了,如果你想的话,你之后可以试试看,你可以在演讲后试用在我身上。(笑)
图23.47
这一点可以进入到每个人的生活,包括你的宠物、咖啡店店员等等。它只会引起更好的结果,人们会愿意为你竭尽全力的——你甚至可能因此获得一杯免费的咖啡。因为『一个感到被欣赏的人,总是能比预期做得更多。』
图23.48
然后就是『非语言沟通』了,(小声地)所有当中最危险的部分。(笑,恢复音量)它是交,交流的一部分——我甚至都说不出『交流』这个词了,它给的精神压力太大了。
图23.49
拿『标签』作为例子,标签是其中一种。我们的标签控制着我们如何看待自己,也控制着人们如何与我们沟通。每个标签对不同的人来说带有不同的含义。会想一下我举的风格化和参考宫崎骏的例子,让我们将这些归到『开发者』这个词上。
在Valve,美术人员是被看作开发者的。我来再说一次,在Valve,美术人员是被看作开发者的。我知道在大部分别的地方,情况不是这样的,不过你们可以试一试。这改变了认知中的美术人员的角色,不是吗?这表明了美术人员在游戏设计中是一样重要的部分,一点也没错。它让不同领域的人们能联合起来一起工作。不过,它同时也带来了一个问题,因为它的前提是同在一个屋檐下的人说的是同一种语言、或是有同样的想法,而这就是我们之前讨论过的。所以运用之前的幻灯片就行。
图23.50
那么,在你的团队里,标签会如何影响到你呢?美术人员有没有被从开发者这个概念中隔离出来?结果是什么?可能他们会更少地参与设计阶段,或者他们可能跟整个团队都是分离的。这改变了他们在公司里的价值吗?思考这些问题,并好好考虑考虑。
图23.51
清晰地定义你们的标签是非常重要的,它是传递每个个体所扮演的角色的方式。因为这个原因,Valve不会使用固定的、详细的职位头衔。这让我们能参与、成长、**——作为个体**,不会被限制到永远只能写代码或是永远只能画砖块的纹理。
图23.52
既然谈到了画砖块的纹理和写代码,让我们把注意力转向『流程』。
图23.53
还记得这个三角形吗?记得?这是我画的……(笑声)10年的经验。(观众掌声)每个角落都需要点火,并且……想想,谢谢你们的欣赏。(观众笑声)每个角落都要为所有『气缸』点火,同时对他们进行开发会让这辆车一起前进。结果就是,『连贯』(flow)和『节奏』(rhythm)。
『连贯』是怎么样的?清晰地沟通如何将你的工作分解给所有人,这是一个良好的开端。『谁做什么』。找到你的团队的动态变化,找到你的节奏。
图23.54
Boishock 2的流程成功地在他们团队中达成了『连贯』,所以我们来简单地谈谈。
首先他们做的是,他们以整体的形式设计了功能性空间——他们把它写在了纸上,把这个功能性空间写了下来。一旦这个确定之后,他们又使用情绪的描述词、感觉词将审美体验确立了下来。当他们确定了这一系列大概的想法之后,他们开始一起将结构进行分解,在更小的范围内进行推敲,不断地进行同样的流程。我们要这个地方的体验是什么样的。等等等等。一旦都完成之后,他们可以将它分解,并在他们有自信的领域中实现它。
图23.55
换句话说,他们利用整个流程中明确的目标,创造了一个支持『自主』(autonomy)的氛围。
当你的团队里的人能自主工作的时候,它就能激发对项目的激情。对结果尽情地想象是非常有趣的,它能让人们想要去工作。这是电子游戏,它是有趣的,无论是玩游戏还是做游戏
都应该是有趣的。当我们拥有乐趣的时候,我们就会投入到工作中——进行美术作画、编写代码、或者就是进行游戏测试,所有这些都促进制作出优秀的作品。留出『自治』的空间是无价的。
图23.56
我们来看看丹麦一家非常棒的游戏公司的流程。它制作了非常了不起的Limbo和Inside,如果你没有听说过,那你一定要去看看,看看『自治』是如何打开制作出这些惊人的游戏的机会大门的。『信任』和『一起进行流程』就能让『自治』的出现,它可以产生『连贯』、『节奏』和『沟通』,而结果就是出色的。
他们和Bioshock 2的流程差不多,从一整块开始、分解成小块、自治地分开做、完成。
图23.57
而这是他们的有序的日常工作——一个简单的版本。每天,他们会在早上10点进行一次总结会,谈一谈昨天都做了什么以及今天的计划是什么,然后他们就解散。在这一天里,可能会有一些简短的、不在在日程表中的2-3人的桌面会议,但是他们是非常高效、保持极简的。
图23.58
美术团队每周会聚集一次,他们会通一次关,记下笔记,然后再分开工作。
图23.59
然后等到发售时间临近的时候,他们会有更大的会议,制定营销策略、更重大的任务之类的东西,不过他们会讲他们整理成『sprints』(冲刺),所以也是非常高效的。然后,嗒哒,非常棒的小游戏就做出来了。
图23.60
给『自治』留出空间非常重要,给『灵感』留出空间也是同样重要的。它比单单只有一个『想法』更重要,不管这个『想法』有多棒。让美术人员做他们有激情的东西,让他们能到达一个没有人去过的地方、在行业里已经出现之外的地方——不同的文化、不同的风景、晦涩的影片、优秀的艺术。
图23.61
Team Fortress就是一个最好的例子——Team Fortress 2。TF2的美术指导深受插图黄金时代(the Golden Age of Illustration)的艺术家的启发,所以就从中脱胎而来。J.C. Leyendecker是其中一个代表人物,你可以看到它的轮廓、特征都是风格化的。
图23.62
同样还有Dean Cornwell,看看角色和背景的对比、他们的轮廓关系、以及色彩的影响。在新的地方寻找灵感,可以能够创造出至今都非常独特的作品。
图23.63
但是,所有一切的关键、所有这些沟通的关键,最终都是归结于『尊重』。
图23.64
『尊重』是将所有这些东西放到一起后所能达到的顶点。尊重、相信彼此的专业性可以获得自治、灵感,和平稳的相处模式。彼此之间对于『流程』的尊重,可以让每次互动都变得更简单。
图23.65
你得到结果可能会比你最疯狂的梦想还要好。
图23.66
它会让沟通中的障碍越来越少,更不用说很容易就能修复了。没有尊重的话,那么你就相当于得到了你画我猜这样混乱的游戏的秘诀。如果你还记得的话,没人愿意跟小公举玩你画我猜。
谢谢。(鞠躬)
(观众掌声)
这张也是Adam Duncan画的Armello的图。有人有问题吗?现在还是等会儿?
好像没有。我刚刚沟通得非常清楚,是吗?(笑声)
(观众没用麦在说话)
是谁(画的)?Melissa King?前一张图。对不起。(小声地)谢谢,对不起,对不起了Melissa。
(Q&A部分)
提问者1:(没拿麦)
Andrea:
你也可以喊着说。喊也是沟通的一部分。
提问者1:(音量放到了最大才隐约听得见)
如果有个同事不怎么尊重你在做的东西怎么办?你有没有什么例子来说明怎么处理,除了你之前说的那个走到他们桌子前对他们做那些他们对你做的事情。
Andrea:
嗯,我可能不会那么做。
某个观众:
你能重复一下他的问题吗?
Andrea:
他的问题是,如果你有个同事不尊重你在做的事情,你会怎么做?有点像Karla的那个例子,只不过她用了比较粗暴的方式(笑),对他做了同样的事情。
你只要说,『我觉得没有被尊重』,然后就这一点跟他谈谈。是吧?只要让他知道,因为他甚至可能都没有意识到,这是关键。如果你只是安静地坐着,他可能一无所知。这么做至少给了他一个不同的认知。
另一个观众:(听不清)
Andrea:
他刚刚有在听,谢谢你。沟通,是的,发表自己的看法。你需要站出来为自己说话,不过你也不必用极端的方式。
提问者2:
我有一个技术沟通方面的问题,就像你之前说的,美术人员会说,『把它做成像宫崎骏电影一样』、『我那么说的意思是这个』。
Andrea:
是的。
提问者2:
我经常在我的公司里这么说。我的撰写人会有很多的源图片,我们用它们来说明他在说的是什么。我在想,这种方式有没有什么缺点?因为我记得我曾经看过一个YouTube视频,它讲了电影里的音乐——他们会在编辑的时候用一种叫做『临时音乐』的东西。导演会放入其它电影的音乐,而且他好像也会很重视这个,然后作曲人就会在这个范围里(作曲)。
在美术沟通的流程中,有时候会发生有些人不是美术人员,但是他们说『我想要看起来这样的』,他们就会拿出一样东西然后纠结于此了,那么你就等于被限定在了这个范围内,这样会有问题吗?
Andrea:
完全会。当你试图说的东西无法正确传达的时候,使用视觉图片来交流是有用的。但是如果你是举例其他人的艺术作品、将它放到你的游戏中——或者是音效等任何东西——,那么之后发生的就是,你会围绕它进行开发。当等到需要把实际的美术或是实际音效放进去的时候,它们却会不合适,因为你是在别的东西的基础上做的。
这就是那个三角形发挥作用的地方了,所有东西都要同时进展,所有的东西都是同时一起开发的,这样你就可以避免这个情况了。在会议或是别的什么上,用图片来交流你试图说的东西,非常棒。利用其他艺术家来获取灵感,非常棒。但是将它放到你的游戏中,围绕它进行开发,那么你就会让自己走很多回头路。非常好的问题,非常好的问题。我觉得它时常发生。
提问者3:
如果两个设计师有极端不同的词汇,比如他们也有可能在说不一样的语言,会发生什么?在大多数情况下,你可以勉强解决,我的意思是,它会稍微减慢开发速度,但是你还是能够应付。如果能让他们在玩家能看到的术语上达成一致?
Andrea:
哦,非常好的想法。我好像昨天跟某个人刚刚说过这个问题。这个想法很好。可能你可以坐下来说,『你们能拿一本词典出来吗?』(笑)——我是认真的——、『这些词语的意思是什么……』『这个词对我来说的含义,跟对你来说的含义一样吗?』你们可以在你们一起使用的词汇上达成一致,或者甚至试试彼此的词汇、看看你能不能理解它们的意思。有时候就像是学习一门新的语言,会让人非常沮丧。但是一旦你们达到了那种程度的一致,那么所有事情都会简单很多。
这样说有道理吗?还是说你的还有更深入的问题,类似于,『你要怎么做?』
提问者3:
如果他们绝对无法达成一致,比如说『这是我们应该告诉给玩家的这个机制的名字』,然后他们……
Andrea:
哦,是给玩家的。
提问者3:
是的,他们都认为『它应该被叫做这个』,或者是『玩家们无法理解这个那个的』。
Andrea:
对它进行游戏测试。让一些用户对它进行测试,然后问他们:『我们试图告诉你的东西你能理解吗?』你可以测试这些术语、美术,让你的受众或者是朋友来玩,甚至是你公司或者团队里的任何其他人都可以,问他们『这个有没有让你们明白我们要传达的工具或是游戏性?』
提问者3:
谢谢。
Andrea:
不客气。
提问者4:
首先,谢谢你的演讲。
Andrea:
谢谢你,谢谢你谢谢我。
提问4:
我不会开始循环的。
(谢谢你谢谢我谢谢你)Andrea:
别,嗯,千万别。(观众笑声)因为我会一直说的。(笑)
提问4:
在期限临近或是压力很大的情况下,当脾气都开始变得敏感的时候,你对沟通有什么建议?
Andrea:
不要叫喊。我觉得休息是非常重要的,即便它只有15分钟。当你觉得事务变得紧张之后,你就要对自己说『我需要冷静,先暂时搁置一会儿,15分钟后我们再来讨论。』我觉得保持沉着冷静是最重要的部分。你不能控制别人在做什么,但是他们会受到你的反应的影响。如果你是过激的,那么就会变得有戒心,然后你也会更加有戒心,然后你就会更大声地说话,等等等等,就像这样一直循环,像是爬到梯子顶一样。如果你能关注到你的心理状态的话(笑),这肯定也会影响到你们之间的感受。所以你要休息一下,往回退一步,喝点茶……
提问4:
好的,谢谢。
Andrea:
停止工作,去睡一觉。睡眠时非常重要的。这有帮助吗?有,好的。
提问者5:
项目有可能因为成千上万的理由而关闭。你有没有什么建议,就是,沟通上的建议,在不自断退路的前提下,来向一群人说明停止项目或是停止工作?
Andrea:
很好的问题。真诚。
提问者5:
恩,我也发现了。
Andrea:
当你对你们所处的境地、以及为什么进展不好是真诚的时候,你可能会伤害到某个人的感情,但是也不应该由你来能承担这一责任。明白它为什么进展不顺,你想要挽救项目,而你又觉得你的出路可能只有那么做了、或者说你觉得在其它地方你更有价值。进行诚实的沟通是最好的方法。(小声地)然后你也不需要做什么东西了(笑)。
提问者5:
很棒,谢谢建议。
Andrea:
不客气。
提问者6:
我在想,你有没有最喜欢的用来学习更多有关沟通的东西的资源?对于美术人员、开发者,以及还有领导。
Andrea:
嗯,变老。(观众笑声)年纪变大就行了。(笑)年龄是一个很好的资源。更多的实践。进行测试,比如,成为你如何沟通、别人是如何看待你的旁观者。还有很多我不知道的游戏的资源,如果你想要我说的话,我有听过很多非游戏产业的东西,如果你想听的话,之后来找我。我会在避免在你们这些人面前尴尬的情况下,给你一些资源的。(观众笑声)励志书(笑)。
提问者7:
你好。
Andrea:
你会。
提问者7:
谢谢你的范例。
Andrea:
嗯,谢谢。
提问者7:
非常有帮助。
Andrea:
好。
提问者7:
我觉得它对于美术人员肯定是非常有帮助的,因为它帮助他们能做出一个能给工程师、设计师的文件,来表明这就是他们想要的感觉。我作为一个工程师和设计师,尤其是在和一些比较年轻的美术人员的时候,我会在表达特定需求上遇到困难,而这些需求是他们必须在美术上满足、作为游戏的基础的,或者是满足团队已经达成一致的样式。我觉得更成熟的美术人员,他们不会有这种类似go\no go反馈这样的问题,比如『这个不行,请修复它』。这些美术人员倾向于修正他们自己的流程。而更年轻的美术人员更倾向于受伤、更倾向于变得情感孤僻,从而在团队中形成不安的气氛。也就是说,有些人有可能……我想更好地和这些年轻的美术人员沟通,我想感到自己能掌握住局势,我想在他们不断犯错的同时,也让他们感到自己的存在、以及是项目的一部分。你能给你一些建议如何让他们融入吗?这样我们就可以有一个建设的流程了。
Andrea:
我的建议是,用教育这一类的方法,而不是说『你做得不对,我来给展示你看怎么正确地做』——这会让人感到很糟,就像他们做错了事情一样。你要知道他们是新进入行业的,跟他们说『我明白在没有经验的情况下,在这个行业获得工作是很难的,所以我现在来帮你拥有一些经验』,比如说『这是你在学校里没有学习的如何跟团队里的人协同工作的教育部分』。方法就是……不是你比他们要更好,而是手把手教给他们,将它看作是一个教育构件。
这么说能明白么?是不是你现在已经这么做了?
提问者7:
是的。但是有时候就有种施恩的感觉……
Andrea:
当然。
提问者7:
这个非常地……呃(感觉不好)。但是确实这就是我如何跟人沟通的,比如『这些是我所了解的事实』,但是给人的印象很差。所以……是的……我觉得我学到的是,试着建立一个一起开发的关系,我会尽可能多次地帮助他们,知道他们理解了为止。
Andrea:
这么做的时候,你也不想浪费你的时间。赞赏,以赞赏开头,『我看到你身上有很多潜力,这些东西能让你在这个行业里突飞猛进』,这样就可以让他们兴奋地去看你要展示给他们的东西。不是说,『我看到你做的不对,我想要更正你』,而应该更像是『你做得很棒,这些东西能够让你更高效快速地学习新知识、发布内容、进入到游戏中』。这样能理解吗?以告知他们在所做的东西上非常棒开始。
提问7:
我觉得这是很重要的。我不想花太长时间,不过(还想问一个问题)……3A级的工作室经常会有一个美术指导参与,流程也是更大的结构。而谈到小的独立团队的时候,你只有很少的精选挑选的人,他们在这里的原因很大一部分是他们的激情。在事情变得焦灼之前,对于你能预期做多少有什么建议吗?在什么时候你会说『这个不行』,或者……我不知道。你对于这种更紧凑、更小的团队有什么建议?
Andrea:
我觉得这也取决于个人。我还记得我是一个小小的美术人员……或者说年轻的美术人员时,玩的你画我猜。这只和经验有关,碰到一些挫折、经历重重困难。因为你不会想要花所有的时间去迁就某个人,你需要让他们知道他们要获取更多的经验。从理解他们所处的位置这一角度开始,他们在产业中还是信任,让他们知道还有很多要学的,而你是提供帮助、培养、给他们这种经验的。他们的戒心会更少,或者他们的感情更不容易受伤。如果他们的感情受伤了,我猜他们可以回家处理(开除)。不过我猜你也不想要这样,对吧?
提问者7:
我可以引用你那句话吗?开个玩笑。
Andrea:
去吧,来。
提问者7:
谢谢,非常感谢。
Andrea:
有帮助吗?
提问者7:
有的,谢谢。
Andrea:
好的。谢谢。
提问者8:
你好,谢谢你的演讲。信息量非常大。对于一个资深的概念美术人员转变成美术指导角色,在更好地沟通和表达他们对项目的视角和风格方面——不仅仅是对美术人员,而是整个团队——,你有什么建议?
Andrea:
哦天哪。你看,我们没有美术指导(笑),所以老实说,我没有这方面的经验。
提问者8:
那就从整体上说,对你脑中的东西的视角和风格进行沟通,而不需要把它分解给其他的美术人员。
Andrea:
你没有……嗯,也是就是或你是一个美术人员在跟其它美术人员交流?
提问者 8:
我是替一个朋友问的。(观众笑声)
Andrea:
你是替朋友问的。大概的情景就是,一个美术人员在给其他美术人员做展示?
提问者 8:
是的。
Andrea:
好的,这就简单多了。慢慢来,让他们去探索,告诉他们『试试这个,如果它能启发你,那么就用它。如果不能启发你,那么你还是用这个思路找一个更能启发你的方向』,但是同样也要给他们一些自治权、一点权威性,而不是贸然行事。这样可以吗?
提问者8:
嗯。
Andrea:
有帮助吗?
提问者8:
是的。谢谢。
提问者9:
你好。
Andrea:
你好。
提问者9:
谢谢你的演讲。关于小公举那部分,当你们一起进行一个设计的时候,什么时候顺从来达到团队士气目的是最好的?比如,你非常有激情,你非常相信它对项目有帮助,但是你知道如果你让别人停工的话……
Andrea:
你不想让别人停工?为什么不呢?
提问者9:
呃,当团队士气降低的时候,我觉得产品是最重要的。
Andrea:
所以你觉得你对团队士气是负有责任的?
提问者9:
是的。
Andrea:
不,你没有。说出你的想法,有可能另外一个人会觉得『哦我的天哪,这个太棒了』,然后想到了别的东西,而这个对话可能就会发展成一个非常大而且也更好的东西。而如果他们不喜欢这个想法,他们会说他们不喜欢它的。没事的,不要为这个担心。如果你有好主意,就应该大声说出来。希望有帮助。
还有人吗?好的。谢谢大家,非常感谢。(观众掌声)享受今晚剩下的时间。
24. 开发与发布虚幻引擎 4 VR 游戏
By Wes Bunn (Epic)、Steve Bowler and Jeremy Chapman (CloudGate)
鸽了
25也鸽了
目录