Grasshopper 气象数据可视化
前述
由于某只北山在之前参加了深圳绿色建筑设计竞赛(深绿设
),当时气象数据的分析任务交给了我,于是乎就去学习了利用Rhino
的Grasshopper
进行气象数据的可视化
然后呢,和模组开发教程及本分站的东西一样,为持续对世界输出,同时为了提高我自己的水平,咱们还是来分享分享
至于分析的部分,当然也是要的,但GH
能干的只是输出图及图表,后面的分析内容是你得根据地理学
的知识去分析的,不是光有个图就完了
而分析的部分,并不是本篇的重点,可视化才是
不过,我们先简单了解一下Grasshopper
DeepSeek的话
1 | Grasshopper 是 Rhino(Rhinoceros)中的一种可视化编程工具 |
北山の话
好,那现在我来喵几句
为什么我也要来喵两句呢?DS在上面提到了一个东西——可视化编程
。然后北山现在,也将永远在技术向的道路上狂奔,扯上编程的东西,那自然得来说一说
咋了?可视化编程该不会吓到你了吧。对于一个没有如何编程经验的小白来说,确实可能有点吓人。但是,可视化编程并不是像传统我们手敲代码那样,需要理解编程语言和逻辑——相反,它是一种通过图形界面
来构建程序的方法
它通过一个个封装好的模块,用一条条线连接起来,实现一些功能。这种编程方式更加直观,易于理解和实现
这就有点像传统编程中的API
(应用程序接口),开发者无需了解API背后的实现细节,只需要知道如何调用它,就可以实现一些复杂的功能
可视化编程的学习成本可比传统编程低得多了,但对于GH
来说,还得学很多很多东西,但至少你不用从一个字一个字地敲开始的传统编程了
这里呢,咱们再深入一点。感兴趣的话,其实你可以双击
那些电池,而后他们会弹出来一个窗口,熟悉编程语言的应该会知道,那玩意是Python
其实吧,GH
和Rhino
都是支持Python
的,也就是说你完全可以利用Python
来进行参数设计,也可以自己设计电池(当然,这自然是对你的编程能力是有要求的)
Rhino
的话,在其工具
->脚本
->编辑
,就可以打开Rhino的脚本编辑器
,而在这里就可以拿Python来写一些代码,执行一些语句(在此之前,建议先看看Rhino的开发相关的内容,不然是真的写啥都不知道)
可视化编程在很多很多软件中都有,Blender
的着色器
(Shader
),它也是一块块的模块(节点),通过一条条线连接起来的,去实现一些渲染相关的东西
Unreal Engine
的Blueprint
(蓝图
),也是这样的
不过,可视化编程自然是有它的局限性的,因为现有模块可能无法满足你的需求,这个时候,你就得通过编程语言自己去编程了
上面说过了,Rhino支持Python,Blender同样支持Python(嗯,Blender是有Python控制台的)
所以,知道为什么要学Python
了吧?
我在我自己的《随·言》
系列中也讲过,其实最好是能够每个人都能学习一门编程语言。毕竟在AI时代
,绝大多数的AI都是Python写的,而Python又是最容易上手的编程语言之一
另外,其实作为建筑学专业的,亦或者是建筑行业相关专业的,你大可以向这些方向发展,用Python、用Rhino参数化设计、设计AI来辅助设计、规划、管理等等。当然,技术向的道路并不好走,但总有人能走,也总会有人走
虽然说北山在未来并不会选择建筑行业,而是奔赴技术美术
(TA
)。不知道我有没有这个话语权,上面那一段,也是算是给同辈或者后辈的建议吧
对于北山而言,要学的东西非常非常得多(毕竟现在是干到第四个编程语言了,而且技术美术完全是一个未知领域),建筑学的东西,自然还是有用的。和以前一样,我依旧需要建筑学的强综合性,能够涉及的面越广越好
至于北山为何最终选择了技术美术作为未来主要的发展方向,参见《随·言 #6》,这里就不多说了
别的话,感兴趣的还是可以去看北山的《随·言》
系列,讲专业,讲学习,讲技术,讲生活……各方各面,当然,仅代表个人观点
那么,最后再喵几句,不论你未来想做什么,不管和专业是否相关,趁你还没有毕业,赶紧去。不要觉得你不会做、你不喜欢做,只有你真正着手去做了,自己亲身体验了,才知道自己到底喜不喜欢做,其他的都是空话
曾经的北山,是完完全全的电脑小白(CPU、GPU是什么我不知道);到后来自诩为技术宅,开始制作教程;再到现在,有了自己的模组开发及学习理论(见长线教程计划的前言)。而这几年,正好是5年,我完全有理由相信,你同样能做到
Ladybug Tool安装
那么私活夹带完了,不过确实是北山想说的话
气象数据可视化
用到的是GH
的Ladybug Tool
插件,嗯,对于Rhino
来说,是插件上的插件(禁止套娃)
下载
接下来我们来安装Ladybug Tool
这个插件,这个东西可以在Food4Rhino这个网站上找到
搜索Ladybug
,应该第一个就是,是一个瓢虫
的图标(因为ladybug本身的意思就是瓢虫)
点击进入,往下翻,就能翻到下载相关内容,按照表格提示的platform
和你自己所安装的Rhino
进行下载(当然,要登录一下这个网站,可能得用7根木棍)
下载之后,我们就得到了一个压缩包,将其解压到你能找到的地方,因为待会得用GH
安装,你得知道文件路径
安装
接下来我们打开Rhino,从上方菜单栏的工具
打开Grasshopper
,等它加载好就会弹出一个界面
然后我们点击File
->Open Document
,打开我们刚才解压出来的installer.gh
文件,将其加载到GH中
随后我们会看到两个大大的1
和2
,首先双击1
中的False
,让它变成True,开始安装相关的Python依赖
(注:因为网络的关系,可能得关闭防火墙,尤其是校园网)
在出现以下内容后,表示安装成功
(出问题一般就是网络问题)
1 | Next you should: |
随后同样的,双击2
中的False
,让它变成True,开始安装真正的Ladybug Tool
插件(第一步没完成第二步也没法做,网络问题同上)
出现一个弹窗提示代表安装成功,重启Rhino
和Grasshopper
就可以多了很多东西,一共安装了5
个插件,分别是Ladybug
、HB-Energy
、Honeybee
、Dragonfly
和HB-Radiance
那么5个插件都有且都能打开它的界面,使用它的电池,就说明LB
安装成功了
Very Important Tip
所有电池都可以右键选择help,它会有各个输入端、输出端的解释说明
气象数据
那么我们继续,要进行气象数据的可视化,首先得有数据
下载气象数据
这里我们先打开上方菜单栏中的Ladybug
,我们可以看到它分了好几个模块(部分),这里我们先把开头一列的那两个电池(LB Download Weather
、LB EPWmap
)拿出来
顾名思义,LB Download Weather
就是下载气象数据,另外一个则是搜寻气象数据的(气象数据的文件格式是epw
)
这里我们双击当前屏幕,输入Boolean Toggle
,拿一个布尔值开关的电池过来,将其连接到LB EPWmap
的输入端
和前面安装LB时一样,双击False
,将其变成True。在你的默认浏览器中会弹出一个地图
地图上的那些点,就是不同气象站测得当地的气象数据。鼠标滚轮放大地图,我们以杭州为例,找到杭州地区(在西湖边上有3个点),选择一个点击一下
在弹出的小窗中,有copy
和download
我们这里先来讲copy
,点击copy,再到GH
中添加一个Panel
电池,双击进入编辑,将我们复制的链接
粘贴进去,并将其与LB Download Weather
的_weather_url
连接起来
我们可以再加一个电池LB Import EPW
,将LB Download Weather
输出端的epw_file
与它连接起来,没有报错则说明这个数据文件是可以用的
保存气象数据
当然,肯定有人会觉得每次都这么干有点麻烦
所以我们可以通过LB Download Weather
电池来保存我们的气象数据
首先你得在一个你能找到的地方建个文件夹,然后我们将这个文件夹的路径复制一下,和前面添加气象数据的链接一样,添加Panel
并将其与_folder_
连接起来
随后我们回到刚才新建的文件夹中,就可以发现多了一些文件
不过,通过刚才的那个气象数据的地图的download
,同样可以下载气象数据到本地,是个压缩包,同样解压到你能找到的地方
那么下载到本地之后怎么用呢,我们要再用到一个File Path
电池,右键选择Select one existing file
,在弹出的窗口中选择你保存到本地的epw文件
(注意后缀名)
同样将其与LB Import EPW
的_epw_file
连接起来,没有报错则说明这个数据文件是可以用的
太阳轨迹
那么气象数据解决了,接下来就可以开始可视化了
导入epw的过程就不讲了,和前面一样的
基础部分
随后我们就要用到一个LB Sunpath
电池,它在LB
的第三个模块中
我们先来看一下我们可能会用到的输入端
north_
这个是输出图形的正北方向与你实际要分析的区块(模型)的正北方向的夹角,缺省则默认为轴正方向为正北方向
_location
这个是分析的地理位置信息,直接才前面的电池中导入
hoys_
分析的时间段,在后面的日照时数的可视化也会用到
_center_pt_
这个是可视化图表的中心点,你可以用Point
电池重新指定一个点
_scale_
这个是可视化图表的大小,太阳轨迹默认显示的是100m
为半径的,根据实际需要进行缩放
daily_显示某一天或者某一时间段的太阳轨迹,配合hoys_
使用
那么接下来,我们将LB Import EPW
的location
与LB Sunpath
的_location
连接起来,双击屏幕输入一个0.01
,自动创建一个Number Slider
,将其与_scale_
连接起来
而后我们就可以在Rhino
界面中看到太阳轨迹图了,你可以通过另存为去导出各个部分的图纸(至于烘焙的话其实可以不干,因为要烘焙的东西有点多)
至于分析的话,就不是我们这篇教程干的事情了,这是地理学
上的东西,得靠你自己来分析了
进阶部分
好,我们来进阶一下
在实际分析中,我们可能会选择一些特殊的日期来进行分析,比如二分二至日
(春分、夏至、秋分、冬至)
这里我选取夏至日
(6月21日
)来进行分析
这里我们引入LB Analysis Period
电池,它的输入端我应该不用解释了吧?直接看名字直译就好了
最后一个_timestep_
可以理解为迭代步数,设置为1的话就从设置的开始时间(小时)到结束时间(小时),再加1
如设置6-18
,则会输出13
个点位;设置为2
的话,则有25
个点位,以此类推(当然一般1
就够了)
然后利用Panel
设置日期,只要一天的话,就如图设置即可
而后将hoys
与LB Sunpath
的hoys_
连接起来
随后我们就可以在Rhino的界面中看到13个叉叉
(也就是十三个点位)
我们可以用Boolean Toggle
电池,将其与LB Sunpath
的daily_
连接起来,双击False
,将其变成True
,就可以看到6月21日这一天的太阳轨迹了
当然,还没完,毕竟这13个叉叉看着很诡异,所以接下来我们就是将这13个叉叉变成我们的太阳
上面的13个点位对于输出的是LB Sunpath
的sun_pts
,所以我们将它连接到Point
电池,再将其连接到Sphere
电池,就可以得到13个“太阳”(如果太小了就再给个半径的值)
然后在rhino的界面中我们就可以看到13个红球,那就是“太阳”
但是纯红的也不好看对吧,现在我们得给它个颜色
引入Custom Preview
电池和Gradient
电池,将Gradient
的output
与Custom Preview
的material
连接起来,再将其geometry
与sphere
的输出端连接起来
当然,现在还会报错,因为Gradient
电池需要输入内容
这里我们就可以进一步思考,假设说我们现在想让日落和日出
的太阳颜色淡一点
,在正午
的太阳颜色最深
,应该怎么操作?
还没想到?那么再思考一下,就那13个太阳,它们的什么符合我们的需求?
答案是Z轴
坐标(也就是高度轴
)——Z轴坐标越大,颜色越深,Z轴坐标越小,颜色越浅
所以现在,我们需要一个Deconstruct
电池,将这些太阳的Z轴坐标分离出来
除此之外,由于Gradient
需要输入一个范围
的,所以我们对提取的Z轴坐标数据还要进行进一步处理
这里我们再引入Bounds
电池,这个就是用于输出一个XXX TO XXX
的一个范围,我们可以拿Panel
将其打印出来
随后,我们还要一个Remap Numbers
这个电池,来重新映射范围
,因为一般来说,我们是要将数值压进0~1
这个范围的
按照前面Bounds
输出的写法,我们创建一个Panel
,里面写上0 TO 1
,将其连接到Remap Numbers
的target
,Bounds
输出端连接到source
,前面提取的Z轴坐标连接至value
最后,我们再将Remap Numbers
的mapped
连接至Gradient
的parameter
!
并且在Rhino
界面我们就可以看到那些太阳有了颜色,颜色的话可以右键Gradient
的那个调色盘,选择一个preset
,或者你也可以自己创建一个
最后我们的效果就像这个样子,然后你就可以输出你的图纸了
至于我们得到的图表的城市名字是它默认的,如果你想只留下城市名,不想要后面的那一串,可能只能通过直接改代码来实现
日照时数
确切来讲应该是日照模拟
,因为这里的条件是晴天
条件下的太阳光照
然后这个模拟是需要计算大量数据
的,在最终运行时,可能会卡住
,耐心等待即可
那么在此之前,我们先来搞个模型
(建筑),这里我就简单放几个网格
模型(注意一定得是网格模型
),代表我们的建筑
另外提示一下,直接从SU
导入的模型可能会在模拟的时候出问题,显示的那些东西会比较奇怪,个人建议尽量使用在Rhino制作的模型
前面的步骤我们就不讲了,前面讲过了,将我们的太阳轨迹给它做出来
那么这一次,我们要进行冬至日
的日照模拟,当然还有一个标准是大寒日
的,不过这里就不演示了,原理是一样的
为了方便观察,我们可以先将太阳轨迹这个图隐藏
起来,鼠标中键
点击LB Sunpath
,在弹出的环形菜单中选择右上角的Disable Preview
即可
随后我们引入LB Direct Sun Hours
电池,这个就是用于计算日照时数的
接下来我们要搞定它的输入端
_vectors
是太阳的角度,这个连接前面LB Sunpath
的vectors
输出端即可
_timestep_
同前面LB Analysis Period
中的那样,是每小时的计算次数,设置为1即可
_geometry
这个要输入我们的模型,引入一个Mesh
电池,右键选择set mutiple meshes
,框选我们的模型,选中之后我们的模型将呈红色,然后我们将它连接上_grid_size
这个是计算的网格大小,数值越大,计算越精确,但是计算时间也越长,一般不小于你模型网格的最小尺寸
_offset_dist_
这个是网格上点的偏移距离,为了防止点被网格挡住,一般设置为0.1
即可(一个很小的正数
)
legend_par_
是设置图例参数的,我们可以用LB Legend Parameter
电池,来进行设置,这里我们就用一个布尔值开关,将它的continuous_leg_
设置为True
(也就是让图例连续渐变)
_cpu_count_
是参与计算的CPU核心数
,一般会自动选择,为你当前CPU可用核心数 - 1
,一般不需要调整,最低为1个
最后,用一个布尔值开关
连接_run
那么接下来,就是双击改变布尔值开关的值,启动运算
,我们就得到了这么一个东西
嗯,分辨率似乎有点低,这时我们可以重建模型的面(QuadRemesh
命令),把模型的面数拉上去(记得把那个开关先关了
),然后将Mesh
电池的东西重新选择一下,选择好之后,我们可以将Mesh
给隐藏起来,防止后面显示的重叠
额,好像分的多了点,我们可以改一下显示模式
而后,我们重新打开那个开关,最后得到这么一个图
可以看到我们的精度已经很高了,可以观察建筑的日照是否满足设计要求
最后也可以叠加刚才隐藏的太阳轨迹图
风玫瑰图
那么接下来,我们来进行风玫瑰图
的可视化
基础部分
首先,我们要引入一个LB Wind Rose
电池,这个就是用来生成风玫瑰图的
这个电池的两个必要的输入端是_data
和_wind_direction
,它们对应的是LB Import EPW
中的wind_speed
和wind_direction
,我们将它们连接起来
那么我们就能在Rhino
中看到一个风玫瑰图了,这个图是全年
的风玫瑰图
但是嘞,现在这些线有点密集,不太好观察,所以我们得对图进行一定的调整
我们看到在_wind_direction
下面的_dir_count_
,这个输入端是决定风玫瑰图中扇形的个数
,默认的个数为36
个,显然有点多了,我们可以设置到24
个
这样看起来好一点,也可以根据你的实际需求进行调整
进阶部分
好,我们直接进入进阶部分
在一般的竞赛作品中,我们可以看到风玫瑰图并不只有单独的一张,而往往是12张
不同月份的风玫瑰图,所以在这里我们就来学习一下怎么制作
那么首先,我们需要12个点,用于指定12个月的风玫瑰图的位置,在GH
中,我们可以通过series
电池来序列化生成12个点,而不用你自己手动指定(当然你不嫌麻烦可以试试)
我们先来介绍一下series
电池,它有三个输入端,start
、step
、count
,分别代表序列的起始值
、步长
、个数
,这个学过编程的应该很轻松就能理解
比如说我们这里要生成有5
个值的序列,起始值为0
,步长设置为2
,那么我们得到的结果就是0、2、4、6、8
当然,值得注意的是,count必须为正数
,起始值和步长可以为负数
,否则会出问题。步长如果缺省,则默认为1
那么现在,我们要生成12点,当然不是直接在一条直线上生成12个,我们要将其分成3x4
这样的点阵,所以我们得用两个series
电池
一个生成4个,一个生成3个,它们的步长先将其设置为50000
,这样就能生成一个3×4
,每个点间隔50000
的点阵
我们可以通过Construct Point
电池来显示这些点,其中一个给X,另一个给Y
但似乎有些不对劲,我们要右键点击Construct Point
的X
或是Y
的输入端,选择Graft
,这是为每个数据进行单独处理
,匹配X
和Y
的坐标
现在看起来正常多了
但是现在,我们还不能将Construct Point
的输出端连接到LB Wind Rose
的_center_pt_
,因为一旦连上你就会发现,这12张图是一样的,并不是每个月份的
因为风玫瑰图的数据没有分离
,我们要设置LB Wind Rose
的period_
输入端,将风玫瑰的数据按月份
拆开来
现在我们要使用LB Analysis Period
电池和series
电池,用series
生成一个1到12
的序列,然后将其连接到LB Analysis Period
的_start_month_
和_end_month_
,这样就能将风玫瑰的数据按月份拆分了
我们可以拿panel
看一下它输出的period
,可以看到它已经按月份拆分了
其实用series
电池就等效于下面这种方法做12
次(当然我觉得你不会这么干)
那么最后就是将Construct Point
的输出端与LB Wind Rose
的_center_pt_
连接起来,将LB Analysis Period
的输出端与LB Wind Rose
的period_
连接起来
另外,再将_max_freq_lines_
设置为小一点的数,这个是控制扇面分割的个数
,因为我们拆分各个月份之后,每个月的最高风速就没那么大了,所以可以将扇面数减少
但输出的图似乎还是有点小问题
我们右键Construct Point
的输出端,选择Flatten
,这样就能将点阵展平
,这样就能正常显示了
当然,细心的同学会发现,其实我们生成的图的月份是反着
的,即1-4月在最下面,9-12月在上边,这里呢,就重新调整其中一个series
来解决,将它的步长设置为-50000
(对了,这个数值也是按照实际情况来调整
,我这里的话55000更好一点)
这样你就能分析某几个月份的主导风向了
数据图表
接下来就介绍一些常规的数据图表,比如焓湿图
、干球温度
、露点温度
等
它们的表现形式可以为二维的,也可以为三维的
我们这里用到一个LB Hourly Plot
电池,这个是用来绘制图表的(二维三维均可
)
另一个是LB Monthly Chart
,这个是用来绘制月度图表的(纯粹的二维图表
)
干球温度
我们将lb import epw的dry_bulb_temperature
(干球温度)连接到LB Hourly Plot
的_data
我们就可以在rhino中看到一个图表了
那么另外,base_pt_
就是指定一个点作为图表的原点
_x(y/z)_dim_
就是指定x(y/z)
轴的长度,三个轴都设置一下就可以让它变成三维的
z
轴的值越大,那么在图上的起伏也就越大
另外通过设置statement_
,可以让图表只输出我们要的数据,比如我们只让他输出温度高于20°C
的数据,就可以将条件写在panel
里,再将其连接
另外一边,我们可以通过lb hourly chart
来绘制月度图表,这个比较简单,直接连接_data
即可
也可以再在data
上接上一个LB Time Interval Operation
,对数据进行进一步处理,daily
则输出每天的数据,monthly
输出每月的平均数据,mon_per_hr
输出每月每小时的平均数据
LB Time Interval Operation
的输入端数据是可以重叠的(用Merge
电池合并一下),比如这样(相对湿度和干球温度的叠加)
露点温度
那么同样的,只需将dew_point_temperature
(露点温度)连接到_data
,就可以得到露点温度的图表了
也是可以处理为三维
的
焓湿图
焓湿图的做法与上面的图表又不太一样,这个或许得从焓湿图的含义考虑了,咱们这里就不作介绍了
焓湿图需要两个数据,一个是dry_bulb_temperature
(干球温度),另一个是relative_humidity
(相对湿度)
另外需要一个LB Psychrometric Chart
电池,这个是用来生成焓湿图的
然后将干球温度和相对湿度连接上,就能获得一个焓湿图了
另外,我们可以看到焓湿图横轴(温度)并没有全部用到
,所以我们可以进行优化
利用Construct Domain
电池,将横轴的范围设置为-10-40
,连接至_temp_range_
,这样横轴就不会有太多的空白了
图表中的斜线
,默认为等焓值线
,你可以用一个布尔值开关控制LB Psychrometric Chart
的plot_wet_bulb
,可以将其转换为等湿球温度线
,这个就按需调整了
在接下来,我们看到data_
,它也可以叠加一些数据,比如我们将风速
连接到data_
中,就会得到另外一张图
另外我再画一条线,可以将两个图联合起来分析,看它们干球温度
、相对湿度
、空气焓值
和风速
关联起来看,得出一些应对方法
热舒适多边形(PMV指标)
PMV指标
是衡量室内热舒适性
的一个重要指标,关乎建筑节能
方面
(注:我暂时没有研究过PMV相关内容,如未能解释清楚还请谅解)
这个图是建立在前面的焓湿图基础上的,我们要用到LB PMV Polygon
电池,连接psych_chart
我们就能在刚才生成的焓湿图中发现一个多边形
了
接下来我们来设置新陈代谢速率
(应该是这个房间使用者的主要活动的新陈代谢速度),我们要用到LB Activities Met List
电池
在这个电池中,它已经给我们预设好了一些活动,我们选择一个将其连接到_met_rate_
上
随后还要设置一个穿衣指数(这个房间使用者会穿什么或者不穿什么),要用到LB Clothing List
通过选择或取消选择上面的对勾,就可以指定这个房间使用者穿或者不穿什么,并将其连接到_clothing_
上
随后在焓湿图上,就出现了一个和刚开始不一样的多边形,就是指这个房间使用者穿什么衣服时,在什么干球温度和相对湿度下,是舒适的
总结
那么以上内容就是北山在过去所学的气象数据可视化
说实话,GH
其实挺好玩的,有没有激起一点点兴趣呢?
那么,也感谢大家看到这里,感谢支持!