
【版权声明】
| 作者:月之眼 | 好多猫
| 首发于大水牛参数化设计平台
| 如需转载请联系作者
| 如果觉得文章不错,欢迎分享

- 写插件的原因
大家在用Rhino做项目的时候,到了渲染阶段往往需要在Rhino模型中添加一些Vray代理树、车的模型、人的模型等等。添加Vray代理树的过程是非常繁琐的,需要复制,旋转,缩放等一系列操作。
这个时候大家是不是想用Grasshopper来解决?
但是Grasshopper自带的电池无法解决这个问题,因为把Vray代理树拾取进Grasshopper中,操作完之后再Bake到Rhino视窗就不是Vray代理树了。
这个时候是不是想要一个3D MAX的散布插件?
刚好那阵子好多猫和我讨论过这个问题,借机和好多猫一起写了这个插件。
看到插件的名字是不是很熟悉,Bubalus_GH其实就是公众号的名字。
欢迎大家下载使用。
2: 插件下载与安装
下载链接:https://www.food4rhino.com/app/bubalusgh


1:电脑上只有Rhino5的情况:
请下载第二个压缩包,下载好后。
- 第一步:解压压缩包,里面有Bubalus_GH插件的案例和一个安装文件夹。
- 第二步:把安装文件夹复制到Gha的安装路径 :
C:Users****AppDataRoamingGrasshopperLibraries - 第三步:重启犀牛和Grasshopper就安装好了。

2:电脑上只有Rhino6的情况:
请下载第一个压缩包,下载好后。
- 第一步:解压压缩包,里面有Bubalus_GH插件的案例和一个安装文件夹。
- 第二步:把文件夹复制到Gha的安装路径 :
C:Users****AppDataRoamingGrasshopper6Libraries - 第三步:重启犀牛和Grasshopper就安装好了。

3:电脑上有Rhino6和Rhino5的情况:
请下载第一个压缩包和第三个压缩包。下载好后。
- 第一步:解压压缩包,里面有Bubalus_GH插件的案例和一个安装文件夹。
- 第二步:把for Rhino6的文件夹复制到Gha的安装路径 :
C:Users****AppDataRoamingGrasshopper6Libraries - 第三步:把for Rhino5的文件夹复制到Cluster的安装路径:
C:Users****AppDataRoamingGrasshopperUserObjects - 第四步:重启犀牛和Grasshopper就安装好了。

注意:如果安装之后还没有出现电池(如上截图),请到刚复制粘贴的文件夹找到Bubalus_GH.gha文件,右键-属性-解锁一下,然后重启Rhino和Grasshopper。

3:插件使用
Bubalus_GH插件的种树原理是根据点的位置来复制移动代理树,所以种树的点非常非常重要。如果你的点是渐变的,那么种出来的树就是渐变的;如果你的点在一个坡地上,种出来的树就在一个坡地上。点越自由,种出来的树就越自由。
1:Add_Geometry
当种一种树种的Vray代理树时使用这个电池。
Input:
- run:运行电池
- guid:树或人的guid(建议输入的物体是图块)
- P:种树的位置点
- SD:随机缩放的比例(默认是0.9 to 1)
- RD:随机旋转的比例(默认是0 to 360)
- N:树的法线方向(默认的是工作平面Z轴方向)
Output:
- N:树的名字

2:Create_GeometryBlock
写这个电池的主要原因是因为很多用户没有手动创建图块的习惯,不使用图块会造成两个问题1:种了树的Rhino模型很大 2:Vray面板代理物体会很多。
所以加了这个电池来自动创建图块,如果已经手动在Rhino视窗中创建了图块,则不需要使用这个电池。
Input:
- guid:要创建图块的guid
Output:
- G:生成图块的guid

学完上面的两个电池,我们就可以做一些简单的案例了:
首先来看看我们很爱种的行道树。
需要先导入一个Vray代理树,弄好材质,再用Bubalus插件种树。
- 种植行道树。


- 跟随曲线种树


- 随机种树


如果我们想树的方向是垂直于曲面,我们可以这样做。



把上面例子中树的模型换成人和车的模型,就可以随机放置人和车的模型了,这里就不过多介绍了。
3:Add_Geometrys
当种多种树种的Vray代理树时使用这个电池。
Input:
- run:运行电池
- guid:树或人的guid(建议输入的物体是图块)
- P:种树的位置点
- SD:随机缩放的比例(默认是0.9 to 1)
- RD:随机旋转的比例(默认是0 to 360)
- AR:每个树种的随机分配比例(比如我有两个树种,这里输入1,2。那么第一个树种的数量就占33%第二个树种的数量占66%)
- N:树的法线方向(默认的是工作平面Z轴方向)
Output:
- N:树的名字

4:Geometry_Location
这个电池的主要作用是提取树的位置点(当需要更换树种的时候就需要使用到这个电池)
Input:
- guid:提取定位点的树种
Output:
- L:树的位置点

5:Transform_RhinoObject
利用Grasshopper中的Transform移动、缩放、旋转Rhino中的任意物体。
Input:
- active:是否运行电池
- guid:需要变换物体的guid
- transform:变化的transform

来看两个Transform_RhinoObject 电池的例子
- 对帧平面进行缩放移动

- 对图块进行旋转移动(旋转放置完的桌椅还是同一个图块,编辑其中一个,所有图块都会相应变化)

6:DeleteGuid
根据Guid删除Rhino中的物体
Input:
- guid:需要删除物体的guid
- delete:是否删除

7:BakeBlock
可以根据树形数据把Grasshopper中的物体Bake成图块。
Input:
- bakeBlock:是否bake成图块
- geometrys:要bake成图块的物体
- location:图块的定位点
- blockName:图块的名字
- atts:图块的属性
- transform:图块的变幻矩阵
Output:
- outBlockName:生成图块的名字

- 根据树形数据把物体Bake成图块

8:ExplodeText
获取Rhino中Text的一些属性
Input:
- guid:text的guid
- createTC:是否创建text曲线
- createBC:是否创建text的最小边框曲线
- Update:是否实时更新电池
Output:
- texts:text的文字内容
- pts:text的定位点
- textCurve:生成的text曲线
- boundingCurve:生成的最小边框曲线

- 获取Text的一些信息

9:ExplodeBlock
炸开图块(如果你会C#代码,可以双击电池进行编辑)
Input:
- guid:图块的guid
Output:
- geo:图块内的物体
- name:图块的名字
- location:图块的定位点
- xform:图块的transform
- atts:图块的属性

10:Purge_RhinoDocument
清理Rhino空间,和Rhino中的Purge指令一样
Input:
- P:是否清理

11:Ratio_random
根据比例随机分组
Input:
- L:需要分组的列表
- AR:分组的比例
Output:
- C:分好组的列表

- 根据33%和66%的比例随机分组10个数据

12:Ratio_random
在一定区间内生成指定个数的随机整数
Input:
- R:生成随机数的区间
- N:生成随机数的个数
- S:随机因子
- ISInt:是否是整数
Output:
- R:生成的列表

13:Populate_2C
在两个线之间生成指定个数的随机点
Input:
- C1:外面的曲线
- C2:里面的曲线
- N:随机点的个数
- S:随机因子
Output:
- P:生成的随机点

- 当我们要在基地内,建筑周围生成随机点时,可以使用这个电池。



14:BifocalsPlus
这个电池是Bifocals插件的增强功能,所以在使用之前,需要先去Food4rhino下载Bifocals插件。
这个电池可以让Bifocals插件显示电池的插件名字,在讲案例的时候,很多人不知道一些电池是来源于什么插件,所以我在这个版本增加了这个电池。
但是需要注意:因为Grasshopper的插件开发者太多,并且每个插件开发者的命名习惯很不统一,所以这个电池会有很多Bug。这个时候可以双击电池进行代码编辑或者联系我,我会在下个版本更新这个问题。
Input:
- Update:是否实时更新电池名字

- 增强Bifocals插件,标注电池的插件来源

15:Transparent_BackGround
透明化GH窗体,在Rhino6中鼠标可以穿透GH背景编辑Rhino中的物体。
Input:
- run:是否运行此电池
- holeWidth:透明开洞的范围(范围是0 to 1)
- transparency:gh窗体的透明

- 如果遇到显示Bug,可以先断开所有的连线,再执行一下Run就OK了


16:GeometryFaceToCamera
让物体跟随着摄像机旋转
Input:
- Reset:是否让物体跟随着摄像机旋转
- Guids:需要旋转的物体
Output:
- P:一个生成的点

17:CameraOrientPlane
动态获取摄像机的工作平面(使用的时候不能隐藏这个电池)
Output:
- P:摄像机平面

18:3D_Text_Tags
在Rhino视窗中显示Text,此Text总是朝向摄像机
Input:
- T:需要显示的文字
- L:显示文字的定位点
- C:显示文字的颜色
- S:显示文字的大

- 最后三个电池可以用来辅助出分析图,下面我们来介绍一下。
- 在出分析图的时候也需要往模型内放置一些物件,这个时候我们就可以利用我们前面介绍的电池。

上面这张图有个问题:模型旋转的时候,人物不会跟着旋转。
所以写了一个电池实现类似SU中面总是朝向摄像机的功能。让Rhino中的物体总是跟着摄像机旋转。


开始没绑定的时候,人物是不会朝向摄像机的;当把Reset设置为True时,绑定了人物和摄像机;人物就总是朝向Rhino的摄像机,Rhino的视角旋转,人物也跟着旋转。有没有找到旋转SU的感觉。
可以绑定物体的类型:文字、平面曲线、平面曲面、平面网格、还有填充物体
- 动态获取Rhino摄像机的工作平面

动态获取Rhino摄像机的工作平面,重构获取到的工作平面,在重构的工作平面上画几何体,让你画的所有几何物体一直朝向Rhino的摄像机。
比如案例中画的圆,不管如何转动视角,圆都是正对着摄像机。
- 动态显示Text(Text总是朝向摄像机)

利用Bubalus_GH插件在Lumion中种树
那如何利用Bubalus_GH插件在Lumion中种树呢?
柯基鸡发过一篇很详细的教程:Bubalus插件与lumion结合批量山地种树小技巧。
大家看完上面的教程就会了。
同时Lumion官方也在food4rhino网站发布了Rhino和Lumion实时交互的插件,有兴趣的朋友可以试试。
下载链接 :https://www.food4rhino.com/app/lumion-livesync-rhino
