步骤

参考RuiHuang_art在b站的教学视频

  • world property: 加入一个太空背景的贴图
  • 光源:改成sun light
    • strength改成12: 单位是 $W/m^2$
    • volume改成3: 控制在volume shader时的影响?
  • render: 用eevee
    • 设置volumetrics参数
      • 打开volumetric shadows
      • start, end: 相对相机的体积效果范围, 设为(3.3m->200m)
      • tile size: volume块大小
  • shader:
    • principled volume : 把mesh包含的部分看成volume块
      • color:
        1. texture Coordinate 生成volume的坐标
        2. Image Texture 把2d的木星贴图映射到3d的volume上
        3. Hue/Saturation/Value Node 调颜色
      • density: 一个从里到外逐渐稀薄的球形+被纹理的影响
        1. texture Coordinate 生成volume的坐标
          1. object生成一个在中心的坐标系
          2. Image Texture 生成一个按照贴图纹理亮度的scale, 模拟气体的效果
            • 用Mulitiply node的Factor node调整受纹理影响的强度
            • invert node 调整: 亮的纹理密度低(凹陷), 暗得纹理密度高(突出), 如果Fac设置成1就会反过来
              • Fac参数: 类似$\alpha \frac{1}{x}+(1-\alpha) x$ ?
            • 这部分应该可以优化, 不是用multiply 而是用其他方式做纹理的distortion?
        2. gradient texture 设置渐变的密度
        3. Color Ramp 做一个动态范围的压缩:
          • 我们想要一个(实体->气态->空) 的渐变, 中间density在0-1之间的部分, 是气态部分
          • 调整value参数, 也就是最后输入的密度
    • 视频里还另外加了一个底色, 但是看起来没什么影响
  • 相机: Camera-> Data
    • Focal Length 调大到60mm: 调整物体在镜头内的大小
  • 结果: 和视频里的结果不完全一样, 不清楚是哪里的问题😮‍💨
    • Pasted image 20240129164109.png Pasted image 20240129164354.png

shader流程

Pasted image 20240129164505.png

texture Coordinate 的设置

texture coordinate不同模式的区别是坐标系的原点位置不一样: generate模式的原点是在mesh的bounding box一角, 而object模式的原点是在bounding box的中心(从名字是看不出来..也没看源码验证, 都是我猜的)

  • gradient texture 调整密度时, 输入的是vector的模长
    • 如果generate模式 , 密度最大的点在box的一角, 得到Pasted image 20240129151203.png;
    • 用object模式 , 密度最大的点在中心, 得到Pasted image 20240129151233.png, 也就是我们需要的行星的形态
  • 而我们用Image Texture 设置颜色的映射时, Sphere的映射方法默认是围绕点 $(0.5,0.5,0.5)$ 进行映射, 这个时候我们就需要在generate模式的坐标系下映射
    • Sphere的映射方法: sphere
    • 把贴图jupiter_01_pd.png 映射到Pasted image 20240129144125.png