杨成龙, 李 早, 王德才
(合肥工业大学 建筑与艺术学院,安徽 合肥 230601)
徽州传统建筑受制于特殊的地理人文环境,形成了别具一格的风貌特征,其中民居建筑作为日常宅居生活之所数量众多,其余多种类型建筑皆由此派生[1]。近年来,传统村落的空间肌理以及风貌要素的传承得到重视,越来越多的专家学者对此展开研究,并且试图通过新的技术、新的方法更有效率地传承风貌[2]。新兴技术与传统建筑的碰撞,在某种程度上体现了对传统文化的传承与发展,因此对于徽州民居的快速生成研究就显得更加重要。
从建筑学的视角来看,在建筑参数化蓬勃发展的时代,数字化与建筑本身的结合是新的方向[3],数字化能够利用CityEngine软件对村落肌理进行重构,研究村落肌理的快速生成逻辑,并在此基础上与原有村落进行对比[4];文献[5]运用Java语言对徽州村落进行模拟,并针对建筑的结构与表皮优化生成;文献[6]利用Python编程语言结合Grasshopper平台进行空间演绎,研究空间的削减、位移与重新组合等内容。其中与古建筑结合最为常见的是Revit平台,以及与之结合的dynamo插件,在此基础上可以搭建古建模型以及整理构件库[7],甚至形成信息管理平台[8],以期为传统建筑的保护寻找新的方向。当建筑设计与编程语言结合时,应当考虑其使用范围及难易程度,而Grasshopper作为建筑学领域参数化研究应用最为广泛的平台,可为传统建筑的保护提供一定的技术支持。把徽州传统民居建筑与GhPython结合去探索快速生成方法,是一种新的思路、新的探索。
徽州民居的主体一般是由天井和居住单元围合而成,该形式便于组合,从而形成多种平面形式,徽州传统民居常见型制如图1所示。
图1 徽州传统民居常见型制
外立面几乎没有窗户,仅有防火用的孔洞。其主要的采光来源于天井以及部分高侧孔洞。徽州民居立面最显著的特征是层层叠落的封火山墙,并且随着建筑单体空间组合的不同,马头墙的形式也有丰富的变化,除了最常见的叠落式,也会出现折线甚至是弧形马头墙。细部构造也是民居建筑比较重视的部分,如门头、三雕等。墙脊的线状,大门、窗洞的点状,在大片粉墙的面状环境下形成外部黑白灰的色彩基调和点、线、面的形体组合,与自然山水融为一体[9]。
(1)总体尺寸关系。本文对徽州40户传统民居进行测绘与描绘,选取其中形式完整的35户作为样本,可以看到其形式有着明显的规律性。其中部分民居明显是由2种形式拼合而成,并且2个部分都有各自的出入口,因此将其拆分并分别归类整理。凹型平面的进深一般为7~10 m,回型平面的进深一般为10~14 m之间,日型平面的进深一般在16 m以上。H型平面数量较少,但结合其平面型制以及各模块的尺寸数据也可看出,H型平面的进深一般为14~17 m。徽州传统民居进深数据如图2所示。
图2 徽州传统民居型制进深关系
从图2可以看出:当进深不超过9 m时,一般为凹型平面;当进深继续增加且不超过14 m时,一般为回型平面;当进深超过14 m时,一般为日型平面或H型平面,其中H型多不超过17 m;当进深继续增加以致超过20 m时,一般为H型与凹型、回型的组合式,或者日型与凹型、回型的组合式。同时从凹型、回型、日型、H型的平面型制中也可以看出,随着进深的增加,主要是模块数量的增加导致平面型制的变化。因此应该进一步研究其内部模块之间的连接关系、尺寸等要素特征。
徽州传统民居的面宽与平面型制没有明显的关联性。从统计的数据来看,传统民居的面宽主要集中在7~14 m,只有极少数民居的面宽达到了15 m,超过17 m的只有1户,并且更为明显的是传统民居面宽在9~11 m之间的比例约为75%,其面宽数据如图3所示。因此可以认为,当基地面宽超过11 m后,大多数会采用组合式型制,并且在实际测绘的过程中,也能够发现类似情况。
图3 徽州传统民居型制与面宽关系
(2)功能模块尺寸关系。徽州传统民居最主要的功能模块有堂屋、天井、卧室、楼梯间、走道、储藏间等,其中储藏间一般位于天井两侧与卧室紧邻,其尺寸一般由天井和卧室确定;楼梯间一般与堂屋结合,两侧或一侧留出过道;走道形状不固定,一般在天井与堂屋之间,并且能够联系卧室。
对徽州35户传统民居测绘图纸相关功能模块的数据分析可以看出,堂屋模块的面宽一般在3.0~6.5 m之间,尤其明显的集中在4.0~5.0 m之间,进深尺寸与面宽尺寸差距不大,一般在3.0~5.5 m之间,尺寸的聚集程度不如面宽明显;卧室模块的面宽更明显地集中在2.0~3.5 m之间,进深与堂屋模块基本持平,这从传统民居平面型制上也可以看出。徽州传统民居模块尺寸如图4所示。
图4 徽州传统民居模块尺寸
天井模块的尺寸波动较大,面宽一般在2.0 m以上,并且面宽超过7.0 m的也较多,天井的面宽主要视民居整体面宽而定,但实际情况下天井两侧一般有储藏空间,或者天井两侧留有走道的宽度;天井模块的进深多数不超过4 m,且1~3 m之间数量略多,并且进深尺寸一般不超过堂屋或者卧室的进深。
从传统民居平面型制可以看出,多数楼梯间与堂屋结合使用,因此楼梯间进深一般与堂屋相当,两侧或者一侧预留走道,而楼梯间的面宽一般为0.7~2.0 m之间,更多集中在1.0 m左右;走道的宽度一般在0.7~1.5 m之间,并且走道一般在堂屋与天井之间,连接卧室、储藏间等模块。储藏间一般位于天井两侧与卧室紧邻,因此其尺寸基本根据其他模块而定。
以此为基础进行自生成研究时,考虑到计算机生成结果的有限性以及传统建筑的模数制,可以选择0.3 m为单位在相关区间渐次叠加。
(1)屋面形式。徽州传统民居的屋面通常由正房和侧面的厢房或走道组成,由于天井的存在,正房(堂屋)屋面一般是双坡,而位于天井两侧的走道处的屋顶一般为单坡。天井两侧的屋顶一般比正方屋顶高度低,这也和马头墙高低错落的形式相统一。除此以外,因为平面型制的不同,可能有多个堂屋(或者过厅)、天井同时存在,所以也会有双坡、单坡交替出现的情况。
传统民居屋面的生成过程中要考虑与平面的关系,主要应该考虑坡度的影响,坡度可以将水平方向上的进深与屋架高度联系起来。对徽州35户民居的测绘图纸进行总结分析,并提取相关数据,经过计算发现,传统民居屋顶坡度存在一定的规律性,其中多数民居正房屋顶的坡度在0.4~0.6之间,而走道(天井两侧)坡度在0.3~0.5之间,相关数据如图5所示。在功能模块的尺寸以及屋顶斜率已经确定的基础上,可以将平面尺寸与两层层高相结合后用数学关系表达出屋顶高度。
图5 徽州传统民居正房与走道屋顶坡度
(2)墙面形式。马头墙是徽州传统民居建筑的典型特征,其产生的韵律感是徽州的一道靓丽风景线。在徽州民居调研过程中发现,马头墙形式虽然多样,但是总体主要分为阶梯形、弧形和尖顶(硬山半马)3类,其中阶梯形马头墙所占比重最大。阶梯形马头墙又可分为对称形和不对称形,并且随着房屋进深的变化马头墙的阶数也会产生变化。
从平面对照来看,马头墙的形式也有一定的规律性。侧立面与天井相对位置的马头墙一般较为低矮,且宽度与天井进深相当,并且马头墙最高处一般与堂屋或者过厅对应;正立面马头墙一般呈凹型,且两侧高度一般与相邻的侧面马头墙高度一致,当然不排除个例。
对35户民居的测绘图纸进行总结分析,并将不同平面型制下的马头墙各阶高差与屋面坡度进行对比,发现在所有型制的民居中有75%左右的建筑,最高阶两侧马头墙高度一致。
进一步寻找马头墙最高阶与屋顶正脊之间的高差关系。根据统计发现90%以上民居建筑屋顶正脊与最高阶马头墙之间的高差在0.8 m以内,约有40%的民居建筑屋顶正脊与最高阶马头墙之间仅差了马头墙顶部墙脊的高度(此时差值记为0),如图6a所示。
由于天井对应处马头墙宽度与天井进深相当,需要研究马头墙最高阶与其他阶之间的比例。通过对测绘图纸的总结分析,发现马头墙最高阶的宽度一般在3~6 m之间,而和与之相邻马头墙宽度的比值在3~6之间,并且呈现明显的正相关,如图6b所示。
图6 徽州传统民居马头墙宽度逻辑
通过对测绘图纸的总结分析,可选择适当的比例、尺寸等数据,根据进深关系设定屋顶高度范围,并确定马头墙的阶数以及高度,使得马头墙的整体形式更加自然。徽州民居马头墙上面一般有青瓦覆盖形成墙脊,墙脊往往在沿墙身厚度方向挑出墙面,与坐头、墙面共同构成徽州独具特色的马头墙形式。墙脊宽度略大于马头墙厚度,墙脊的长度随马头墙各阶宽度的变化而变化,位置也由马头墙而定。
用相关参数控制整个生成过程便于调控结果,是自生成研究的核心思路。进行徽州传统民居自生成研究时,根据把建筑语言转化为计算机语言一般做法的讨论,需要对建筑概念进行抽象化处理,因此可以先把基本模块做矩形处理,再根据传统民居的平面关系,将堂屋、天井、走道、卧室、等功能模块分别表示,见表1所列。
表1 徽州民居的简化处理与相关参数
(1)模块的基本定义与组合规则。在定义模块时,要根据形状的不同选择不同的定义方式,其中最基本的方式是用点生成形体。选择堂屋为生成中心,同时以原点为定位点,点是在Grasshopper中的Python语言通过调用rhinoscriptsyntax指令包实现的,这样所定义的点(rs.AddPoint)可以直接在rhino坐标轴中显示,如图7a所示。矩形模块则需要用包含了坐标信息的“点”去定位,并且矩形中包含的点和线都按照逆时针方向生成编号,如图7b所示。
调用Grasshopper中的矩形(Rectangle)模块,并结合空间向量作为平面生成过程中的固定模块,矩形的长和宽分别表示模块的进深与面宽,其中各功能模块的进深与面宽由前述总结得到。在进行模块组合叠加时还需要调用炸开、起始点、终止点、距离等命令作为运算的变量,并选择生成的矩形某条边上的点作为连接点,进行其他模块的生成,如图7c所示。
图7 Python中定义与连接规则
一些比较特殊的模块(如走道模块)是由相邻的功能模块围合而成,因此需要在其他模块生成,且在外围护结构生成之后才能确定。
(2)平面形式的选择。结合前述对于平面型制即尺寸的分析总结,发现当进深不超过9 m时,一般为凹型平面;当进深继续增加且不超过14 m时,一般为回型平面;当进深超过14 m时,一般为日型平面或H型平面,其中H型多不超过17 m;当进深继续增加以致超过20 m时,一般为H型与凹型、回型的组合式,或者日型与凹型、回型的组合式。随着进深的增加,主要是模块数量的增加导致平面型制的变化。
用Python语言处理形体参数时要考虑到运算量的问题,模块越多运算量越大,因此在编写过程中也考虑了对部分模块的合并,例如楼梯间模块一般在堂屋中靠后的位置,因此可以先不考虑楼梯间,在生成堂屋后于生成结果中重新置入,同理天井两侧的储藏间也如此处理,如图8所示。
图8 Python语言中模块的简化与重新置入
后续实验过程中随机选择了3种型制进行生成,并对堂屋内部置入楼梯间模块,以及天井两侧预留出走道后置入储藏间模块的置入方式进行表达。Python语言基本型生成规则如图9所示。
图9 Python语言基本型生成规则
(3)屋面的生成。屋面的生成逻辑与平面紧密相关,徽州传统民居因其特殊的型制,屋面一般分为正房屋面和侧面走道屋面,其中正房屋面一般为双坡顶,而走道(储藏)上空的屋面一般是单坡顶,并且两者正交。屋面的高度一般由进深和斜率决定,根据前面的概括总结,发现多数民居正房屋顶的坡度在0.4~0.6之间,而走道(天井两侧)坡度在0.3~0.5之间。正房屋面一般延伸至走道上空,留出天井位置,因此在上节生成平面的基础上,调取正房的进深以及走道的宽度作为屋架进深,正房屋顶逻辑如图10a所示。结合坡度得到一般的正房屋顶高差表达式为:
正房屋顶高差=(堂屋进深+走道进深)×正房屋顶坡度。
一般情况下,徽州传统民居1层较高,多数超过3 m,2层略低于1层。天井两侧屋面坡度在0.3~0.5之间。平面生成后,前述对部分模块进行了合并操作,因此需要计算天井到山墙的距离作为生成基数,在写入Python时可以考虑用点到直线的距离(gh.CurveClosestPoint)表示:
侧面屋顶高差=天井到山墙的距离×走道屋顶坡度。
走道屋顶逻辑如图10b所示。
图10 正房及走道屋顶尺寸逻辑关系
对不同型制下传统民居的屋面进行生成研究,随机选择其中3种型制进行结果呈现,屋面形式与平面型制相仿,堂屋正上方一般为双坡顶,与天井两侧的单坡顶交替出现。相同型制甚至是相同基地的情况下,由于模块尺寸的变化,屋顶也随之改变。Python屋顶生成结果如图11所示。
图11 Python屋顶生成
(4)墙面的生成。徽州传统民居马头墙形式是墙面自生成的关键。徽州传统民居的马头墙主要有阶梯形、弧形和尖顶(硬山半马)3种形式,其中最常见的是阶梯形马头墙。马头墙的形式往往与平面型制有关,例如侧立面与天井相对位置的马头墙一般较为低矮,并且其宽度与天井进深相当。此外,马头墙最高阶的宽度一般也最宽,与其相邻侧马头墙宽度比多在1∶3~1∶6之间。
马头墙的尺寸与平面尺寸相关联,首先从生成的平面形式中调用传统民居的外轮廓,根据平面型制和进深确定侧面马头墙的阶数。一般凹型平面优先选择3阶马头墙,回型平面视进深选择3阶或者5阶,H型平面视进深选择3阶、5阶或者更多,而日型平面优先选择5阶及以上马头墙。不同平面型制首先根据天井所在位置对墙面进行分割,若剩余部分进深超过一定数值,则按照1∶4或者1∶5的比例继续进行分割。
正立面马头墙形式较为统一,多数情况下为3阶,中间低矮且宽度与天井开间相关,并且两侧的高度与相邻侧立面马头墙高度一致或略低。根据每阶的长度对外轮廓进行拆分重构。最后马头墙的高度由层高和屋面高度决定,由于每阶所处的位置不同,高度也有变化。最高阶马头墙一般高出屋面0.8 m以内,或者正房屋脊与最高阶平齐。而与最高阶相邻的马头墙一般低矮0.7~1.2 m。对徽州传统民居侧立面及正立面马头墙进行生成操作,墙面生成结果如图12所示。
图12 Python墙面生成
(5)生成结果。对凹型、回型、H型、日型分别进行程序编写,最后生成的模型中包含了各模块的尺寸数据、位置关系,建筑的层高,马头墙各阶的高度和宽度,屋顶的高度和坡度。徽州传统民居Python语言快速生成结果如图13所示。
(1)随着进深的增加,徽州传统民居的基本型制依次从凹型、回型、H型、日型逐渐变化,各型制尺寸分别为9 m以下、9~14 m、14~17 m、17~20 m,进深继续增加则产生组合型制。
(2)徽州传统民居主要模块有堂屋、卧室、天井、走道、楼梯间等,堂屋的面宽和进深主要集中在4.0~5.0 m和3.0~5.5 m之间;卧室的面宽主要集中在2.0~3.5 m之间,进深随堂屋变化;天井的面宽视民居整体面宽而定,进深多不超过4 m;楼梯间的宽度多集中在1 m左右;走道的宽度一般在0.7~1.5 m之间。
(3)徽州传统民居正房屋顶坡度多在0.4~0.6之间,而走道屋顶坡度多在0.3~0.5之间。
(4)徽州传统民居建筑屋顶正脊与最高阶马头墙之间的高差多在0.8 m以内;马头墙最高阶宽度与相邻阶宽度的比值在3~6之间,且与最高阶的宽度呈现明显的正相关,其他阶的宽度与天井的进深相关。
(5)在Python中对模块简化处理,用点定位生成模块,根据各功能模块尺寸、数量、位置等条件,进行连接设定。
(6)结合立面马头墙韵律的数学逻辑,以及与平面的对应关系在Grasshopper平台上运用Python语言编程生成,随后结合平立面对快速生成的民居进行展示。
不同于以往针对徽州村落的计算机生成模式,本文针对单体型制,从功能模块的角度,采用量化解析的方法探究个体的生成规律; 有别于传统的JAVA语言生成方法,本文采用GhPython语言把传统民居与Grasshopper平台结合起来,提供了建筑生成的更多可能性。
对于徽州传统民居特征的数字化总结,有利于通过计算机程序进行快速生成,Grasshopper与Python语言的结合更加适用于建筑学,可以提高传统民居的重建、现代民居的新建效率。在此基础上,还可以把程序与不规则的地形条件结合寻找更加广泛的适用领域。