浅谈《Sky 光·遇》中的渲染技术
综合文库CGGraph渲染图形学图形图像技术
显示全部 7
6740 3
实名

通过了实名认证的内容创造者

发布于 2020-10-16 12:31:28

您需要 登录 才可以下载或查看,没有账号?注册

x
浅谈《Sky 光·遇》中的渲染技术
Twelfth Night

分析顺序根据个人喜好和出现顺序,有想法或不同见解尽管留言

苹果为什么给Thatgamecompany三分钟

首先,别管用什么引擎,移动平台的图形API一般用OpenGL;苹果之前就推出了Metal打算在自己设备上替代OpenGL;但是大部分开发者不愿意,两个商业引擎的支持也不到位;Thatgamecompany的自研引擎很好的接入了最新的Metal 2。
粗略的说原因就是开发sky光遇的引擎把苹果的自家图形API Metal 2用得很6,展现出了Metal 2的强大,呼吁开发者使用Metal 2作为图形接口,而不是OpenGL。(据我了解,Unity和Unreal对Metal的支持还停留在上个世纪的版本,截止2019/10/21)
你可以先读Apple’s Forced Move to Metal 2: Great for Game Developers?苹果抛弃 OpenGL !了解一下苹果的战略意图。
那么对比OpenGL,Metal 2优势在哪呢?
请去看视频 Introducing Metal 2

-------------------------正题------------------------------云的渲染

常见的做法有这么几种:

其中,RayMarching云有很多种做法:

  • 云的形状来自于可平铺的3D Noise,地平线的做法,很省内存128^3的噪声纹理,一张天气图,一张高层云纹理。实现请去看 GPU Pro7 II 4,还原到可以使用的地步,亲测没那么容易, -_-||
  • 云的形状来自于3D纹理,纹理中存储了云的形状,云的形状容易控制,实现也相对简单,但内存消耗高,当然这取决于云的种类数量
  • 提前在Houdini里做好特定形状的云并渲染,直接导出体素信息再到引擎里,云的形状容易控制,但不支持动态光照

光遇中的体积云:
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMzOTY3NTIx,size_16,color_FFFFFF,t_70
移动设备RayMarching几乎是不可能了,比较流行的说法是通过3D可平铺噪声对用多层Mesh顶点偏移,你的Mesh什么形状,云就大体什么形状。根据WalkingFat老哥的测试,干掉深度Pass的情况下,中端安卓30FPS+。(但是,你的游戏里又不是只有云,虽说这游戏云占了大半屏,光遇的UI这么简单,一个是游戏风格因素,另外我觉得机能全用到云,草,任务,粒子效果上了。。)
WalkingFat已经在他的博客讲解了他的做法,这里就不赘述了。
20191021130103597.gif

草地的渲染

因为自带的地形,没有对草合批,根本没法用,所以
大面积草地常用的做法:

  • 利用GPU instancing绘制,提前计算好坐标,或者在文件中读取,用DrawMesh等函数一批最多绘制1023个实例,传人物坐标到Shader,扰动在Shader里做。具体做法,我以前写过,也可以从Git上下载源码做参考GrassSkyLight,很早之前写的,不好看,代码诟病很多,凑活看吧。
  • 曲面细分,这个做法确实骚,但是移动端不太敢想。具体做法已经有老哥分享了,不再赘述。

光遇中的草地:


众所周知,旷野之息中的草分为近草中草远草,根据距离划分层次节省性能;
光遇似乎没有这样做,但也在你不容易注意到的地方省了十几或几十个批次,比如下图中高地上的草只是沿着UV方向流动的贴图。这种地方很多,把机能投放在了玩家更能注意到的地方。

这里我只能大概猜测它的做法:广告牌,Gpu Instancing,流动纹理。草和花的HDR强度似乎也会根据流动的贴图呼吸,或者根据时间。扰动的做法,同上,包括扰动变亮。

人物渲染


刚进入游戏,就看到了次表面散射,也就是于是玉石的效果。
关于次表面散射:
GPU Gems1 III 1 就详细讲解了实时次表面散射近似;
GPU Pro 1 III 7 也有屏幕空间的次表面散射;
网上博客多的一批,各种意义上的实现并不困难。

虽然图没截好,但我想说的是,人物的“斗篷”没有写入阴影,似乎是因为写入阴影会影响人物身体的视觉效果。非真实渲染管他阴影什么的,好看就行。
人物胸前像奥特曼呼吸灯一样那个东西,是HDR曝光,这么推测的原因是遮挡多一点就不怎了亮了。
人物升级还是什么的某种特殊状态的强菲涅尔,没截到。
其他边缘光什么的就不提了。

后处理部分
  • HDR开启,曝光启动。游戏中大部分发光都是这样做的。
  • 经常看到的太阳十字光晕,应该是屏幕空间的效果,因为经常能把人物盖住,像准星一样。
  • 抗锯齿部分。这个游戏抗锯齿很到位,个人肿脸推测可能是TAA,自从Inside之后就很流行,性价比高。简单来说就是保留上一帧的VP矩阵,Pos * ViewProj^-1 * VP,变换到上一帧的裁剪空间里,对上一帧采样,以达到升采样的目的,可多帧,TAA对体积云很受用。具体去看Inside的PPT分享,也不排除MSAA * 4
  • 目前就看到这些
关于优化

  • 上图中,鸟数量很大,但仔细观察,除了坤,都是双面渲染的面片。Gpu Instancing就特别适合这种数量多,面数少的。这鸟也没阴影,整个鸟群可能一个批次就完事了。
  • 不存在摄像机深度。这个游戏的似乎没有用到摄像机深度图,经常出现的那个扩散球的的效果,没有对球与地面接触的地方额外画线,也没有景深什么的。省了省了
  • 因为是移动平台,场景中灯的数量也比较少,所以前向渲染。
其他部分

这个游戏的水做的一般,截止到2019/10/21这个版本,如果仔细看,可以看出流动贴图的不协调感。

就玩到坤那里,我感觉画面挺好,就是玩着没意思,未完待续


original.png
articleReadEyes.png
tobarCollect.png

评分

参与人数 2活跃度 +25 展开 理由
小优小優... + 15 不错
讲不出再见... + 10 【点赞】这很有大网气质!

查看全部评分

本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
安然QM  发表于 2021-2-23 11:22:10  
2#
回复 收起回复
使用道具
xmz2018  发表于 2021-3-20 09:43:03  
3#
元素帖子强,满满正能量
回复 收起回复
使用道具
dodoro_fz  发表于 2021-10-18 19:17:34  
4#
好好学习天天学习
回复 收起回复
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表