接上回预告,List Item(李斯特·爱腾木)先生委托我们造一个拥有特别表皮的房子,并且让我们去村子后山上的数据森林收集材料。并且交给我们一张表皮的照片:
啥,这么复杂的吗?这样的表皮怎么做啊?才来到Grasshopper的第二关,这材料到底要怎么收集啊?
爱腾木先生看出了我们的疑虑,作为新手村遇见的第一个友好NPC,只见他不慌不忙地说:“没关系,小菜,老规矩,你只要告诉我Index(编号),我会帮助你吧。Let's go!”
于是你们一起走出了新手村。来到了村口...
(以上是过场动画)
好的,这时候我们第二关就正式开始了。首先,开局一根曲线:
然后,在Rhino中向上复制一根同样的曲线,使用我们第一关学到的Loft运算器,让曲线成面。
TIPS!注意一下:loft曲线,无论多少根,尽量是从一根里复制出来的,因为loft需要保持曲线控制点一致,不然出来的曲面会很乱。
接下来,需要把这个曲面分成一块一块的。这时候你需要一位新朋友,那就是 - 请大声呼叫它的名字::Isotrim!
Isotrim,我们可以把这个名字分为2个熟悉的部分理解:Iso - Isolate,隔离,分离;Trim,剪切。
- “那么这个运算器的意思是把这个表面剪成一块一块儿的?”
是的,你太聪明了!用用试试?
然而尴尬的事情再次发生了,我们的表面没有被分割,运算器反而要求我们输入Domain。这是啥意思啊?
注意观察运算器的提示:没有 Domain² 的参数?平方?是指表面积吗?但是求出表面积有啥用,我需要的是切块啊?如果是Rhino,我肯定会先rebuild这个surface,设置好UV,再提取结构线,曲面就是一个一个小方块了...那怎么设置曲面的UV呢?
在这里,还得介绍一位新朋友:Divide Domain² 分割面积域
Divide Domain² 和Isotrim是一对非常好的朋友,大家以后需要分割曲面UV别忘了找他们哦!
接下来,我们先双击“//”查看一下被分割后的曲面是什么样的状态。嗯,一块一块的小曲面。接下来我们想要在每个小曲面上画三角形应该怎么做呢?如果可以找到对角点就好了...可是,如何才能找到对角点啊?
这时插入一个小知识点,来培养一下我们GH的特殊游戏思维: Surface - Brep - Mesh 的分解
Brep,(请先单读B再读rep,不是连读Brep。),是指有Boundary(边际)的polysurface(多边形),比如一个Box。或者不规则的多边形体块(比如一坨石头)。
一个曲面也可以是Brep,因为有边际啊。所以我们如果在Rhino里画好一个曲面,既可以用Surface拾取,也可以用Brep。
接下来,我放了个老花镜一样的插件Bifocals在旁边,就可以显示出我们正在使用的电池的名字。(这插件就是专门做GH教程用的,只有显示名字一个功能,有兴趣可以去Food4Rhino下载,插件推荐和下载安装需要在后面的关卡才能解锁哦~)
然后使用Deconstruct Brep功能对曲面进行炸开,可以看到一个曲面分为3各部分:Faces(面),Edges(边),Vertices(顶点)。所以~~~~一个曲面炸开就是一个一个更小的曲面哦~
接下来,什么是Mesh呢?Mesh就是网格,和曲面不一样,曲面是由UV进行划分和定义的,由Nurbs算法生成。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拉到脚底下了都还没显示完,还能不能愉快地玩耍了???”
(突然出现过场动画)
“- 您好。” 一个沧桑的声音从背后传来,你转身一看,突然出现一位戴着大树帽子的奇怪老先生。
“- 我是村子后山数据森林的守护者,名叫 Param Viewer。“
- “您好啊,老先生,我想要收集数据造表皮,可是还没进森林我就懵了,这里实在太复杂了,我该怎么走才能找到我想要的顶点啊?”
- “年轻人,请别急,首先,你要先学会读懂树的语言!”
(过场动画结束)
想要识别Panel中的数据,我们得先知道什么是数据的级数.
This is a box. 嗯, 一级数据表示一个模型。
那么二级数据呢?
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...
啊, 美丽的数据树!
那么一个组又在数据面板的哪个位置呢?请看下图:
在这个图中,一个组里,有一列(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老先生给的数据地图,你突然明白了如何去寻找需要的材料在哪里。转头看看身旁的爱腾木屠夫,瞬间觉得他比以前亲切了很多。
接下来,我们回到任务案例中:
要做出这样三角形的表皮,我们只需要对角连线即可!一起来应用一下刚刚学到的知识吧!
在炸开我们细分完毕的曲面以后,对Vertices连上4个List Item,分别给与0,1,2,3,这样就可以把每一组的点都找出来!
在这里我用了个Point List来显示一组点的Index,可以很明显注意到每一个组里的点与其他组的点都有重合的部分,因为显示的Index重叠了,这也就是为什么后期我们会有删除重复点的操作。后话后话...
接下来的连线就非常非常简单了!
0 到1,1到3,3再回到0,走个0 - 1- 3 - 0 的顺序不就可以了吗?
这时,我们需要使用一个新朋友来帮助我们把这些点按照顺序组合在一起。那就是大章鱼Merge!!!
请看一下gif动图:
大章鱼Merge有很多触角,如果你把运算器放大,会发现有个小的加减号,表示输入端可以增加或者减少。
还记得0 - 1- 3 - 0 的顺序吗?我们用List Item提取出需要得点以后,通过大章鱼的合并能力,这四个点按照顺序又重新分成了一个新的组啦~
“嘿,某羊,我经常看到有GH大神在使用一个大麻花来合并数据,这个刚才的章鱼有啥区别啊?”
“这个大麻花叫Enwine,是用来合并组的,就是很多组在一起成一个新的大组,咱们现在需要的是合并Item成一个新的组,所以新手阶段先用大章鱼~ 以后升级了,在使用Kangaroo插件的时候一定会再见到它的。”
接下来,我们进行一个组合操作:Polyline + Boundary Surface
这是一套常用的GH fighting Combo!!! 作用和在Rhino中先选中多边形线条(Polyline),再转化为曲面(Boundary Surface)是一个原理。要熟记哦~
来,动图演示:
恭喜你刚刚解锁了一项新的成就!!!点线面!!!
接下来我们要做表皮突出的三角形了。仔细观察一下,他们和表面上的三角形不是相同的形状,而是...小方块的中点垂直上升了一个点,再与四边形的两个对角进行了连线生成的一样。
那我们是不是找到这个中心点就迎刃而解了呢?怎么去找啊?
其实很简单的,首先,我们把原来经过UV划分以后的曲面偏移出来,再取每个小曲面的中点,不就行了吗?
So easy~
(以下是Gif动图演示:)
TIPS! m² 面积运输器,求面积用得很少,常常用于求曲面的中点!在GH中敲:area 可以把它召唤出来。
同理可得:m³立方运算器,也不是常用于求立方,反而用于找出立方体的中点。
在这里注意一下方向,因为我需要曲面向-y轴的方向偏移,所以在这里给的值是负数。
OK,找到偏移后的中点啦,那是不是再做一遍我们刚刚的连线游戏就可以了???
现在我们需要的3个面都有了,看起来还不错哦!
接下来最后一步啦,我们不能就这样导出一层薄薄的皮儿吧,挤出一个厚度试试???
完了,最后关口卡壳了...这个曲面那么多方向,我要怎么去找啊?
朋友,别慌!评估曲面(Evaluate Surface)来帮忙!
这咋个评估啊?
我们先看看Evaluate Surface的官方解释:
关键词:uv/ Normal / vector
我们要做挤出,最重要是知道方向在哪里,那么把这个运输器连接上以后,有个Normal(法线方向)的输出端,而且输出的类型(Type)是向量(Vector)。那么,连接向量的运算器又是哪个呢?
这时,一个欢快的声音传来,只见一个精神小伙穿着一个带字幕A的T-shirt向我们跑了过来。
“嗨,大家好!我是专门来帮助你测量向量长处的,我叫Amplitude,可是简称我为:Amp”
接下来我们看看Amplitude连接在哪里吧!
(动图演示)
可是,目前的挤出厚度太大了,我要怎么调薄一点呢?Amplitude...幅度...向量长度...这里面肯定有个数值,那怎么缩小这个数值呢?
在GH游戏中,我们通常使用乘以一个小于1的数来进行数值的放大缩小。
“对了,评估曲面的Point你怎么连接的是中点啊?”
“因为这里做的是挤出,连接中点起个定位的作用。”
“哦... 可是我看大神都连的都是最近点啊!”
"放心吧,等我们升级了以后会用到的!"
接下来我们学习本章的唯一的快捷键:
Ctrl+G,给选中的运算器打组。
和Rhino中的操作是一样的。再右键单击打好的组,可以给组改样式,改名字,改颜色。
然后复制这组运算器给其他需要挤出的曲面。
有兴趣的朋友还可以做一下三角形之间的连接杆件哦~ 提示:连接两个三角形的顶点成线,再Pipe一下就可以啦。
等等,做到这里的朋友们先别关文件,有个比拿成就更好的小技巧要交给你!!!
TIPS!! 在Bake之前先内置化数据,就不需要额外的rhino文件啦!以后一个GH文件就可以包含所有的图形了~
最后Bake到Rhino里看看吧!(先在Rhino里分好组,比如Glass,redPanel,bulePanel,greyPanel,Pipe,再依次去GH里点击Bake,选择需要的图层,这样你的rhino文件就不乱啦~)
在这里,我就用备课时做的表皮渲染一下看看最终效果吧!还是挺像的,嘿嘿。
过场动画:
经过一天辛勤的劳动,我们终于建造出了爱腾木先生需要的奇怪表皮。正准备好好休息一下,突然背后又传来那个沧桑的声音:
“学会解读数据森林的语言只是第一步,接下来还有很长的路要走呢!”
只见森林守护者Param Viewer面带微笑地对我们说:“年轻人,我明天再带你去一个新的地方,这里,你将学习到掌握树木生长的神奇魔法!”
本章结束:
小作业,请试试看自己用连点的方法做更有有意思的几何表皮吧!
(画外音)
“某羊,这些英文看起来好难,我要怎么准确地敲字啊?”
“所以要使用Rhino 英文版啊!”
“咚咚” (某羊又被揍了)“开啥玩笑,我软件都要汉化版的好不?你这只崇洋媚外的臭羊!”
“不是啊…我一开始也很不习惯的,但是GH没有汉化版的,它本身就是打包好的编程组件。话说...你有见过有人用汉语来编程的吗?”
“没有…”
“所以还不如早点习惯英文版的Rhino咯,这些名称看多了敲字就简单了啊!”
作者简介:土冒某只羊
澳洲皇家理工RMIT 建筑系研究生,今年7月家里蹲儿大学毕业了。
热爱参数化设计,异形建模,3D打印。熟悉Rhino+GH,也会一点Maya, Zbrush, 一知半解C#。