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:

  • Jalal Eddine El Mansouri:”Rendering ‘Rainbow Six | Siege’”
  • Julien L’Heureux: The Art of Destruction in ‘Rainbow Six: Siege’
  • 喝十八:https://www.zhihu.com/question/49317501

[gdc16]Rainbow6:siege的渲染和破坏技术相关推荐

  1. osg渲染到纹理技术(二)

    关于什么是osg渲染到纹理技术,请参考<osg渲染到纹理技术(一)> #include <osg/Camera> #include <osg/Group> #inc ...

  2. 服务端渲染(SSR) 通用技术解决方案

    项目背景 服务端渲染(SSR) 通用技术解决方案的诞生来源于对 360搜索百科移动端项目的一次重构实践.而当时决定重构该项目的主要原因有以下几点: 1.  技术栈陈旧,熟悉.开发以及维护成本都较高 项 ...

  3. osg渲染到纹理技术(一)

    render-to-textures(RTT)允许 开发者根据场景的一部分图像创建成一张纹理图,烘焙到场景中的某一物体上,这种技术用于创建更好看的特殊的表现形式,或者被保存用于以后的延迟着色,和多通道 ...

  4. 计算机图书应分为书法的什么类,计算机书法创作模拟与渲染研究-计算机应用技术专业论文.docx...

    浙江大学硕士学位论文摘要 摘要 中罔书法是中国传统文化不可或缺的部分,其将汉字的形态之美与中国文化 烙于一炉:目前,计算机技术和网络技术已经渗透到生活的各个角落.如何将计 算机技术与书法艺术相结合,更 ...

  5. 浅谈高大上的微信小程序中渲染html内容—技术分享

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...

  6. 3D渲染中纹理映射技术与贴图制作技巧简介

    最近在做3D渲染画面优化工作,在优化过程中发现了一些贴图制作上的问题.这里针对这类问题的相关技术进行一个简单的介绍,并且针对这些问题给出我自己的一些制作上的建议. 1.什么是纹理映射: 纹理映射是将纹 ...

  7. 卡通渲染及其相关技术总结

    原文链接https://blog.uwa4d.com/archives/usparkle_cartoonshading.html 这是侑虎科技第246篇原创文章,感谢作者洛城供稿,欢迎转发分享,未经作 ...

  8. flutter_hybird_webview 跨进程渲染的实践技术分享

    theme: channing-cyan 前言 大家好,继 Flutter跨进程混合栈渲染的实践--子进程WebView 之后,利用业余时间对整个插件进行了完善和基础测试,诚然距离投入生产还有一段距离 ...

  9. 高大上的微信小程序中渲染html内容—技术分享

    大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...

最新文章

  1. AAAI 2020 | 多模态基准指导的生成式多模态自动文摘
  2. PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel
  3. for循环的一种加速方法
  4. 教学计划c语言源代码,c语言教学计划.doc
  5. matlab 安装glpk,mac上安装GLPK
  6. 专业对不对口重要吗_应届生求职,专业对口到底重不重要?
  7. 双向链表中基本函数的实现
  8. Edge浏览器,设定主页(默认打开页面)方法
  9. Java基础篇:finalize( )方法的使用
  10. C#事件-什么是事件
  11. woocommerce产品选项描述修改_WooCommerce微信小程序直播功能接入指引
  12. Jmeter压力测试流程
  13. java home_JAVA_HOME配置
  14. Extjs 例外被抛出且未被接住
  15. android 获取邮箱账号,android获取google邮箱
  16. canvas绘制动态图片
  17. 全民wa矿小程序源码
  18. WMPF微信小程序框架 微信刷脸登录 获取openId 授权获取手机号 快速接入 快速集成
  19. Python爬虫:正则表达式?就这
  20. 计算机网络互连基础技术及实战

热门文章

  1. tensorflow的容器Sequential 笔记心得
  2. c语言老鼠迷宫程序,C语言经典算法——老鼠走迷宫(二)
  3. 老鼠走迷宫(C语言实现)
  4. 量子遗传算法求解带多种约束的多元线性/非线性函数最值
  5. JavaScript 生成随机验证码
  6. MAC上Git安装与GitHub基本使用
  7. C语言经典例题:搬家了
  8. 运营总监平时是做什么的?揭秘运营总监地位和公司排位!
  9. MySQL 水平拆分
  10. 11款开放中文分词引擎大比拼 1