• This week, 1000 new dynamic content has been released, welcome to refer to it, download and use!
极品飞车主题天幕3D卡通烟雾

分享《王者荣耀》极品飞车主题天幕的3D卡通烟雾制作经验

Hi,我是托米。一年多前GEEEU接到了王者荣耀的这个项目课题,作为项目组的老朋友我们十分重视。简单说是制作一套卡通风格的天幕特效,融合一些涂鸦和赛博风格的元素。其中卡通烟雾的渲染比较难用Unity或Unreal引擎直接制作,我和同事最终使用了3Dmax2022和后期软件组合的预渲染方式来解决。

这套方案应用了我在2015年网络课程中讲过的一些经验技巧,兜兜转转十年时间,老树新花又开在王者这样顶级项目中,很荣幸。当我们实际操作时又悟出一些更新更细节的经验,比如:

第一章【如何理解每个烟团在超大幅度运动中连贯的形态变化?】

第二章【如何控制3D模型烟雾模拟真实烟雾的翻滚和溶解过程?】

第三章【单一烟团自定义动画融入大量粒子烟团整体效果的整体感?】

细节补齐【如何模拟出手绘卡通烟雾的整体渐变色和笔触质感?】

产品已经上线一年有余。2025年12月28日深夜,我有空,来了精神,决定将这个案例的制作过程重新整理,权当作送给特效圈伙伴们的新年小礼物了。

————————————————————————————————————

第一章【如何理解每个烟团在超大幅度运动中连贯的形态变化?】

分析镜头:汽车的速度变化会决定发射出每颗烟团的形态和变化。

[1车尾怼屏幕喷烟雾]→[2加速位移]→[3减速至刹停]→[4原地烧胎]→[5停止运动]

经过分析我们得到烟团在粒子生命周期中的形状变化规则:

1.烟团被尾喉喷出时,拉伸最明显。→如果叠加汽车加速位移,拉伸更强

(对应的参数:相信大家都明白,拉伸就是不等轴缩放参数)

2.烟团生命周期会被空气湍流影响,但整体略微上升。→预设扰动参数、风场或者其它向量力参数

(湍流在Unity里约等于Noise,风场就是不同引擎里的向量力参数)

3.烟团必然存在翻滚与扩散。→预设旋转和放大参数。

(烟团自身的圆转,涉及到粒子自旋参数和模型轴的关联性)

于是我们得到了类似这样的烟团形状变化模型——

(烟团自身的翻滚、自旋转轴、溶解消散等细节在第二章介绍)

总结:任何特效,分析需求流程都应该是必选项,它是最终效果合理性的基础。分析越精准,工作效率越高。这对于经验丰富的特效师也许可以快速在脑袋里生成思路,可实战中还是有很多经验尚浅的伙伴会轻视或者缺失这个分析规划步骤,请大家务必重视。

————————————————————————————————————

第二章【如何控制3D模型烟雾模拟真实烟雾的翻滚和溶解过程?】

上面说到这是一个纯3D的模型烟团来模拟卡通烟雾的案例,所以我们要从一个圆球开始说起。

那么我们先从手搓一团静态卡通烟雾:

1.建立几何球体

(这里务必选用几何球体“GeoSphere”,它的默认布线均匀,达到相同的平滑度用它更节省资源。)

2.增加“置换”修改器,设置“细胞贴图”

3.调节置换强度、细胞纹理比例。

这一步已经看到了烟团的造型。这里我必须引入一个“细节比例”的概念:我们不要管中窥豹,必须通过观察一个模型,脑补数十甚至数百个3D烟团拼凑在一起的时候,我们所创造的凹凸纹理的整体密度。(上图的细节比例就有点密了,大小给到100比较合适。)

4.关于造型:叠加细胞贴图最优,但Max原生的噪波(Nosie)、烟雾(Smoke)都可以组合尝试,来适应不同的手绘特性。比如:可以得到“软中带硬““粗中有细”的造型”——

类似的组合可以很多····不只烟雾,很有意思——

总之大家应该能看明白,置换贴图对模型的影响,完全遵循图像黑白灰度对应凹凸的影响。

设置动态:烟团自身纹理的翻滚

查看动态——

这里最需要注意的是我们需要对烟雾在不同帧率(FPS30/60/120)存在敏感度,太快太慢都不合理。

我们还要考虑到烟雾在生命周期里的转速存在衰减才合理,膨胀越大,转速越慢,需要用曲线控制。

设置材质:“墨水(Ink)”材质,我们的老朋友。不用特殊渲染器,默认线扫描即可玩转。

固有颜色的“亮区”“暗区”高光“”三层可以自由控制渐变颜色。。。

同时,我们还可以将默认的“暗层”通道当做轮廓线来使用。

还没有用到Ink材质的核心,我们就已经可以得到一个具备强烈立体感的卡通烟团了——

至于卡通风格独有的轮廓线,功能更加丰富,你猜这个材质为什么叫“墨水”?

这可能是这篇教程第二精彩的地方,很多细节也是在项目制作中我才弄清楚的。

下面开始我们先给Ink参数做一个基础设置,让大家看明白墨水轮廓线的强大之处:

“轮廓”“重叠”和“延伸重叠”3个通道我们就得到了可控的3大区域,这还没有考虑灯光角度和上面说的“暗区”通道。也就是说,我们几乎可以控制渲染区域的所有可能性。让我们先观察“轮廓”“重叠”和“延伸重叠”各自角度的分布情况:

上面可以看出3个通道的分布规则,它们几乎覆盖了我们有可能用到的全部区域(中间空缺区域也可以通过偏移参数和灯光控满)下面贴几个通道组合的轮廓结果,这样轮廓形态就全都可控了:


这里提醒大家,既然Ink通道如此逆天,大家务必充分利用通道的衰减(Falloff)贴图和灯光的角度。

“组”与“材质ID”通道需要单独设置,不适合我们的案例,这里忽略了,我相信你会自己研究的。

如此这般,我们便可以得到任意的卡通烟团动态序列贴图!所有类型的项目可用。

处理溶解:

先跑题一下,溶解是项目课题的“题眼”,我们尝试了很多种方案,比较有代表的失败案例如下——失败溶解方案:粒子变形球(2D方案,没有凹面,呆板)

看过我2015年课程的朋友应该知道,Max默认粒子的“变形球”可以模拟卡通烟团且动态丰富。


粒子变形球方案输出的序列如下,溶解形态比较呆板,缺少凹面残缺的消散特点——

虽然已经V20+版,但效果不好就是不好,这些都是失败的素材。

——跑题结束,简单带过,其他方案还有3、4种,一律放弃~放弃~放弃~

正式方案(3D卡通烟团配合直观立体溶解,效果好,就是有点卡)——

继续拿我们编辑好造型、动态和材质的卡通烟团操作,这里最关键的溶解思路是“动态布尔运算”。

还记得我们上面创建的翻滚3D烟团吧?

把翻滚动画K好,也可以补一点模型自转(随意),让它动起来。注意曲线,先快后慢的上玄曲线。

帧数多一点备用,后期可以优化细节,我用50帧足够了。

然后复制一个当前的带动画的卡通烟团,在前面50%左右的帧数将它缩小至完全被遮挡。

然后K一个生命后半段逐渐放大,逐渐覆盖原始烟团的动画——

大家能看明白么?

就是复制一个烟团自身作为遮罩,然后先缩小被本体遮住,

在生命周期的后半段K一个放大并且覆盖本体的动画。

这里用了红蓝模型颜色来示意,应该很容易看到红色遮罩吃掉蓝色本体的过程了。

不严谨地说,这已经是一种溶解的动态了,而我们必须严谨。那么爱偷懒的家伙肯定先使用假假的布尔运算来尝试···比如直接给红球一个遮罩?勤劳的我试过并得到了一个丑东西——

让我们分析一下它的丑:

1.未能按照烟团的凹凸结构来溶解。

2.面片特征强烈,缺乏立体感。

严要求,高水平,顶尖的项目自然有顶尖的方案,我们一一解决:

第一个问题好解决,相机角度是我们已知的信息,只需要调节遮罩烟团的位置偏移量即可:

(其实用置换强度参数配合细胞贴图的对比阈值参数控制凹凸,可以更加直观地解决凸起结构先消失的效果。这里留下当作业,大家可以试试。)

OK,还剩下“面片感”问题,是时候请出“动态布尔运算”这尊大佛了,这个环节也是全篇效果最烧GPU的过程。

Max的布尔运算,在2018年版本之前,只有静态布尔运算,而且常常报错。不过2020年后的版本更新了,来吧。

首先我们要明确:给原本的烟团模型添加“Boolean”修改器,如何选:

然后我们就得到了:

这样我们用最直接的方式,得到了相减的、带有自身动画也带有溶解动画的、3D卡通烟团模型。

接下来希望得到厚度感就变得很容易了,加“壳(Shell)”、“松弛(Relax)”都可以了···

“壳(Shell)”可以补充模型厚度、“松弛(Relax)”可以收紧模型边缘并保障曲线平滑。

下面可以看看松弛(Relax)对模型的收紧效果,甚至会让溶解过程变得略显“艺术范儿”···


写教程的空档里临时渲染了一下,大概调整为这样,才接近成品:

总结:这一章信息量大,最烧脑,相信新手小伙伴会出现脑雾。

我总结下来大概是这几条:

1.灵活使用通道的定位,想得到优秀的轮廓线,可以将“暗区”和“轮廓”“重叠”“延伸重叠”4个通道都视为轮廓的变量。如果不够精准,调节“偏移量”

2.灯光可以给轮廓造型,实时考虑灯光对轮廓的影响。

3.每个通道都有贴图可以加载,对轮廓来说,衰减(Falloff)作用很大。

4.曲线:众所周知“特效曲线优化与否,常常会得到差异巨大的两个效果。”篇幅限制我没有详细拆解曲线的设置,希望大家可以耐心调试。

5.记得如果遇到马赛克,不要改这里(毛用没有),优先增加模型段数!

————————————————————————————————————

第三章【单一烟团自定义动画融入大量粒子烟团整体效果的整体感?】

完成了单个烟团的造型与动态,这一章便会比较简单,对新人友好,用到的都是一些MAX的基础工具的基础功能,我试试看用一张图片解释清楚全部设置吧。

发射器和力场控制:超级喷射就是最基础的喇叭发射器,摸过Unity的都应该知道风场(向量力场)和阻力。

关于发射器跟随汽车需要强调三点——

1.Max默认的发射器都会有出生前3~5帧的放大过程,需错位对齐。

2.关于Max粒子循环,比如复制一个“0~50帧”发射的粒子,参数不变,将发射周期改为“-50~0”两个一起播就循环了。

3.还是变速曲线。。。运动速度的变化对拉伸和粒子的疏密都存在质的影响,勿忘!

其他没有需要交代的,这些东西最好伙伴们可以听懂···不懂····也可以装起来的。

这是一段早期版本的废片,大伙可以看看问题出在哪里?


下来对比看看3D渲染阶段的输出吧:能看得出来,我将整体效果按照烟团体块和轮廓线两层渲染了,猜猜原因?


抱歉只能发一些刚刚渲染的示意效果,项目源文件是不会出现在教程的。相信伙伴们已经学会了,自己做一份成品练练手吧!������

总结:看到这里,3D渲染的效果已经接近完成了整体进度的90%。我不得不重申第一章总结的“分析需求”的重要性。这个项目课题最大的难度在于二章。对于特效老手来说,必然会将工作的压力和难点前置,做好前期的规划,让自己越做越轻松,越做越高效。

————————————————————————————————————

细节补齐【如何模拟出手绘卡通烟雾的整体渐变色和笔触质感?】

关于后期基本已经没有需要交代大家了,无非就是对齐时间和位置,微调了比例,然后加了个辉光?噢,对,我还补偿了一点运动模糊。不如补充一些细节小技巧给大家吧。

笔触感模拟:我一贯十分尊重手绘特效师,这里分享一些技术手段解决手绘感觉的方案,仅作致敬。

我理解的卡通烟雾体块部分的手绘感,主要关注“烟团结构交界区域”和“明暗交界区域”。卡通烟雾轮廓部分的手绘感,线条特征可控性很高。比如“不规则弯曲勾线”、“凹陷结构旋风”、“压感铅笔”、“较规律的虚线”,这些都是参数可控的笔触感模拟思路。

啥?电脑跑不动这么多面数的卡通模型烟团?···

渲染分层逻辑:上面说到为什么拆分渲染,是因为项目对渐变叠加和整体感的高度追求。我们用分层处理的方案,提升了后期处理的灵活性,甚至可以给整片烟团体块或者轮廓线渐变色叠加,来模拟烟雾高度或者深度,丰富画面。

减少杂点:3D模型溶解不比手绘精准,小于1像素的结构常常被渲染为杂点杂线.多数时候我们会在最后一次渲染时,将模型段数给到最平滑,基本就看不到杂点。如果还有,我们一般使用“中间值”“最大值”等后期方式处理。

总结:教程相关的素材和源文件,我发布在了“做特效”的案例里,感兴趣的伙伴可以过去免费领取,仅供学习、参考。【资源链接】:

这次经验分享到此结束,我已经努力用最直白的方式在表达了。看似轻松惬意,实战中真正的功劳属于那些一线奋斗熬夜打磨细节的同事伙伴,是项目组持续的高水平的审核与优化。一个精美均轮的特效作品,常常是十几乃至数十轮的精雕细琢,鲜少出现一步到位的惊艳。希望大家长期主义,希望大家能沉住气。

————————————————————————————————————

对了,常有朋友问我的电脑配置——挺普通的:

我总觉得对我们做即时渲染的特效师而言,过度关注配置并不是一个专业的思考,用配置平平的工具做出爆炸的效果才是专业度高的表现,伙伴们觉得呢?

————————————————————————————————————

还有很多有趣的项目和技术点,我以后有时间再与大家交流。感谢看到这里的好朋友,这是一个我代表GEEEU送给伙伴们的小礼物,顺便缅怀一下时光飞逝,其他没什么了···

方便的话分享给需要的人看到,感谢感谢!! ❤❤❤

最后感谢王者及广大项目伙伴对GEEEU团队的信任,感谢集悠集遇历任特效同事伙伴们的精诚合作。

祝大家在2026年的特效路上学有所成,劳有所得,身体健康,阖家幸福!❤❤❤

天亮了,今天早饭吃肉包还是菜包呢?

Recommended Topics