[gdc16]Rainbow6:siege的渲染和破坏技术

这里写图片描述

gdc16的文章,是一个多个文章的合集,包括了rainbow6 siege的标志性技术:大规模破坏,以及相关的渲染技术。
整个游戏拥有前所未有的破坏的效果,也是游戏的核心,非常的畅快和酷炫,可以看下这个宣传视频:
http://www.bilibili.com/video/av9382404/?from=search&seid=5837922225268221158

本文主要聊这么几个话题:

  • Tom clancy rainbow 6 介绍
  • 破坏技术
  • 渲染技术

=======Tom Clancy’s Rainbow 6 : Siege=======
Tom Clancy :是一个军事小说家的名字,后来他变成一个“品牌”,很多军事小说已经是由写手来写了,据说其中一个人已经写得比tom clancy还tom clancy,让老爷子“压力很大”。。。
Tom Clancy’s 游戏系列: Rainbow 6, Division, Splinter Cell, Ghost Recon, End War。。。虽然没有COD那么的大名鼎鼎,但是在玩家心目中也是占有了一席之地。
Tom Clancy’s Rainbow 6 : 是一个策略型(军事)射击游戏,相对于传统的飚枪法的游戏,注重策略型设计,侧重策略,潜入和团队。
Tom Clancy’s Rainbow 6 | Siege : 是Rainbow 6 的第19部作品,2015发售,游戏以前所未有的出色的破坏为技术亮点,品质也相当不错,卖了535万拷贝销量, 商业上很不错的表现
现在steam上热度也是不错。

这里写图片描述
=======破坏技术=======

常规破坏技术:pre fragment

这里多个phyx中间件都给出了解决方案,比如:

  • Phyx apex destruction
  • Havok destruction
    运用的过程是:工具中预制破坏信息和模型(工具可以加速),游戏中触发,物理模拟,主打视觉
    其中有各种特效飞溅的效果,需要中间件或者引擎的良好支持,比如这时候havok fx又出来大显身手,把大量飞溅的木屑很高效很高质量的表现出来。

ubi的独门绝技:real blast
它和常规的破坏不同的就是:

  • 它可以把墙任意打破,比如:打个洞,形成射击视野,挖个洞,自己爬过去。。。
  • 和游戏性结合:这里不是一个看看就好的效果,可以形成很多战术特点的
    • 而且这个是一个深度的和游戏系统结合的模块,深入到了几乎所有的模块,包括服务器

这里写图片描述

这里写图片描述

(可以看出,realblast是深入的嵌入到各个模块之中,影响着整个游戏,所以这个也很难中间件化,实在是太紧耦合了)

=======Procedural destructio算法=======

模型破坏
这里首先是一些逻辑结构,把典型的物件以这样的逻辑结构来进行拆解:
这里写图片描述

这里写图片描述
把一个复杂的模型简化成一个leaf graph(概念上很像骨骼)
然后在受到撞击的时候,就以简单的结构来处理破坏信息,然后应用到整体的模型上去:
这里写图片描述

surface破坏
就是一面墙这种会破坏的方式:
这里写图片描述
这里把墙这种最典型的模型拿出来作为一个专项来处理,由于是这种扁平状的东西,所以就简化为surface来进行simulation。
这里写图片描述
然后基本的算法过程是:对于打击点,产生一些固定的pattern,比如这就是一种
这里写图片描述
其实这个模式还有很多种可以选择,比如:
这里写图片描述
然后和原有模型进行相交,扣掉其中打掉的部分,然后在崩出来pattern部分
这里写图片描述

然后把剩余的部分,进行三角化,产生新的mesh
这里写图片描述
然后三角形变成立体的mesh
这里写图片描述
切面加上一些点缀
这里写图片描述
美好的破坏就完成勒:
这里写图片描述

=======性能优化=======
这个过程计算量是不小的,优化技术但是我们都比较熟悉:

  • 可以预测的情况下提前开始计算
  • 把大型任务分成多个子任务,然后进行分帧+多线程计算
  • 数据控制非常重要,连终极优化大法都用上了:程序员自己上,和美术猛撸地图
  • runtime各种内存限制,pool等内存常用优化
    恩,虽然套路上看起来都比较熟悉,但是在超大复杂系统里做出来是完全另外一码事情,非常让人敬佩。

=======服务器同步=======
在服务器上跑破坏的模拟,这套破坏代码很复杂,也让服务器程序员吃了不少苦头,这里需要考虑代码不能依赖帧数等等
同步的内容:

  • 同步破坏的事件而不是破坏计算的内容
  • 破坏有随机性,随机种子同步
    及时反馈所常用的是:预演和同步的策略也是用的,产生破坏的时候,本地离开开始模拟,然后背后和服务器开始同步。
    这里写图片描述

=======破坏的小结=======

  • 技术角度看, 把游戏中的”破坏”,推进了一些
  • 独特技术形成游戏核心, 不小的技术门槛
    • 技术门槛就是讲了都没法抄 vs 没有技术门槛看一眼就能复制
  • “高大上”的技术,背后是
    • 多种技术的融合(渲染,havok fx), 影响和交互几乎整个游戏,我们常规的看法,技术像积木一样搭来搭去,很多时候是我们希望的“那种简单”,实际情况,遇到这种杀手级的特性,渗入到游戏的方方面面,其实是合理正规的技术选择。
  • 产品化的重要性
    • 实际落地, 见玩家,其实早期他们技术也做的挺多,但是在产品化的过程中,面对各种复杂的情况,才真正让技术成熟起来
    • 接受更严格的考验,让技术更完善
      优化
  • ”异步&多线程&分帧”
  • 美术撕逼—一件好事,其实我们在做天刀的时候就是,当程序和美术友好的争执的时候,才是最好的时候。

=======渲染模块=======
这里写图片描述

这里相对来说,渲染模块不是siege的长项,原创的比较好的东西比较少,但是毕竟在ubi montreal,所以很多其他项目中的(比如刺客信条,farcry)系列中的技术都可以应用过来,比如:

  • Clustered rendering
  • Shadow:有shadow cache,有hi-z帮助culling
  • 有刺客信条的GI的做法
    这里两个技术比较重要和由特点:
    —-draw call batch—-
    由于这是一个大规模破坏的游戏,所以会产生出大量的飞屑,这个对于渲染效率是一个大的挑战,所以ubi把大量的相同材质的物件做一个batch,通过dynamic buffer合成一个drawcall,这个非常的有效,可以看下数据:
    这里写图片描述

—-Checker board rendering—-
这个是一个使用低分辨率,然后插值出高分辨率的渲染方式,之前虽然也有尝试,但是不成熟,现在rainbow 6
siege中看来使用的比较好:
- ¼ 分辨率(1/2 长, 1/2宽) , Msaa 2x, 全sample
- 通过周围像素,前一帧像素信息重组
- Teeth filter
使用了这些策略来达到的比较好的效果,同时着色计算的像素数量少多了。

ref:

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值