本帖最后由 racoon 于 2015-3-4 22:32 编辑
有一天,一个小伙伴跟我说,他要做一个树的造型表皮,问我有木有好办法。 这不是很简单么,伊东大神都已经给我们想好啦!就是下面这个建筑
对就是东京表参道的这个建筑, TODS的专卖店,伊东丰雄设计的,这个建筑最高端的地方在于他的表皮也就是他的承重结构,店里一个柱子都没有,当然啦,我们只是研(chao)究(xi)一个表皮的造型,结构就不研究了(如果有人知道或者了解这种结构是如何实现的欢迎科普)。
然后找到了这样的一张图,非常赞的矮地儿。
之后我就仔细的研究了一下这个树。
这个树怎么能做出来这个造型呢,当然你可以直接去描他,然后用 su把体块拉出来(呵呵),就像下面这样
是不是很蠢,一颗简单的树可以这样做,要是很多呢?
(开始我没发现伊东这个建筑的树都是一样的,我以为每棵都不一样,当然了这个很傻逼的错误开启了之后的奇幻旅程,没有这个可爱的错误也许就没有我的这次研究了,所以我还是错的很帅的,犯了一个命中注定的美丽的错误,一定是这样,嗯)
如果每个都不一样那就肯定不能手动了,必须用参数化的手段了,我们怎么实现呢?分析一下。
假设我们每个树分叉的节点都看成是一个生长点,每次的生长点可以分叉,也可以不分叉,那么这个树从头到尾一共有5代生长点,从G0到G1,很简单,但是从G1到G2就有问题了,有些没有分,有些分了,同理,G2到G3,G3到G4也是。
这样有了初步规律,但是计算机无法理解,而且不确定的量太多,无法解决,那么怎么变成让计算机理解的程序语言呢。
我们仔细分析每一个分叉,发现每个分叉其实都是可以用数值去控制的。
如果,每个树枝都看为一个向量,我们知道向量的两个条件,一个是方向,一个是长度,也就是从 Gn到Gn+1都是一个在一定范围内的长度随机值,当然方向是之前已经决定的。然后再 Gn+1时候需要进行一次分叉,这次分叉牵扯到一次布尔判断(具体做模型的时候需要给一个布尔值true or false的概率,当然也可以纯随机),如果某个方向判定为true,则计算继续运行,给向量V0一个偏转角度,和一个长度,那么就生成上图左中的V1.1和V1.2与上图右中的V1.1,如果判定为false那么就结束本次运算,赋予一个空值,不带入下次循环。
可以看出,每个节点的分叉情况会有三种,一种是两个方向上都被赋予了 true,如上图左;一种是某一个方向判定true某一个方向判定false,如上图右;还有就是都为false,也就是在这个点上不再继续发展(其实我们模仿的模型里不存在这种情况,但是从数学上分析这种情况是可能存在的,如果要去除这样的情况,我们可以再进行一次判定,如果两次的判定结果均为false则重新判定)。
这样我们就得出了如下图中的那个数据模型,总结一下从Gn到Gn+1到Gn+2这个过程中所有需要的数据:需要带入的数据就是从Gn为起点的一个向量(包括长度和方向两个数据),然后是两个随机得到的布尔值,再然后是判定为true的值给他赋予一个偏转角度和一个向量(包括长度和方向),false的值返回null值。
嗯,就这样我照着这个思路写了一个分叉的 gh电池,嗯思路没错,很成功
我打包起来了,不然线有点乱,天才,我开心了好久~
但是(一般都是要有转折的,不然不能显得这个事情很复杂)很快我就发现另一个问题了,这是一个分叉,那么生长到第一代的时候是两个电池组,生长到第二代的时候就是四个电池组,第三代 8个,第四代16个。。。。
我的电池成了这样,这他吗的才迭代了三代。。。。。
嗯,就是这样的,如果我用手动去联?
绝对就呵呵了
那怎么办
我很久很久之前就知道这东西叫循环迭代,但是在几年前的时候 gh没有这个功能的电池,所以所有的迭代必须放到vb或者c里用语言解决,可是现在已经2014年了,我貌似也见过有迭代的插件了。
上网找了一下,当当当当!!!猪脚出场,有两个
左边那个叫 hoopsnake,右边的那个是两个加在一起的,叫anemone,中间放置你需要循环的东西。
大部分的教程上都介绍的是hoopsnake,但是经过我的比较我发现anemone比较好用
原因有以下几点:
1,anemone 逻辑更清楚明白,因为是循环的,一个电池代表循环开始,一个代表循环结束,中间放你需要循环的程序即可,简单易懂,而hoopsnake需要自己输出端连接自己的输入端,用着感觉有点混乱。
2 ,anemone运行起来占的资源更小,我试了好多好多程序用anemone迭代的级数明显比hoopsnake多。
所以有了这个工具之后就很简单了,把那端程序塞进去,就可以自己玩儿去了。然后他就自己开始长树啦~~~
第一代
第二代
第三代
第四代
第五代
第六代
第七代
第八代
第九代
!!!! 是不是!!!很有!!意思!!!
|