【彩虹六号:围攻 】使得丰富的“突破”成为可能的破坏系统
深奥的战术游戏的背景下,最新的程序化破坏技术【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. 数字型 、String字符串转换

    Java代码 收藏代码 String str = "1,2,3,4,5,6" public int[] StringtoInt(String str) { int ret[] = ...

  2. Linux命令行下创建纳入版本控制下的新目录

    [root@ok 资料库]# svn mkdir test A test [root@ok 资料库]# svn ci -m "mkdir test" Adding 资料库/test ...

  3. vijos p1002 dp ***

    链接:点我 一开始的方程式很好写的,但是数据太大,考虑到石子数目很小,我们对其进行离散化,若相邻两点距离超过ya的值,则后面所有点都往前移动,这里ya的值是可以调整的 #include <ios ...

  4. hdu 4398 STL

    题意描述半天描述不好,直接粘贴了 Now your team is participating a programming contest whose rules are slightly diffe ...

  5. Android开发规范——命名 (转)

    转自: http://blog.sina.com.cn/s/blog_3f5dd7810101j4u2.html 在讲解命名规范前,先初略介绍下当前主要的标识符命名法和英文缩写规则. 标识符命名法 标 ...

  6. Fibonacci Again

    Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) ...

  7. stack UVA 442 Matrix Chain Multiplication

    题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...

  8. Codeforces 498C Array and Operations(最大流)

    题目是给一些数和<数对>的下标,然后进行操作:对某个<数对>中的两个数同时除以一个都能被它们整除且不等于1的数,要求的就是最多能进行多少次操作. 除数一定是素数,就是要决定某素 ...

  9. C#中 As 和强制转换的总结

    1.1.1 摘要 C#是一门强类型语言,一般情况下,我们最好避免将一个类型强制转换为其他类型,但有些时候难免要进行类型转换. 先想想究竟哪些操作可以进行类型转换(先不考虑.NET提供的Parse),一 ...

  10. Unity3D Built-in Shader详解一

    Unity3D内置了很多Shader,文档很详细,自己翻一下.便于加深印象. 首先先解释下Unity3D的Shader.Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微 ...