{
"summary": "本视频是一份量产级杆状晶格的设计教程,基于Rhino 8、Grasshopper、ntopology等工具,详细讲解了从腔体编辑、格子划分、筛选、晶格生成到表皮轻量化与组装的全流程。UP主以自行车坐垫为例,强调了量产级模型对网格质量的高要求(封闭、无破面、无过薄过厚),并分享了多次布尔运算失败后的成功经验——双向偏移法。视频还讨论了Grasshopper的抽象编程思维、常用晶格分类以及渐变手法的应用。",
"timeline": [
{
"time": "00:00:00",
"point": "UP主介绍视频内容结构:Bounding Box感悟→生成晶格→组装(含失败记录)"
},
{
"time": "00:01:30",
"point": "阐述Grasshopper的编程抽象与函数封装理念,以及晶格分类(杆状与影视曲面)"
},
{
"time": "00:02:15",
"point": "开始量产级杆状晶格制作步骤:编辑腔体,以自行车坐垫为例进行功能区划分"
},
{
"time": "00:03:30",
"point": "使用PufferFish插件的Twisted Boxes划分格子阵列"
},
{
"time": "00:04:30",
"point": "筛选格子:仅保留腔体内部及相交的格子以降低计算量"
},
{
"time": "00:04:50",
"point": "将晶格带入格子,使用MeshPipe和Shrinkwrap生成管状体积"
},
{
"time": "00:05:00",
"point": "表皮轻量化:利用渐变参数控制镂空大小,实现视觉效果"
},
{
"time": "00:06:00",
"point": "导出各部件(上表皮、晶格、腔体)为STL或3MF格式,进入ntopology组装"
},
{
"time": "00:08:00",
"point": "第一次布尔运算失败,发现模型存在瑕疵"
},
{
"time": "00:10:00",
"point": "尝试在Rhino中先布尔再导入ntopology,但导致孔变形"
},
{
"time": "00:14:00",
"point": "使用Magics的自动修复功能仍无法完美解决"
},
{
"time": "00:16:00",
"point": "尝试加厚功能,但产生平行条纹(类似3D打印层纹)"
},
{
"time": "00:20:00",
"point": "重新设计上表皮:向外偏移1mm后法线翻转仍破面"
},
{
"time": "00:24:00",
"point": "最终成功方案:将表皮双向偏移(内外各0.7mm),避免布尔时重合"
},
{
"time": "00:25:00",
"point": "演示最终布尔结果:表面光滑、无碎线,晶格与镂空精准对应"
}
],
"chapters": [
{
"title": "开场与理念分享",
"start_time": "00:00:00",
"end_time": "00:02:00",
"summary": "UP主简要介绍视频结构,分享对Grasshopper的感悟——抽象编程与具象结果的结合,函数封装可复用;同时说明晶格分类及量产级模型的高要求。"
},
{
"title": "腔体编辑与格子划分",
"start_time": "00:02:00",
"end_time": "00:04:30",
"summary": "以自行车坐垫为例,按功能分区(上半透气防滑、下半轻量化)。使用PufferFish的Twisted Boxes在上下边界间生成均匀格子阵列,并筛选出腔体内部的格子以优化计算。"
},
{
"title": "晶格生成与表皮轻量化",
"start_time": "00:04:30",
"end_time": "00:06:00",
"summary": "将晶格线段通过MeshPipe变成圆管,再用Shrinkwrap重构网格。表皮镂空采用渐变缩放策略(距支撑点越近越小),实现自然过渡。"
},
{
"title": "ntopology组装与首次失败",
"start_time": "00:06:00",
"end_time": "00:12:00",
"summary": "导出各部件到ntopology进行布尔组装。第一次尝试失败,出现瑕疵;尝试在Rhino中先布尔再导入仍然导致孔变形。"
},
{
"title": "多次尝试与最终成功方法",
"start_time": "00:12:00",
"end_time": "00:25:00",
"summary": "先后尝试Magics自动修复、加厚功能等均不理想。最终成功方案:将上表皮同时向内、外偏移0.7mm,避免布尔运算时重合,得到高质量网格。演示最终合并结果。"
}
],
"quotes": [
{
"text": "Grasshopper 既有和编程一样抽象的过程,也有具象的结果。Grasshopper 的电池组可以在不同项目中反复使用,完全是编程里函数封装的理念,这是其他建模软件无法实现的。",
"time": "00:01:00"
},
{
"text": "量产级的项目对模型的要求是非常高的,不能破面,不能有过薄或者过厚的地方,不能有剧烈的转折,不能有戳出来的晶格感。导出的网格体必须是严格的封闭网格,不能有非流形缺陷。",
"time": "00:01:50"
},
{
"text": "划分格子的方式有很多种,根据不同的项目选择不同的划分方式,因地制宜。",
"time": "00:03:00"
},
{
"text": "布尔运算中,一定要不能让它有重合的地方,重合的时候布尔很容易出错,就是你会发现就算软件没报错,实际上那个地方还是有瑕疵的。",
"time": "00:25:15"
},
{
"text": "我把这个上表面变成网格,然后在 ntop 里面进行加厚,但是呢这个模型质量有点糙,所以说这个方法也不行。",
"time": "00:10:30"
},
{
"text": "它这个算法吧,实际上你可以看到,就是在这种比如说这种和它计算方向平行的这个面上,你会看到这种明显条纹。怎么说呢?这个东西就有点类似于 3D 打印的时候,如果你一层一层打,就和这个条纹其实非常像。",
"time": "00:17:00"
}
],
"key_points": [
"Grasshopper 的电池组可反复使用,体现编程函数封装理念。",
"量产级晶格模型必须满足封闭网格、无破面、无过薄过厚等严格要求。",
"格子划分应因地制宜,不同项目采用不同方式(如 Twisted Boxes)。",
"过滤外部格子可显著降低后续计算开销。",
"MeshPipe + Shrinkwrap 是杆状晶格常用组合。",
"布尔运算失败常见原因:模型重合、非流形面。",
"双向偏移(内外各 0.7mm)是解决布尔穿模的有效方法。",
"渐变参数化手法在表皮镂空中实现自然过渡(靠近支撑点不变、远离缩小)。"
],
"thesis": [
"量产级晶格设计的核心不是复杂算法,而是对每一步输出质量的严格把控。",
"布尔运算的失败往往源于几何重合,而非软件 bug。",
"Grasshopper 的参数化思维可显著提升晶格设计流程的复用性和可靠性。",
"实际工程中的晶格设计必须兼顾美学约束、受力约束和加工可行性。"
],
"evidence": [
{
"point": "布尔运算失败源于重合",
"support": "演示最终布尔结果:表面光滑、无碎线,晶格与镂空精准对应",
"time": "00:25:15"
},
{
"point": "Grasshopper 的函数封装理念可复用于不同项目",
"support": "阐述Grasshopper的编程抽象与函数封装理念,以及晶格分类(杆状与影视曲面)",
"time": "00:01:00"
},
{
"point": "过滤无关格子可优化性能",
"support": "筛选格子:仅保留腔体内部及相交的格子以降低计算量",
"time": "00:04:30"
}
],
"caveats": [
"视频中部分讲解(尤其失败部分)不够连贯,UP主自认“最后一部分的讲解不太连贯”。",
"UP主未提供完整 Grasshopper 代码或电池连接图,仅口头描述,初学者可能难以复现。",
"该方法仅针对杆状晶格,对影视曲面晶格的处理未涉及。",
"当前样本的转录质量一般,引文和证据只保留了较可信的部分。"
],
"implications": [
"对从事参数化设计、数字制造(3D打印、CNC)的工程师有直接参考价值。",
"揭示了量产级模型在布尔运算中常见的陷阱及解决方案,可减少试错成本。",
"展示了 Grasshopper 在工程级设计中的实际应用场景,不仅限于艺术生成。",
"强调“失败记录”的重要性——UP主主动保留失败过程,为同行提供宝贵经验。"
],
"actionables": [
"在划分格子前,先用筛选工具(如碰撞检测)剔除腔体外部格子,降低后续计算量。",
"对需要布尔运算的部件,优先采用双向偏移(内外各0.5~1mm)避免重合。",
"在ntopology中组装时,先进行修复(如Magics自动修复)再布尔。",
"为每个部件单独导出为3MF或STL,并在同一坐标系下确保对齐。",
"在Grasshopper中构建晶格时,参数化控制渐变,便于后期调整。"
],
"terms": [
{
"term": "Grasshopper",
"meaning": "Rhino内置的可视化编程插件,通过拖拽电池组实现参数化建模。"
},
{
"term": "MeshPipe",
"meaning": "Grasshopper中用于将曲线或线段转换成圆管状网格的电池。"
},
{
"term": "Shrinkwrap",
"meaning": "重构网格算法,可将松散网格包络成更规整的封闭网格。"
},
{
"term": "ntopology",
"meaning": "一款专业晶格设计与优化软件,常用于轻量化结构生成。"
},
{
"term": "Magics",
"meaning": "Materialise Magics,用于增材制造数据准备和修复的软件。"
},
{
"term": "PufferFish",
"meaning": "Rhino插件,提供Twisted Box等基于方体的变形工具。"
},
{
"term": "布尔运算",
"meaning": "通过交、并、差运算合并或切割三维体素。"
},
{
"term": "非流形缺陷",
"meaning": "网格中边被超过两个面共享或面法线不一致等导致无法物理打印的错误。"
},
{
"term": "STL",
"meaning": "标准三角网格文件格式,广泛用于3D打印。"
}
],
"corrected_text": "这个视频我将分享三部分内容:首先谈谈我对 Grasshopper 的一些感悟,然后演示如何用 Grasshopper 生成晶格,最后是组装环节。组装部分在实际操作中经历了好几次失败,但我依然把这些过程保留了下来,希望能为大家提供参考。最后阶段的讲解因为反复试错,难免有些不太连贯,还请各位多包涵。\n\nGrasshopper 同时具备了类似编程的抽象过程与非常具象的结果。其中的电池组可以在不同项目中反复使用,完全体现了编程里函数封装的思想,这是其他建模软件难以做到的。实际上,当你积累足够多的经验,熟悉每一个电池的功能,能够预判每一步会生成什么结果,你就能在脑海中完成 Grasshopper 的设计。\n\n晶格的种类虽然不少,但常用的其实就那几种。我个人倾向于把晶格分为两大类:杆状晶格和影视曲面晶格。这期视频分享一个量产级杆状晶格的完整制作过程。量产级项目对模型的要求极为严苛:不能出现破面,不能存在过薄或过厚的区域,不能有剧烈的转折,也不能出现戳出来的尖锐晶格感。导出的网格体必须是严格的封闭网格,不允许存在非流形缺陷。总而言之,只有对每一步的结果都了然于心,最终才能得到一个高质量、可用于加工的网格。\n\n在常用晶格的基础上,同时受到项目的各种约束——比如美学、形状、受力等——巧妙地加入变化,让晶格既满足这些约束,又能输出高质量网格,这是一件很考验功底的事情。主要步骤包括:编辑腔体、画格子、筛选、填格子、形成体积、表皮轻量化以及组装。\n\n第一步是编辑腔体。腔体可能来自客户提供、网络下载或自己建模,总之我们需要在这个腔体内部生成晶格。以自行车坐垫为例,我根据功能分区把它分成了上下两部分:上半部分直接接触身体,要求透气和防滑;下半部分固定在底座上,只需做到轻量化。因此我划分了三个图层:第一个图层是完整的腔体,用来制作晶格;第二个图层是上半部分;第三个图层是下半部分。\n\n接下来是划分格子。划分格子的方式有很多种,不同项目应因地制宜地选择。对于这个项目,我使用 PowerFish 插件的 Twisted Boxes 来自行构造。Twisted Boxes 包含一系列电池,对应不同的生成方式,大家可以参考官方示例自行研究。在这个案例中,我手动构建了上边界和下边界,然后使用 Twisted Box to Surfaces 在上下边界之内生成格子阵列,并且可以分别设置长、宽、高方向格子的数量。\n\n格子划分完成后,需要进行一步筛选:只保留那些完全在腔体内部,以及与腔体相交的格子,将完全位于腔体外的格子剔除。这一步的目的是优化程序,降低计算开销,因为越到后面计算量越大,从一开始就尽可能移除无关元素非常关键。\n\n然后,把晶格代入到刚才划分好的每一个格子中。此时线框已经成型,但线框范围大于实际腔体。这里还可以再做一次筛选,把完全处在腔体外部的线段过滤掉。接下来就是把线框转化为有体积的模型:用 Mesh Pipe 把线段转变成圆管,再用 Shrink Wrap 重建网格。这两个电池是做晶格时经常用到的组合。\n\n晶格完成后,就可以处理表皮了。通常表皮需要镂空,但镂空不能随意进行,必须实现一种渐变效果——距离某个基准越近,镂空尺寸缩小得不明显;离得越远,则缩小得越剧烈。这种手法在参数化设计中非常常见。\n\n表皮和晶格都完成后,我们将它们导入 nTop 进行最终的组装。首先,把菱形的挤出物体导出为 SCP 格式,并命名为“上表皮的布尔”;上表皮也导出一个 SCP 文件;晶格则只能导出 STL 格式;腔体也要导出一个 SCP 文件,命名为“腔体体积”。打开 nTop 进行组装,需要先通过 Input 导入一个 CAD 对象,选择刚才导出的上表皮 SCP 文件。同时把晶格也导入进来。接着,将上表皮从 CAD 转换为 nTop 独有的隐式格式,晶格同样转换为隐式格式。然后,对腔体和晶格做一个相交运算,得到的便是腔体内部的晶格。\n\n接下来,我们依次导入上下表皮和镂空模型。但这一步其实已经有些卡顿了。实际操作中此时遇到了问题,又一次失败了。于是我想:先把上表面转成网格,然后在 nTop 里进行加厚,但这个模型质量较粗糙,这个方法也行不通。只能另想办法。\n\n我在 nTop 里试过布尔运算,结果出现了瑕疵。我也尝试过先在 Rhino 里分别导出,再在 nTop 里做布尔;或者先在 Rhino 里完成布尔再导进来。但后一种方式会导致孔洞变形,因为内部的 second body 有点膨胀的感觉,如果在 Rhino 里提前布尔好,导入后仍会有一定变形。如果两种方法都不可行,就只剩下另一种办法了。\n\n这种情况其实相当常见,因为原始的曲面很可能不是一个完整的单一曲面,而是由许多面拼合而成的多重曲面。在对它进行偏移生成厚度时,有很大概率会发生破面。比如在 Rhino 里,对这个面做一个 offset,偏移后破面的风险非常高。\n\n把它导进 nTop 之后,发现依然存在问题,这很正常。我尝试使用自动修复功能,修复后看起来没有问题,那就只能换一种思路:稍微给它加厚一下。这个加厚功能难免会带来一些变形,但它确实能修复某些错误。不过这个方法也有毛病,结果未必每次都能成功。从算法上可以看到,在与计算方向平行的表面上,会出现明显的条纹,这个效果有些类似于 3D 打印时水平堆叠的层纹。\n\n暂且假设以 0.3 毫米的加厚可以使用,晶格和这部分都完成后,看一下顶视图,晶格恰好与镂空对应上。接下来就把它们合并在一起,合并比较简单,用一个 Union 运算就可以了。\n\n再试一次,我重新处理上表皮。先在原始面上向外偏移 1 毫米,确定后发现局部出现破面。接着在 Rhino 里翻转法线方向,让它朝外偏移,再导出上表皮。回到 Maya(这里应该指 nTop,推测可能口误),删除当前对象,导入上表皮。然后对面做一次“面转实体”,厚度设为 1.5 毫米。再导入上表皮的布尔体,将它们合并后继续做布尔减运算,红减绿。此时检查横截面是否有问题,确认晶格和它是否有交叠,看起来确实交上了,但依然存在一些小瑕疵。\n\n经过刚才的几次失败,最终重新梳理了流程,并成功完成。首先撒点生成面,然后做一个双向偏移——同时向内侧和外侧各偏移 0.7 毫米,总厚度为 1.4 毫米,由于原始数据稍有偏差,描述为 1.6 毫米也无妨。这样做的意义在于,在原始面的基础上内外两侧都拥有厚度,最后进行布尔运算时就不会出现重合。重合是导致布尔失败的常见原因,非常恼人,即便软件没有报错,那个地方也常常存在瑕疵。一定要确保没有重合区域。\n\n此时,将这个两侧都有厚度的面导出,比如导出为上表皮的网格格式。接着在 nTop 里先导入上表皮,再导入晶格。这里我选择先减后加的顺序。先把上表皮的布尔体导进来,合并零件,再做布尔减运算,确定后上表皮的镂空就完成了。这时可以看到表面几乎没有多余的碎线,说明模型质量较高。然后再导入晶格,用体积和晶格做交集,把晶格修剪干净。最后再对晶格和完成镂空的上表皮进行布尔合并,整个组装步骤就顺利完成了。",
"provider": "deepseek",
"model": "deepseek-v4-flash",
"text_length": 3472,
"generated_at": "2026-07-03T10:02:32.144719"
}