[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:
- 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的渲染和破坏技术相关推荐
- osg渲染到纹理技术(二)
关于什么是osg渲染到纹理技术,请参考<osg渲染到纹理技术(一)> #include <osg/Camera> #include <osg/Group> #inc ...
- 服务端渲染(SSR) 通用技术解决方案
项目背景 服务端渲染(SSR) 通用技术解决方案的诞生来源于对 360搜索百科移动端项目的一次重构实践.而当时决定重构该项目的主要原因有以下几点: 1. 技术栈陈旧,熟悉.开发以及维护成本都较高 项 ...
- osg渲染到纹理技术(一)
render-to-textures(RTT)允许 开发者根据场景的一部分图像创建成一张纹理图,烘焙到场景中的某一物体上,这种技术用于创建更好看的特殊的表现形式,或者被保存用于以后的延迟着色,和多通道 ...
- 计算机图书应分为书法的什么类,计算机书法创作模拟与渲染研究-计算机应用技术专业论文.docx...
浙江大学硕士学位论文摘要 摘要 中罔书法是中国传统文化不可或缺的部分,其将汉字的形态之美与中国文化 烙于一炉:目前,计算机技术和网络技术已经渗透到生活的各个角落.如何将计 算机技术与书法艺术相结合,更 ...
- 浅谈高大上的微信小程序中渲染html内容—技术分享
大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...
- 3D渲染中纹理映射技术与贴图制作技巧简介
最近在做3D渲染画面优化工作,在优化过程中发现了一些贴图制作上的问题.这里针对这类问题的相关技术进行一个简单的介绍,并且针对这些问题给出我自己的一些制作上的建议. 1.什么是纹理映射: 纹理映射是将纹 ...
- 卡通渲染及其相关技术总结
原文链接https://blog.uwa4d.com/archives/usparkle_cartoonshading.html 这是侑虎科技第246篇原创文章,感谢作者洛城供稿,欢迎转发分享,未经作 ...
- flutter_hybird_webview 跨进程渲染的实践技术分享
theme: channing-cyan 前言 大家好,继 Flutter跨进程混合栈渲染的实践--子进程WebView 之后,利用业余时间对整个插件进行了完善和基础测试,诚然距离投入生产还有一段距离 ...
- 高大上的微信小程序中渲染html内容—技术分享
大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...
最新文章
- AAAI 2020 | 多模态基准指导的生成式多模态自动文摘
- PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel
- for循环的一种加速方法
- 教学计划c语言源代码,c语言教学计划.doc
- matlab 安装glpk,mac上安装GLPK
- 专业对不对口重要吗_应届生求职,专业对口到底重不重要?
- 双向链表中基本函数的实现
- Edge浏览器,设定主页(默认打开页面)方法
- Java基础篇:finalize( )方法的使用
- C#事件-什么是事件
- woocommerce产品选项描述修改_WooCommerce微信小程序直播功能接入指引
- Jmeter压力测试流程
- java home_JAVA_HOME配置
- Extjs 例外被抛出且未被接住
- android 获取邮箱账号,android获取google邮箱
- canvas绘制动态图片
- 全民wa矿小程序源码
- WMPF微信小程序框架 微信刷脸登录 获取openId 授权获取手机号 快速接入 快速集成
- Python爬虫:正则表达式?就这
- 计算机网络互连基础技术及实战