铜仁市论坛

首页 » 分类 » 问答 » 产品设计中的Grasshopper应用网
TUhjnbcbe - 2020/11/28 1:31:00
(详情请戳上面图片链接↑↑↑)

上一篇我们已经学会用Dendro将线变成柱状的方法,接下来如何控制这些柱子的粗细变化呢?这就需要用到Dendro的另一个电池:PointToVolume(以下简称PtV)

顾名思义,PtV就是将点变成球体,然后再将这些球体生成柱体,在上一篇里讲过,这也是Dendro的基本原理,实际上线就是由一串点构成的,所以这个命令在本质上与CurvetoVolume是一样的,区别就在于,将线拆分成点之后,我们就可以对每个点生成的球体半径进行设置,从而实现最终柱体的粗细变化。

用一串大小不同的球体生成粗细变化

官方示例里提供了一个案例,通过一个点做参考,实现了柱状结构粗细的渐变,有GH经验的朋友应该一看就能明白了,这里给初学者详细讲解一下。

Dendro下载包Examples文件夹里有一个dendro_lattice的示例

我们还是用上一篇那个线结构来做,第一步就是把线变成一串点,用等分线的电池(DivideCurve)

这个电池输入端有三个接口,C(curve)就是你要等分的线,我们可以把线接进去,N(Count)就是等分的段数,接一个整数进去就可以分出相应的段数;输出端P(Point)就是等分点,要注意的是,输出点的数量比等分的段数N要多一个,因为还要包括起点。

现在所有线段都变成一串点了,我们就可以使用PtV,把所有点接进去,这个电池输入端有三个接口,P(Point)就是接点的接口,R就是这些点的半径,S之前讲过,就是设置。

接进去之后结果变成了这样

生成了一堆糖葫芦,而且还是一段一段的,看过上一篇可以判断,又是数据结构的问题,由于我们是把每段线段分出了6个点,所以GH自动把这6个点组成了一组,但现在我们需要把所有的点都放在一组里,所以可以对这些点进行砍树(Flatten)

由于Flatten很常用,所以GH在电池里内置了一个快捷选项,右键点击电池就可以看到Flatten,选择之后,相应的数据端口就会出现一个向下箭头的图标,说明这个数据被“砍”平了

至于糖葫芦的样子是因为我们细分的点太少了,可以把这个数量设置多一点,比如先来个,这时我们得到和上一篇一样的效果。

Dendro的运算还是挺费时间的,建议双击数字滑块直接输入,配置不够强悍不要尝试拖动滑块

但我们想让这些球像示例里那样,从左到右由细到粗变化,也就是要让半径从左到右逐渐变小,也就是需要一组变化的半径值一一对应的分配给每一个点。

这里就涉及到GH一个很重要的概念,数据对应。之前我们只输入了一个半径值,所以这一个值就对应了所有的点:

之前只接了一个r值,所以这个值就赋给了所有的点,也就没有粗细的变化

现在我们希望有跟点一一对应的一组半径,且这个半径值是由小到大变化的

需要和点数同样数量的一组由小变大的半径值

若想做出由小到大的半径值,可以使用Range电池来设定。Range的作用就是在一个区间内按给定数量将区间等分。Range输入端有两个接口,D(Domain)要确定一个区间,默认值是0~1,N(Step)是把这个区间分成多少份,默认值是10。D这一端要接一个ConstructDomain电池,划定一个范围区间,在这里就是半径的最大值和最小值

ConstructDomain在Maths下面的Domain里;Range在Set下的Sequence里

把它们像下图这样接好,就能生成在区间内的一组等分的数值,有一点需要注意,划分的是10段,但实际上是有11个数

划分10段,实际有11个数字,因为要包括起点

半径需要跟点数相同多才能保证一一对应上,可以通过ListLength电池获取一组数据的个数

listlength在Sets下的list里面

现在把点的数量接到段数里,就会把半径区间分成和点数一样多的段数,但连上之后发现,分出来的数比点数多了一个,原因前面讲过了

这里可以用math里的运算电池做个-1的小算数。

在Maths下找到“-”运算电池,然后做一个-1的运算

但由于这里的运算不需要变化,相对固定,所以为了简洁起见,也可以在Range的输入端N上点右键,然后在expression里面写一个公式:x-1。x就是接进来的数字,写完这个公式,会看到N的端口出现一个“*”,之后所有接N的数据就会减去1,效果是一样的

接下来就要把这组半径值接到PtV的R接口里,但结果发现似乎并没有什么明显变化

原因是,虽然我的半径是从小到大依次排列了,但那些点并没有从左到右依次排列,对应之后就不是按照我们想要的方式变化,因此我们还需要对这些点进行重新的排序

用listitem电池可以取出列表中对应序号的数据,拖动滑块我们可以看到点的排序是乱的

这里用到list里的Sortlist电池:

sortlist在Sets下的List里

这个电池的输入和输出端各有两个接口,都是K和A,K(KeyasList)是一组作为参考的一组数字列表(必须是数字);A(ValueasList)就是要调整的列表,简单来说,它可以按照K端列表的数字按由小到大的顺序重新对A端的数列进行排序。输出端就是排完序的K列表和A列表。

sortlist可以根据K端列表里数字的大小重新排列A端的列表

这个电池单独理解比较抽象,放到这个例子里就非常合适:我现在想对所有的点进行重新排序,方式是按照从左到右的顺序,思路就是我可以在左边设一个参考点,然后求出所有点到这个参考点的距离,再用这个距离的列表对点进行重新排序,这样就能把点按照从左到右的顺序排列了。

设一个参考点,并求出参考点与结构线上的点的距离,然后用这个距离列表对点进行排序,越靠近参考点的点(距离值越小)就能排到前面了。

求距离可以用Distance电池

Distance电池在Vector下的Point里

设一个参考点,将参考点和结构线上的点分别接入A、B两端,就能算出每个点到参考点的距离值,并输出一个列表:

把这个列表接到Sortlist电池的K端,再把结构线上的点接到A端,就完成了排序,把排完序的点接到R端,就能和从小到大的半径值对应起来了

把排序好的点和半径接进去,左右渐变的效果就实现了

这就是Dendro官方提供的example里面的做法。这时你就可以通过调节半径以及参考点的位置来达到想要的效果

这里再介绍用点干扰的做法,也就是直接用这些距离对应到半径上,距离参考点越近,半径越小,也能达到同样的效果。

这里的关键就是怎么能把距离值的范围控制在最大最小半径的区间里,这就要用到RemapNumbers电池:

RemapNumbers在Maths下的Domain里面

这个电池的作用就是可以将一个区间里的数等比映射到另一个区间上:

这个电池的输入端有三个接口,V(Value)就是初始的一组数字列表,S(source)就是初始的范围(可以选择初始列表的一部分)在这里就是接距离的列表,T(Target)就是设定的目标范围,这里接设定的半径范围;输出端有R和C两个,R(Result)就是对应后的结果,C(Clipper)用到的时候再说,这里先不多介绍了。具体接法如下:

这里要用到Bounds这个电池,在Maths下的domain里,这个电池可以取出一组数字的范围

把RemapNumbers电池输出的R端接到PtV的半径R里,因为现在是直接对应点算的距离,所以就不需要再排序了,直接接进去,效果就达成了

相比之下,干扰的做法更加常用一些,很多效果也都可以通过干扰来实现,所以还是推荐把这个方法掌握好。

这些看似复杂的造型,其实都会用到点干扰的原理

至此,我们已经学会了怎么做一个粗细变化的方便面,接下来就来进一步细化,做出这种两头粗中间细的效果,敬请期待

相关课程

↓↓↓

教程丨入门案例!零基础就能学会的拖鞋建模详细教程

教程丨3D建模制作,20分钟详细教程

想学以上3D建模及渲染效果请戳下方链接报名

↓↓↓

鞋类3D建模与参数化设计线上工作坊限额报名!

其他3D建模效果图赏析↓↓↓

鞋设丨用3D设计球鞋有多酷?

鞋设丨掌握这些,年薪高达几十万!

鞋设丨你离30万大奖只差一组3D建模

鞋设丨细节感十足的3D建模,未来趋势!

鞋设丨当鞋遇上“水冷装置”,会碰撞出怎样的火花?

鞋设丨Rhino运动鞋建模的90个角度是怎样形成的?

博理科技介绍

↓↓↓

博理科技x三基设学院联合推出行业首个鞋类3D建模课程

更多课程请戳↓↓↓

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: 产品设计中的Grasshopper应用网