遊戲裡的雲是怎麼飄的
这四代不是替代关系,而是并存的。今天你依然能在很多游戏里看到第一代的做法,因为便宜、稳定、不出错。接下来我们就按这个顺序,一层一层往下拆。
二、第一代:滚动贴图与天空盒,最省钱的「假飘」
先说最简单、也最古老的做法。它的核心思想可以用一句话概括:云根本不动,是贴图在动。
早期的游戏会给天空做一个「天空盒」(Skybox),也就是用一个立方体把整个场景包起来,六个面各贴一张图;或者做一个球体、半球形的「天空穹顶」(Sky Dome),把云画在这张图上。美术在画这张图的时候,会把云画成可水平平铺的样子——也就是说,图的左边缘和右边缘能接上,看起来是连续的。
然后程序每帧做一件非常简单的事:把采样这张贴图的 UV 坐标往某个方向加一点偏移量。UV 就是「贴图上的坐标」,把 U 值加上时间乘以速度,贴图看起来就在水平方向滑动。这跟老式动画片里「背景纸带平移」的原理一模一样,你在赛车游戏里看到路边景物往后飞,也是同一个套路。
原理拆解:UV 偏移、双层视差与「贴纸感」的来源
如果只用一层贴图,云会看起来很薄,只有一个平面在滑。所以聪明的美术和程序会做两件事来救场。
第一件是双层视差。天空上放两层云贴图,一层高、一层低,速度不一样。低层云(离地面近、看起来大而稀)移动得快一些,高层云(离得远、看起来细碎)移动得慢一些。两层叠在一起,眼睛就会觉得天空有纵深。这个技巧非常之老,但极其有效,直到今天很多游戏还在用。
第二件是加入一点噪声扰动。在采样的 UV 上叠加一个缓慢变化的噪声偏移,云的边缘就不会是一条死板的直线滑过去,而是会有一点「拉扯」的错觉。
但无论怎么救,这种做法都有一个无法克服的缺陷,我称之为「贴纸感」。你可以做个小实验:找一个云是滚动贴图的老游戏,站在空旷处盯着同一朵云看十秒。你会发现它虽然一直在移动,但形状完全不变。它不是在「飘」,它是在「平移」,就像有人在推一张印着云的透明塑料片。而真实的云会一边移动一边变形:边缘被风撕开、内部在翻滚、小块云会合并、大块云会拉长。人类的眼睛对这种「形状演化」极其敏感,一旦缺失,大脑就会立刻判定「这是假的」。
为什么《反恐精英》《魔兽世界》的云看起来「像在动」却不像「在长」
经典案例值得细说。很多老玩家应该都记得早期一些 FPS 和 MMO 的天空:天上有很漂亮的云,飘得也挺自然,但你就是知道它是背景图。原因就在于前面说的——它只有平移,没有演化。
更麻烦的是,滚动贴图还有一个副作用:当你转动视角时,天空是跟着你转的。因为天空盒/天空穹顶是以摄像机为中心的,贴图会随着你的视线方向一起旋转,云的移动方向在屏幕上会显得别扭。优秀的实现会把这个效果压得很低(比如天空球半径做得很远,或者云本身移动很慢),让玩家察觉不到;做得粗糙的实现,你左右摇头的时候云就会「晃」,那感觉会非常出戏。
不过这里要替第一代说句公道话:在低分辨率、低多边形、屏幕小的年代,这套做法几乎是唯一的正解。它几乎不吃性能——一张贴图,一个 UV 偏移,几行着色器就搞定了。而且它完全可控:美术画成什么样,玩家就看到什么样,不会有程序化随机生成的「翻车现场」。直到今天,很多手机游戏、独立游戏、以及需要极致性能的竞技游戏,仍然在用滚动贴图,因为这笔账太划算了。
三、第二代:程序化噪声,让云自己「长」出来
到了这一步,开发者想解决「形状不变」的问题。思路很自然:既然贴图是死的,那我不贴图了,我用数学函数现场算出一张会变的云图。这就是程序化噪声的登场。
所谓噪声函数,你可以理解成一个「输入坐标、输出一个看起来随机但连续变化的数值」的函数。关键在「连续」两个字:如果只是真随机数,那么相邻两个点会完全无关,画面会是一片雪花噪点;而噪声函数保证相邻点的值接近,所以它看起来是「团块状」的、有机的,非常像自然界的云。
Perlin、Simplex、Worley:三种噪声的分工
游戏里最常用的噪声有三类,它们各自负责云的不同特征。
在实际实现里,通常是这样的分工:先用低频率的 Perlin/Simplex 决定「云的总体分布」——哪里该有大片云层,哪里该是晴空;再用 Worley 噪声在云的边缘「啃」出蓬松的团块状结构;最后用高频噪声加一点点细节,让云的表面不那么光滑。
FBM 叠加:为什么云总是「大朵包小朵」
自然界的云有一个非常明显的特征:大形状里套着小形状,小形状里再套更小的形状,层层嵌套,这就是所谓的「分形」。FBM 就是模拟这个现象的经典方法。
做法很简单:把好几层同样类型的噪声叠起来,但每一层的频率翻倍、振幅减半。第一层是巨大的、模糊的云形;第二层是中等大小的起伏;第三层是细小的边缘细节;第四层是几乎看不见的绒毛。加起来,你就得到了一片既有大轮廓又有丰富细节的云。
这个参数非常有意思,调它可以决定游戏的天空风格。级数少、权重陡,云就干净、卡通、边界清晰,适合风格化作品;级数多、权重缓,云就细腻、写实、边缘蓬松,适合拟真作品。你在不同游戏里看到的「云质感」差异,很大一部分就是 FBM 的层数和权重不一样。
到了第二代后期,云已经可以做到「一边飘一边缓慢变形」了:把噪声的采样坐标加上时间偏移,不同的噪声层用略微不同的速度,云的形状就会缓缓地演化。这就比第一代的「贴纸平移」自然太多了。但要注意,这一代的云通常还是平面的——它要么贴在天空穹顶上,要么是一层高空平面,你看到的是「一张会呼吸的贴图」。它能骗过你在平视时的眼睛,但只要你抬头直视天顶,或者让太阳从云后面穿过,厚度感和内部明暗的缺失就会暴露它。
四、第三代:体积云,真正会飘、会长、会散
这是今天高端游戏画面里最受关注的部分。体积云(Volumetric Cloud)的核心思想是:云不是一张图,而是一团有厚度的介质。你要渲染的不是一个平面上的图案,而是光线穿过几百米、几千米厚的「雾状物体」时发生的事。
听起来很贵,实际上也确实很贵。但为什么值?因为只有体积云才能同时解决三个问题:真实的厚度感、真实的光照(逆光银边、内部自阴影)、真实的形变(云会翻涌、会侵蚀、会消散)。
Raymarching:一粒像素在云里走了多少步
体积云最主要的实现技术叫「光线步进」(Raymarching)。原理可以这样理解:对屏幕上的每一个像素,从摄像机出发,沿视线方向往天空「射一条射线」,然后沿着这条射线一小步一小步地往前走,每走一步就采样一次「这个地方的云密度是多少」。
如果密度是零,说明这里是空气,继续走;如果密度大于零,说明撞上云了,就把这个点的颜色和透明度累积起来。走得足够多步,把所有累积的结果加起来,就是这一像素最终看到的云的样貌。
这里能看出成本的关键:步数就是钱。一条射线走六十四步、一百二十八步还是两百五十六步,画面精细度和性能消耗差得非常远。所以真实的实现里有一大堆优化技巧:
顺带一提,玩家们常说的「云质量」选项,改的往往就是这些参数:步数、分辨率比例、云层精度、是否开启时间重投影。把它调低,云会变得更「糊」、边缘出现块状,但帧数会明显回升。
银边从哪里来:散射与相位函数
如果你观察过真实的高空云,尤其是傍晚逆光的时候,会发现云的边缘有一圈发亮的金边,非常漂亮。这个效果在游戏里叫「前向散射」(Forward Scattering),是体积云最迷人的部分之一。
原理是:光线穿过云中的水滴或冰晶时会发生散射,而散射是有方向性的——当光线方向和你视线方向接近(也就是你逆着光看云)时,散射强度会大幅提高。物理上用一个叫「相位函数」(Phase Function)的东西描述,游戏里最常用的是 Henyey-Greenstein 函数,它有一个参数可以调「前向散射的集中程度」。
所以你在游戏里看到云被太阳镶了金边,并不是美术画的,而是这个函数在起作用。调高这个参数,银边会更锐利、更戏剧化;调低,云会更「均匀地亮」,也就是所谓的平光。很多风格化的游戏会把这一项调得非常强,就是为了那一眼惊艳的逆光。
除了散射,体积云还要处理「吸收」:光线进入云内部会被云本身遮挡,越深越暗。这在实现里叫光学深度(Optical Depth),这也是为什么好的体积云会有「内部自阴影」——云的顶部亮、底部暗,你能感觉到它是立体的。更进阶的实现还会加上「多次散射近似」和「Powder 效应」(云的背光边缘会显得更亮更粉),这些都是写实感的关键词。
风怎么吹:风向、风速、风切变与时间轴
终于说到题目了:游戏里的云到底是怎么飘的?答案分三层。
第一层是水平位移。引擎里有一个全局的风向量(Wind Direction)和风速(Wind Speed)。云的密度场在采样的时候,会把采样坐标沿着风向偏移,偏移量等于「风速乘以时间」。风往哪吹,云就往哪飘,这是最基础的。
第二层是风切变。真实大气里,不同高度的风速和风向是不一样的。高层风更猛、低层风更缓,甚至方向不同。好的体积云实现会给云层做「分层」,每一层用不同的风速方向。这带来的视觉效果非常关键:云会被拉长、被撕成丝状,形成那种卷云的条带。如果只有单一风速,云只会整体平移,又回到了「贴纸」的观感。
第三层是形变演化。这一步才是「活着」的秘密。除了整体移动,云本身还要「长」和「散」。实现方式通常有三种:一是让噪声纹理的第四维(时间维)缓慢变化,三维噪声变成四维采样;二是把两层不同的噪声按不同速度、不同方向移动再混合,混合比例随时间变化,云的形状就会持续变样;三是引入「卷曲噪声」(Curl Noise)来模拟湍流,让云内部产生翻滚的流动感。这三种方法常常一起用。
你再回头看第一代的滚动贴图,就明白差距在哪了:它只有第一层的「水平位移」,没有风切变,没有形变。所以它是「滑动」,不是「飘」。
五、第四代:风格化与混合实时,另一条路
并不是所有游戏都需要物理正确的体积云。事实上,很多视觉上极其惊艳的游戏走的完全是另一条路:用极低成本的手法,做出高辨识度的天空。
常见的手法有这么几种。第一是手绘贴图加精细动画:美术画的云贴图本身质量极高,再配合缓慢的 UV 滚动、边缘的色调渐变、以及太阳位置的染色,看起来就很有味道。第二是「云层切面」式的伪体积:叠好几层半透明的云平面,每层不同高度、不同速度、不同透明度,远近交错,营造出厚度错觉,但成本远低于光线步进。第三是强风格化渲染:把云的明暗简化成两三个色阶,边缘描得干净利落,逆光直接上高饱和的橙金色,追求的不是真实而是画面美感。
这类做法有个巨大优势:可控。体积云是程序生成的,偶尔会生成出奇怪的形状,或者在不同天气下表现失控;而风格化的天空,美术可以精确控制每一片云的构图,甚至配合剧情演出(比如最终战前天空变成血红色)。这也是为什么很多日系作品即使技术预算足够,也选择不走写实体积云,而是走这套「手绘 + 程序辅助」的路线。
所以下次你跟朋友讨论「哪款游戏的云最好看」时,其实要先分清你们在比什么:是比物理真实(体积云、散射、自阴影),还是比画面美感(构图、配色、风格统一)。这两件事没有高下之分,只是目标不同。
六、玩家实战:怎么用肉眼判断一款游戏的云「做得好不好」
前面讲了很多原理,现在把它转成实用的观察方法。下次进游戏,你可以按下面五点去检查,基本上几秒钟就能判断出这款游戏的天空属于第几代、做得用不用心。
五个观察点:边缘、逆光、阴影、视差、演化
性能取舍:云为什么是「最贵的温柔」
理解了原理之后,你会对游戏里的画质选项有全新的认识。云是少数几个「贵得让人肉疼」的效果之一,因为它是一个全屏、半透明、需要大量采样、还要跟光照系统深度耦合的东西。
举几个具体的代价:体积云需要大量纹理采样,会吃掉显存带宽;光线步进的循环会让 GPU 的运算单元长时间忙碌,尤其在低端显卡上,开启体积云可能直接掉十到二十帧;时间重投影虽然省性能,但会带来拖影和「云在抖」的问题,快速转视角的时候尤其明显,这也是为什么有些游戏在快速移动时云会有点糊。
所以很多游戏会在「远处」和「近处」用不同的方案:头顶上你能看清的那片云用高质量体积渲染,天边那条地平线用低成本的贴图或雾来糊弄。这不是偷懒,这是聪明。
七、设置与攻略:不同游戏里云相关选项怎么调
最后给一点实用建议。不同游戏的选项名称不一样,但大致可以归成几类,你对照着找就行。
还有一个很多玩家不知道的小技巧:去看云,最好的位置是高处和黄昏。高处能让你看到云层的分布和视差,黄昏的低角度阳光能最大程度激发散射效果,这时候云的层次最丰富,也是判断技术含量最准的时刻。下次进游戏,别急着赶路,找个山头坐下来看两分钟天,你会有完全不同的感受。
八、结语:云是游戏世界最诚实的细节
回头再看题目:游戏里的云是怎么飘的?
答案其实是一条清晰的技术脉络。最早期,它靠一张贴图的 UV 偏移,是「滑动」;后来,它靠噪声函数一次一次地采样出形状,是「生长」;今天,它靠三维密度场里的光线步进,加上风向、风切变和时间维度上的噪声演化,才真正做到了「飘」。而每一种方案背后,都是同一场拉扯:画面想要更真,硬件只肯给这么多。
云之所以值得玩家花时间去研究,是因为它是游戏世界里最诚实的一个细节。角色模型可以靠美术堆,光影可以靠调色骗,但天空骗不了人——你只要抬头看二十秒,它到底是贴纸还是会呼吸,一目了然。而一旦你知道了这些原理,那些原本只是背景的云,会突然变得非常有意思:你会看到风在撕扯云的边缘,看到太阳在云里被散射成金边,看到一整片天空在你面前缓慢地、一步一步地演化。
💬 想說點什麼?
歡迎到留言板分享你的想法、心得或疑問。
💬 前往留言板 →