随着Rhino和Grasshopper的普及,软件已经渐渐不再成为约束建筑师思维的因素,但是相信很多小伙伴在对于Rhino和Grasshopper的掌握逐渐加深的过程中,经常可能遇到下面这种情况:对于一个模型明明知道怎么建,但是却因为模型过于复杂,数据过多而导致在实际电脑建模过程中因为卡顿时间过长而完全无法实现。
本次教程给大家介绍一个简单的山水表皮制作案例,来看看如何优化你的GH运算。小伙伴在会建模拉电池的基础上,对于GH的优化有一定的了解和掌握,一定会更有效率,这也是本次教程希望大家可以学习到的内容。
STEP 1
基本建模
对于下面这个窗帘的模型,相信很多对于grasshopper掌握比较深入的童鞋都可以很轻松的建出来。
但为了照顾一些刚刚学习GH的小伙伴,让我们先花一点时间来回顾一下建模的主要过程:
首先,我们先绘制两组点,用以生成基础面的上下边缘线,在这里我们的建模逻辑还是遵守大家所习惯的点成线,线成面。
大家可以通过对于graph map的调节(这里选择的是sin函数),自行控制曲线的形状,可以通过对于domain区间的设置控制窗帘的长度。
然后,我们只需要将上边缘的点沿Z方向抬升~
再把上边缘和下边缘的点成组连线:
数据拍平之后放样就生成了曲面,这样就完成我们的第一步了。
接下来我们就需要在基础面上开洞了。将基础面重参(rebuild调整UV数目,使曲面uv参数分布大致均匀)之后,我们运用lunchbox进行开洞处理:
大家可以注意下这里对于surface的UV细分值已经达到了500*60,并且运算器的计算时间已经达到了550ms,大家应该可以感觉到些许的卡顿了,尚在可以接受的范围内。
但是当完成这一步,进行后续操作的时候,大家就可以感觉到正确的建模逻辑和优化手段对于GH的影响是有多么巨大。
STEP 2
不同建模逻辑与优化
我采用大部分童鞋会使用的方法,也就是传统的点成线,线成面的方法。首先用喜闻乐见的area运算器提取每个面的中心(个人非常不推荐这个运算器,具体原因后续会说明)。
大家可以看到,area的运算时间已经达到9.6s了。
然后对于每个面进行不同程度的缩放,这里咱们就使用image sampler运算器通过图像灰度结合remap运算器来控制缩放值。
接下来,相信百分之九十九的童鞋会做的一步是把原有的面和缩放后的面graft后merge,然后直接loft成面。从建模上来说,这样完全没有问题,标准的线成面步骤。
但是当我们点击运行的时候,我们可以看到loft运算器的运算时间已经达到难以忍受的33.5s,但是更加难以接受的是如果你将这个loft后的面bake到Rhino之中的话,即使是一个简单的缩放命令,都会让你的Rhino卡顿长达几十分钟,更别说附材质和渲染了。也就是说,虽然我们成功在grasshopper中建出了这么一个模型,却完全无法进行后续的使用。那么该肿么办呢???
这就要求我们,必须对原有的程序进行优化了。具体怎么优化呢?主要有两种方式,第一种方式是局部运算器的优化。
在grasshopper中,有很多的运算器都可以实现相同的效果,但是他们之间的速度却有很大差异。比如提取面的中心,很多人会使用area电池进行生成,但是通过evaluate surface电池同样可以实现相同的效果。
对比之前运用area的9.6s,我们仅仅使用100多ms就实现了中心点(即面的质心)的提取。大大节约了运算量和运算时间,这也是之前我提到不推荐使用area的原因。
第二种方式则是对建模逻辑、方式的优化了。之前也说过,大家都很熟悉点成线,线成面的nurbs建模方式。但是在Grasshopper建模过程中,还有另外一种更为高效的建模方式:那就是通过顶点,运用mesh直接成面。由于在Rhino中mesh包含的信息量远小于nurbs面,因此通过这种建模方式建出的模型,占用更少的计算资源,bake出来后可以非常方便地在Rhino进行后续地修改。
那么就让我们看看,在GH中到底怎么通过mesh建模吧!首先让我们回到缩放后merge那一步。
这个时候,不同于之前的之前loft,我们先通过explode提取每组线的顶点,通过trim tree讲两条要成面线的顶点放到一个组里面,再通过cull duplicate去除重复的点(此处再次强调数据结构的重要性)。
然后就到了我们生成mesh的步骤了,其实在Grasshopper中生成mesh十分简单,我们只需要一个运算器:construct mesh。这个运算器我们需要考虑的主要也就是两个输入端,V输入顶点, F输入顶点链接的顺序。
V端的点就是我们cull duplicate之后的顶点,但是F端的输入值就比较考验小伙伴们对于数据结构的理解了,为了大家方便观察,我通过tree branch 将众多顶点中的一组提取出来,再借助point list展示一下它的顶点顺序。(tree branch+point list 对于初学者掌握数据结构帮助非常大,同学们要经常记得使用了。)
这个时候我们可以清楚的看到每个组里面有六个点,编号分别是012345,并且顺序是从外到内逆时针的。我们通过mesh生成大部分面都是四点成面,所以对于这个面我们可以将它拆解为三个mesh部分:面0143、面1254、面2035。
(面0143)
(面1254)
(面2035)
然后将这三个mesh合并为一个mesh。
因为之前cull duplicate之后的数据结构为树形数据,我们只要将tree branch这一步略过,直接连接point即可。
大家可以惊喜的发现,成面的时间变为了1.2s(之前为33.5S),近30倍速度的提升!相信可以让小伙伴们非常直观的了解到GH中mesh的强大。
并且bake出来之后在rhino中大家可以随意转动变化,而不会有卡顿。
最后的渲染就非常的轻松愉快了,加一个无限地面作为基面,加一个矩形灯打光:
给地面一个木板材质,窗帘一个织物材质,都是官方自带材质。
点击渲染,咱们的窗帘就出现了。
PS:
1、对于grasshopper而言,数据结构是重中之重,特别是对于mesh建模。
2、如果部分运算器小伙伴不知道在哪里的话,可以后台下载打包电池,按住ctrl+alt 点击运算器就可以看到他们的位置了。
链接:https://pan.baidu.com/s/1dFOxvaT密码:p7rx
感谢LAC丨ArchStudio授权分享
欢迎关注他们的微信公众号
微信号:lacstudio