资讯动态

Blender行星大气渲染:体积散射与边缘光打造真实星球

发布时间:2026/9/7 5:21:01 来源:尧图企业网站定制
第一次在 Blender 里做行星场景的人十有八九会碰到同一个问题球体贴完纹理之后怎么看都像一颗塑料玩具。你调了颜色、加了凹凸、换了灯光画面依然有一种“刚被拉进三维软件”的生硬感。真正的转折点出现在你意识到一件事之后——这颗球缺的不是贴图不是分辨率而是“空气”。这里说的空气就是行星大气层。它在视觉上的作用被严重低估了让行星边缘出现柔和的蓝色或橙色光环让背光面不会死黑让地表亮部和暗部之间出现完整的过渡层次。没有这层处理模型再精细也只是一颗大号台球。今天的主题是在 Blender 里创建逼真的行星大气环境。我打算换一种讲法不让你直接下载一个工程文件然后无脑渲染而是把大气效果的底层结构拆开讲清楚它为什么这么做以及如果你拿到别人分享的免费项目文件该怎么去理解它、修改它、最后变成自己的东西。1. 先搞清楚行星渲染为什么不能只靠贴图1.1 行星看起来假往往不是模型和贴图的问题做个实验。新建一个 UV 球体随便贴上一张地表纹理打一盏太阳光用 Cycles 渲染。结果通常是球体表面确实有了颜色但整体仍像一个被灯光照亮的台球。这时候你会下意识去换纹理、加凹凸、调粗糙度最后发现改善有限。原因在于真实行星看起来“真实”不是来自表面本身而是来自光线穿过大气层之后形成的散射和渐变。你看到的地球不是一张蓝色平面贴图而是一整套光学现象的组合阳光照到大气分子上发生散射蓝光被散射到各个方向于是白天的天空是蓝色的阳光从行星边缘穿过更厚的大气层时光线被吸收和折弯于是边缘出现一层蓝紫色的环。这些现象在 Blender 里对应的不是“贴图”而是“体积”和“边缘光”。如果你只用表面纹理等于把所有视觉信息都压在一个二维的面上自然表现不出空气的厚度。1.2 大气不是单一效果而是三层光学现象的叠加把“大气”拆开看至少包含三层表面层行星的岩石、海洋、云层属于不透明或半透明材质。体积层大气本身属于参与散射和吸收的体积会真实地影响光线路径。边缘光环阳光在行星边缘穿过更厚大气时产生的光晕。Blender 没有提供一个“一行搞定”的行星大气节点。社区里最通用的做法是用两个或三个同心球体分别承担不同层的任务。最内层是行星表面中层是大气体积外层是边缘光。每一层各司其职最终叠加出说服力。从工程经验看这也是最好的排查框架。如果渲染结果没有空气感可以先判断是哪一层出了问题而不是把所有节点从头到尾乱调一遍。2. 搭建最小场景用三个球体把行星结构立起来动手之前建议先完成一个最简版本。这个版本不追求细节只求让三层结构成立后面再逐步替换或优化。2.1 场景组成需要四个基本对象一个大半径球体作为行星表面。一个比表面球略大的球体作为大气体积层。一个更大的球体作为边缘光层。一盏太阳光Sun Light方向从侧面或侧后方照向行星。不要一开始就把场景做得很复杂。先把球体、灯光、相机摆好确认三个球体彼此嵌套且比例差不能太小。常见做法是大气球半径约为表面球的 1.02 到 1.05 倍边缘光球约为 1.1 到 1.3 倍。具体倍数要看最终效果但差距太小会看不到层次差距太大会显得边缘光环过宽、像一层突兀的霓虹。三个球体建议这样命名对象推荐命名承担的角色内层球Planet_Surface地表材质中层球Planet_Atmosphere体积散射外层球Planet_Glow边缘发射光命名不是形式主义。当项目文件越来越大球体、灯光、空物体越来越多时一个清晰的名字能省掉大量找对象的时间。2.2 表面材质的定位不要抢大气的戏表面材质可以用 Principled BSDF 节点把 Base Color 连入一个 Noise Texture 加 ColorRamp 的组合制造基础的地表明暗变化。如果你要更写实的地表可以换用地形贴图或公开的卫星影像纹理。但一开始我更建议先用程序纹理因为程序纹理更轻、更容易调而且不会因为贴图分辨率限制毁掉近距离特写。表面材质的关键不是“多炫”而是“不要把亮度拉满”。大气体积和边缘光都会给最终画面叠加亮度如果表面本身亮度过高渲染结果很容易过曝尤其是行星边缘。很多教程项目的表面材质会选择中等偏暗的色调目的就是把光线的表现空间留给大气层。2.3 一个值得养成的节点分组习惯三个球体的材质分别建立单独的 Node Group比如Node Group: Atmosphere_Volume ├── Principled Volume │ ├── Color - Group Input (Atmo_Color) │ ├── Density - Group Input (Density) │ └── Anisotropy - Group Input (Anisotropy) └── Output - Material Output (Volume) Node Group: Edge_Glow ├── Layer Weight │ ├── Facing - 1 - Facing │ ├── 结果 * Emission Strength │ └── Color - Group Input (Glow_Color) └── Output - Material Output (Surface)这样做有两个好处一是以后可以随时把某个节点组拖到新项目里使用二是排查时能快速定位是哪一层出了问题。作者提供的免费项目文件里往往也是这种节点组结构。你打开 Shader Editor 后第一个动作就应该是找到这三个分组。3. 体积散射让行星拥有真正的“空气”3.1 Principled Volume 是大气层的核心节点大气体积层通常使用 Volume Scatter 或 Principled Volume 节点。Principled Volume 更常用因为它把吸收、散射、自发光、各向异性等参数整合在一起方便调出一个比较完整的体积材质。在 Shader Editor 里把 Principled Volume 的输出连到 Material Output 的 Volume 输入。注意三层材质各自连接的输出口不一样表面球输出连到 Surface。大气球输出连到 Volume。边缘光球输出连到 Surface。这个“连接口”经常被忽略。很多新手把体积节点连到了 Surface结果渲染出来是个半透明发光球而不是大气效果。3.2 密度和颜色参数从低开始Principled Volume 的 Density 参数新手最容易一上来就调大。错误直觉是密度大等于空气厚效果应该更明显。但实际结果往往是画面灰蒙蒙、噪点暴增、渲染时间翻倍。一般建议从 0.01 到 0.05 这样的低密度开始测试再逐步往上加。下面是一组常见范围的参考值具体要以你的场景比例和灯光强度为准参数建议起点作用Density0.01 ~ 0.05控制大气浓度宁低勿高Color淡蓝 / 淡橙决定大气散射颜色Anisotropy0 到 0.5正值会增强太阳方向的光晕Emission Strength0不需要大气通常用散射不用自发光Color 参数决定大气散射的颜色。地球类行星常用淡蓝到蓝紫色火星类行星常用橙红色。如果你不确定可以先从淡蓝色开始再根据渲染结果微调。Anisotropy各向异性控制光线是向前散射还是向后散射。常见设置是偏向前向散射也就是取正值这样阳光穿过大气时会形成更明显的光晕。3.3 体积渲染的代价为什么噪点和采样会变多体积散射会显著增加渲染时间。原因在于Cycles 需要在体积内部做随机采样每一根光线穿过体积时都可能发生多次散射事件。场景体积越大、密度越高采样次数越多噪点越严重。如果只是做单帧静帧可以接受较长的渲染时间。如果是做动画建议先压低体积密度或者用低分辨率预览最后输出阶段再拉高采样。也有人会关掉体积的阴影投射只保留视觉上的光晕效果但这会牺牲一些真实感适合预算有限的场景。注意不要一开始就把体积密度拉满。先用一条低分辨率渲染确认三层结构都正常再逐步加大密度和采样。4. 边缘光把大气层的“轮廓”做出来4.1 为什么有了体积散射还要加边缘光纯体积散射已经能产生一定的大气感但在很多角度下行星边缘的光晕不够明显。尤其是当相机正对行星、太阳在侧后方时体积层的厚度集中在边缘渲染结果却不一定够通透。边缘光球的做法是外层球体使用 Emission 材质配合 Layer Weight 或 Fresnel 节点让球体只在“掠射角”附近发光也就是视线接近球体切线的区域。实现逻辑不复杂Layer Weight 节点的 Facing 输出在球体面向相机的位置接近 1在边缘接近 0。用1 - Facing得到“边缘亮、中心暗”的遮罩。把这个遮罩乘上 Emission 的颜色和强度作为自发光输出。这样球体中心不会发光只有边缘一圈会亮起来正好模拟阳光穿过行星边缘大气层的光晕。4.2 颜色和强度怎么选边缘光的颜色通常和大气散射颜色保持一致或者更亮一点、更偏白一点。Emission Strength 建议从 0.5 到 2 之间开始调。太低看不到光环太高会让边缘过曝甚至把行星表面细节吞掉。在 Cycles 里边缘光本质上是把能量直接发射出去因此渲染结果会受到曝光设置影响。如果你发现整个画面偏暗或偏亮优先检查 Film Exposure 和边缘光强度而不是急着改场景灯光。4.3 三层叠加后应该看到什么调好的三层材质叠加后画面至少应该具备三个特征行星表面有清晰的明暗交界线暗部不至于死黑。行星边缘有一圈柔和渐变的光环颜色与大气散射色一致。当太阳位于行星侧后方时边缘光出现在行星的逆光侧形成强烈的轮廓感。如果少了其中任意一个就可以根据对应层去排查没有明暗交界线检查灯光和表面材质没有光环检查边缘光球大小和 Emission 强度颜色不一致检查体积散射色和边缘光色是否统一。5. 从灰蒙蒙到通透五个高频坑和排查链路5.1 常见问题不一定出在节点上当你觉得渲染结果“哪里不对”时不要急着反复拖参数。先按下面的顺序排查效率会高很多。第一看现象。是整体灰暗还是边缘没有光环还是表面细节丢失不同现象对应不同层。第二看输入。检查球体法线是否反转检查太阳光方向是否确实照射到行星检查相机剪裁范围是否合适。这一步经常被忽略但很多人调了半天最后发现只是法线反了。第三看环境。检查 Blender 的单位比例是否异常。如果行星半径是 1 米密度 0.01 的体积可能什么都看不见如果行星半径是 10000 米同样密度的体积可能浓得像雾。体积渲染里密度和场景尺度强相关。第四看参数。检查 Film Exposure 是否正常、Denoise 是否开启、采样数是否足够。Cycles 中还有几个和体积强相关的参数Light Paths 里的 Max Bounces、Volume Sampling 方式、Volume Step Rate。它们对噪点和渲染速度影响很大。第五看工具边界。Blender 版本差异可能导致节点默认值不同。如果你打开的是别人制作的项目文件先在文件 - 外部数据 - 打包资源里确认纹理资源已经打包。否则换一台电脑、换一个路径纹理全部丢失。5.2 一个快速定位问题的对照表现象大概率问题优先处理方向整体灰蒙蒙体积密度过高或曝光过高降低 Density检查 Exposure边缘没有光环边缘光球太小或 Emission 太低放大外层球提高 Strength表面过曝表面材质亮度太高调暗 Base Color复查灯光强度噪点剧烈体积采样不足提高采样调整 Step Rate开启 Denoise改参数没反应节点连接错误检查体积是否连到了 Volume 接口打开项目文件后贴图丢失资源未打包使用打包资源功能5.3 Cycles 与 Eevee两种渲染器的思路差异Cycles 是基于物理的光线追踪渲染器体积散射和边缘光效果更真实但速度慢。Eevee 是实时渲染器默认不模拟真正的体积散射而是通过近似方式模拟效果需要额外调整。如果只是预览或者交互式调节Eevee 够用。如果最终要输出静帧或高质量动画我更建议以 Cycles 为准。不要在 Eevee 里调完参数后直接切到 Cycles 期望效果一致这两套渲染器的光照模型从根本上就不一样。常见做法是先用 Eevee 快速摆位和调结构最后用 Cycles 出图。5.4 下载免费项目文件之后先做三件事很多教程会附带免费项目文件。下载后不要立刻点渲染先做三件事确认 Blender 版本兼容。旧版本打开新版本文件可能丢失节点默认参数材质树会变样。检查纹理是否打包。执行文件 - 外部数据 - 打包资源。没有打包的话换电脑后资源会丢失。找到三层结构的对应关系。打开 Shader Editor把对方的节点图和这个教程的三层结构对应起来定位表面层、体积层、边缘光层分别在哪。如果你想快速摸清一个项目文件的结构可以在 Scripting 工作区运行一个小脚本import bpy for obj in bpy.data.objects: if obj.type MESH: mats [slot.material.name for slot in obj.material_slots if slot.material] print(obj.name, mats)这个脚本会列出场景中所有网格物体以及它们引用的材质名称。对陌生的工程文件来说这是一个很实用的摸底工具。你可以直接看出作者把哪些材质分给了哪几个球体。注意任何下载的项目文件都只是起点。如果你能按三层的逻辑把它拆开它的价值就会远大于一张渲染图。6. 从单次渲染到可复用资产把经验沉淀成模板6.1 设计自己的行星大气资产库做完一个效果满意的行星后不要把场景直接丢进回收站。把它整理成可复用的模板三个球体按固定比例命名。三层材质各自做成 Node Group把关键参数暴露到 Group Input。把表面球、大气球、边缘光球的缩放倍数记录在一个文本备注里。下次做新行星时只需要复制场景或 Append 这些节点组改颜色、改密度、改强度就能快速生成新的风格。这一套不用多复杂但能帮你把一次性的“调出来了”变成“以后每次都能调出来”。6.2 不同行星的调整方式行星类型表面风格大气散射色边缘光色密度倾向地球类蓝绿海洋 陆地淡蓝蓝白中等火星类红褐沙漠橙红偏淡橙偏薄气态巨行星条纹纹理淡黄 / 淡粉接近主体色偏厚关键不在精确参数而在于理解大气散射颜色取决于大气成分和光线过滤边缘光强度取决于大气密度和观察角度。6.3 什么情况下不值得用体积方案体积散射方案的代价是渲染时间。如果只是做远景中的小行星或者行星在画面里只有几十个像素直接用贴图加一个简单的发光边缘球就够了没必要为它付出高昂的体积渲染成本。如果项目面向实时引擎比如 Unity 或 UnrealBlender 里的体积散射节点并不能直接导出。你更需要的是在 Blender 里烘焙环境图、法线图或光晕图然后在引擎里用 Shader 模拟。这个边界很重要。做工具选型时先问自己要什么是一张三秒渲染完的封面图还是一段可以交给后期合成的电影级镜头不同目标对应完全不同的成本投入。6.4 一个可复用的三步验证法无论怎么调参都用同一套验证流程避免陷入无休止的尝试基准渲染先用一组基准参数渲染一张低分辨率图确认三层结构都正常。单变量测试一次只改一个参数渲染后用截图或对比图记录变化。回归基准如果改了参数后效果变差立刻回到基准参数而不是继续叠加修改。这个方法看起来简单但在实际项目中非常管用。体积渲染的调整周期很长如果同时改多个参数你很难判断到底是哪一步导致了问题。单变量测试能让每次修改都变得可追溯。最后说回开头那句话。行星渲染的门槛从来不在建模而在让光穿过空气这件事。Blender 给了你体积节点和完整的节点编辑器但把不把这些能力组合成一套可复用的资产取决于你的工作习惯。下载别人的免费项目文件只能帮你得到一张图理解三层结构才能让你得到一种能力。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价