前述

由于某只北山在之前参加了深圳绿色建筑设计竞赛(深绿设),当时气象数据的分析任务交给了我,于是乎就去学习了利用RhinoGrasshopper进行气象数据的可视化

然后呢,和模组开发教程及本分站的东西一样,为持续对世界输出,同时为了提高我自己的水平,咱们还是来分享分享

至于分析的部分,当然也是要的,但GH能干的只是输出图及图表,后面的分析内容是你得根据地理学的知识去分析的,不是光有个图就完了

而分析的部分,并不是本篇的重点,可视化才是

不过,我们先简单了解一下Grasshopper

DeepSeek的话

1
2
3
4
5
6
Grasshopper 是 Rhino(Rhinoceros)中的一种可视化编程工具
专门用于参数化设计和生成几何体
它不需要传统的代码编写
而是通过拖拽组件(类似于节点)并连接它们来构建逻辑
Grasshopper 广泛应用于建筑、工业设计、景观设计等领域
帮助设计师快速实现复杂的设计方案。

北山の话

好,那现在我来喵几句

为什么我也要来喵两句呢?DS在上面提到了一个东西——可视化编程。然后北山现在,也将永远在技术向的道路上狂奔,扯上编程的东西,那自然得来说一说

咋了?可视化编程该不会吓到你了吧。对于一个没有如何编程经验的小白来说,确实可能有点吓人。但是,可视化编程并不是像传统我们手敲代码那样,需要理解编程语言和逻辑——相反,它是一种通过图形界面来构建程序的方法

它通过一个个封装好的模块,用一条条线连接起来,实现一些功能。这种编程方式更加直观,易于理解和实现

这就有点像传统编程中的API(应用程序接口),开发者无需了解API背后的实现细节,只需要知道如何调用它,就可以实现一些复杂的功能

可视化编程的学习成本可比传统编程低得多了,但对于GH来说,还得学很多很多东西,但至少你不用从一个字一个字地敲开始的传统编程了

这里呢,咱们再深入一点。感兴趣的话,其实你可以双击那些电池,而后他们会弹出来一个窗口,熟悉编程语言的应该会知道,那玩意是Python

其实吧,GHRhino都是支持Python的,也就是说你完全可以利用Python来进行参数设计,也可以自己设计电池(当然,这自然是对你的编程能力是有要求的)

Rhino的话,在其工具->脚本->编辑,就可以打开Rhino的脚本编辑器,而在这里就可以拿Python来写一些代码,执行一些语句(在此之前,建议先看看Rhino的开发相关的内容,不然是真的写啥都不知道)
gh1

可视化编程在很多很多软件中都有,Blender着色器Shader),它也是一块块的模块(节点),通过一条条线连接起来的,去实现一些渲染相关的东西

Unreal EngineBlueprint蓝图),也是这样的

不过,可视化编程自然是有它的局限性的,因为现有模块可能无法满足你的需求,这个时候,你就得通过编程语言自己去编程了

上面说过了,Rhino支持Python,Blender同样支持Python(嗯,Blender是有Python控制台的)
gh2

所以,知道为什么要学Python了吧?

我在我自己的《随·言》系列中也讲过,其实最好是能够每个人都能学习一门编程语言。毕竟在AI时代,绝大多数的AI都是Python写的,而Python又是最容易上手的编程语言之一

另外,其实作为建筑学专业的,亦或者是建筑行业相关专业的,你大可以向这些方向发展,用Python、用Rhino参数化设计、设计AI来辅助设计、规划、管理等等。当然,技术向的道路并不好走,但总有人能走,也总会有人走

虽然说北山在未来并不会选择建筑行业,而是奔赴技术美术TA)。不知道我有没有这个话语权,上面那一段,也是算是给同辈或者后辈的建议吧

对于北山而言,要学的东西非常非常得多(毕竟现在是干到第四个编程语言了,而且技术美术完全是一个未知领域),建筑学的东西,自然还是有用的。和以前一样,我依旧需要建筑学的强综合性,能够涉及的面越广越好

至于北山为何最终选择了技术美术作为未来主要的发展方向,参见《随·言 #6》,这里就不多说了

别的话,感兴趣的还是可以去看北山的《随·言》系列,讲专业,讲学习,讲技术,讲生活……各方各面,当然,仅代表个人观点

那么,最后再喵几句,不论你未来想做什么,不管和专业是否相关,趁你还没有毕业,赶紧去。不要觉得你不会做、你不喜欢做,只有你真正着手去做了,自己亲身体验了,才知道自己到底喜不喜欢做,其他的都是空话

曾经的北山,是完完全全的电脑小白(CPU、GPU是什么我不知道);到后来自诩为技术宅,开始制作教程;再到现在,有了自己的模组开发及学习理论(见长线教程计划的前言)。而这几年,正好是5年,我完全有理由相信,你同样能做到

Ladybug Tool安装

那么私活夹带完了,不过确实是北山想说的话

气象数据可视化用到的是GHLadybug Tool插件,嗯,对于Rhino来说,是插件上的插件(禁止套娃)

下载

接下来我们来安装Ladybug Tool这个插件,这个东西可以在Food4Rhino这个网站上找到

搜索Ladybug,应该第一个就是,是一个瓢虫的图标(因为ladybug本身的意思就是瓢虫)
gh3

点击进入,往下翻,就能翻到下载相关内容,按照表格提示的platform和你自己所安装的Rhino进行下载(当然,要登录一下这个网站,可能得用7根木棍)
gh4

下载之后,我们就得到了一个压缩包,将其解压到你能找到的地方,因为待会得用GH安装,你得知道文件路径

安装

接下来我们打开Rhino,从上方菜单栏的工具打开Grasshopper,等它加载好就会弹出一个界面

然后我们点击File->Open Document,打开我们刚才解压出来的installer.gh文件,将其加载到GH中
gh5

随后我们会看到两个大大的12,首先双击1中的False,让它变成True,开始安装相关的Python依赖(注:因为网络的关系,可能得关闭防火墙,尤其是校园网)
gh6

在出现以下内容后,表示安装成功(出问题一般就是网络问题)

1
2
3
4
5
6
Next you should:
1. Run the installer component below.

Optional installation steps include:
1. Install OpenStudio.
2. Install Radiance.

随后同样的,双击2中的False,让它变成True,开始安装真正的Ladybug Tool插件(第一步没完成第二步也没法做,网络问题同上)

出现一个弹窗提示代表安装成功,重启RhinoGrasshopper就可以多了很多东西,一共安装了5个插件,分别是LadybugHB-EnergyHoneybeeDragonflyHB-Radiance
gh7

那么5个插件都有且都能打开它的界面,使用它的电池,就说明LB安装成功了

Very Important Tip

所有电池都可以右键选择help,它会有各个输入端、输出端的解释说明

气象数据

那么我们继续,要进行气象数据的可视化,首先得有数据

下载气象数据

这里我们先打开上方菜单栏中的Ladybug,我们可以看到它分了好几个模块(部分),这里我们先把开头一列的那两个电池(LB Download WeatherLB EPWmap)拿出来
gh8

gh9

顾名思义,LB Download Weather就是下载气象数据,另外一个则是搜寻气象数据的(气象数据的文件格式是epw

这里我们双击当前屏幕,输入Boolean Toggle,拿一个布尔值开关的电池过来,将其连接到LB EPWmap的输入端
gh10

和前面安装LB时一样,双击False,将其变成True。在你的默认浏览器中会弹出一个地图
gh11

地图上的那些点,就是不同气象站测得当地的气象数据。鼠标滚轮放大地图,我们以杭州为例,找到杭州地区(在西湖边上有3个点),选择一个点击一下
gh12

在弹出的小窗中,有copydownload

我们这里先来讲copy,点击copy,再到GH中添加一个Panel电池,双击进入编辑,将我们复制的链接粘贴进去,并将其与LB Download Weather_weather_url连接起来
gh13

我们可以再加一个电池LB Import EPW,将LB Download Weather输出端的epw_file与它连接起来,没有报错则说明这个数据文件是可以用的
gh14

保存气象数据

当然,肯定有人会觉得每次都这么干有点麻烦

所以我们可以通过LB Download Weather电池来保存我们的气象数据

首先你得在一个你能找到的地方建个文件夹,然后我们将这个文件夹的路径复制一下,和前面添加气象数据的链接一样,添加Panel并将其与_folder_连接起来
gh15
gh16

随后我们回到刚才新建的文件夹中,就可以发现多了一些文件
gh17

不过,通过刚才的那个气象数据的地图的download,同样可以下载气象数据到本地,是个压缩包,同样解压到你能找到的地方

那么下载到本地之后怎么用呢,我们要再用到一个File Path电池,右键选择Select one existing file,在弹出的窗口中选择你保存到本地的epw文件(注意后缀名)
gh18

同样将其与LB Import EPW_epw_file连接起来,没有报错则说明这个数据文件是可以用的
gh19

太阳轨迹

那么气象数据解决了,接下来就可以开始可视化了

导入epw的过程就不讲了,和前面一样的

基础部分

随后我们就要用到一个LB Sunpath电池,它在LB的第三个模块中

我们先来看一下我们可能会用到的输入端

north_这个是输出图形的正北方向与你实际要分析的区块(模型)的正北方向的夹角,缺省则默认为轴正方向为正北方向

_location这个是分析的地理位置信息,直接才前面的电池中导入

hoys_分析的时间段,在后面的日照时数的可视化也会用到

_center_pt_这个是可视化图表的中心点,你可以用Point电池重新指定一个点

_scale_这个是可视化图表的大小,太阳轨迹默认显示的是100m为半径的,根据实际需要进行缩放

daily_显示某一天或者某一时间段的太阳轨迹,配合hoys_使用

那么接下来,我们将LB Import EPWlocationLB Sunpath_location连接起来,双击屏幕输入一个0.01,自动创建一个Number Slider,将其与_scale_连接起来
gh20

而后我们就可以在Rhino界面中看到太阳轨迹图了,你可以通过另存为去导出各个部分的图纸(至于烘焙的话其实可以不干,因为要烘焙的东西有点多)
gh21

至于分析的话,就不是我们这篇教程干的事情了,这是地理学上的东西,得靠你自己来分析了

进阶部分

好,我们来进阶一下

在实际分析中,我们可能会选择一些特殊的日期来进行分析,比如二分二至日(春分、夏至、秋分、冬至)

这里我选取夏至日6月21日)来进行分析

这里我们引入LB Analysis Period电池,它的输入端我应该不用解释了吧?直接看名字直译就好了

最后一个_timestep_可以理解为迭代步数,设置为1的话就从设置的开始时间(小时)到结束时间(小时),再加1

如设置6-18,则会输出13个点位;设置为2的话,则有25个点位,以此类推(当然一般1就够了)

然后利用Panel设置日期,只要一天的话,就如图设置即可
gh22

而后将hoysLB Sunpathhoys_连接起来
gh23

随后我们就可以在Rhino的界面中看到13个叉叉(也就是十三个点位)
gh24

我们可以用Boolean Toggle电池,将其与LB Sunpathdaily_连接起来,双击False,将其变成True,就可以看到6月21日这一天的太阳轨迹了
gh25
gh26

当然,还没完,毕竟这13个叉叉看着很诡异,所以接下来我们就是将这13个叉叉变成我们的太阳

上面的13个点位对于输出的是LB Sunpathsun_pts,所以我们将它连接到Point电池,再将其连接到Sphere电池,就可以得到13个“太阳”(如果太小了就再给个半径的值)
gh27

然后在rhino的界面中我们就可以看到13个红球,那就是“太阳”
gh28

但是纯红的也不好看对吧,现在我们得给它个颜色

引入Custom Preview电池和Gradient电池,将GradientoutputCustom Previewmaterial连接起来,再将其geometrysphere的输出端连接起来
gh29

当然,现在还会报错,因为Gradient电池需要输入内容

这里我们就可以进一步思考,假设说我们现在想让日落和日出的太阳颜色淡一点,在正午的太阳颜色最深,应该怎么操作?

还没想到?那么再思考一下,就那13个太阳,它们的什么符合我们的需求?

答案是Z轴坐标(也就是高度轴)——Z轴坐标越大,颜色越深,Z轴坐标越小,颜色越浅

所以现在,我们需要一个Deconstruct电池,将这些太阳的Z轴坐标分离出来
gh30

除此之外,由于Gradient需要输入一个范围的,所以我们对提取的Z轴坐标数据还要进行进一步处理

这里我们再引入Bounds电池,这个就是用于输出一个XXX TO XXX的一个范围,我们可以拿Panel将其打印出来
gh31

随后,我们还要一个Remap Numbers这个电池,来重新映射范围,因为一般来说,我们是要将数值压进0~1这个范围的

按照前面Bounds输出的写法,我们创建一个Panel,里面写上0 TO 1,将其连接到Remap NumberstargetBounds输出端连接到source,前面提取的Z轴坐标连接至value
gh32

最后,我们再将Remap Numbersmapped连接至Gradientparameter
!gh33
并且在Rhino界面我们就可以看到那些太阳有了颜色,颜色的话可以右键Gradient的那个调色盘,选择一个preset,或者你也可以自己创建一个

最后我们的效果就像这个样子,然后你就可以输出你的图纸了
gh34

至于我们得到的图表的城市名字是它默认的,如果你想只留下城市名,不想要后面的那一串,可能只能通过直接改代码来实现
gh35

日照时数

确切来讲应该是日照模拟,因为这里的条件是晴天条件下的太阳光照

然后这个模拟是需要计算大量数据的,在最终运行时,可能会卡住,耐心等待即可

那么在此之前,我们先来搞个模型(建筑),这里我就简单放几个网格模型(注意一定得是网格模型),代表我们的建筑
gh36

另外提示一下,直接从SU导入的模型可能会在模拟的时候出问题,显示的那些东西会比较奇怪,个人建议尽量使用在Rhino制作的模型

前面的步骤我们就不讲了,前面讲过了,将我们的太阳轨迹给它做出来

那么这一次,我们要进行冬至日的日照模拟,当然还有一个标准是大寒日的,不过这里就不演示了,原理是一样的
gh37
gh38

为了方便观察,我们可以先将太阳轨迹这个图隐藏起来,鼠标中键点击LB Sunpath,在弹出的环形菜单中选择右上角的Disable Preview即可
gh39

随后我们引入LB Direct Sun Hours电池,这个就是用于计算日照时数的
gh40

接下来我们要搞定它的输入端

_vectors是太阳的角度,这个连接前面LB Sunpathvectors输出端即可

_timestep_同前面LB Analysis Period中的那样,是每小时的计算次数,设置为1即可

_geometry这个要输入我们的模型,引入一个Mesh电池,右键选择set mutiple meshes,框选我们的模型,选中之后我们的模型将呈红色,然后我们将它连接上
gh41
_grid_size这个是计算的网格大小,数值越大,计算越精确,但是计算时间也越长,一般不小于你模型网格的最小尺寸

_offset_dist_这个是网格上点的偏移距离,为了防止点被网格挡住,一般设置为0.1即可(一个很小的正数

legend_par_是设置图例参数的,我们可以用LB Legend Parameter电池,来进行设置,这里我们就用一个布尔值开关,将它的continuous_leg_设置为True(也就是让图例连续渐变)
gh42

_cpu_count_参与计算的CPU核心数,一般会自动选择,为你当前CPU可用核心数 - 1,一般不需要调整,最低为1个

最后,用一个布尔值开关连接_run
gh43

那么接下来,就是双击改变布尔值开关的值,启动运算,我们就得到了这么一个东西
gh44

嗯,分辨率似乎有点低,这时我们可以重建模型的面(QuadRemesh命令),把模型的面数拉上去(记得把那个开关先关了),然后将Mesh电池的东西重新选择一下,选择好之后,我们可以将Mesh给隐藏起来,防止后面显示的重叠
gh45

额,好像分的多了点,我们可以改一下显示模式
gh46

而后,我们重新打开那个开关,最后得到这么一个图
gh47

可以看到我们的精度已经很高了,可以观察建筑的日照是否满足设计要求

最后也可以叠加刚才隐藏的太阳轨迹图
gh48

风玫瑰图

那么接下来,我们来进行风玫瑰图的可视化

基础部分

首先,我们要引入一个LB Wind Rose电池,这个就是用来生成风玫瑰图的
gh49

这个电池的两个必要的输入端是_data_wind_direction,它们对应的是LB Import EPW中的wind_speedwind_direction,我们将它们连接起来
gh50

那么我们就能在Rhino中看到一个风玫瑰图了,这个图是全年的风玫瑰图
gh51

但是嘞,现在这些线有点密集,不太好观察,所以我们得对图进行一定的调整

我们看到在_wind_direction下面的_dir_count_,这个输入端是决定风玫瑰图中扇形的个数,默认的个数为36个,显然有点多了,我们可以设置到24
gh52

这样看起来好一点,也可以根据你的实际需求进行调整
gh53

进阶部分

好,我们直接进入进阶部分

在一般的竞赛作品中,我们可以看到风玫瑰图并不只有单独的一张,而往往是12张不同月份的风玫瑰图,所以在这里我们就来学习一下怎么制作

那么首先,我们需要12个点,用于指定12个月的风玫瑰图的位置,在GH中,我们可以通过series电池来序列化生成12个点,而不用你自己手动指定(当然你不嫌麻烦可以试试)

我们先来介绍一下series电池,它有三个输入端,startstepcount,分别代表序列的起始值步长个数,这个学过编程的应该很轻松就能理解
gh54

比如说我们这里要生成有5个值的序列,起始值为0,步长设置为2,那么我们得到的结果就是0、2、4、6、8
gh55

当然,值得注意的是,count必须为正数,起始值和步长可以为负数,否则会出问题。步长如果缺省,则默认为1

那么现在,我们要生成12点,当然不是直接在一条直线上生成12个,我们要将其分成3x4这样的点阵,所以我们得用两个series电池

一个生成4个,一个生成3个,它们的步长先将其设置为50000,这样就能生成一个3×4,每个点间隔50000的点阵
gh56

我们可以通过Construct Point电池来显示这些点,其中一个给X,另一个给Y
gh57
gh58

但似乎有些不对劲,我们要右键点击Construct PointX或是Y的输入端,选择Graft,这是为每个数据进行单独处理,匹配XY的坐标
gh59

现在看起来正常多了
gh60

但是现在,我们还不能将Construct Point的输出端连接到LB Wind Rose_center_pt_,因为一旦连上你就会发现,这12张图是一样的,并不是每个月份的

因为风玫瑰图的数据没有分离,我们要设置LB Wind Roseperiod_输入端,将风玫瑰的数据按月份拆开来

现在我们要使用LB Analysis Period电池和series电池,用series生成一个1到12的序列,然后将其连接到LB Analysis Period_start_month__end_month_,这样就能将风玫瑰的数据按月份拆分了

我们可以拿panel看一下它输出的period,可以看到它已经按月份拆分了
gh61

其实用series电池就等效于下面这种方法做12次(当然我觉得你不会这么干)
gh62

那么最后就是将Construct Point的输出端与LB Wind Rose_center_pt_连接起来,将LB Analysis Period的输出端与LB Wind Roseperiod_连接起来

另外,再将_max_freq_lines_设置为小一点的数,这个是控制扇面分割的个数,因为我们拆分各个月份之后,每个月的最高风速就没那么大了,所以可以将扇面数减少
gh63

但输出的图似乎还是有点小问题
gh64

我们右键Construct Point的输出端,选择Flatten,这样就能将点阵展平,这样就能正常显示了
gh65

当然,细心的同学会发现,其实我们生成的图的月份是反着的,即1-4月在最下面,9-12月在上边,这里呢,就重新调整其中一个series来解决,将它的步长设置为-50000(对了,这个数值也是按照实际情况来调整,我这里的话55000更好一点)
gh66

这样你就能分析某几个月份的主导风向了
gh67

数据图表

接下来就介绍一些常规的数据图表,比如焓湿图干球温度露点温度

它们的表现形式可以为二维的,也可以为三维的

我们这里用到一个LB Hourly Plot电池,这个是用来绘制图表的(二维三维均可
gh68

另一个是LB Monthly Chart,这个是用来绘制月度图表的(纯粹的二维图表

干球温度

我们将lb import epw的dry_bulb_temperature(干球温度)连接到LB Hourly Plot_data
gh69

我们就可以在rhino中看到一个图表了
gh70

那么另外,base_pt_就是指定一个点作为图表的原点

_x(y/z)_dim_就是指定x(y/z)轴的长度,三个轴都设置一下就可以让它变成三维的

z轴的值越大,那么在图上的起伏也就越大
gh71
gh72

另外通过设置statement_,可以让图表只输出我们要的数据,比如我们只让他输出温度高于20°C的数据,就可以将条件写在panel里,再将其连接
gh73
gh74

另外一边,我们可以通过lb hourly chart来绘制月度图表,这个比较简单,直接连接_data即可
gh75

也可以再在data上接上一个LB Time Interval Operation,对数据进行进一步处理,daily则输出每天的数据,monthly输出每月的平均数据,mon_per_hr输出每月每小时的平均数据
gh76
gh77
gh78

LB Time Interval Operation的输入端数据是可以重叠的(用Merge电池合并一下),比如这样(相对湿度和干球温度的叠加)
gh79
gh80

露点温度

那么同样的,只需将dew_point_temperature(露点温度)连接到_data,就可以得到露点温度的图表了

也是可以处理为三维
gh81
gh82

焓湿图

焓湿图的做法与上面的图表又不太一样,这个或许得从焓湿图的含义考虑了,咱们这里就不作介绍了

焓湿图需要两个数据,一个是dry_bulb_temperature(干球温度),另一个是relative_humidity(相对湿度)

另外需要一个LB Psychrometric Chart电池,这个是用来生成焓湿图的

然后将干球温度和相对湿度连接上,就能获得一个焓湿图了
gh83
gh84

另外,我们可以看到焓湿图横轴(温度)并没有全部用到,所以我们可以进行优化

利用Construct Domain电池,将横轴的范围设置为-10-40,连接至_temp_range_,这样横轴就不会有太多的空白了
gh85
gh86

图表中的斜线,默认为等焓值线,你可以用一个布尔值开关控制LB Psychrometric Chartplot_wet_bulb,可以将其转换为等湿球温度线,这个就按需调整了
gh87

在接下来,我们看到data_,它也可以叠加一些数据,比如我们将风速连接到data_中,就会得到另外一张图
gh88

另外我再画一条线,可以将两个图联合起来分析,看它们干球温度相对湿度空气焓值风速关联起来看,得出一些应对方法
gh89

热舒适多边形(PMV指标)

PMV指标是衡量室内热舒适性的一个重要指标,关乎建筑节能方面

(注:我暂时没有研究过PMV相关内容,如未能解释清楚还请谅解)

这个图是建立在前面的焓湿图基础上的,我们要用到LB PMV Polygon电池,连接psych_chart
gh90

我们就能在刚才生成的焓湿图中发现一个多边形
gh91

接下来我们来设置新陈代谢速率(应该是这个房间使用者的主要活动的新陈代谢速度),我们要用到LB Activities Met List电池

在这个电池中,它已经给我们预设好了一些活动,我们选择一个将其连接到_met_rate_
gh92

随后还要设置一个穿衣指数(这个房间使用者会穿什么或者不穿什么),要用到LB Clothing List

通过选择或取消选择上面的对勾,就可以指定这个房间使用者穿或者不穿什么,并将其连接到_clothing_
gh93

随后在焓湿图上,就出现了一个和刚开始不一样的多边形,就是指这个房间使用者穿什么衣服时,在什么干球温度和相对湿度下,是舒适的
gh94

总结

那么以上内容就是北山在过去所学的气象数据可视化

说实话,GH其实挺好玩的,有没有激起一点点兴趣呢?

那么,也感谢大家看到这里,感谢支持!