Grasshopper 有哪些奇技淫巧?

求大神,发散思维,来个gh的小技巧集合!!
关注者
3,388
被浏览
1,182,181
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

如果同学们已经厌倦了手绘流线的无趣和繁琐,想依靠程序生成,相比processing或者R,grasshopper无疑是更容易上手的选择。本次教程并不追求绝对准确得流线(难度过高,且数据难以获得),而是基于人流的基本规律,生成相对客观的分析。本期的技法课堂内容将涉及GH里ELK与最短路径算法,帮助同学们基于已有路网以及人流集散点,快速的生成相对客观的人流分析图。 (正文共:2856字26图,预估阅读时间:8分钟)


在城市尺度的前期调研中,人流分析图是建筑以及重要节点选址的重要依据。而在后期图纸生成时,人流分析图可以描述建筑或者场景内部流线的组织状况,支撑设计的合理性和逻辑性。


01 提取地块街道并记录人流汇聚点

与上期介绍的基于GH生成城市的真实地形+建筑体块的流程相似,首先,我们进入OPEN STREET MAP网站框选对应地块的信息。注意, 地块不能太大,不然会下载失败。

本次教程基于RHINO6。得到OSM文件后,进入RHINO,打开GRASSHOPPER,找到ELK的 LOCATION majorroad 电池。初次使用GH小伙伴注意,双击GH工作节目就可以激活输入框,ELK的两个电池也可以用这种方法找到。输入并放置电池 File Path与 Polyline,初步电池的连接请按下图显示一一对应连接。找不到电池位置的同学,请在之后提供的GH源文件里,按住 ctrl alt ,选择你想找的电池 长按鼠标左键

右键File Path,选择单个文件,并找到在OPEN STREET MAP上下载的OSM地图文件。在导入过程卡顿过后,连接第三个电池上你所需的输出口到polyline电池,注意, 不同路需要单独polyline电池来避免错连

交点打断 是一个必要的插件电池,来源于某位大神。可以代替Rhino里的打断功能,但是运行效率加快不少。这个电池的作用我们后面会讲到。将打断后的线输入到polyline电池,如果电脑性能不足,可以bake这一部分的线到单独rhino图层备用。Bake是将grasshopper运算器结果生成到rhino里的功能,用鼠标中键或者右键点击你要bake的电池,会看到bake选项。


02 模拟出发点和目标点的分布和路径

首先我们看一下电池组的全景,并解释原理。人流分析图的规则是, 记录每条街人流的多少 。而在GH里,我们需要生成一定数量的出发点,分布在预定的区域内。同时设定一定数量的终点,以及给出人群行进的路径,也就是我们的街道或者建筑内部流线,然后用运算器模仿并记录整个过程。

几个需要注意的关键点:

1. 人群的出发点和目标点的分布,在图内应该是不均匀的 ,换言之,有点密集的区域,也有点稀疏的区域。

2. 人群的目标点一般是商业,办公,娱乐区域,但是不一定去最近的那个点

因此,我们需要先做调研或者预设,在我们的地图内选出出几个人群最密集的区域,对应住宅区/商业综合体/大型办公区等等。在第一步我们bake出来的街道线稿上,我们在rhino界面点出几个点,代表这些区域的大概中心,同时,我们需要手动粗略的用多段线勾勒出人流可以到达的区域的边界,避免代表人流的点出现在不应该有人流的区域,比如悬空的部分,海洋,山脉等。

我们来看第一部分的逻辑。我们将rhino里刚画的边界和人流密集中心点分别导入图中标注的电池内。以这些中心点为圆心,我们生成一定数量的同心圆,并移除超出场地边界的部分。然后在同心圆的每一圈间隔内,生成一定数量的点,也就是我们人群的出发点。离圆心越远的圆环,点就越分散,因此符合我们预设的离人流密集强度区域越远,人就越少的规则。不同圆心的同心圆组相交,就表示相交区域的人流会更多。

我们从左开始讲变量点。同心圆的圈数,间隔,半径请根据实际项目尺度来设定,简单的原则是 同心圆间相交部分少于30% ,来保证最后图纸的易读性。但是 圈数不要过多 ,根据电脑性能量力而行。如果你的场地被没有人流的区域分割为好几个区域,在这个电池生成对应数量的分支。

这一部分,只需要调整点总数,同样的,请根据电脑性能和项目尺度调整。这一部分的原理是, 根据每一个边界区域内每一个同心圆环的面积,来分配不同数量的点,以保证点的数量不会因为圆环被地形移除一部分后,出现堆积现象 。换句话说,我们不希望原本应该点数分布稀疏的圆环,因为被切割大部分面积,点数被挤压在少数区域,导致结果出现明显的偏差。

关键电池:在指定的区域内,生成指定数量的点。N端输入端影响了点的总数,点的分配由上一个部分控制,而G端是点生成的范围限制,对应的就是同心圆环。这里涉及了GH的数据结构知识,有兴趣的同学可以自行搜索了解,数据是如何一一对应的(数据的坐标)。

在GH电池组里,小编已经标好上部分是出发点控制组,下部分是目标控制组。请保证 上部的点总数多于下部的点 ,一是为了保证电池运行流畅,二是为了是路线更清晰。

最近点电池组的原理是,A组的每一个点找到B组里对应的最近点,来模仿人流去附近目标点的过程。而jitter电池则是使部分点去更远的随机点,模仿人们有时候想去固定的目标地点,和距离无关。偏差点占比的增加,会使更多出发点不去最近点,一般控制 少于0.3 来保证最终结果的客观性。


03 点运行在设定的街道路径上

这个步骤是让所有点必须运行在我们的设定路径上,并记录这个过程,生成可视化的图像。我们将第一部分生成的打断路网连接到最短路径算法电池的curve路径端,将上一步最后的最近点电池运算结果连接到Line电池后,连接到最短路径的wanted path端,就可以让最近点的运算必须遵循我们的路网来运行。

短折线过滤电池 可以过滤一些鬼畜的短线在小范围内的反复折线,造成图面不美观,T端输入的是过滤条件,表示被过滤的路径的最小长度,设定10米或者根据项目尺度来。

如果在这里就输出结果,我们会发现相同路径内,所有的线都重合了,无法区分流量的多与少。因此,我们需要给每个人流路径添加一个 随机的抖动 ,让人流量多的街道上,抖动的线更多,表现在图面上就是线更密集,线束更粗更明显。因此,我们需要提取每个路径的控制点的x,y,z坐标,给他们分别添加随机的位移。这一部分同样涉及GH数据结构。同时,请 在标注出 “值域,值数量”的随机电池上,根据项目尺度来修改值域 ,使得坐标的抖动在合适的范围内。一般建议, 值域的最大值,不大于街道宽度 。当然,根据效果自行调整是最好的。

在给路径添加坐标抖动之后,我们根据经过处理的坐标,重新生成新的路径。最后的一个电池,是为了将折线路径,转换为曲线路径,使图面美化。请将折线以及曲线分别bake到独立图层,方便后续的AI修改。

效果图


04 导入AI并优化视觉效果

我们生成的线,在rhino内导出dwg格式,并导入AI。

原有路网调细为0.5,透明度70%,使街道结构清晰而不争夺重点。生成的人流路径 线宽0.5,透明度60,%,同时设置覆盖模式为 正片叠底,来模拟线重叠时延伸变深的直观效果。

然后有需要的同学,请在mapbox或者百度地图开发版上下载对应地块的底图。叠于线稿图的下方,生成需要的最终版本分析图。

最后给大家分享一些著名地区的人流分析图:

Atlanta
Chicago
New-York
San-Francisco