Blender 做科研绘图,最容易被问到的不是球棍模型,而是“卷曲材料”这种看起来简单、上手却容易变形失控的结构。无论是卷成管的石墨烯、螺旋纳米带,还是波浪状薄膜,其实都可以用少量修改器和几何节点完成。这篇经验帖主要解决一个问题:在 Blender 里稳定做出能放进论文示意图的卷曲材料模型。我会从建模路线选择讲起,给出可复现的参数逻辑和排查顺序,适合正在做材料、生物、物理方向示意图的同学。
如果你只是想把一个平面卷成圆柱,最快的是 Simple Deform 修改器;如果想做螺旋纤维,就用曲线加 Bevel;如果想做周期性波浪片材,几何节点最方便。下面按实际落地顺序拆一遍:先判断结构类型,再选建模路径,然后分别做两个案例,最后处理材质、渲染和常见问题。
1. 先判断你要画的是哪一种“卷曲”
1.1 螺旋管/螺旋线:关键词是曲线半径和螺距
科研图里的卷曲材料,很多不是真的“卷成筒”,而是螺旋形。比如碳纳米管、DNA 双链、螺旋纳米带、纤维缠绕。这类结构最关键的控制参数是直径、螺距、圈数和旋转方向。在 Blender 里,建议优先用曲线对象做路径,再通过几何节点或修改器把截面沿路径生成网格。不要直接在编辑模式里手工拉伸顶点,那样看起来快,但后面想改螺距或圈数,几乎等于重做。
举个例子。我想做一根螺旋纤维:先加一条贝塞尔曲线,再用一个圆作为 Bevel Object,曲线就会变成管状。曲线本身可以通过数学方式生成,也可以在几何节点里使用螺旋曲线节点。不同 Blender 版本菜单名称不太一样,但思路一致:路径决定走向,截面决定粗细。控制螺距的参数不在曲线的 Bevel 里,而在生成螺旋路径的节点或修改器里,所以建模前要先把两件事分开:路径归路径,截面归截面。
很多初学者把圆管做出来后直接旋转复制,最后得到一堆互相穿插的对象,很难看。更稳的方式是保留曲线参数,随时可以修改螺旋直径、圈数和螺距。后面如果要做 DNA 双螺旋,只需要复制一条曲线并偏移 180 度,再把两条曲线一起生成管状,比手动布线快很多。
1.2 弯曲片材:关键词是弯折轴和分段数
如果你的卷曲材料是“一张平面弯成弧形”或“一个圆柱壳展开”,比如卷起来的薄膜、弯曲的纳米片、细胞膜截面,这类结构用网格加 Simple Deform 修改器最方便。它不像曲线路径那样需要精确计算中心线,只要给一个平面网格,设置弯曲角度和轴向即可。
这里最容易忽略的是分段数。Simple Deform 的 Bend 模式本质是让顶点沿某个轴旋转,网格顶点数越少,弯出来的表面越像折纸。以一张宽度为 1 的长方形片材为例,我一般沿宽度方向至少给 64 段,沿长度方向给 8 到 16 段。如果只需要做示意图,32 段也能看,但卷到 360 度时可能出现明显棱角。预先细分比卷完后用平滑修改器去救更可靠,因为平滑修改器只是把表面光影“骗”过去,几何上仍然是折线,渲染特写时容易露馅。
还有一个容易踩的坑:Simple Deform 的轴向判断。Bend Axis 用的是对象本地坐标,不是全局坐标。如果你的平面旋转过或者缩放不对称,直接选 Bend Axis 可能怎么试都不对。我的习惯是在添加修改器前先 Ctrl + A 应用旋转和缩放,把对象摆正,再加修改器。这样调轴时变量少,出问题时容易定位。
1.3 波浪/褶皱结构:关键词是周期偏移
第三种常见的“卷曲材料”其实是周期性波浪结构,比如波纹板、褶皱石墨烯、超材料表面。它和前面两种最大的区别是,表面起伏是按照数学规律重复的,手工拉点根本拉不齐,必须用参数化方法。
几何节点是最合适的工具。网格每个顶点都有自己的位置,把 X 或 Y 坐标输入给正弦函数,再用结果去偏移 Z 轴,就能得到一个干净的波浪面。频率决定波纹密度,振幅决定起伏高度,相位可以控制波纹的起点。后期要调整,只需拖动修改器上的参数,不需要进入编辑模式改点。
如果你是第一次用几何节点,不要被“节点”两个字吓到。它的本质就是把“对每个顶点做什么操作”拆成一个小流程图。很多科研绘图里的复杂变形,比如梯度波浪、局部卷曲、噪声褶皱,基本都是在这个流程上叠加数学公式实现的。
| 结构类型 | 核心控制参数 | 推荐建模方案 |
|---|---|---|
| 螺旋管/螺旋纤维 | 直径、螺距、圈数、旋向 | 曲线 + Bevel,或 Screw 修改器 |
| 卷成管/弧面的片材 | 弯曲角度、弯折轴、分段数 | Simple Deform 修改器 |
| 周期性波浪/褶皱片材 | 周期、振幅、相位、噪声强度 | 几何节点 |
2. 能直接落地的三种建模路径
2.1 平面网格加 Simple Deform 弯曲:最快
如果目标是一段弧面、半圆管、或 360 度卷纸,用平面加 Simple Deform 是速度最快的路径。具体流程分四步:
- Shift + A 添加一个平面,进入编辑模式,按需要把长度和宽度改成实际尺寸。
- 用右键 Subdivide 或 Ctrl + R 环切,给平面增加足够分段。分段数量按“卷越紧、分段越多”的原则。
- 回到物体模式,添加 Simple Deform 修改器,Mode 选择 Bend。
- 调整 Angle 角度,再切换 Bend Axis 或正负值,直到卷曲方向符合预期。
为什么这里是“调整再切换”?因为新手最容易把轴设成全局坐标。Blender 的修改器面板里默认是本地坐标,所以对象如果有旋转,同一个轴在不同视角下表现完全不一样。判断标准只有一个:看弯曲后顶点的运动方向,而不是看面板里的字母。如果角度已经调到了 300 度以上,方向还是不对,先应用旋转再试。
这个方案的优点是直观,缺点是不够“参数化”。比如你卷到 360 度,首尾不会自动焊接,交界处会有重叠或裂缝。如果只是做开口管,问题不大;如果要闭合无缝,需要把管的两条边用 Merge 或桥接处理。辅助工具是 Weld 修改器,但闭合接缝最好在编辑模式下完成。
2.2 曲线加 Bevel 和 Screw:适合管状纤维
管状、纤维状、绳索状的卷曲材料,不太适合用平面去弯,因为在弯曲过程中管壁的扭转很难控制。更好的思路是用曲线做中心路径,用 Bevel 给路径一个圆形截面;或者用一把小轮廓去绕轴旋转,生成螺旋体。
先说“曲线 + Bevel”。添加贝塞尔曲线,把它编辑成任意走向,然后在曲线属性里找到 Bevel 的 Depth(深度),设置一个数值,曲线立刻变成圆管。如果希望截面是方形或自定义截面,可以在场景里准备一个封闭曲线,把它指定为 Bevel Object。这里的核心是:曲线决定“沿什么方向”,截面决定“管子长什么样”。两个对象分开管理,后面修改互不干扰。
再说“螺旋带”这类扭转结构。如果你的卷曲材料是扁带绕成弹簧,比如扭曲的纳米带,可以准备一个小矩形面,把它放在原点一侧,添加 Screw 修改器。Screw 修改器会沿指定轴旋转并向上推进,产生类似螺纹的效果。调整 Steps 可以控制每一圈的平滑度,调整 Screw 参数可以控制螺距。矩形宽度控制带材宽度,矩形的高度控制厚度。这个方法很老,但稳定,对低配机器也友好,因为它的网格可以精确控制。
Screw 修改器生成的对象,默认是一条连续的螺旋带,但首尾不会自动封口。如果科研图需要表现“被截断的螺旋带”,可以在生成后加一个布尔或直接编辑端点。这里建议保留修改器,不到导出前不要应用,因为应用后网格会变成几万甚至几十万个顶点,再想改参数就麻烦了。
2.3 几何节点做参数化波浪:适合批量调整
几何节点的最大优势是“参数外置”。同样是波浪片材,手工做减法要改几十次;用几何节点,只需要在修改器面板里拖动 Frequency、Amplitude 两个参数,所有变化实时显示。对于科研绘图这种需要反复试错的场景,非常合适。
节点思路并不复杂:
Group Input -> Grid -> Set Position -> Position + (0, 0, A * sin(X * f + phase)) -> Group OutputGrid 生成一个矩形平面,分辨率用 Vertices X/Y 控制。Set Position 会把网格每个顶点的位置做一次计算。先拿到原始位置,把 X 分量取出来,乘以频率,套上正弦函数,再乘以振幅,得到 Z 轴的偏移。Combine XYZ 最后把新坐标组合回去。
这样得到的是没有厚度的片材。如果科研图里希望它是薄板而不是薄片,可以在几何节点中先 Grid,再用 Extrude Mesh 节点给一个厚度。不过 Extrude 会改变顶点拓扑,计算量变大,先用纯平面把结构形状确定好,再考虑厚度更稳妥。
几何节点并不是只能画波浪。你可以在偏移公式里叠加多个正弦、余弦或噪声,形成更复杂的卷曲表面。比如二次谐波可以做出“波浪上再叠加小波浪”,这个在材料粗糙度或褶皱示意图里很常见。判断标准是:公式复杂度增加后,视图刷新是否还能接受。如果很卡,就先降低 Grid 的 Vertices 数量。
3. 实操案例:从片材卷成圆柱管
3.1 基础网格的准备
这个案例的目标很简单:把一张长方形片材卷成一个带开口的圆柱管,用来表示卷起来的薄膜材料。我先建一个平面,把宽度设为 3,高度设为 1,宽度方向对应将来圆柱的周长,高度方向对应管长。然后在编辑模式里选择所有顶点,用 Subdivide 分割;左下角弹出的面板里把切割次数调到 5 到 7,确保宽度方向有足够分段。高度方向其实可以少一些,比如 8 段就够。
为什么宽度方向要多?因为 Simple Deform 的弯曲是绕轴转,顶点要分布在圆周方向。如果圆周方向只有 8 个顶点,弯出来的不是圆,而是八边形。即使渲染时开了平滑着色,轮廓边缘仍然会有明显的折线感。你要看的是线框,不是最终效果。
设置完成后,Shift + A 再添加一个合适的对象?不需要,直接应用旋转和缩放:Ctrl + A 应用全部变换。这一步很重要。很多人的平面看起来是正的,但属性面板里 Rotation 已经是乱七八糟的值,Simple Deform 就很难预测方向。
3.2 Simple Deform 参数和轴的调整
在修改器面板里添加 Simple Deform,Mode 选 Bend,Angle 先填 360。如果卷的方向不对,切换 Bend Axis 的三个选项:X、Y、Z,每切换一次观察哪个方向会开始卷。通常平面在 XY 平面、长边沿 X 时,Bend Axis 选 Z 或 X 会有明显差异,这个取决于 Blender 版本的坐标习惯。
判断标准很简单:不要盯着数字,看网格形状。你希望片材的宽度方向卷成圆周,那就看顶点是不是沿着宽度方向围绕某个轴旋转。如果方向反了,把 Angle 改成负数就行,不需要重新建模。
卷到 360 度时,首尾会重叠或留下一条缝。科研图里如果不想完全闭合,可以把 Angle 调到 300 到 350 度,做出开口管。如果你要的本来就是完整的圆管,那么 360 度之后两个边基本接触,但不会自动焊接。你可以应用修改器,进入编辑模式,选中两条边,用 Mesh > Merge > By Distance 把缝隙焊起来。如果顶点数量不同无法对应,说明宽度方向的分段不是整数,可以检查网格信息。
| 属性 | 作用 | 建议起点 |
|---|---|---|
| Angle | 弯曲角度 | 360;开口管用 300 到 350 |
| Bend Axis | 绕哪个轴弯曲 | 按对象本地坐标试 X/Y/Z |
| Limits | 限制弯曲范围 | 默认关闭;局部卷曲时再开 |
| 网格分段 | 弯曲方向顶点数 | 宽度方向至少 64 段 |
3.3 卷成螺旋带的后续处理
片材卷成圆柱后,如果还希望它整体继续“扭转”或“螺旋”,最好不要在 Simple Deform 上继续叠弯曲,因为多个 Bend 的效果很难预测。更建议直接用 Curve 修改器把已经卷好的带子绑到一条螺旋路径上。
具体思路:先创建一条螺旋曲线,作为带子的中心路径;再准备一段细长片材,把它卷成管状或螺旋带;给片材添加 Curve 修改器,把 Curve Object 指向螺旋路径;调整片材的长度,使它和路径长度大致匹配。否则片材会在路径上被拉伸或压缩,出现不均匀的粗细。
另一个更稳定的替代方案是用 Screw 修改器。做法是:新建一个矩形面,尺寸 0.5 x 0.02,把它放在原点旁边,长边沿 X 或 Y;添加 Screw 修改器,把 Steps 设成 128 或 32 的倍数,把 Screw 设成 0.2;选择 Screw Axis 为 Z,它将绕 Z 轴旋转并向上推进,生成一个绕了若干圈的螺旋带。矩形的高度决定厚度,矩形的宽度决定带材宽度。
这两种方案对比下来,如果你画的是一段圆管,用 Simple Deform 更好;如果你画的是扁带绕成弹簧,用 Screw 修改器更快。曲线加 Curve 修改器适合路径不是标准螺旋的情况,比如不规则弯曲的纤维。
4. 实操案例:用几何节点做可调波浪片材
4.1 几何节点基本框架
先新建一个平面,给它添加“几何节点修改器”。进入几何节点编辑器后,Shift + A 添加节点。节点框架一共四层:输入、生成、变形、输出。
- Group Input:拿到原始对象数据,也用来传递外部参数。
- Grid:生成一张矩形网格,替代原来的平面。
- Set Position:对每个顶点重新设置位置。
- Group Output:输出网格。
不要被 Grid 节点的 Vertices X/Y 吓到,它们就是网格在两个方向上的顶点数。比如 Vertices X = 128,Vertices Y = 32,意味着 X 方向有 128 个点,Y 方向有 32 个点,整个网格总面数约 128*32。数值越大越平滑,但越吃资源。
连接方式:Group Input 的 Geometry 接到 Grid 的输入;Grid 的 Mesh 接到 Set Position 的 Geometry;Set Position 的 Geometry 接到 Group Output 的 Geometry。Position 输入暂时不接,网格就是原始平面。
为什么要用 Grid 而不是直接拿平面的网格?因为 Grid 可以独立控制分辨率,不会破坏原对象的网格。你可以在节点外保留一个低模做参考,在节点内用高分辨率生成最终网格,这个习惯在处理卷曲材料时很有用。
4.2 卷曲、周期、振幅和材质 ID
接下来把“从平面变成波浪”的公式接起来。Set Position 节点的 Position 输入,需要一个坐标加偏移。先添加 Position 节点,拿到每个顶点的原始位置;用 Separate XYZ 把 X 抽出来;X 乘以频率后进入 Sine;Sine 结果乘以振幅,作为 Z 方向的偏移;最后用 Combine XYZ 把 X、Y、新 Z 组合回去。
如果你想同时控制波纹的横向周期,可以把正弦里的参数写得更直观:比如 offset = amplitude * sin(2 * pi * x / wavelength)。在节点里可以用“波长”作为输入,通过数学运算转换为频率。这个公式比“频率”更贴近科研人员的习惯,因为你脑子里想的是周期长度,而不是每秒周期数。
另外,如果你希望波浪片材带一点“卷曲感”,可以在偏移公式里再加一个弯曲项。例如把 Z 偏移改成 amplitude * sin(... ) - x^2 * curvature,x^2 项会让两端往下压,中间稍微拱起。这个技巧适用于画受到应力弯曲的薄膜。
材质 ID 不需要额外做,给网格指定材质时,整个几何节点输出会继承材质。如果你想让波浪顶部和底部颜色不同,可以在几何节点里用“存储命名属性”按 Z 值大小给顶点标一组权重,再在材质中使用颜色渐变读取。这个操作在后期做分区着色时会比反复选面方便很多。
4.3 如何批量复制随机变化
科研示意图经常会放多个卷曲结构做对比,比如不同周期的波浪片材排成一排。手动复制修改器参数会很累,尤其要模拟随机变化。可持续用“实例化于点上”节点,把已经生成好的波浪片材作为一个子几何体,放在一组三维点上。然后给每个实例单独传入随机参数。
具体做法是:在几何节点里先创建一组点,比如 Grid 或 Points,再用 Attribute Randomize 或 Random Value 节点生成随机振幅和随机相位;将这些值通过“实例化于点上”的实例属性输入给子实例。这需要一点节点编程基础,但初学不必一次做到位。你可以先做出一个可调波浪片材,复制成多个对象,各自修改参数。等需要大量排列时再升级为实例化写法。
随机化的判断标准:不是每个实例都不同就好,而是差异要符合科研图的需求。比如你要对比“波长对卷曲程度的影响”,就应该固定振幅,只让波长等差变化;如果你想要“随机的褶皱表面”,才让振幅、频率、相位同时随机。否则很容易画出一张信息混乱的示意图。
5. 材质、光照和科研风格输出
5.1 科研图适合的材质设置
卷曲材料一般很薄,材质重点要表现“轻、薄、透明或金属感”,不能像游戏道具一样自带粗糙纹理。常见有几种:
- 透明薄膜:Principled BSDF 里 Transmission 拉到 0.8 到 1.0,Roughness 0.1 左右,厚度感靠边缘高光表现。
- 金属管:Metallic 设为 1.0,Roughness 0.2 到 0.4,颜色可以偏灰或带一点蓝。
- 半透明纤维:可以用 Principled BSDF + SSS 或 Transmission;纤维较细时,材质靠边缘光而不是固有色。
如果是通过修改器或几何节点生成的卷曲结构,材质工作正常,但 UV 可能有问题。尤其是 Simple Deform 和 Screw 生成后,UV 沿圆周方向和螺旋方向拉伸严重。建议在修改器面板把“输出材质槽”放进网格后,应用修改器,然后进入编辑模式 U > Reset 或 Smart UV Project 重新展开。如果不想应用修改器,可以在材质节点里使用 Texture Coordinate 的 Object 输出,配合 Math 节点做简单的重复平铺。这种对象坐标方案比纠缠 UV 方便。
5.2 光照和背景
科研绘图不适合太强的阴影。我一般把渲染引擎设为 Cycles,采样 128 左右,开去噪;如果只是临时调整角度,切换到 EEVEE 快速看构图。布光不要只放一盏灯,否则卷曲结构的暗部直接死黑。推荐三盏灯:主光从左上 45 度照亮结构,补光从右侧低强度回补,背光从后面勾亮边缘。
背景分为两种。如果图片要放进论文里当示意图,建议用白色或非常浅的灰渐变背景,金属材质放白背景下容易拍出轮廓;如果要用透明背景给 PPT,就在渲染属性里勾选 Film > Transparent,输出 PNG 时得到 RGBA。
这里有一个坑:透明背景往往和辉光效果冲突。如果你用 Bloom 或 Freestyle 线条,保存透明背景时容易出现黑边或白边。最好在输出后放到黑白背景上检查一遍,确认边缘干净。
5.3 透明背景、尺寸与标注
渲染输出时,先设置输出格式为 PNG、RGBA。分辨率我一般用 1920×1080 或 2048×1536,采样 128 到 256 足够。如果画的是很细的螺旋纤维,可以适当提高到 3000 像素,因为细线条在高分辨率下才不至于发虚。
标注尽量不在 Blender 里做。用 Blender 的 Text 对象加中文字体容易乱,而且后期换字、改字体都不方便。更好的流程是:在 Blender 里渲出干净模型图,把图导入 PPT、AI 或排版软件,统一加文字、箭头和标尺。这一步能让图片风格和论文其他图保持一致。
如果确实要在 Blender 里标注,也可以给 Text 对象加 Extrude 厚度,用透明阴影材质,但这只适合做封面图,不适合正式论文。
6. 常见报错和排查顺序
6.1 模型变形扭曲、破面、穿插
很多卷曲模型失败,不是修改器不会用,而是修改器顺序和对象变换出了问题。比如一个平面已经应用了多个修改器:先 Solidify 加厚度,再 Simple Deform 弯曲,两者的顺序不同,弯曲效果截然不同。我一般把产生形变的修改器放在前面,把增加厚度的修改器放在后面,或者反过来——没有固定答案,因为这取决于最终效果。关键是你需要知道修改器是从上往下执行的,所以顺序就是计算顺序。
如果破面出现在弯曲处,首先检查该方向的分段数。分段数足够但仍有棱角,再看是否开了 Auto Smooth 或添加了 Subdivision Surface 修改器。卷曲结构的边缘建议不加 Subdivision,因为会大幅增加面数,而且可能让尖角变圆。
穿插问题最常见于螺旋带或 Screw 生成对象。螺距太小、带材太宽,两圈之间就会互相穿过去。解决办法很简单:增大螺距或减小带宽度。不要尝试用布尔去除穿插,那个只会带来更多破面。
6.2 UV 和贴图方向不对
如果材质看起来花掉了,先用棋盘格纹理排查。在材质节点里把 Principled BSDF 的 Base Color 接一个棋盘格纹理,然后看模型:如果棋盘格在卷曲方向上被拉长,说明 UV 展开没有匹配弯曲方向,或者纹理坐标用的是默认的 Generated 坐标,在动态修改器作用下会“滑”。
解决办法有三种:
- 应用所有修改器,进入编辑模式重新展开 UV。
- 使用 Texture Coordinate 的 Object 坐标,让纹理贴到整个对象空间,而不是沿着 UV。
- 用 Mix 节点控制局部区域的材质,避免用一张完整贴图覆盖整个卷曲表面。
科研绘图不像游戏,不需要每一处贴图都完美无瑕,但方向不能乱。至少要在最终渲染里能认出图案的排列规律。
6.3 渲染慢或内存占用高
渲染变慢时,很多人第一反应是提高采样,其实先看看模型有多少面。几何节点的 Grid 如果 Vertices X=512、Vertices Y=256,那就有 13 万个面,加上材质和曲线细分后很容易达到几十万面。配合 Cycles 渲染,普通笔记本会明显卡顿。
优化顺序:
- 降低视图用分辨率:在几何节点修改器里把 Grid 的 Vertices 降为四分之一,观察阶段用。
- 渲染前再提高分辨率。
- 尽量不用 Subdivision Surface,用更高分辨率的原始网格代替。
- 关闭不相关的对象显示和体积。
- Cycles 采样没必要一开始就 512,先用 64 看构图,最终图再拉高。
判断“卡顿是否正常”的一个标准:物体旋转视角时,如果视图 FPS 低于 10,肯定需要降低面数;如果只是最终渲染慢,但视图流畅,可以先不改几何节点,只优化采样和场景。
6.4 排错顺序清单
最后给一个我自己用下来的排查顺序。遇到卷曲材料效果不对,不要急着删了重做,按这个顺序过一遍:
- 先看线框:检查分段数是否足够,是否有非流形面、重叠点。
- 再看修改器列表:确认应用了旋转/缩放,修改器顺序是否符合预期。
- 检查参数:Simple Deform 的角度、Bend Axis;Screw 的 Steps、Screw 值;几何节点的 Grid 分辨率。
- 检查材质:把贴图换成棋盘格,确认 UV 方向和拉伸情况。
- 检查渲染设置:是否开了透明背景、采样是否过低、是否有光晕遮挡。
- 最后才考虑换成另一种建模路径。
大部分问题其实出在前三步。尤其“应用旋转和缩放”这一项,理论上很简单,但实际项目里一半以上的卷曲变形异常都和对象变换没清理有关。只要你把这一步养成习惯,后面能省很多时间。
真正落到项目里,你会发现关键还是先把结构类型想清楚,再选一条克制且参数化的路径。卷曲材料不难画,难的是每次调整都有迹可循。把这些修改器和几何节点当作可调参数来用,你的科研绘图会稳定很多。