前言
最近入坑Grasshopper(以下简称GH),由于本人是产品设计师(硬的那种),所以更专注GH在产品设计上的应用,本篇简单讲讲在3D打印中用到比较多的网格结构的基本做法,面向GH初级用户(包括零基础),所以讲得比较细,高手请自动忽略。
关于GH能干嘛这里不多讲了,有机会单写。自Rhino6开始,已经在软件内集成了GH,本次案例使用的就是Rhino6中自带的GH。
点击这个就能进入GH如果使用Rhino5,可以从官网下载GH,链接如下:
https://www.grasshopper3d.com/page/download-1www.grasshopper3d.com安装好之后在命令栏输入Grasshopper就能进入(Rhino6也可以这样进入)
建议使用Windows系统,虽然Mac版的Rhino6也集成了GH,但很多插件还不支持OS系统,比如今天分享的插件就不支持...
这次给大家分享Dendro这个插件,其主要功能就是可以直接将线生成柱状体,比如下面这些“方便面”造型,同时也可以作为一个小案例,引出GH的一些基本操作和概念。
这种网格结构的造型主要用在3D打印产品设计中,可以起到增加强度和减少重量(用料)的目的。
在3D打印件内部加入这种结构可以更好的增加强度当然也可以作为一种造型特征,将功能与美观结合在一起
Adidas的Future craft 4d 系列的中底将这种结构直接作为造型特征这些造型看似复杂,其实是有规律可循的,这种结构的生成过程有点像平面纹理设计里常用的四方连续:
四方连续,将一个单元格不断重复,就能形成一个有规律的纹理立体纹理就可以理解为在三维空间上的四方连续,只要在一个正方体里做好结构线,然后在空间里阵列一下就行了:
这里需要注意的就是“连续性”的问题,里面的线结构最好在六个面上都能彼此相连,不然整体阵列出来的线就连不到一起了
上图中的线结构最外围端点分别落在了正方体的八个顶点以及6个面的中心点上,因此无论向哪个方向阵列,线结构都能很好的形成连续的网状结构 这个结构线就完全没有连接上,阵列出来的线就是单独的,也就无法形成网状结构了我这次使用的是adidas那个鞋的结构同款的网格,这个网格由32根线组成,其特点就是,所有线的长度都是相等的,这样可以保证生成出来的结构受力是均匀的,这个线结构在这里就不写是怎么做出来的了,主要没啥技术含量,操作起来还比较繁琐,就不浪费篇幅了,当然只要保持连续性的前提下,随便用什么线结构都可以,这不是重点。
现在我得到了线构成的网状结构,怎么让线加粗变成柱状的体呢?
这个问题困扰了我很久,如果直接用线生成圆管,要想用布尔运算加成一个实体,很容易出错,尤其是多个线汇聚的端点那里
在Rhino里想把这个地方用布尔运算做出来,简直是痴心妄想后来试过用Tspline的Pipe,确实强大,能做很多变化,而且还能输出Nurbs曲面,具体操作可以参看这篇内容。
这个模型在 Rhino 中的建模思路是什么?www.zhihu.com不过Tspline的问题是,在线比较少的情况下还行,一旦线比较多的话... 我之前用Tspline生成一个造型花了整整一天时间,后来保存文件又花了半天,结果生成的模型连转都转不动(不说了,都是泪)... 另外Tspline只有Rhino5能用...
直到遇见了Dendro(感谢Rhino原厂的工程师Dixon,是D大的推荐使我摆脱了苦海,推荐大家上原厂的GH课程),其实类似功能的插件还有很多,比如IntraLattice,但我个人觉得,还是Dendro出来的效果好一点。
Dendrowww.food4rhino.com 在Food4rhino上可以下载这个插件目前只支持Window系统,Mac上还用不了,安装方法跟其他插件一样,解压文件,然后把所有文件拷贝到GH的Spacial Folders里,具体操作如下:
解压文件,然后将这个文件夹复制 在Grasshopper中找到FileSpecial FoldersComponents Folder,点击打开 将刚才的文件夹整个拷贝到这里安装完毕后需要退出GH和Rhino,再打开能看到Dendro出现在工具栏上,就算安装成功了,基本上所有GH的插件的安装方法都是这样的。
工具栏上出现Dendro就算安装成功了需要注意的是,与Tspline不同,Dendro只能生成网格(Mesh),至于网格和曲面的区别,说来话长,这里也不多讲,其影响就是带来了两个问题:第一是生成的模型想要再用Rhino针对曲面的工具进行操作,比如掏个洞之类的,就做不了了,不过这个问题还好,因为Dendro自带了一些功能,比如布尔运算、抽壳之类的,做产品基本够用了;第二就是网格模型不能用减材和等材制造的工艺(CNC、模具注塑之类)加工,但这个更不是问题,造型做成这种鬼样子,这些工艺直接就跪了,只能用增材制造(3D打印),而3D打印就是要用Mesh。
言归正传,来看看怎么用吧,其实Dendro那个文件夹里自带了说明和一些示例,解释得也十分详细,英语够好且有一定GH基础又爱钻研的朋友可以自习了,剩下的看过来:
Examples里面提供了一些示例,documentation就是一个简单的教程说明我们先用刚才的一个单元的结构线做个简单的生成。
首先,我们先把刚才画的结构线抓取到GH中来
在Params里把Curve电池拖动进来,然后在电池上单击右键,选择Set Mutiple Curves,在Rhino中框选所有结构线,单击右键确定,完成抓取简单讲讲Dendro生成柱状体的原理,就是在线上做出一串球体,然后把这些球揉成一个柱体
明白了原理,就可以开始了。从工具栏中Dendro选择Curve to Volume这个电池,并拖拽到GH中
这个电池的功能就是可以将线变成柱体,它的输入端有三个接口,C就是Curve,也就是刚才抓取的线,R就是一串球的半径,也就是柱子的粗细,S就是Dendro的设置。接下来就可以把相应的数据接进去。
将刚拾取的线连接在C接口,再从工具栏Parmas下的Input中拖拽一个Number Slider作为半径连完之后发现并没有什么卵用,这是因为我们还没有连接设置电池,在Dendro工具栏里拖拽Create Setting到界面中
这个电池有四个接口,S是voxel size,就是一个立体像素的大小(边长),这里需要输入一个数字,简单理解就是模型的精度或者说分辨率,这个值越小,模型精度就越高,相应的运算时间也就越长,可根据电脑的耐操程度酌情设置,但这个值不能大于上面那个半径值的2/3,不然就会报错,简单理解就是模型粗糙得有点过,程序表示就没有显示的必要了...
其他几个设定接口反正我没有看出对模型有什么实质的影响,用默认值就好,感兴趣的可以去看那个说明文档,这里就不多讲了。
至此,这一个单元的柱状结构的模型就生成完了,这时右键点击Curve to Volume那个电池,选择那个摊鸡蛋的图标(Bake)就能把这个模型生成在Rhino里。
不过这个模型显示看起来有点奇怪,熟悉Rhino的朋友应该能看出来,就是网格面的法线方向反了,Dendro生成的模型有时会有这种问题,不过没什么大不了的,反转一下法线方向就搞定了。
这就是Curve to Volume的基本用法,如果把结构线多阵列一些,就能得到一块“方便面”了。在GH中有立体阵列(Box Array)的功能,方法如下:
找到Transfrom下Array中的 Box ArrayBox Array这个电池有五个输入接口:G(Geometry)就是接入要阵列的几何数据;C(Cell)就是一个阵列单元,也就是包裹几何数据的一个立方体;X、Y、Z就是三个方向上阵列的数量。做单元格有个很好用的工具,就是Bounding Box:
找到Surface下的Bounding Box这个电池可以给选择的几何数据的外围生成一个紧紧包裹的立方体,其中输入端有两个接口,C(Countent)就是要接入的几何数据,P(Plane)是生成立方体的平面,默认是XY平面,通常情况下不用管;输出端有两个B(Box),上面一个就是围绕几何数据的Box,下面一个会在设定的Plane那儿生成一个Box,正常情况用不到,也不用管。
我们先把结构线接入C,结果出现这个情况:
可以看到每个线段都被一个立方体包裹起来了,但我们想要的是把所有线段都包裹起来的一个立方体,注意BoundingBox电池下面有一个Per Object,也就是给每人分了一间房,需要把它调整成Union Box,让大家住一块儿:
在电池上点右键,选择Union Box一个,所有线段就住在一起了接下来把数据接入Box Array,然后给出阵列数量。
然后将阵列好的线连到Curve to Volume上,方便面就生成了
但摊完鸡蛋(Bake)之后发现,这些柱体并没有连成一个整体,而是一组一组的“火腿肠”
这里涉及到数据结构的概念,数据结构是GH最最核心的概念没有之一,核心到什么程度?不夸张的说,能控制GH的数据结构,你就能控制整个GH!
好吧,并没有这样的谚语,但学过GH的应该不会反驳....吧当然,数据结构的内容博大精深,这里只能借这个案例先抛砖引玉,简单讲讲。首先我们先来看看刚才这些数据有什么区别,这里会用到一个特别常用的电池 Panel
Panel在Params下的Input中Panel是一个黄色的显示框,它两端都有接口,可以输入数据也可以输出数据,把它连接到电池的输出端口,就可以看到这些端口到底传输的是什么东西
我们取之前用到的三个电池,来看看他们输出的分别是什么。Curve里面是抓取的32根线(Line-like Curve);BoundingBox里面是我们生成的包裹这些线段的1个立方体(Box);重点是BoxArray,里面是我们阵列出来的线,但这个Panel里面的线被分成一份一份的装在好多列表里面,这种数据结构就叫做树状结构(Data Tree)。
仔细看这些电池输出的连线长得也不一样。列表中只有一个数据(Bounding Box那个),就是用细实线表示的,有多个数据就是用粗的空心线表示的(Curve那个),而树状结构的数据就会用空心虚线表示。
之所以叫树状结构,是因为这种储存数据的结构很像树的分叉结构,我们用Parma Viewer这个电池可以看得更清楚,Parma Viewer在工具栏Params下的Util里面,图标就是一棵树。
与Panel不同,Param Viewer不显示数据内容,只显示数据结构,左边上面一行写着有32个分叉(Data with 32 branches)就是这些数据被分成了32个列表,N=8就是每个列表中数据的个数,在数据很多的时候,用Panel看结构就不是很方便,用Param Viewer就可以快速看到结构了。
Param Viewer还有另一种显示方式,右键单击电池选择Draw tree,就能看见数据树了,数据都存在树杈的顶端那个橘色的小点里,当然现在数据结构比较简单,看不出啥名堂,先了解一下就好了。
至于数据结构的意义,越往后学就越能体会了。
为什么会分出好多列表呢?这就涉及到GH是怎样工作的,比如在这个例子中,BoxArray是把Curve列表里的每一根线在所有单元格(2*2*2=8个)里阵列一遍,之后程序就自动将阵列出来8根线分到了一个列表里面,然后再阵列下一根线,以此类推,最终就生成了32个列表(因为有32根线),每个列表8根线的树状结构。
而后面Curve to Volume在生成柱体的时候,就根据数据结构进行,将每个列表的线分别生成成了8根火腿肠,也就是之前看到的样子,因此,要想让所有线变成一体,就要让他们都在一个列表里,这时就要用到Flatten tree,直译就是砍树,在工具栏Set下的Tree里,把阵列的树状数据接进去,出来的就是把所有数据都装在一个列表里了。
通过Flatten Tree之后,可以发现线型也发生变化了把“砍”过的数据再接到Curve to Volume里面,就没问题了。
至此我们就初步完成这个立方体“方便面”的建模工作。
有了这个工具,很多创作就可以开始了,只要把线搞出来就都不是问题(当然把线搞出来也不容易)
3D打印的灯具设计以上是Curve To Volume的使用方法,下一篇再讲讲Dendro如何实现柱体半径的变化。
补充结构线的画法:
先画一个正方体,然后找到每个面的中心点
连接正方体的一个端点和正方体的中心点,并找出这个线段的中点,并将这个线段打断
连接中点和相邻三个面上的中心点,然后把中点到正方体中心点这一段剪掉(要想让结构更密一些也可以保留)
然后将这四根线镜像三次,就完成了