
最近在做一批木雕、根雕、文玩摆件的数字化展示需求时最让人头疼的其实不是建模本身而是如何把“桩型有派、纹理带帅”这种非常个性化的造型语言转化成可以快速调整、批量输出的三维模型和渲染图。传统做法是手工雕刻以后拍照留图但一旦遇到需要多角度展示、不同配色材质对比的场景效率就会非常低。用 Blender 结合 Python 程序化建模可以把这类需求拆解成“桩型生成、筋纹排布、材质纹理、批量出图”四个可控步骤几分钟就能换一套方案。本文就以“桩型有派纹理带帅青龙八道筋结缘留图”这样一个偏文创风格的视觉需求为例讲清楚从模型到渲染图的完整实现思路。1. 把“桩型 八道筋”变成可编程方案1.1 这个需求到底在做什么在木雕、根雕和文玩摆件领域“桩型”通常指一件作品的整体轮廓像树桩或山石材质的厚重造型强调横向张力与纵向节奏。而“八道筋”则是指在主体表面均匀分布、沿纵向方向延展的八条凸起筋纹类似南瓜棱、竹节筋或者传统筋囊器上的线条。“青龙”在这里更多是一种纹理风格代称寓意线条走势像龙形一样流畅色彩上偏向青绿、墨绿或石青色。把这几个词组合起来就是一个带有多条纵筋、表面有仿古质感的摆件模型。本文会把“结缘留图”理解为最终输出一张或多张可供分享、参考的效果图这是文创行业中很常见的交付形式。有一点需要提前说明这些叫法并不是严格统一的行业标准不同作者、不同地区可能有完全不同的理解。所以在技术实现上我并不会纠结“八道筋必须长成什么样”而是把核心能力抽象成三个可调控点主体模型、筋纹数量与分布、表面纹理质感。只要这三者可控后续无论面对什么风格需求都能快速适配。1.2 为什么选择 Blender Python 方案选择 Blender 有四个原因。第一它是开源的免费商用学生和工作室使用成本低。第二它的 Geometry Nodes 可以像写程序一样组合建模逻辑能在不破坏原始模型的情况下反复调整参数。第三它内置 Python API渲染、导出、批量出图都能通过脚本自动化非常适合“结缘留图”这种需要快速出图给客户确认的场景。第四Blender 的材质节点非常灵活木纹、青色龙纹、旧化痕迹都可以用程序化纹理生成不需要额外购买贴图素材。和手动建模相比这套方案的核心优势是“改参数而不是改模型”。比如甲客户想要八道筋乙客户想要十二道筋丙客户希望筋纹更粗在程序化模型中只需要修改角度或阈值参数几分钟内就能重新出图。这个特性在文创摆件标准化生产、电商详情页展示、3D 打印原型验证中都非常重要。1.3 技术路线整个项目可以拆成四条技术线环节技术手段产出桩体造型Blender 圆柱体 Geometry Nodes 噪波扰动可调参数的树桩模型八道筋Array 修改器 / Geometry Nodes 循环复制均匀分布的结构线纹理材质Shader Nodes 程序化纹理 Pillow 生成贴图木纹与青龙质感效果图Eevee/Cycles 渲染 Python 批量出图PNG/JPG 效果图这里需要理解一个核心思想模型是“骨架”纹理是“皮肤”。八道筋既可以做成真实的几何凸起用于 3D 打印和近距离观察也可以做成材质上的凹凸贴图用于快速渲染。本文两种方案都会涉及你可以根据项目需要选择。2. 环境准备与版本说明2.1 软件与版本本文使用的核心软件是 Blender。Blender 4.x 之后Geometry Nodes 的流程和节点命名已经相对稳定但 4.0、4.1、4.2 之间仍有少量节点改名或参数变化所以下面会以“Blender 4.0 及以上版本”为例。如果遇到“找不到某个节点”的情况可以用搜索框直接输入节点英文名或者查看官方版本迁移说明。除了 Blender还需要准备 Python 环境用于生成纹理贴图。Blender 内置的 Python 可以执行部分脚本但生成二维贴图建议使用独立的 Python 3.10 环境并且安装 Pillow 和 NumPypip install pillow numpy如果你不想单独安装 Python也可以在 Blender 的 Python Console 中执行同样的逻辑但需要确认 Blender 自带的 Python 里已经包含 numpy。Blender 4.x 通常会自带 numpy 库。2.2 项目目录结构为了不让文件散落建议先建立一个干净的项目目录eight_rib_project/ ├── blend/ │ └── eight_rib_work.blend ├── textures/ │ ├── eight_ribs.png │ └── wood_grain.png ├── scripts/ │ ├── gen_texture.py │ ├── batch_render.py │ └── create_eight_ribs.py └── output/ └── render/ # 渲染结果输出到这里这个结构的好处是纹理、脚本、工程文件分离方便版本管理和换机器协作。即使不使用 Git 的公司也可以用这个目录结构快速复制项目避免两个同事之间互相覆盖文件。纹理贴图放textures脚本放scripts渲染结果统一放output后面写批处理脚本时路径逻辑会很清晰。2.3 前置知识阅读本文不需要很深的建模功底但最好先了解 Blender 的基础操作比如视图旋转、Tab 进入编辑模式、快捷键 G 移动、S 缩放、R 旋转。如果这些都不太熟可以先花半小时熟悉 Blender 的默认界面。另外代码部分涉及 Python 基础语法如果你会写 for 循环和函数读起来会轻松很多。如果你完全没有 Python 基础也没关系脚本部分复制运行即可重点是理解参数含义。3. 核心原理桩型、筋纹与材质的生成逻辑3.1 桩型从圆柱体到自然摆件桩型的本质是一个“不规则的圆柱体”。只需要在圆柱体的顶点上增加随机扰动让它看起来不是完美几何体就能得到树桩的雏形。扰动幅度不能太大否则模型会失真也不能太小否则看不出手工感。实际操作中可以用 Noise Texture 作为位移权重让表面既有起伏又保持整体轮廓稳定。在 Blender 中有两种实现方式。第一种是传统编辑模式先创建一个 Cylinder然后在顶视图随机选择顶点使用比例编辑按 O 键开启 Falloff向外或向内拖动。第二种是 Geometry Nodes把圆柱体作为基础输入用 Noise Texture 控制 Set Position 节点实现更可控的表面起伏。第二种更适合需要参数化调整的项目因为你可以把“起伏强度”“噪波缩放”“粗糙度”都暴露成参数。3.2 八道筋角度分布与凸起实现八道筋的生成逻辑非常简单八条筋均匀分布在 360 度圆周上每两条相邻筋之间的夹角是 360 / 8 45 度。只要保证每个筋条的生成位置按照这个角度旋转就能得到均匀排列的效果。关键的数学点是要区分“角度量”和“弧长量”。如果摆件半径为 r八条筋在圆周上的间距并不是固定的直线距离而是按照中心角来排布的。中心角相等时半径越大筋与筋之间的弧长越大。所以在建模时应该以“角度”为基准而不是用 X/Y 坐标直接硬编码八个位置。这个思路在任何圆形对称产品中都很重要比如水管、柱子、罐体上的加强筋。凸起实现则有两种方案。一种是对模型做 Mesh Boolean 并集把八根细长的筋条合并到桩体上适合 3D 打印和近距离检查。另一种是用 Shader 的 Bump / Normal 计算凸起渲染时速度快但模型本身没有真实凸起。前者更“真”后者更“快”。如果项目以渲染展示为主推荐后者如果后续要打印优先选择前者。3.3 青龙纹理程序化材质与贴图青色龙纹的难点在于“既要有规律又要有随机感”。完全规律的八道筋会显得死板纯粹随机又看不出龙纹的骨架。这里推荐分层处理底层是木纹中间层是青色渐变顶层是八道筋的凹凸纹理最后用噪波增加细节。程序化纹理的好处是可以跟随模型 UV 或物体坐标实时变化不需要手动绘制贴图。缺点是调试时间较长参数多了以后容易忘记每个滑块的作用。所以更工程化的做法是先用 Python 生成一张八道筋纹理贴图放在材质节点里作为 Bump 贴图这样可以随时替换成不同风格的纹理图也可以直接把这张贴图用于其他三维软件。4. 完整实战制作“桩型有派、八道筋纹理”摆件模型4.1 创建桩体模型进入 Blender新建一个工程删除默认的 Cube。先不要急着加修改器我建议把基础几何体这一步当成“打地基”因为后面的八道筋贴合程度、布尔运算成功率都和基础模型参数有关。按 Shift A在 Mesh 菜单下选择 Cylinder。在左下角的属性面板中把 Vertices 设置为 64Radius 设置为 0.6Depth 设置为 1.2Location 保持默认。64 个分段听起来不少但后续做噪波位移和布尔运算时它能让表面更平滑不容易出现明显的棱线。如果分段太少桩体表面会有硬边分段太高又会让 Boolean 修改器运算变慢甚至出现卡顿。接下来给桩体增加随机起伏。进入编辑模式选择部分顶点按 O 开启比例编辑然后按 S 缩放或按 G 移动把顶部和底部的轮廓调得不太规则。中部可以保持相对平稳因为这里会放八道筋。如果觉得手动调整太慢可以在修改器列表中添加一个 Displace 修改器选择桩体在修改器属性面板中点击 Add Modifier。选择 Displace。Texture 类型选择 Noise。Strength 设置为 0.03 左右。方向选择 Normal。这样桩体表面会得到自然的起伏但又不会破坏整体轮廓。Strength 参数不要开太大否则八道筋渲染后看起来会像波浪而不是轻微手工感。4.2 生成八道筋模型现在来做八道筋的几何实体。这一步非常适合演示 Array 修改器它不需要复杂编辑就能让一根筋条以原点为中心旋转复制八次而且所有副本保持同一个父级方便后续一次性修改。先按 Shift A 添加一个 Cube把它缩成一根细长的筋条。例如在编辑模式下X 和 Z 方向缩放至 0.03 左右Y 方向拉长至 1.0。然后将它移动到桩体表面附近例如 X 0.6 的位置。注意筋条长度要稍微超过桩体深度方便后续布尔运算产生完整交集。为了让筋条严格沿桩体表面排布可以把筋条在 X 方向移动到一个接近桩体半径的距离并用旋转调整贴合角度。接下来给 Cube 添加 Array 修改器Count 设置为 8。取消勾选 Constant Offset。勾选 Object Offset。在 Object 中选择一个新建的 Empty把它放在世界原点并沿 Z 轴旋转 45 度。现在八根筋条就会围绕 Z 轴均匀分布。如果发现筋条位置不对检查 Empty 的旋转是否精确为 45 度以及筋条本身是否已经处于正确的半径位置。位置调好以后先不要直接应用修改器可以继续调整筋条宽度和长度。最后给桩体和筋条添加 Boolean 修改器。选择桩体添加 Mesh Boolean 修改器Operation 选择 UnionObject 选择刚才做好的筋条组。应用修改器以后八道筋就真正融入了桩体此时桩体上会看到八条纵向凸起这就是“八道筋”的几何基础。这里要提醒一下布尔运算一旦应用原始参数就不好再改了所以建议先复制一个备份等最终效果确定了再应用。4.3 用 Python 生成八道筋纹理贴图如果不需要真实凸起只想快速出图可以跳过布尔运算改用一张灰度贴图来模拟筋纹。这个方案的优点是速度快、参数容易改而且纹理贴图本身可以复用在 Unity、Unreal、Maya 等软件里。下面是用 NumPy 生成“八道纵向筋纹贴图”