【技术美术】体积云渲染热点研究方向讨论|云的|地形|剖面|积雨云
以下文章来源于腾讯游戏学堂,作者Angelou Lv
文丨Angelou Lv
腾讯互动娱乐 技术美术
一、分层渲染问题
早期多数开发人员的视觉焦点集中在云的体积轮廓是否足够硬朗,照明着色是否足够美观和Raymarching实现上如何尽可能减少不重要的采样。随着行业发展,大家逐渐留意到云属的问题。
云的体积密度建模方法是一个很庞大的课题,有多种思路,每种路线下又有多种实现方式。不管是剖面法,还是插值法,核心都是研究“高度变化”。当然这里只是从常用的切入点出发,VDB、SingleVolume映射等后面再讨论。而云海拔建模困难在于云的结构,形态在海拔上呈现明显的分层分布。
笔者认为“分层分布”需要分成2个维度去解释。第一个是局部维度,即不同云属的垂直剖面是不同的,这就导致很难通过一套算法去描述出足够的几何结构,即同一套算法支持的云属不会很多。目前来看超过3种时,云属之间的特征界限会变得模糊,从而失去区分的意义。因此 ,虽然在体积云实时渲染的多年探索过程中,已经形成了通过一张被称为“CloudMap”的纹理去描述水平平面分布的思路,但云在海拔方向的形态控制至今依旧没能形成统一共识。一些典型的主机&PC游戏中,例如《荒野大镖客》《地平线:零之曙光》《地平线:极限竞速》......,都提出了自己的垂直密度分布模型。虽然已有的方案支持的云属仍然有限【一般重点还原层云,积云,高积云】,但在实时渲染的背景下是很好的思路,并且视觉上来看,绝大多数从未研究过云的人很难发现其中的端倪。
除了云属本身随海拔,气候变化的垂直密度分布外。另一个自然界中的现象也随之被重视起来——云的分层。这是分层分布的宏观维度层面。
想象这样一个情景,飞机在穿越对流层的时候,可能上下都存在云海,而我们就在这两层云海之间!当我们不再把视角拘泥于在单一球层内构建高度插值模型,会发现情况变得更加复杂。按照国际气象组织给出的大致划分,至少有低,中,高三大层,10大类云属。有些云属同时跨越了多层,比如积雨云,这种具有高耸塔式结构,塔身呈花椰菜外观,顶部逐渐过渡到平整砧型的云给建模带来了极大困难。
分层分布同样难搞,且层数越多越难控制。一种妥协但可以极大降低工程难度的做法是在固定2层云的基础上对具有相似特征的云属进行合并,同时剔除非重点类云属。比较好的选择是保留Stratus、Cumulus、Cirrus。至于中层的Altocumulus我们认为大多数人根本分辨不出积云与高积云的区别,因此给予舍弃;同样的思路,层云人们往往只能辨识出最鲜明的特征,因此舍弃中层的Altostratus。至于Cumulonimbus(积雨云),虽然其视觉冲击力很强,但它太特殊了,同样舍弃!这样模型瞬间简单了不少,只需要做2层,3类云,就能应对上文提到的夹在云海之间的情景。
二、地形云问题
另一个难点是“体积云的超低空渲染”,绝大多数情况下,云只是做为背景远远的分布在苍穹。但仍有一些情景比如山峦之间,或者南方临海城市的阴雨天,云层很低且紧靠地势,而此时情况将变得完全不同!主要考虑三个方面:
首先,超低空的体积云意味着Raymarching将进入更为苛刻的工作条件,可能不得不缩小步幅或者重新设计判断机制来避免噪点的大量产生或无效步进的性能浪费。另一个方面,超低空意味着角色往往能够穿越云层,这是一个由低海拔到高海拔的旅途,要留意进入云层内时的噪点问题,但更重要的是这一过程压缩了云层的高度范围!高度范围的压缩使得积云鲜明的塔式隆起被“挤压”,进而损失大量构成体积感的细节。
其次,地形云的分布与地势地貌强关联,水蒸气在温暖的迎风坡上升,达到一定海拔冷凝成云,密度分布具有明显的方向性。且地形云紧贴地表,但边缘又不能插入山体,比如一些悬崖。你可能需要高度数据和最近距离场判断来避免这些问题;
最后,是光照问题,地形的遮挡意味着GI计算可能需要重新评估,包括阴影、AO和环境光贡献。
一旦我们选择按照传统体积云的思路去应对超低空问题很容易进入歧途,你需要根据场景规模和实际情况重新设计Raymarching和Lighting计算。
三、特殊气象模拟
龙卷风、台风气旋等特殊天气下的云渲染也是一个非常酷的方向。
上图左上与右上是不同视角下龙卷风的形态,左下与右下为暴风雨来临前的海岸,风暴中夹杂着闪电,照亮了云层的内部。
这又是一个很庞大的系统,考验密度建模方案,编辑工具以及特殊照明。
四、云的衍生与转化
云的衍生与转化问题,其实关系到云在天气系统和TOD驱动下的变化过程,一般还要搭配一要强有力的动画编辑器来做过场动画,目前笔者还没找到一份称得上优秀的方案,所以这是一个很好的方向。程序化生成的云海很适合做“云卷云舒”的感觉,但程序化也就意味着要放弃对结构与形态的塑造。
强烈建议观看摄影师Jack Miller的延迟摄影作品:《海风》
https://vimeo.com/user44638407
五、超真实渲染
这个比较容易理解,如何更快的渲染出真实度更高的云。目前实时领域主要围绕GI拟合,拆分成直接光与环境光。环境光可以使用球谐重建之类的思路,还要考虑是否计算AO等;直接光会考虑内散射和外散射以及多相位混合与自阴影问题。离线渲染领域更多聚焦在多散射光照传输过程的求解,尽可能多的保留照明特征,提高收敛速度,当然降噪也是非常重要的一环。这里推荐大家研究下SIGGRPAH 2023中提出的MRPNN:
这是一种通过神经网络拟合高阶散射的方法,能将体渲染的速度提高2个数量级,且近似ground truth,最近已开源:
https://github.com/What-a-stupid-username/MRPNN
网友评论