Grasshopper趣味教程_第二关_数据森林

接上回预告,List Item(李斯特·爱腾木)先生委托我们造一个拥有特别表皮的房子,并且让我们去村子后山上的数据森林收集材料。并且交给我们一张表皮的照片:


图片来源:http://www.sapphirealuminium.com.au/cmsAdmin/uploads/RMIT12.jpg

啥,这么复杂的吗?这样的表皮怎么做啊?才来到Grasshopper的第二关,这材料到底要怎么收集啊? 

爱腾木先生看出了我们的疑虑,作为新手村遇见的第一个友好NPC,只见他不慌不忙地说:“没关系,小菜,老规矩,你只要告诉我Index(编号),我会帮助你吧。Let's go!”

于是你们一起走出了新手村。来到了村口...

(以上是过场动画)


好的,这时候我们第二关就正式开始了。首先,开局一根曲线:


Rhino直接画一根就行

然后,在Rhino中向上复制一根同样的曲线,使用我们第一关学到的Loft运算器,让曲线成面。


嗨,我是你的老朋友Loft

TIPS!注意一下:loft曲线,无论多少根,尽量是从一根里复制出来的,因为loft需要保持曲线控制点一致,不然出来的曲面会很乱。

接下来,需要把这个曲面分成一块一块的。这时候你需要一位新朋友,那就是 - 请大声呼叫它的名字::Isotrim!   

真是一个奇怪的名字啊!

Isotrim,我们可以把这个名字分为2个熟悉的部分理解:Iso - Isolate,隔离,分离;Trim,剪切。

- “那么这个运算器的意思是把这个表面剪成一块一块儿的?”

是的,你太聪明了!用用试试?


Domain是什么?

然而尴尬的事情再次发生了,我们的表面没有被分割,运算器反而要求我们输入Domain。这是啥意思啊?

注意观察运算器的提示:没有 Domain² 的参数?平方?是指表面积吗?但是求出表面积有啥用,我需要的是切块啊?如果是Rhino,我肯定会先rebuild这个surface,设置好UV,再提取结构线,曲面就是一个一个小方块了...那怎么设置曲面的UV呢?

在这里,还得介绍一位新朋友:Divide Domain²  分割面积域


曲面定义UV神器


原来是这样用的!

Divide Domain² 和Isotrim是一对非常好的朋友,大家以后需要分割曲面UV别忘了找他们哦!

接下来,我们先双击“//”查看一下被分割后的曲面是什么样的状态。嗯,一块一块的小曲面。接下来我们想要在每个小曲面上画三角形应该怎么做呢?如果可以找到对角点就好了...可是,如何才能找到对角点啊?


这时插入一个小知识点,来培养一下我们GH的特殊游戏思维: Surface - Brep - Mesh 的分解

Brep,(请先单读B再读rep,不是连读Brep。),是指有Boundary(边际)的polysurface(多边形),比如一个Box。或者不规则的多边形体块(比如一坨石头)。


Brep的关键词是Boundary

一个曲面也可以是Brep,因为有边际啊。所以我们如果在Rhino里画好一个曲面,既可以用Surface拾取,也可以用Brep。


一个曲面的隐私被我们看光了


接下来,我放了个老花镜一样的插件Bifocals在旁边,就可以显示出我们正在使用的电池的名字。(这插件就是专门做GH教程用的,只有显示名字一个功能,有兴趣可以去Food4Rhino下载,插件推荐和下载安装需要在后面的关卡才能解锁哦~)

然后使用Deconstruct Brep功能对曲面进行炸开,可以看到一个曲面分为3各部分:Faces(面),Edges(边),Vertices(顶点)。所以~~~~一个曲面炸开就是一个一个更小的曲面哦~

接下来,什么是Mesh呢?Mesh就是网格,和曲面不一样,曲面是由UV进行划分和定义的,由Nurbs算法生成。Mesh是多边形算法生成的。换言之,解剖一个Mesh,得到的直接就是一个一个的多边形。


一个Mesh的解刨图

注意到了吗?Mesh炸开就没有edge了(这里的faces也和曲面不同),反而多了个奇怪的Colours和Normals。为啥啊?

嘿嘿,RMIT 的高端玩家们,尤其是上过参数化Studio被查理PUA过Z-brush(简称ZB)课程的,都应该知道ZB里有个PolyPaint的功能。啥原理呢?Mesh的顶点是可以储存颜色的,比如我在ZB里画好一个图形,涂上颜色,放在Keyshot里渲染的时候颜色还是存在的。这就是为啥这儿能炸出个colours的选项。

Normals就是法线方向啦~ 这个挺重要的,以后要偏移厚度都需要设置好Mesh的法线方向哦。

TIPS! 如果你想在GH中把Surface转成Mesh,输入Mesh Brep会有惊喜哦~~~

OK,小知识点就介绍到这里,等咱们段位高了你就会发现大牛都玩Mesh没人玩surface了,哈哈哈,这个以后再提。


好滴,经过上面的小知识环节,我们知道了surface可以通过Deconstruct Brep 进行分解,提取出每一个小曲面的顶点。那......么......我们想把四边形的曲面做成三角形,是不是可以选出3个顶点,一连不就有了???

先把这个曲面炸开看看吧!


好长的Panel...

“-羊,这顶点的数据这么多,叫我怎么选啊,我Panel拉到脚底下了都还没显示完,还能不能愉快地玩耍了???”

(突然出现过场动画)

“- 您好。” 一个沧桑的声音从背后传来,你转身一看,突然出现一位戴着大树帽子的奇怪老先生。

“- 我是村子后山数据森林的守护者,名叫 Param Viewer。“

带着帽子的大叔老先生


- “您好啊,老先生,我想要收集数据造表皮,可是还没进森林我就懵了,这里实在太复杂了,我该怎么走才能找到我想要的顶点啊?”

- “年轻人,请别急,首先,你要先学会读懂树的语言!”

(过场动画结束)


想要识别Panel中的数据,我们得先知道什么是数据的级数.


一级数据

This is a box. 嗯,  一级数据表示一个模型。


一个Brep也是一级数据

那么二级数据呢?

一个Brep炸开以后变成2级数据

TIPS: GH中的数据起始为0。

这里的二级数据(0;0)表示:一个Brep,里面分了一个组。N = 8 表示这一组里面有8个成员。

接下来我们还能再继续炸开这个Brep吗?额,不能了….

那要找个三级数据的案例咋办?可以在GH中敲个square,这货生来就自带三级数据。

接下来打开数据面板,咱们需要分三步来看哦~~

第一步,我们来理解Branch(树枝)是什么?

这个模型有几组数据呢?

仔细观察图中的蓝色连线,Branch 就是对应的组数

OK,那 (0;0;X)最后一位数就是Branch组数了。可是前面为什么是0;0 ?这是什么意思呢?

其实啊,这里的0没有实质的意义,比如我写个12级数据依旧是:(0;0;0;0;0;0;0;0;0;0;0;X),前面永远都是0,你需要看几级参数就看前面有几个0就行。

嗯...应该不难吧。总之,理解分级就是不断不断不断往下往下往下分组分组分组,就像树枝的生长,不断地发出更细更小的树丫,直到末端的树叶。

Just like this...

图片来源:https://www.bizhiku.net/wallpaper/201906/22788.html

啊, 美丽的数据树!

那么一个组又在数据面板的哪个位置呢?请看下图:


原来这就是List

在这个图中,一个组里,有一列(List)的数据,编号(Index)分别从0 ~ 5,在Param Viewer里显示N=6,数一数0,1,2,3,4,5是不是有6个数字呢。

接下来再细分一级:

最后一级就是点的坐标

在这里,Index就是前面的编号,Item就是这个点的坐标。那么回想一下我们之前的疑问?该如何去寻找一个一个小曲面上的点在哪里呢???

我们只要找到这个曲面的List Item不就行了吗?哇!!!原来是这样!!!

接下来我们总结一下:

第一级数据表示这是一个模型,第二集数据表示这个模型有多少组(List)。第三级数据表示这个组有多少个成员(Item)。

这就是为啥要用List Item去寻找需要的连线点的原因。理解了数据位置的底层逻辑也为后面我们进行数据翻转,路径设置,简化数据等高级操作的打下基础。

恭喜解锁!!!懂树的人!!!



(一个15帧的过场动画来了)

拿到了Param Viewer老先生给的数据地图,你突然明白了如何去寻找需要的材料在哪里。转头看看身旁的爱腾木屠夫,瞬间觉得他比以前亲切了很多。


接下来,我们回到任务案例中:

图片来源:https://citizenscienceproject.org.au/wp-content/uploads/2017/12/cropped-rmit-building-80.jpg

要做出这样三角形的表皮,我们只需要对角连线即可!一起来应用一下刚刚学到的知识吧!

在炸开我们细分完毕的曲面以后,对Vertices连上4个List Item,分别给与0,1,2,3,这样就可以把每一组的点都找出来!

每个Item可以找到对应的点

在这里我用了个Point List来显示一组点的Index,可以很明显注意到每一个组里的点与其他组的点都有重合的部分,因为显示的Index重叠了,这也就是为什么后期我们会有删除重复点的操作。后话后话...

接下来的连线就非常非常简单了!

0 到1,1到3,3再回到0,走个0 - 1- 3 - 0 的顺序不就可以了吗?

这时,我们需要使用一个新朋友来帮助我们把这些点按照顺序组合在一起。那就是大章鱼Merge!!!

请看一下gif动图:

Merge合并功能演示

大章鱼Merge有很多触角,如果你把运算器放大,会发现有个小的加减号,表示输入端可以增加或者减少。

还记得0 - 1- 3 - 0 的顺序吗?我们用List Item提取出需要得点以后,通过大章鱼的合并能力,这四个点按照顺序又重新分成了一个新的组啦~

“嘿,某羊,我经常看到有GH大神在使用一个大麻花来合并数据,这个刚才的章鱼有啥区别啊?”

“这个大麻花叫Enwine,是用来合并组的,就是很多组在一起成一个新的大组,咱们现在需要的是合并Item成一个新的组,所以新手阶段先用大章鱼~ 以后升级了,在使用Kangaroo插件的时候一定会再见到它的。”

仅做示范,像上图那样Entwine连Item是没用的,得连组

接下来,我们进行一个组合操作:Polyline + Boundary Surface  

这是一套常用的GH fighting Combo!!! 作用和在Rhino中先选中多边形线条(Polyline),再转化为曲面(Boundary Surface)是一个原理。要熟记哦~

来,动图演示:

点-线-面 现在你拥有了一套建模必备组合拳!

恭喜你刚刚解锁了一项新的成就!!!点线面!!!


接下来我们要做表皮突出的三角形了。仔细观察一下,他们和表面上的三角形不是相同的形状,而是...小方块的中点垂直上升了一个点,再与四边形的两个对角进行了连线生成的一样。

那我们是不是找到这个中心点就迎刃而解了呢?怎么去找啊?

其实很简单的,首先,我们把原来经过UV划分以后的曲面偏移出来,再取每个小曲面的中点,不就行了吗?

So easy~

(以下是Gif动图演示:)

先偏移,再找中点即可

TIPS!  m² 面积运输器,求面积用得很少,常常用于求曲面的中点!在GH中敲:area 可以把它召唤出来。

同理可得:m³立方运算器,也不是常用于求立方,反而用于找出立方体的中点。

在这里注意一下方向,因为我需要曲面向-y轴的方向偏移,所以在这里给的值是负数。

OK,找到偏移后的中点啦,那是不是再做一遍我们刚刚的连线游戏就可以了???

Ctrl + C / Ctrl+ V

现在我们需要的3个面都有了,看起来还不错哦!

接下来最后一步啦,我们不能就这样导出一层薄薄的皮儿吧,挤出一个厚度试试???

可是,挤出方向怎么设置呢?

完了,最后关口卡壳了...这个曲面那么多方向,我要怎么去找啊?

朋友,别慌!评估曲面(Evaluate Surface)来帮忙!

输出端很多啊

这咋个评估啊?

我们先看看Evaluate Surface的官方解释:


http://grasshopperdocs.com/components/grasshoppersurface/evaluateSurface.html  

关键词:uv/ Normal / vector

我们要做挤出,最重要是知道方向在哪里,那么把这个运输器连接上以后,有个Normal(法线方向)的输出端,而且输出的类型(Type)是向量(Vector)。那么,连接向量的运算器又是哪个呢?

这时,一个欢快的声音传来,只见一个精神小伙穿着一个带字幕A的T-shirt向我们跑了过来。

“嗨,大家好!我是专门来帮助你测量向量长处的,我叫Amplitude,可是简称我为:Amp”


amplitude的字典意义

接下来我们看看Amplitude连接在哪里吧!

(动图演示)

原来是这样找到挤出方向的

可是,目前的挤出厚度太大了,我要怎么调薄一点呢?Amplitude...幅度...向量长度...这里面肯定有个数值,那怎么缩小这个数值呢?

在GH游戏中,我们通常使用乘以一个小于1的数来进行数值的放大缩小。

缩小数值请召唤乘法!!!

“对了,评估曲面的Point你怎么连接的是中点啊?”

“因为这里做的是挤出,连接中点起个定位的作用。”

“哦... 可是我看大神都连的都是最近点啊!”

"放心吧,等我们升级了以后会用到的!"

运算器打组

接下来我们学习本章的唯一的快捷键:

Ctrl+G,给选中的运算器打组。

和Rhino中的操作是一样的。再右键单击打好的组,可以给组改样式,改名字,改颜色。

然后复制这组运算器给其他需要挤出的曲面。

完成!!!

有兴趣的朋友还可以做一下三角形之间的连接杆件哦~  提示:连接两个三角形的顶点成线,再Pipe一下就可以啦。

等等,做到这里的朋友们先别关文件,有个比拿成就更好的小技巧要交给你!!!

TIPS!! 在Bake之前先内置化数据,就不需要额外的rhino文件啦!以后一个GH文件就可以包含所有的图形了~


在最初的输入端右键单击内置化数据

最后Bake到Rhino里看看吧!(先在Rhino里分好组,比如Glass,redPanel,bulePanel,greyPanel,Pipe,再依次去GH里点击Bake,选择需要的图层,这样你的rhino文件就不乱啦~)

在这里,我就用备课时做的表皮渲染一下看看最终效果吧!还是挺像的,嘿嘿。

We made it !!!

过场动画:

经过一天辛勤的劳动,我们终于建造出了爱腾木先生需要的奇怪表皮。正准备好好休息一下,突然背后又传来那个沧桑的声音:

“学会解读数据森林的语言只是第一步,接下来还有很长的路要走呢!” 

只见森林守护者Param Viewer面带微笑地对我们说:“年轻人,我明天再带你去一个新的地方,这里,你将学习到掌握树木生长的神奇魔法!”


本章结束:

小作业,请试试看自己用连点的方法做更有有意思的几何表皮吧!


(画外音)

“某羊,这些英文看起来好难,我要怎么准确地敲字啊?”

“所以要使用Rhino 英文版啊!”

“咚咚” (某羊又被揍了)“开啥玩笑,我软件都要汉化版的好不?你这只崇洋媚外的臭羊!”

“不是啊…我一开始也很不习惯的,但是GH没有汉化版的,它本身就是打包好的编程组件。话说...你有见过有人用汉语来编程的吗?”

“没有…”

“所以还不如早点习惯英文版的Rhino咯,这些名称看多了敲字就简单了啊!”


作者简介:土冒某只羊 

澳洲皇家理工RMIT 建筑系研究生,今年7月家里蹲儿大学毕业了。

热爱参数化设计,异形建模,3D打印。熟悉Rhino+GH,也会一点Maya, Zbrush, 一知半解C#。


你可能感兴趣的:(Grasshopper趣味教程_第二关_数据森林)