首页 > 范文大全 > 正文

面向对象方法在参数化设计中的应用初探

开篇:润墨网以专业的文秘视角,为您筛选了一篇面向对象方法在参数化设计中的应用初探范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:面向对象是当前程序设计的重要方法,也是描述现实问题的有效思想,通过对面向对象在参数化建筑设计中的两个应用实例的介绍,进而阐释其优势及应用潜力。

关键词:面向对象 参数化设计 面向过程 音乐厅设计

1.程序设计中的“面向过程”与“面向对象”

参数化设计是当代重要的建筑设计方法,能够帮助建筑师获得多解的设计方案,创造新奇的建筑形体,减轻工作负担。在参数化设计中,“将建筑看作众多外部及内在因素综合作用的复杂系统”,把影响设计的因素看成参变量,通过计算机语言构筑参数间的一系列作用规则(即“规则系统”),建立参数化模型,进而生成建筑体量、空间或结构,并可通过改变参变量获得多解动态的设计方案。在这一过程中,“规则系统”的构筑是核心步骤,而要精确地抽象并描述“规则系统”则必须依赖于合适的计算机语言,因此参数化设计必然要学习参照计算机程序设计中的思想方法。

在计算机程序设计中,“面向过程”和“面向对象”是两种最重要的思想方法。“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想,起源较早,它的核心思路是分析出解决问题所需要的步骤,然后通过编写函数分别实现这些步骤,使用时依次调用函数从而解决整个问题。这种方法思路清晰,能够有效应对许多问题。然而随着性能的不断提高,计算机被用于解决越来越复杂的问题,“面向过程”逐渐无法胜任,随之而来的是“面向对象”思想方法的兴起。“面向对象”(Object Oriented)方法放弃了对过程的抽象,而将现实世界看成一个相互关联、相互作用的复杂系统,系统中的事物被抽象成“对象”(Object),相似的对象从属于“类”(Class),对象的特征用“属性”(Attribute)标示,相互关系则被抽象成“消息”(Message)与“方法”(Method),进而实现对整个系统的抽象与建模。时至今日,面向对象已不仅仅是一种编程方法,更是我们抽象与描述问题的新视角。

以上两种编程思想均能应用于参数化建筑设计,下面通过一个简单的例子说明它们的应用方法与特点。

2.应用案例

2.1应用案例1:不规则立面开窗

不规则开窗是当代建筑立面的常用手法,可通过参数化设计的方式编写程序自动生成,快速获得多种形态的方案并减少建筑师的工作量。我们以妹岛和世设计的德国关税同盟设计学院(图1)为例,并将问题抽象为在30m×30m的建筑立面上以20个点为中心分别开不规则方形窗户,窗洞尺寸不小于1m且不大于5m,窗洞间不能互相重叠且不能超出立面边界(图2)。

解决以上问题的常规思路是采用“面向过程”的方法,逐一添加随机尺寸的窗户,每添加一个窗户都与立面边界和既有窗户进行重叠检测,如重叠则以随机比例缩小窗户,直到其与立面边界和其他任何窗户都不重叠为止(图3)。这种方法能生成一些符合要求的方案,但也可能出现无解的情况:如图4所示,由于既有窗户的尺寸过大侵占了其他窗户的“空间”,后续窗户无法在1-5m的范围内选择尺寸避免与其重叠,导致了无解。可见,这一看似简单的问题却很难采用“面向过程”的方法进行抽象与描述。

我们也可以换一种思路解决以上问题(图5),即采用“面向对象”的方法,将所有窗户看作一“类”事物(类名为“窗户”),这类事物具有“中心点”、“宽度”、“高度”和“相交关系”四项“属性”,以及“随机缩小”和“相交判断”两种可能发生的行为(被称作“方法”,这些属性与方法的具体含义详见图5),从而完成对系统中“类”的抽象与定义。然后分别以给定的20个点作为“中心点”,1-5m间的随机数组作为“宽度”和“高度”,生成从属于“窗户”类的20个具体的窗户实例(被称作“对象”),并分别计算每一个窗户是否与立面边界或其他窗户重叠,记录在该对象的“相交关系”属性中,这样便生成了20个属性完整的窗户对象,作为系统的初始状态(被称为“初始化”过程)。接下来进入“事件响应”阶段:“消息池”每次对重叠数量最多的窗户发送“消息”,使它和与它重叠的窗户分别执行“随机缩小”方法和“相交判断”方法,并更新“相交关系”属性。重复以上过程,直到所有对象的“相交关系”属性均变为空集,“消息池”便不会再向任何窗户发送“消息”,这时即获得所有窗户均不重叠的立面方案(图6)。这种方法更精准地描述了设计要求,因而能够保证获得有效的方案。

2.2应用案例2:音乐厅参数化设计模型

2.2.1基于“面向过程”方法的音乐厅参数化模型

为了优化音乐厅的设计流程,减少技术错误及反复修改的工作量,笔者试图使用计算机语言描述音乐厅建筑的规则系统,建立智能联动的参数化模型,用户可通过改变输入参数获取多解的设计方案,并能确保其功能与技术符合设计要求(图7,8)。基于对音乐厅设计流程的认识,笔者很自然地尝试了面向过程的方法,以Grasshopper为平台,其具体实现步骤如下:1)以观众厅的长、宽、高及舞台的长、宽、高为参数建立音乐厅的基本体型;2)基于已生成的墙体和每排座椅视线升起值(C值)、座椅排距、视点位置等参数确定门的位置、走廊位置、池座剖面形态等;3)基于已生成的墙体、池座剖面及走廊位置等参数确定池座座椅排布;4)基于已生成的墙体、楼座排数、排距等参数确定楼座座椅排布(图9)。

以上步骤忠实地反映了音乐厅的设计过程,获得了能够“一改皆改、智能联动”的参数化模型,部分实现了原本的设想,但同时也暴露了以下问题。

(1)音乐厅有诸多类型,不同类型对应了不尽相同的规则系统,因此程序实现的每一步“过程”也均有不同的可能性。如果对每一步所涉及的所有可能性均进行枚举,则会造成编程量的“组合爆炸”(系统可能性总数等于每步过程可能性数量的乘积),很难实现;而如果按照目前的开发方式,每一个“过程”仅对应其一种可能性,那么程序便只能代表某种特定的音乐厅类型(如本例应对了舞台位于尽端的鞋盒形音乐厅),其灵活性和可修改范围非常有限(不可能旋转墙体角度、不可能移动舞台、不可能改变座椅排布曲线等)。这极大地限制了模型的实用性和设计中的灵活性。

(2)基于面向过程方法的程序是按照严格的“次序”执行的,因此用户只能修改位于上游的“参数”(即输入端:长、宽、高、排距等)调整系统,而不能对位居下游的建筑构件进行直接修改(如不能拖动墙体、改变走廊位置、改变包厢形状等),这不符合建筑师的设计习惯,使得程序无法真正在设计推敲阶段发挥作用。

除此之外,程序编写中所涉及的构件需要依赖于其上游的构件参数或信息,导致程序的书写思路错综复杂,难以梳理;任何一个参数发生更改,哪怕是微小的局部修改都要对整个系统进行刷新计算。程序的执行效率较低。

2.2.2基于“面向对象”方法的音乐厅参数化模型

在使用面向过程方法“山穷水尽”后,笔者尝试采用面向对象的方法建立音乐厅参数化模型,其基本架构如下(图10)。

(1)定义“类”。本程序定义了音乐厅中最基本的六“类”构件,分别是“墙”类、“舞台”类、“门”类、“走廊”类、“包厢”类和“座椅”类。它们都具有不同的属性和方法(图11)。

(2)定义“关联系统”。此处“关联”指的是某一对象执行某种方法后,其他对象需要相应执行的方法。例如,音乐厅中某一墙体的移动会使与它相邻的墙体相应地旋转和缩放,以保持墙体连续闭合;会使舞台相应地缩放,以保证位于厅堂内部;会使墙体上的门相应地移动,以保持门位于墙上;会使座椅重新排布,以适应新的厅堂形式等。类似地,我们需要对系统中任意两个类之间的“关联”进行定义,形成“关联系统”(图12)。在“不规则立面开窗”一例中,因问题比较简单,我们将“定义关联”的步骤作为“定义类”的一部分;而对本例,由于系统较为复杂,有必要将“定义关联”独立出来,使系统架构更加清晰。

(3)设计“初始化”过程。根据厅堂尺寸、舞台形式等相关参数生成具体的建筑构件(即“对象”):4个“墙”对象、1个“舞台”对象、8个“门”对象、6个“走廊”对象、1个包厢对象及2个“座椅”对象。这些构件共同构成了音乐厅的初始形体(图13)。

(4)设计“事件响应”机制。当用户修改某一对象时,消息池会接收指令并向被修改对象发送相应的消息,令其完成用户指定的操作。操作完成后,消息池会向“关联系统”发送消息,“关联系统”按照对象间的关联回馈其他对象所应相应执行的方法,消息池再令这些对象执行该操作。操作完成后再向“关联系统”询问下一步应该相应执行操作的对象。事件响应机制如“链式反应”般传递下去,直到没有对象需要执行操作为止,这时便完成了对整个系统的修改(具体的机制见图14,修改结果见图15)。正是通过这种“链式反应”般的传递响应机制,我们只需定义好系统中每两个类之间的“关联”,即可完成对系统中所有对象相互关系的描述,进而拼合出整个系统的规则。

另外,由于我们希望用户能够直接对系统中的任意建筑构件进行更改操作,因此必须建立“用户交互系统”接收用户的指令。因其与面向对象的方法关系不大,不在此详述。

由以上几部分组成的基于“面向对象”方法的音乐厅参数化模型克服了基于“面向过程”方法模型的问题与不足,其优势体现在以下几方面。

(1)模型具有相当大的修改灵活性。使用“面向对象”方法描述规则系统,只需枚举清楚任意两个类之间的关系即可涵盖系统的所有可能性,不会出现“组合爆炸”的情况(系统的可能性总数等于任意两个类之间的关系可能性数量相加,而不是乘积),因此编程量较小,以一个模型涵盖多种音乐厅类型具有可实现性(图16)。

(2)由于系统不存在“等级次序”,无论用户对构件进行何种修改,系统都能进行相应的改变。这样的使用方式更贴近设计过程,交互性强,使得模型有可能被用于方案推敲阶段。

除此之外,相较于“面向过程”的方法,基于“面向对象”方法开发的模型思路更为清晰,容易拓展;局部修改只需重新计算相关部分而不需要刷新整体,程序效率更高。

由此可见,在“建立音乐厅参数化设计模型”这一较为复杂的问题中,“面向对象”方法的优势是明显的。事实上,当我们采用“面向对象”方法解决其他复杂建筑问题时,以上优势仍然会存在。因此,我们应将“面向对象”视作抽象和描述建筑规则系统的有力方法,在未来的参数化设计中进行更为广泛的尝试和应用。

3.结论与展望

总体来看,相比“面向过程”方法,在参数化设计中使用“面向对象”方法能够对建筑这一复杂系统的规则进行更精准的抽象与描述,使程序具有更强的灵活性、更友好的用户交互性、更清晰的思路以及更高的执行效率。因此,这种方法在参数化设计中具有很强的应用潜力。

根据文中的两个实例我们不难归纳得到一套通用的程序架构(图17),基于这套架构我们能够使用面向对象方法精确地描述复杂建筑问题的规则系统。未来可以此为基础,开发针对某一特定建筑类型的参数化设计工具。以笔者研究的音乐厅为例,虽然不同音乐厅的外形与空间形式存在差异,但它们却都遵循类似的功能要求和技术规范,这正是参数化设计语境中的“规则系统”。基于面向对象的方法能够对其进行精确描述,并在完善用户交互、异常处理机制等辅助系统后。使得设计师可对建筑的任意构件进行修改,整个方案都能按照“规则系统”的设定进行相应调整,从而保证方案满足功能、技术等各方面的要求,同时减少设计师重复修改的工作量。这一思路使参数化设计能够获得更贴近实际建筑设计流程的应用