【彩虹六号:围攻 】使得丰富的“突破”成为可能的破坏系统
深奥的战术游戏的背景下,最新的程序化破坏技术【REALBLAST】!
 
 
进行演讲的是Ubisoft Montreal的Julien L'Heureux
 
破坏系统与游戏性直接连接正是【彩虹六号:围攻】的概念
 
    战斗大部分是在室内展开的。固守的恐怖份子在各处设置路障,强化墙壁,设置陷阱等来防备入侵者。视图侵入的反恐部队使用手榴弹和爆破***(Breach Charge)等各种爆炸物,以及铝热焊,还有大型锤作为“攻城兵器”打破墙壁,破坏路障,执行作战。还有可以用子弹在墙壁上打孔,当作“枪眼”来狙击敌人。这种把细致大胆的破坏物体和游戏要素融合的作品,以前是从来没有的。
 
    成为实现本作深度战术玩法的核心的,不用说就是高度的破坏系统了。在GDC2016上进行的Session【The Art of Destruction in Rainbow Six: Siege】上,详细的揭露了这个秘密。这里介绍一下需要5年开发时间的实时破坏系统【REALBLAST】到底是什么吧。
 
【Tom Clancy’s Rainbow Six Siege - Gameplay Trailer Fall 2015】
 

通过实时分割多边形实现真正的程序化破坏系统

 
程序化破坏系统的研究开发是2012年开始的
 
首先是玻璃表面破坏原型的制作。
 
    进行本次演讲的是Ubisoft Montreal的技术总监,并担任物理系统程序员的Julien L'Heureux。Julien所属的Ubisoft的技术小组,是独立于各个产品开发,进行特殊研究开发的组织,集合了各个领域的专家。其中特别是破坏系统有专门的程序员小组,用了5年的时间开发了公司内部使用的实时破坏系统【REALBLAST】。
 
    【REALBLAST】的破坏表现包括的解决方案,由Runtime库,3D模型的分割工具,属性编辑器,调试器等组成。最初是在2013年发售的【刺客信条IV:黑旗】中使用。在描绘帆船之间破击战的作品中,在船体的破坏表现上被灵活的利用了。在此后的Ubisoft几个游戏也有使用,继而在本作【彩虹六号:围攻】中,作为游戏的核心要素来使用了。
 
2013年开发的,包括程序化破化系统的原型。和现在的本作一样可以进行各种破坏,但运行负载很大。
 
破坏各种表面,侵入,视线确保,进行攻击这样的游戏配置。
 
实时的进行多边形的剪切,这个处理是在2D上执行的
 
按剪切的的形状切割多边形
 
【彩虹六号:围攻 】要求的水准非常高,首先是游戏性要素,要有正确而可以无限破坏的可能,而且可以强化墙壁和设置路障,通过这些实现了丰富的防卫和攻击战术。为了实现这些,墙壁,路障,地板,活动门等,都需要按结构可以应程序化破坏来构筑系统。
 
    这里最大的重点的是,对玻璃,墙壁,地板等平面的程序化破坏系统。本作除了非常厚的混凝土以外,所有墙壁的任何位置都可以被破坏。正确的表现破坏了的位置也很重要,必须要精细的再现玩家的想法和技术。
 
    实现这些所采用的,是实时的多边形分割的程序化破坏算法。
 
    这个方法是把墙壁作为1个多边形来表现。然后,用显示破坏和范围对2D多边形剪切,再同它来分割3D多边形。把它变成实时的程序化,就是制作破坏后形状的方式了。
 
    这时的剪切形状,也可以根据破坏手段和破坏对象的材质定义样式。铝热法的破坏使用的是四方形的边界线,混凝土破碎的情况,是使用沃罗诺伊图(Voronoi)计算出分割的相撞,玻璃和水泥砖墙等有特点的破坏样式,是通过Texture显示破坏形状来定义的。
 
    因为破坏的位置非常自由,包含多个材质的破坏,以及保持多个图层的构造的墙壁破坏都是很难表现的。问题是会占用大量的内存和处理时间。把这些方法组合起来,就成为了丰富多彩有说服力的”破坏的形式“的表现。
 
 
切割破坏表面的形状可以任意的使用,表现出丰富的破坏模式
 

在大量破坏的负荷下维持60fps的游戏性

 
通过多边形切断面和Texture的修饰来提升视觉品质
 
配合破坏更行AI的导航网格
 
复杂的破坏需要1帧以上的时间
 
    虽然如此,每次破坏墙壁时帧率大幅降低会破坏游戏体验。需要让这个复杂算法可以一直以60fps运行才行
    
   分割多边形的墙壁多边形的直接更新就可以,实际上为了提高视觉品质,对破坏后的模型由破坏造成的边界部分的修饰,是使用Decal Texture来增加污秽的表现,实现更有说服力的外观。
 
    然后,作为碰撞形状的判定的网格,导航网格,以及声音的反应系统数据也要更新。只要一个墙壁破坏,就要给予游戏中大部分子系统影响,必须更新各种数据,会消耗非常多的处理时间。
    
    具体的数据上,以PS4为标准,创建一个弹孔需要1.1ms(毫秒),破坏一个石头砌成的墙壁需要2.8ms,破坏2层石头+2层木板构成的墙壁需要19.5ms。实际运行时,一次爆炸会破坏多个墙壁,也可能把其他的物理对象卷入破坏,多个爆发同时发生也说不定,无法保证稳定的运行。
 
       本作采用方法是破坏处理的异步化。投掷手雷,爆破炸弹打开开关时,玩家触发爆炸的时候(在实际产生爆炸前)就开始破坏物体对象的处理。。每帧进行少许破坏的模拟。在模拟完成后,执行爆破动画把动态的破坏模拟的结果反映到游戏里。因为这种方式,大规模破坏的情况下按下按钮之后的墙壁破坏还是会有“延迟”的感觉。
 
   把破坏模拟按时间来分割,一小部分使用多线程处理。破坏模拟的个处理分隔为小单位的函数,1帧没有处理完的部分就规划在后面的帧里,这部分是调试非常困难的瓶颈所在。。
 
    【彩虹六号:围攻】通过以上这些方法实现了高品质的破坏表现。这个破坏系统要占用近400M的内存,完全是面向次世代机种的技术。这个效果也是所有玩过本作的人都指导的。看到这种对新技术开发的追求态度,不得不赞扬把精彩的升华了游戏性的Ubisoft。
 
异步预破坏的技术,用户输入确定破坏的时候就开始处理了。
 
打洞过于复杂,是在墙壁上进行自我破坏来优化

GDC2016【彩虹六号:围攻 】使丰富的“突破”成为可能的破坏系统的更多相关文章

  1. "六号标题"组件:<h6> —— 快应用组件库H-UI

     <import name="h6" src="../Common/ui/h-ui/text/c_h6"></import> < ...

  2. C#如何使SQLite程序集既能适应32位系统也能适应64位系统

    分享5: 需求:都知道Sqlite3是分32位和64位版本的,那如果将一个Sqlite3.dll文件全适用 分析:Sqlite是种轻量级的数据库文件,使用了混合编程而成的,一部分采用非托管的C++代码 ...

  3. The Definitive Guide To Django 2 学习笔记(六) 第四章 模板 (二)使用模板系统

    模板系统不是django特有的,它是python的一个库,你可以在任何地方使用它. 使用方法: 1.使用 Template()方法创建Template对象.2.调用Template对象的render( ...

  4. 使 windows 无需输入开机密码自动进入系统

    步骤 运行netplwiz: 勾去图中所示复选框,确定后输入密码.

  5. IT知识大扫盲

    做了这么多软件开发,下列一些知识不一定都懂. 首先,说一些电子商务扫盲的名词: 常见的电子商务类型有:C2C.B2B.B2C.C2B.O2O等等,下面来简要说明下这几种类型. C2C(Customer ...

  6. Android传感器【转】

    本文转载自:http://blog.csdn.net/ffmxnjm/article/details/52101592?locationNum=3&fps=1 传感器的意义 事实上,目前智能手 ...

  7. 2000G电脑大型单机游戏合集

    激活码 游戏名称(ctrl+F查找) 下载链接005875 艾迪芬奇的记忆 游戏下载链接http://pan.baidu.com/s/1t2PYRAj546_1AcOB-khJZg554158 暗影: ...

  8. 剖析虚幻渲染体系(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. ...

  9. 骗访问量的机房人物列传by xMinh

    作者:$xMinh$ 人物列传·Refun(Aufun,虚凡,人赢) 机房最人赢的人赢,上过表白墙的男人 在宿舍公然开设情感讲座和人赢培训班,教学成果显著,他的徒弟要么gay了要么凉了 认识的人极其广 ...

随机推荐

  1. gitlab web登入密码忘记以后可以用如下方式修改密码

    ➜ ~ gitlab-rails console production Loading production environment (Rails ) irb(main)::> ➜ ~ gitl ...

  2. 百万用户时尚分享网站feed系统扩展实践

    Fashiolista是一个在线的时尚交流网站,用户可以在上面建立自己的档案,和他人分享自己的以及在浏览网页时看到的时尚物品.目前,Fashiolista的用户来自于全球100多个国家,用户达百万级, ...

  3. wp8 --未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出

    今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目,但是并没有像之前那样顺利的创建页面,而是弹出了一个错误窗口. 我的系统是win8专业版 64位 ,同时 ...

  4. laravel 分页

    因为Laravel默认使用的是en语言文件所有咱们相应使用中文分页提示的话,可以按如下步骤操作: laravel4------------------------------------------- ...

  5. hdu 1281 二分图匹配

    题目:在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下.但是某些格子若不放子,就 无法保证放尽量多的“车”,这样的格子被称做重要点 ...

  6. 十六进制数'\0x'和'\x'有什么区别?(转)

    区别不大,都是把数按16进制输出. \0x:当输出的数转换为16进制只有1位时,在前面补0,如 0a,其它情况按照实际情况输出. \x:按照输出数转换为16进制的实际位数输出. 此外,小写x和大写X也 ...

  7. JavaScript案例三:动态显示时间

    用JavaScript实现在页面上动态的显示时间 <!DOCTYPE html> <html> <head> <title>JavaScript动态显示 ...

  8. Android的ListView详解

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  9. loadrunner个版本历程

    1.工具介绍: LoadRunner是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题, LoadRunner能够对整个企业架构进行测试.通过 ...

  10. linux中使用top获取进程的资源占用信息

    在linux中使用top获取进程的资源占用信息: Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0 ...