火焰的形状用圆形变形一半获得. 用Perlin noise使坐标变形制作随机抖动. 用Emission node渲染发光效果.

用graph editor和noise texture -> 飞行器火焰

步骤

参考RuiHuang_art在b站的教学视频 , 和做车流用到的功能差不多

  • world property: 加入一个背景的贴图
  • 制做一个平面的火焰:
    • 添加一个Plane mesh
    • 分成两半: 在Edit编辑模式下, 按Ctrl+R加loop cut , 在edge中间添加新的顶点,
    • 把一半拉长: 选中顶点后按G+Y在Y轴拉伸
  • shader: 目的是制作一个自发光, 半透明, 抖动的效果
    • 颜色效果:
      1. texture Coordinate 生成uv坐标
        • 在mapping里把x,y的location调到-2, scale调到4
        • uv坐标系好像范围是(-scale/2, scale/2)
      2. Gradient Texture 的spherical: 制作从外到内的渐变
      3. 自发光: 用Color Ramp 做一个 蓝->白->红->黄 的渐变
      4. 调整透明度: 用Color Ramp 做一个 透明->半透明->透明 的渐变
      5. 连接bsdf
        • 把Emission和transparent bsdf用Mix shader连接在一起
    • 抖动效果:
      1. texture Coordinate 生成object坐标
      2. Noise Texture 扭曲坐标, 制作抖动效果: noise texture和displacement的cloudy texture效果差不多
        • Mix Node 的Multiply把两个坐标混合
      3. Graph Editor 调整mapping的y坐标的location, 形成动态的扭曲
  • 把火焰的plane mesh旋转复制出多个绕y轴一圈
    • 在shader里选中一个materail复制给所有mesh
    • 复制完想修改所有的mesh形状但是没找到方法
  • 结果: 我复制的次数比较少, 而且颜色也不好看, 形状也拉的不太对
    • fire.mp4

shader流程

Pasted image 20240208164250.png

用displacement+粒子系统 -> 卡通火焰

步骤:

参考小红书KurTips的教学

  • 制作火焰形状
    • 添加一个cube mesh
    • 在modifier里加subdivision surface
    • 在Edit Mode, 打开Propotional Editing(衰减编辑), 选择最上面vertex, 按G+V可以在z轴拉伸
    • 制作焰心: 复制一个更小的放在前面
    • 选中两个object, 右键shade smooth
      • shader计算时, 三角形内的normal vector由三个顶点的normal vector插值得到
    • 合并两个object: Ctrl+J
  • shader: 设置texture Coordinate generate->Separate XYZ->Gradient Texture->ColorRamp-> Emission
    • 把大小两块用不同的材质
      • 进入Edit Mode, 随便选中一个点, Ctrl+L可以把原本的大小两个object分别选中
      • 在Material添加材质
    • ColorRamp颜色: 外焰: 红->黄 ; 焰心: 红->橙红
  • 抖动效果: 用displacement实现
    1. 在Modifier添加displace: 选Clouds材质, 调整Size, Depth=1, displacement的Stength
    2. 让displacement的强度从上到下渐变: 用顶点组实现
      1. 定义顶点组: 在Edit Mode开透视模式, 选中上面一部分顶点; 在Oject的Data里添加vetex group, 把刚才选中的部分顶点assign给这个顶点组
      2. Weight Paint模式, 增加weight->smooth->iteration: 让 in Vertex Group-> outside Vertex Group 的渐变更光滑
        • smooth操作的每个iteration都是和邻域的顶点做平滑
      3. 在displace的vertex group选择顶点组
    3. 制作displacement的动态: 通过绑定一个空坐标轴实现
      1. 在displace的Coordinates选择object, 物体选择我们的空坐标轴
      2. 修改空坐标轴的Oject->Transform的z轴的值, 改为: #frame/100(帧数/100)
  • 制作火星: 用粒子系统
    1. 在火焰里添加一个圆环mesh
    2. 进入Edit Mode, 填充: 快捷键F
    3. 修改Particles参数:
      • Field Weight-> Gravity改为0: 让粒子向上
      • Velocity-> normal改为2
      • Emission: 调整Frame_start, Frame_end, lifetime(和velocity共同控制粒子移动的距离)
      • Physics-> Brownian改为10.5: 让粒子做布朗运动
    4. 调整火星材质:
      1. 制作一个多面体mesh, subdivision改成1: 减小计算量
      2. 把多面体的shader改成自发光, 调整color, strength适当增大
      3. 打开eevee渲染器的bloom(辉光) 功能 : 通过blur发光区域模拟光线在周围大气散射的效果
      4. 制定Particles->Render参数:
        1. Render As调成Object模式, Render->Instance选择我们的制作的多面体mesh
        2. scale调小, scale Randomness调大: 让粒子大小不一
  • 结果: 因为焰心的制作方法, 只能在一定角度看.
    • fire_cartoon_cut.mp4

火焰效果的片段

[1] 冰海战记s2ep5的放火场景

reference

[1] https://zhuanlan.zhihu.com/p/484222862 辉光效果