【彩虹六号:围攻 】使得丰富的“突破”成为可能的破坏系统
深奥的战术游戏的背景下,最新的程序化破坏技术【 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。
异步预破坏的技术,用户输入确定破坏的时候就开始处理了。
打洞过于复杂,是在墙壁上进行自我破坏来优化

转载于:https://www.cnblogs.com/TracePlus/p/5305051.html

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

  1. 彩虹6号 计算机服务设置,彩虹六号围攻各选项效果解析与设置建议 画面优化设置方法...

    彩虹六号围攻的画面设置界面有很多选项,分别控制着不同的显示效果,不少玩家由于机器配置或是游玩体验不佳而不知道应该如何设置画面,于是小编就为大家带来了彩虹六号围攻画面设置完全指南,包含各选项效果解析与设 ...

  2. 修改彩虹六号围攻地区服务器,彩虹六号围攻

    彩虹六号围攻怎么改区?想来很多朋友都还不是很清楚吧,所以呢小编今天给大家带来的就是彩虹六号围攻更换区域方法介绍了,需要的朋友不妨进来看看. 彩虹六号围攻更换区域方法 要手动选择资料中心地区: • 开启 ...

  3. 彩虹六号计算机丢失,彩虹六号围攻配件消失被清空解决方法

    彩虹六号围攻配件消失被清空解决方法,由于同时在线的玩家比较多,服务器会出现问题,导致一些玩家的配件被清空,下面为大家介绍一种高效恢复被清空的配件涂装方法,有需要的玩家可以参考使用. 首先工作是我们右键 ...

  4. 彩虹六号计算机丢失,彩虹六号围攻干员及配件更新后消失的解决方法

    彩虹六号围攻干员及配件更新后消失的解决方法 首先我们配置好干员配件(楼主随便配的做演示) 接下来退出游戏可以看到云同步提醒,如果同步失败下次登录就可能出现没有干员的情况,为了演示,楼主直接点击右上角的 ...

  5. 彩虹6号联那个服务器延迟低,彩虹六号围攻减少卡顿和输入延迟方法介绍

    彩虹六号围攻减少卡顿和输入延迟方法介绍 2018-04-05 12:25:03来源:贴吧编辑:野狐禅评论(0) <彩虹六号围攻>如何减少卡顿和输入延迟呢?很多玩家都想知道,下面就为大家带来 ...

  6. 彩虹六号linux系统,明日方舟彩虹六号围攻联动版

    明日方舟彩虹六号围攻联动版是一款不可多得的超人气策略型塔防手游,游戏画风采用二次元日漫风格,人物角色形象塑造的十分精致完美,这款游戏将带来比以往更丰富的剧情故事以及战斗关卡,让玩家玩的更过瘾!喜欢塔防 ...

  7. 彩六怎么开自定义房间_彩虹六号围攻如何畅玩自定义模式_彩虹六号围攻自定义模式怎么玩_游戏堡...

    <彩虹六号:围攻(Tom Clancy's Rainbow Six Siege)>如何畅玩自定义模式,<彩虹六号:围攻(Tom Clancy's Rainbow Six Siege) ...

  8. 彩虹六号围攻服务器未响应,彩虹六号围攻运行错误解决办法汇总_3DM单机

    1. 首先打开steam和uplay[不要开始游戏]找到游戏根目录,找到battleye文件夹,运行BEservice[会弹一下框然后它自己关掉],然后找到根目录下的rainbowsix.exe运行进 ...

  9. 彩虹六号:围攻的数字创下纪录

    https://www.7gjf.com/zhanghaozhuanqu/r6 对于育碧而言,这是艰难的一周.他们不仅延迟了一些重要的游戏,而且还因为Breakpoint和The Division 2 ...

最新文章

  1. 入机器学习大坑,需要什么样的数学水平?
  2. Python常用语句及流程控制
  3. AllowOverride以及Options相关指令
  4. 直接拖动元器件_电子元器件常规检测和判断
  5. 发表自我的windows live writer
  6. 第三课 泛型+反射封装数据库访问层 2019-04-02
  7. [TJOI2011] 卡片(网络流 + 质因子优化建图)
  8. [js] Geolocation.getCurrentPosition()用来做什么的?在什么浏览器不受兼容?
  9. html里面怎么ul加高度,div里面嵌套了ul,为什么div的高度小于ul高度
  10. Python连接两个字符串并去除首尾重复子串
  11. python 语句执行顺序_一个针对 Python 语句执行顺序的练习
  12. ip伪装服务器_亚马逊测评还能做吗亚马逊静态ip测评
  13. WCF 4.0一个鲜为人知的改变[兼书名征集]
  14. java选课管理_学生选课管理系统(Java语言期末前测试)
  15. poi创建数据透视表_从数据透视表创建自定义报告
  16. 10分钟明白为什么要使用微服务
  17. windows无法完成格式化怎么办?
  18. Phpcms v9建站详细流程
  19. 比较两个字符串s1和s2的大小,如果s1s2,则输出一个正数;若s1=s2,则输出0;若s1小于s2,则输出一个负数。要求:不用strcpy函数;两个字符串用gets函数读入。
  20. 阿里开发者工具盘点:用它!让开发事半功倍

热门文章

  1. 怎么对接NODE.JS语言短信验证码接口?
  2. 详解在vue项目当中绑定键盘事件
  3. Redis 多路复用
  4. IDEA中引入jQuery不生效
  5. EXCEL函数LookUp, VLOOKUP及HLOOKUP函数
  6. 使用anaconda配置标配版gpu的torch==1.2.0(30系列以下显卡)
  7. 无需插件加速视频,“跳过广告”,倍速播放视频,chrome等游览器倍速播放视频
  8. Android项目实战--手机卫士15--设置手机归属地的样式以及显示位置
  9. ssm毕设项目中药城药材销售管理系统eah41(java+VUE+Mybatis+Maven+Mysql+sprnig)
  10. 如何使用 lightweight openpose 批量处理图片