深入Guerrilla Games解密次世代开山大作《杀戮地带暗影坠落》(The technology of Killzone Shadow Fall)
文章摘要:这几天终于有时间,把全文翻译完了,自己感觉不是太满意,不过大家能看懂就好,就当一个学习的机会。整篇文章通过SONY第一方游戏工作室Guerrilla Games主创的语录,为我们展现了次世代大作的初次开发探索过程,个人感觉全文还是非常振奋人心的。文章首先从音频技术的创新谈起,由于机能的长足进步,通过技术底层架构的大量工作,使得游戏设计师的创意被极大的释放,不用时时刻刻纠缠忙碌的程序员,同时程序员也得到了解放,这可以大大的推进游戏的开发进程。接下来谈到了游戏动画制作流程的创新,同样的,程序员和设计师都被新技术解放出来,为未来超大型游戏的复杂且真实的动画提供了可能。以上都是为了构建游戏真实性而做的所谓“不可见”的工作,却使游戏的真实性,可信性得到了极大的进步。接下来是大家最感兴趣的画面渲染,光照方面的内容(所谓“可见”的部分),这就不剧透了,最后谈到了PS4未来的杀手锏技术(译者注:这类似PS3后期对于CELL的协处理器SPE的挖掘,极大的展现了PS3的前瞻性与潜力)——GPU通用计算在次世代游戏中的运用。
以上是对大篇幅文章感到望而却步的读者一个小小的引导,废话不说了,请看下面的正文。
第一部分:次世代音效引擎的创新
这是一个无法抗拒的机会。就在Killzone Shadow Fall发售之前,Guerrilla Games邀请我们访问他们在阿姆斯特丹工作室——在内部座谈主要设计和技术准则。我们作为记者对于这些技术层面的东西几乎都属于隔岸观火,对于设计工序不是很了解,所以这次高规格的意外之旅应该会让这篇文章格外不同。整个访问过程,我们迅速的意识到次世代不仅仅是更好的图形,更好的音效(当然这些绝对是至关重要的部分),而是赋予开发者更强大的力量让作为创作者的他们可以更好的表达自己(的构思想法)。
图形和声音这两个系统,作为这个游戏元素程序生成算法的一个关键部分获益最大。Killzone Shadow Fall在这两个游戏元素的掌控上获得了质的改变,一个底层系统被创造出来,替代由程序员对于创造性元素定制的高级代码,允许设计师对于游戏原数据有更大的权限。当他们刻画出一些新的游戏元素,这些元素被转化为原数据,程序生成算法产生的代码就可以被PS4的x86处理器执行了。
“在这个工程上,我们试图把音效程序员从大量的工作中释放出来,实现如果音效工程师有什么想法,如果这个系统可以支持,他们自己就可以搞定。”主程序员Andreas Varga说道。
“之前音效工程师就是那些制作wave文件的家伙,音效程序员就把这些wave文件放到游戏里让他们和游戏融为一体并跑起来。现在我们改动一些,其他所有相关部分就会自我驱动。我们在一个工具里做些事,程序代码会自动在底层完成”他接着解释道。
本质上,与其编写特定的基于某个想法的代码,而这些代码还不一定可以跑起来,还不如让程序员创造工具直接给设计师用。Killzone Shadow Fall有如此惊人的音效体验正是基于这样的新工作流。举一个关键的例子吧,游戏中突突突音效就是基于玩家当时所处的环境塑造出来的,就像他们在现实生活中一样。
“游戏中各个地方都有材质(墙面,岩石,各种不同的东西),这些材质都被标记相应的几何学用途…在游戏中,突突突声波被各种表面反射,任何时候都是如此。”主音效设计师Lewis James说道。“在现实中,当你开枪,突突突不过是枪内部作用的副产品。这确是游戏中务必需要真实再现表达的部分——突突突”
“但是让这所有的事情发生——枪发出的声波压当它有足够的力量与它所接触的材质发生互动,所以我们需要做一个叫做MADDER——材质依赖的早期反射系统。任何时候,我们都让游戏中枪发出的振波在各种材质间反射。这样来定义音效。重点是没有那种混响虚假——因为本来就不是,这是基于几何学的实时反射。”
MADDER是设计师和程序员之间新型关系的完美例子,描绘了如何为原数据创作打开更多底层操作的大门。
“对于首个MADDER原型,只允许有一次射线投射,所以它给了我们一个最接近的墙,特定材质,特定角度的墙。好吧.....我们尝试了下,听起来好极了,没有那个游戏能有这样的效果,但是事实上我们需要把这个用于所有不同的墙上。”主音效设计师Anton Woldhek这样描述。
“Andreas仅仅为多角度做展示需要半小时工作。对我来说可是大量的工作,因为我不得不让内容和所有的不同的角度运作起来并且要确保最终逻辑上能合理。这给了你更多的自由去尝试那些总冒出来的新想法,但不用经常去为此说服程序员这值得努力去做而同时你都不是很确定是否值得的,这个更难做,因为他们的时间太宝贵了。”
“程序员的目标是确保设计师不用和他们沟通。不是因为我们不喜欢设计师,而是如果程序员处于创作的循环中,那多半程序员的迭代时间和其他人比低很多”
而且本质上,所有的由动画设计师产出的素材现在都是在底层系统处理,在游戏中作为代码执行——PS4提升的CPU能力才能让这成为可能。程序生成的内容也延伸到动画,这就是Killzone Shadow Fall展示的一场“无法看见的”的革+命。角色外观和动作方面更多样化了恰恰是由于同样的程序驱动化工作流。
“我们只需要一个基本骨骼,然后我们把程序骨骼加到顶端。接下来我们有叫做PD的玩意——基于位置的力学系统。那基本上就是我们现在完成的格式。”主技术美术师Daniele Antinolfi解释道。
“你不得不设想程序骨骼就好比是角色的盔甲(所以我们就可以从相同角色那分享视图中的绑定点但是我们可以添加到顶端),就像盔甲的关节是为了能加入更好的行为。”从角色到角色,我们加入这个盔甲从而创造更好,更可信的角色。通过这种方式我们可以创造更多扎实的可信的角色。程序关节外壳真的是多快好省。”
第二部分:次世代动画制作流程的创新
自然且可信
大体上,存在一个基础动画绑定平台,对开发者而言仅仅是对个体添加一些小的细节都是极度困难的。过去,对新角色动画另可搁置也不会费力调整或者添加到基本骨骼。随着新的程序化流程,每一个角色都会有一个附加的代码运行层级,添加特定角色的“外壳”到基本骨骼。而且,这些代码就会被x86内核实时执行。在这之上,基于位置的动力学允许真实的布料模拟等等,并在运动中真实的做出反应。
技术指导Michiel van der Leeuw澄清了一些问题以及新系统如何运作:
“问题是我们有2500个动画赋予角色。每个家伙都定制不太现实。我们需要把他们的骨头嫁接到整个游戏都会用到的基础骨骼上,然后输出整个动画设置” 他解释道。
“一些人还需要周末独自加班。如果你打乱了整个游戏的动画设置,啥都毁了。由于游戏不断扩充,有些东西可能半年都不能输出。我们可能会有这样可笑而繁复的讨论,关于,比如做一个穿盔甲的家伙后面再弄个坦克,但是却需要加上两个关节。这太经常了,我们刚把一个角色废掉继续游戏设计就说:不能这么搞——在游戏的这个点上,我们无法输出动画。”
“但是现在有了逻辑骨骼一切都变的简洁了,这些家伙可以在上面做非常生动的东西。看起来很酷,但也意味着如果他们想要一个家伙变得高点,胖点或者来一个特制盾牌,我们能回到游戏设计,并频繁的表示“好吧”。”
“很多东西是察觉不到的,但是却让角色更可信——这真的就是我们想要的。我们这些做角色就是希望角色更可信啊”
下面是另一个关于次世代强大机能带给开发者更多机会,创造更自然更可信的游戏的例子。
“这是许多人谈论次世代,却无法看到的。事实上,你看不到是因为通常人们被局限在设计项目中——没有那些外衣,没有涉及到这些东西。你就会看不到。”van der Leeuw接着说。
“你得到的角色都差不多——一个士兵和一个士兵兵。现在这些界限消失了。事实上不是某个家伙有次世代外衣,而是我们有时间做到,在同一个游戏里让一个家伙穿这个外衣,一个家伙穿上防毒面具,一个家伙背后有个带散弹桶的枪。”
“我们对这个系统很有爱” 主技术美术师Perry Leijten补充道。“一开始我们也不清楚,这个基于位置的动力学有多大用处,我们就尽全力做了个拉锁。不太可行,我们索性打断了与基于位置的动力学之间的连接,再次输出,甚至都不给计算。”
“很多东西是察觉不到的,但是却让角色更可信,”Daniele Antinolfi总结到。“这就是我们最想要的。我们这些做角色就是希望角色更可信啊。”
Guerrilla在探索新技术方面的的先锋精神,更令人深刻印象的是,在PS4技术的研发阶段,Killzone Shadow Fall已经在基于PC硬件上的开发取得的进展(事实上,Killzone的引擎同时有个PC版本,由于PS4开发的展开,平行的PC版本相比之下就慢下来了)。加上这个游戏首发的压力,Guerrilla大胆的做出决定,从核心系统切入,从零开始开发,不过,选择显然得到了回报。
“让每一个人都使用相同的工作流并成为它的一部分真的太明智了…大家作为开发团队和之前相比更加和谐,更加团结,更加能相互助力。”
“作为设计师,让每一个人都使用相同的工作流并成为它的一部分真的太明智了,”音效师Anton Woldhek说到。“音效设计师几乎处于工作室的中心,这样我们就能和各个部门轻松互动。有了这样的工具,我们也成为了工作流程的一部分,这就意味着大家作为开发团队和之前相比更加和谐,更加团结,更加能相互助力。”
Michiel van der Leeuw简要总结了新方法:
“程序员的目标是确保设计师不用和他们沟通。不是因为我们不喜欢设计师,而是如果程序员处于创作的循环中,那多半程序员的迭代时间和其他人比低很多”他解释道。
“与让程序员重编译引擎相比,一个材质艺术家可以画的更快,一个音效设计师可以更快的完成音效,这让游戏可以运行,并能听到点什么。任何时候当编码人员处于某人的创作循环中,这个创作流程就会相对变慢。如果我们做一个相当的技术系统允许任何人做更多工作,我们让程序员剥离创作流程,人们可以在不需要编码员的情况下做各种尝试。”
第三部分:次世代图形渲染技术的创新
一:挑战基于物理渲染的模型
从“不可见的”到完全“可见”的:显然你看到Killzone Shadow Fall战役模式的第一秒就能感受到这真是一个美丽的游戏,尽管那些深刻的工作流的变化发生在场景背后。有两个关键元素,让这个你所期望的,有如此多边形表现的次世代标题看起来里里外外都惊世骇俗。这就是材质和光照的表现,十分的卓越:这两个系统在游戏中一唱一和,创造出那些仍然还在开发中的次世代游戏才会具有的美感。
通过巨大的扩展,光照被环境材质所有定义。同样一个物体的“粗糙程度”不但给MADDER音效系统提供信息,同时也能帮助定义光线如何在材质上反射,并和其他方面的组成部分混合起来。创造如此材质,这为艺术家的工作方式带来了巨大改变。
“在Doom1开发的早期岁月,每个人都需要把阴影画到贴图上。在某个阶段的次世代,人们需要学会不要在贴图上画任何东西。他们不得不做一个法线贴图和一个反照率贴图”Michiel van der Leeuw回忆说。
“现在每个人都需要学习如何画粗糙度,反照率(材质的反射度),凹凸,高光强度。你不得不思考下裸露情况下的材质。你不得不去掉倾向性然后变得善于分析。这是大家需要多多训练的难题。”
“在PS3上,我们最多能使用7000-8000个建筑模块,但是现在在PS4上我们可以做到26000个。过去我们的这些元素是2个等级的LOD(多细节层次),现在是7个等级。”
想想每一个游戏中的物体都需要被创造新的基于材质的光照系统,对于这样规模的新游戏不是一个小差事。Guerrilla在Killzone Shadow Fall中创造了非常庞大的层级,然后分解他们到不同场景,这样可以让不同层面的环境设计师同时开工。
“对于一个场景——我们称作关卡——在PS3上,我们最多能使用7000-8000个建筑模块,但是现在在PS4上我们可以做到26000个。过去我们的这些元素是2个等级的LOD(多细节层次),现在是7个等级。”首席环境艺术家Kim van Heest说道。
“让关卡看起来更美丽变的容易多了。我们真的可以滥用多边形了…如果你看看那个制作规模,我想粗略的统计是KZ3的4倍吧。这意味着我们可以做出如此的环境,但是光照仍然需要很注意”
伴随在适当位置的材质元素(这个例子是关于光线如何和各种材质属性互动)以及这些元素如何影响对环境的创造。Killzone Shadow Fall使用的系统,深度基于现实情况的实时光照,光照烘培经由预计算备份,混合一体制造出惊人的结果。
“光照是我们的游戏组成的关键元素,从根本上来说是为静态和动态物体准备的,预烘培光照支持下的实时动态光照系统,反射系统亦是如此。”主灯光师Julian Fries说道 “我们是预计算反射再加上实时反射,但是这些都始于动态光照特性,这些特性用于动态光源,其他光源根本上也支持。”
在这里,“其他光源”主要由直接光照贴图,本地立方贴图以及一个灯光探测器体积栅格组成。但是这些灯光探测器的利用是实时组件的一部分,并以一种非常独特的行为被处理。
“屏幕上的每一个像素都不是使用光照贴图,我们通过寻找这个灯光探测器的巨大网格,然后选择最接近的光照” 主技术编码员Michal Valient说道。
“我们是预计算反射再加上实时反射,但是这些都始于动态光照特性,这些特性用于动态光源,其他光源本质上也支持。”
“之前,我们有几千个灯光探测器在每个层级,对于每个物体,他们要选取和混合3个最接近的。现在,我们大概有比之前多两个数量级灯光探测器。我们估摸着,然后针对每个像素找最接近的4个灯光探测器,这样就没有边界了”Michiel van der Leeuw补充道。
“这个介于灯光探测器的结束也就是光照贴图的开始的边界削弱并相交了——我们想要每个点多于一到两个数量级的灯光探测器——数百万个每个层级,废掉了光照贴图。”
二:光线跟踪反射系统
Killzone Shadow Fall的反射系统同样有助于呈现那些喜闻乐见的壮观光照特效。Michal Valient在前面详细介绍了基本原理(详见post-mortem of the PlayStation Meeting demo这篇文章),这次我们将在工作室之旅中更加深入的了解。
“我们在屏幕上,对每一个像素所做的是执行合适的光线追踪或者光线步进步骤。我们找到一个反射向量,观察表面的粗糙程度,如果你有一个非常粗糙的表面,这意味着你的反射在这个案例上就是非常模糊不清的。” 他解释道。
“所以我们要做的就是为每一个像素的找到一个反射,我们找到一个反射向量进入屏幕,然后本质上就是开始步进每一个像素直到我们找到撞上什么。这是2.5D光线追踪…我们可以计算一个草稿,向量可以到那儿的近似值,然后我们可以找到表示那个表面的屏幕上的像素,这些全部将和我们的光照模型融为一体。”
“看着两个系统新老更替确实很纠结。我们有预烘培立方贴图,实时光线追踪反射,还有反射灯光源,他们全部在一个场景里混合。”Michiel van der Leeuw补充道。
光照备用系统真是出乎意料的酷(通过使用光线投射算法),还是有一些公认的限制存在。光源在物体后面的话,反射系统就失灵了,但是算法知道,它会退回预计算光照数据,调用必要的数据。不是很精确,但是对人眼来说确是足够好了。基于材质的光照快速的成为次世代的标准,Killzone Shadow Fall是第一个我们在PS4上尝试实际使用这种新技术的游戏。
“如果你把一切都做到绝对的物理上的正确,你就没有任何可能升华一些东西了。我们不是做照片或者超写实,我们要做的是,尽量让画面看起来最大限度的赏心悦目。”
“我要说这将成为次世代的标准。每个工作室都将会做出这种技术的变体,因为这就像屏幕空间环境光遮蔽。它非常粗略的接近自然现象…就是那种你看起来会觉得很信服的真实” van der Leeuw解释道。
“这个是技术上可行的,每个工作室在权衡利弊后都会研发出类似这种技术的变体。每工作室都会对类似这种技术进行实验。每一个努力把障眼法耍的更好的人都清楚,能量维持光照模型需要粗略度值,而这个值天然就匹配光照模型对每个物体及每个像素的反射需要,你懂的,反射锥。”
当我们在雕琢关卡的时候,它同样勾起了一些有趣的挑战和契机:
“我们有过一个关卡,起初我们想要一些暗的材质,我们发现这些材质对光照的表现不佳,所以我们加进亮些的材质来让光照表现的更好” Kim van Heest解释道,这是在展现光照系统如何为灯光组开启新思路来改善关卡的视觉方面之前。
“我们担心的光照方式就是一个灯光师跑上来,然后说:能不能打开那个屋顶让光能进入?这会看起来更好,你会在墙上得到更好的阴影。这更多的是关于如何能看起来更酷,而和技术调整没太多关系。”
三:全局光照,抗锯齿和环境光散射
最近,Nvidia放出了一个技术演示展示了完全实时全局光照——作为未来游戏的光照,计算如此精确的模型需要一些时间才能看到。在我们最近的Crytek访谈中,Cevat Yerli表达了这样的关切,这样过于精确的光照解决方案反而会让设计师丢失很多控制力——英雄所见略同啊,Guerrilla也是如此思考的。
“绝对如此” 主灯光师解释道,“如果你把一切都做到绝对的物理上的正确,你就没有任何可能升华一些东西了。我们不是做照片或者超写实,我们要做的是,尽量让画面看起来最大限度的赏心悦目。”
“举个例子,你想要额外的光线反射发生在一个房间里,由于对比度和亮度的原因,而不希望发生在另外一个房间里,只要不是那种类型的光照系统,我们还有可能去烘培这些东西。显然,鱼和熊掌不可兼得。质量方面可能会下降,而预烘焙特定东西的好处是,对这个区域的你的游戏元素如果你不需要它了,你需要一个不需要调整的静态光源,我猜是因为性能或者质量原因吧,烘焙此类东西高效很多。”
然而烘焙和优化都遇到了各自的挑战——在最终游戏元素能被用于游戏中之前,预计算需要做巨量的处理,在Guerrilla这要求一项的创新解决方案。
“在夜间,整个公司就成为了一个渲染农场,我们仍然需要三个哥们儿推进渲染进程。质量是最为重要的。”
“在上个世代,好多人放弃了光照贴图,因为他们实在苦恼与它相处,在这个项目上,我们再次体验它,在这我们有难以置信的长周转时间应付光照贴图” Michiel van der Leeuw解释道。
“这个游戏和之前世代相比规模庞大多了…我们不得不把整个公司变成一个巨大的渲染农场。当员工下午5点下班离开他们的电脑,它会说,想加入渲染组吗?如果你没有回应,或者没有选择离开,那就得加入进去——在夜间,整个公司就成为了一个渲染农场,我们仍然需要三个哥们推进渲染进程。质量是最重要的。”
Guerrilla选择了高质量的抗锯齿方案。回顾二月的披露,FXAA的利用伴随着确定的暗示,一个大为改进的TMAA解决方案在索尼高级技术组的开发中。TMAA现在是TSSAA——随机超采样抗锯齿。
“和FXAA仍然很类似。不完全是FXAA,是类似的滤镜,但是质量高得多” Michal Valient解释道。
“仍然是屏幕空间的TSSAA——我们丢弃了深度次采样。我们还是有那个次采样的,是用于重建边缘,但是非常昂贵啊,用处也有限就去掉了” van der Leeuw补充道。
“我们从前面的帧数收集采样,试图把它们以及由FXAA派生的基础融合为混合物,就是一些混合了些许随机数的东西,试图从前面的帧里找到些什么。”
“我们对于先前帧的利用非常的谨慎。如果这一帧不错,为什么要扔掉呢?我们基本上尽可能多的收集先前帧的像素,你可以用于这一个也可以投影变换他们。” Valient补充道 “我们获得更多的像素采样。通常,我们需要采取超采样或者多重采样以获得近似的效果。我们试图从先前帧获得数据。”
重复使用已经存在的数据对于其他系统的开发者可谓司空见惯——Guerrilla用这个不仅仅是为了抗锯齿,而且也用于环境光散射。但是这个不是你们标准屏幕空间处理方式:
“它被成为环境光吸收。这是我们光线反射系统的副产品。我们使用技术为反射决定多少空间是真的可见的,从一个特定的点,我们重复使用相同的信息用于AO(环境光散射)” Michal Valient解释道 “AO(环境光散射),你思考一下他们,其实他们和反射没什么两样,但是有更宽的裂片。你想知道关于整个围绕任何点的半球,多少可见?这样你就可以重复使用那些信息。我不太情愿称之为SSAO(屏幕空间环境光遮蔽),因为这里面有太多绝招让它看起来更好”
第四部分:GPU通用计算——PS4的未来
GPU通用计算——看起来这个领域就是给予PS4长久活力的最佳装备——Guerrilla在他们的第一个次世代游戏中也进行了探索。在最终游戏中,色彩矫正和“力场”也是由GPU的核心运作的。力场是另一个例子关于不可见的系统,它却使游戏看起来更加自然。
“这不是你在那些Demos中可见的系统,比如瀑布进入水坝溅起漂亮的波浪。这些有点不太可控,我们想要某种艺术上的可控。” Michal Valient解释道。
“那些力场是一些对象,艺术家们可以放置。他们放置它们围绕角色的脚,比如,当那些角色步行穿越草丛,他们动一下。我们把他们绑定在炸弹上,如果你扔一个手榴弹,就在一瞬间,它就会创造力场。如果你发射一个火箭,它也创造力场。这实际上允许艺术家有更好层次的控制,它也会表现的更好。从技术角度而已,我们围绕作为玩家的你所做的,是我们拥有的这个有不计其数的点的巨大体积。”
“我们还有很长的路要走。我们在这个领域还很嫩。PS4非常好用,我认为我们运用的很不错,但是不论我们下面会做什么,都将更好,因为我们始终坚持技术的推陈出新。”
“我们在每一帧都实际模拟这些力量,所以我们**力场做模拟,对每个围绕你的,在这个体积里的点——然后每个东西都可以利用起来” Valient接着说。“植物在一个材质中用它,树用它,如果角色有斗篷,如果那有一个爆炸,他们可以利用它抖动斗篷。那是让你感觉更自然的小东西,也是让游戏世界看起来更可信的东西。”
就是那些极其得益于在并行计算处理系统中执行的工作,PS4专门利用GPU通用计算来执行这些任务。
“我们试图发挥GPU通用计算到极致。有太多同步的东西,就是那些渲染进程中需要发生的同步,但是那些同步的东西会发生在任一点,所以我们试图榨干一切。”Valient说道。
“我们刚刚触及皮毛。我们采用了力场、色彩矫正系统、内存碎片整理——这是我们用于贴图流的。那些我们选取出来,作为独立系统的一大推东西很好的执行于GPU通用计算,所以我们就尝试了那些。我们大部分其他的东西运作于通常的像素渲染管线,甚至一些后期处理效果,所以我们将会改进。”
“很自然的,我们把后期处理效果用于通用计算,那会非常有效率的,所以我们的下一步(但是我们在这个游戏上的时间不多了),我们十分确定可以改进很多——有太多需要探索的空间了。”
所以,那将是一个怎样的未来?当我们访问Guerrilla时候,这个小组任然处于高涨的Killzone Shadow Fall的开发中,同时我们谈论了深度强化的,已经存在的系统,比如它们对动画的创新解决方案。我们也只能得到一些关于公司企划中的下一个PS4游戏的大致轮廓。
“我们还有很长的路要走。我们在这个领域还很嫩。PS4非常好用,我认为我们运用的很不错,但是不论我们下面会做什么,都将更好,因为我们始终坚持技术的推陈出新” Michal Valient说道。
“在 Killzone 2项目上,我们思路对了,我们真的获益匪浅。 Killzone 3展示了我们可以漂亮的利用两倍的预算,因为我们需要更多以用于开发更好的技术。我非常肯定,我们未来的空间更加广大。”
深入Guerrilla Games解密次世代开山大作《杀戮地带暗影坠落》(The technology of Killzone Shadow Fall)的更多相关文章
- AI PRO I 第4章
Behavior Selection Algorithms An Overview Michael Dawe, Steve Gargolinski, Luke Dicken, Troy Humphre ...
- 【C/C++开发】c++ 工具库 (zz)
下面是收集的一些开发工具包,主要是C/C++方面的,涉及图形.图像.游戏.人工智能等各个方面,感觉是一个比较全的资源.供参考! 原文的出处:http://www.codemonsters.de/ho ...
- StartDT AI Lab | 视觉智能引擎之算法模型加速
通过StartDT AI Lab专栏之前多篇文章叙述,相信大家已经对计算机视觉技术及人工智能算法在奇点云AIOT战略中的支撑作用有了很好的理解.同样,这种业务牵引,技术覆盖的模式也收获了市场的良好反响 ...
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
- 【翻译】KNACK制作介绍
KNACK 次世代游戏机的性能开发新世界,PlayStation 4首发游戏的舞台幕后 配合PS4的国内首发,作为SCE的第一个游戏发售的本作. 一边加入发挥次世代机机能的表现,设计了谁都可以 ...
- GAME-BASED LEARNING
https://collegestar.org/modules/game-based-learning Introduction Appalachian State University Game ...
- hack games
记下,有时间玩玩~ wargame http://www.wechall.net/lang_ranking/en --------------- Monyer系列(黑客游戏) 1. http://mo ...
- 如何使用Python-GnuPG和Python3 实现数据的解密和加密
介绍 GnuPG包提供用于生成和存储加密密钥的完整解决方案.它还允许您加密和签名数据和通信. 在本教程中,您将创建一系列使用Python 3和python-gnupg模块的脚本.这些脚本允许您对多个文 ...
- [高并发]Java高并发编程系列开山篇--线程实现
Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...
随机推荐
- go——切片(二)
切片是一种数据结构,这种数据结构便于使用和管理数据集合. 切片是围绕动态数组的概念构建的,可以按需自动增长和缩小. 切片的动态增长是通过内置函数append来实现的.这个函数可以快速且高效地增长切片. ...
- day4 字符串的使用方法
一.字符串切片 索引和切片 [起始位置:结束位置:步长] s1 = 'python全栈8期' # 索引从0开始[索引(下标,index)] print(s1[0]) print(s1[3]) prin ...
- kubeadm方式安装kubernetes
系统: Ubuntu 18.04.2 LTS 内存: 8G 机器: 属性 IP Hostname ssh Master 192.168.91.48 blackray-pc node1 1 ...
- java路径两种写法"/"和"\\"
String path="D:\\新建文件夹\\2.png"; File file=new File(path); System.out.println(file.exists() ...
- C++白盒测试最佳实践课程,3个免费名额火热申请中,31号前截止申请...
C++白盒测试最佳实践课程,3个免费名额火热申请中,31号前截止申请...http://automationqa.com/forum.php?mod=viewthread&tid=2561&a ...
- Python3.x:判断字符串是否为全数字、英文、大写、小写、空白字符
Python3.x:判断字符串是否为全数字.英文.大写.小写.空白字符 判断接字符串是否为数字: str = raw_input("please input the number:" ...
- 苹果Dock样式的菜单
在线演示 本地下载
- String创建方式的区别
String str0 = "abc"; String str1 = new String("abc"); 第一句执行后,会在String pool中创建一个& ...
- Metasploit – 内网连接
0x00 问题描述 在渗透测试时,metasploit往往作为后渗透工具,(因为远程溢出越来越少).我一般都是在获得一个webshell后,来使用metasploit进行信息采集,或者内网扫描等操作. ...
- Netty-SocketIO的Web推送实战应用
netty-socketio是一个开源的Socket.io服务器端的一个java的实现, 它基于Netty框架.可应用于服务端主动推送消息到客户端等场景,比如说股票价格变化.k线图的走势,和webso ...