跳至正文

李云龙同学 —— 关于 Blender模拟房屋倒塌

Blender是一款免费开源三维图形图像软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案(来源百度百科)。其中Blender关于建模和动画的处理对于房屋、桥梁等建筑的倒塌模拟有着很大的启发,因此借助该软件可以大致了解房屋受损受力的一个趋势。但值得注意的是,Blender对于结构内部的细节处理是非常有限的,所以该模拟只推荐作为可视化展示和处理的一种手段。

首先,Blender本身所具有的功能虽然已十分齐全,但是在模拟构件的连接以及相关的操作方面是十分繁琐的,尤其是对于构件较为复杂的建筑结构的模拟更是令人望而生畏。因此需要借助“Bullet Constraints Builder(BCB)”插件进行模型的前后处理。具体安装步骤可以直接百度搜索“Blender BCB”,目前BCB插件只能适配老版本的Blender 2.79,由于界面较老教程较少,所以不使用BCB时还是建议使用新版本的Blender。

下面将给出模拟的具体操作流程。

首先打开Blender2.79,BCB的具体导入步骤在此不做赘述,BCB安装包内的用户手册已经说的很清楚了。同时BCB插件有许多我自认为“奇怪”的地方,由于网上教程极少,所以很多问题都是慢慢摸索出来的,在此也都一一列举。 从最简单的梁、柱、板模型开始。“Shift A”可快速添加物体,所建模型主要还是以立方体为主,Blender2.79中是鼠标右键选中物体,并可通过快捷键“N”进入物体编辑模式。在这里可以调节物体的尺寸和具体位置等,以模拟实际构件。其中,快捷键“A”是选中所有物体,再按一次就是全不选,这个键要经常用到。

物体编辑模式

建好一个构件后,第二步则需要点击最右侧的物体菜单(注意要选中物体),选择“添加到组”那里的“+”按钮,或者直接选中物体并按下“Ctrl g”,添加组后注意,组的名称必须严格确定,比如我这里命名为“RC Columns”,那么与之同类型的柱的组名必须都是相同的,因为后续BCB会根据组名自动确定构件的属性,这一点我们后面再详细展开。

物体坐标、尺寸、分组设置

然后非常重要的一点,当我们想复制一个构件时,切不可使用“Ctrl C/V”,因为这样会使新复制的物体的分组变为“RC Columns.001”,正确方法应该是“Shift D”,这样分组就不会改变了。新复制的物体可以通过快捷键“G”进行移动,也可以直接修改坐标,坐标需要准确填写。这样,我们可以快速建立一个简单的梁板柱结构。这里我的分组就简单分为了“RC Columns、RC Beams、RC Slabs”。

然后我们需要在左侧的BCB菜单下,找到“Element Group List”,并点击“+”来创建组,这里就按照形式选就可以,因为里面没有梁的,所以我们可以选Concrete并改名为RC Beams,其余的也都一样,总之必须与之前的组名一一对应。我们可以点击那个黄色的小门,可以发现他会自动选中图中的构件,说明我们的分组命名没有问题。

BCB中分组

之后我们可以通过上移下移来选择每一组的类型,这里一共就提供了两个类型,即“梁柱类型、板墙类型”选择合适的即可。同时我们可以看到下面有填混凝土强度,钢筋强度,截面尺寸等等具体内容,这里的截面尺寸是计算用到的尺寸,而刚才建模的尺寸和计算关系不大,但是关系到模型的准确度。不过这些我们先不管他,都可以后面再调整。在BCB用户手册中,详细说明了每个选项的意义,可以事先阅读一遍。

BCB组的类型选择

然后,重要的要来了,我们选中所有物体,这时候点击BCB菜单的“Build”会发现是没有反应的,这时候我们进入“Preprocessing Tools”菜单并点击“Enable Rigid Bodies”,可以注意到每个物体都添加了一个新组“RigidBodyWorld”,再点击“Build”就有反应了,说明加入刚体世界后才能对各部件进行连接建立。这个时候我们可以发现结构有了变化,构件之间有了缝隙,这个可以不用理他。这时候我们点击保存,并对文件进行备份。很重要的一点,因为这个插件的某些原因,当我们关闭Blender并再次打开后,之前在BCB菜单定义的分组类型等内容会自动清零,必须点击“Build”旁边的刷新键才能再次载入之前的设置,而如果之前我们没有对模型进行“Build”,这个刷新键是无法点击的,这也是备份这个时刻文件的原因,以避免后续建模出错无法回档的问题。但以上仅是我认为最为保险的方法,可能软件本身不是这样操作的,但我还未能找到解决的根本办法。

然后先介绍一下BCB中对于模型尺寸和配筋的功能。在选择BCB分组类型的菜单下可以看到各种参数输入选项,包括尺寸、混凝土钢筋强度、保护层厚度、箍筋直径和间距、纵筋直径和个数等等应有尽有。同时还可以注意到下面有两个“Evaluate”,这个主要是根据输入的参数对构件的一些承载力进行计算,具体计算结果可见下面的“Element Group Settings”菜单,包括抗剪抗弯等都有。值得注意的是,我们在点击“Evaluate”之前可以看到下面菜单的“Connection Type”是15,点击后则变为22,22就是类似于固接,15类似于铰接,他计算之后会自动识别为固接类型。子菜单最下面还有填活荷载的功能,这个主要是加到板上面的。

相关参数调整

继续刚才的步骤。点击刷新键后,之前定义的分组类型等都会重新加载出来。这里我们可以发现之前的刷新键变味了一个红叉,点击红叉之前的组装就会取消,结构又恢复到了没有空隙的未组装的状态。以后每次需要调整构件参数时,都要先取消掉组装,再进行修改和再次组装,或者直接点击那个“Update”更新模型。

然后我们可以进入前处理工具的子菜单下,可以一个个点击,也可以直接点“Do All……”,具体每个键的功能可自行去BCB用户手册了解。前处理工具中有一个“Discretize”,主要是单元划分用,可以使打单员划分为小单元,按理说单元越小模拟效果越好,但是也会越卡。

这时候再点击“Build”,发现又没反应了,总之没反应就重复刚才添加刚体世界那一步就可以。主要也是刚才保存那一步打乱了一下顺序,但目的是达到了。

前处理+组装完成

这里基本上就算模型建立完成了。

继续上一步。点击“Simulate”键,模型会自动进入后续时间段的一个分析,可以看到随着时间的进行,模型基本是没变化的。

然后我们将板的荷载设为1800,注意这里的单位是kg/m2

之后再将荷载调为2500。

2500荷载下

模拟效果还算可以,部分柱由于受到挤压力所以有一点上跳,但趋势还算可以。

将第一层的柱删去一些,可以模拟一些情况下的坍塌情况,板荷载定为200。

删去柱

可以看到删去构件后,结构也有着坍塌的趋势。

模拟地震坍塌是BCB的一个最为重要的内容,地震波的设置在前处理工具中,默认是不加地震波的,这里可以将参数调为图中所示。同时也可以导入地震波的csv文件,比较简单在这里不作展示。

添加地震波界面

地震坍塌结果 可以看到结构在地震作用下几近坍塌。

通过上述描述我们可以看到,Blender模拟地震倒塌的过程是有一定繁琐程度的,而BCB插件内的功能由于界面比较简单,选项较少,所以主要耗费时间的步骤依然是建模。因此这里特别介绍关于使用Blender的文本编辑器进行Py脚本的运行,以达到快速建模目的的具体流程。

首先需要明确几个地方,当我们的鼠标在Blender界面某个选项处停留时,Blender会自动显示出适用该选项的代码,这也是我们获取代码的途径之一。但还有更为直接的办法,首先我们点击左下角的界面菜单并选择“信息”,我们在物体界面所进行的所有操作都会在信息面板记录,比如我在这里添加一个立方体并进行移动,信息面板便会记录如图所示的内容。

信息面板

介绍完信息面板,我们可以通过同样的菜单找到“文本编辑器”,在文本编辑器中可以进行文件的打开,并选择运行脚本,之后物体界面便会出现我们代码中编辑的模型。

文本编辑器

上一节已经提到了代码文字的部分来源,但是这些代码如果直接用到脚本文件编写中可能会出现各种问题,这一点我之前就有所发现,主要体现在编写的逻辑非常奇怪,例如修改物体各方向维度,即各边边长时,是无法通过一条代码直接修改三个方向的维度的,及时我在软件界面操作后复制“信息”面板的内容也是经常会出现问题。同时Blender的代码还会有一个先后顺序问题,例如我想添加某一物体进某一分组,这在“信息”面板中显示的代码非常简单,就是:

“bpy.ops.object.group_link(group=’XXX’)”

但是我们会发现这条代码并不会定向指示哪一个物体进行操作,因为他没有描述物体名称的地方给你修改,他会直接将你上一条代码中所创建的物体进行分组,也就是说我们建好一个物体后必须立即进行分组。当然这只是我目前的一些猜测,完全有可能有一条代码能定向指定某一物体进行操作,但至少目前我未能从有限的资源中找到,而且也能通过其他方法解决这一问题,所以后续学习也是十分必要的。

目前我所尝试的代码内容具体包括:BCB的Element分组及命名,Blender构件的分组及命名,根据构件坐标及尺寸进行建模,将构件进行分组。这些基本上就是最简单建模的内容。至于其他的像BCB每一组的尺寸配筋等参数,其实直接在BCB界面进行修改更为便捷一些,但如果模型数量较多需要批量处理时也可以将尽可能多的过程写进去,但同样的问题,代码的逻辑不够清晰,所以需要花费时间进行查阅和调试,在此由于时间关系便不对其他内容进行编写。

以下是代码的具体内容。

Py代码

从以上也可以看到,建立一个具有准确坐标和尺寸的立方体的代码并不是简单的一两行可以完成的,虽然可能会有繁琐的地方,但至少运行起来是没有问题的。只要给出构件的数量、位置、尺寸,那我就可以通过数组读取的形式完成建模。

编写好代码后,在我们打开Blender时,先将开始界面的物体全部删去,然后再把左边菜单点进BCB界面,因为这样脚本中的BCB设置才会运行。之后打开左下角的菜单界面进入“文本编辑器”,打开指定文件并点击“运行脚本”,结果如图所示,完成建模。

建模结果

可以看到,所建的是简单的梁板柱模型,同时相应的分组也已经完成,后续只需进行BCB插件的简单操作,即可进行相关的动态模拟。

综上来看,Blender BCB的操作较为简单,流程清晰明了,模拟结果有一定的合理性与参考价值。但是Blender对于电脑的性能要求较高,虽然软件本身只有二三百兆,但是渲染出的文件常常高达几个G,而且在BCB进行前处理和Build组装时,如果构件较多,划分单元有比较小,经常会出现卡死或者长时间未响应的状况,至少我的电脑是这样的,所以建模时尽量不要建的过于冗杂。 而对于Py语言建模,单论其建模速度,真的比在界面操作更快吗?我觉得未必,甚至更慢,但毕竟涉及到语言,这就为日后参数化建模提供了可能,虽然目前我所编写的代码只有一点点内容,但相信在后面的不断补充下将会更新的越来越完善。

© 2022 -个人版权所有 粤ICP备2022097210号-1

粤公网安备 44010602010819号