摘要:在三维引擎的模型使用策略中,目前各行业所使用的方法几乎都是采用3D软件(如3Dmax、Maya)提前构建模型,然后将模型导入3D引擎(如Webgl、Unity3d、VirTool、UnrealEnegineing),大多数缺少对即时环境的考虑。基于静态地构建建筑结构仿真的局限,从而提出了动态构建模式(DCM)的方法,对项目工程中所使用的实时构建模型的需求进行研究,并成功地运用到相关项目中得到验证,得出实现这一模式的方法。
关键词:三维引擎;建筑结构;动态;室内
动态构建模式(DCM)即在项目运行过程中动态创建模型,包括对模型的3D空间的计算、表面结构的计算,材质和贴图的处理以及相互关系的处理等几个维度。[1]
本文基于3D图形学基本原理,利用游戏引擎(如Unity3d、UnrealEnging)进行动态模型的场景,并结合室内建筑结构的特点[2],创造性地对墙面、地面、吊顶、门窗、贴脚的动态实现方法进行研究,并应用于实际项目,进行可行性验证,从而得出室内建筑的设计、效率、质量、维护性等方面比原有的设计方式更加人性化,更适合工程标准化的特点[3]。
1动态构建模型(DCM)的空间研究
1.1三维模型空间位置原理
关于三维模型构造世界空间关系的问题,我们必须要讨论一下空间索引的方法[4]。索引算法很多,主要使用的是八叉树(Octree)索引算法,如图1。
八叉树是三维空间划分的数据结构之一,它用于加速空间查询,三维模型的元素在空间的存在关系,正是利用八叉树确定之间的关系。
1.2三维物体顶点构成原理
三维物体是由基本元素点(Point)、线(Line)、面(Face)构建的模型。利用矢量算法,对空间(Space)的位置度量进行计算,空间的表示方法通常有三个轴向:左右(x)、前后(y)、上下(z)。三维模型中,一般使用三个点作为一组数据构成一个角面,然后根据节点关系得出该组三维信息的索引信息,该索引信息作为图像的计算依据[5]。
2三维物体创建过程研究
2.1三维物体顶点坐标索引
三维物体的面由三角面构成,故一个四边面一共有两个三角面,从而会有两组三角顶点信息。一个正方体有八个顶点,如果要构成一个正方体的面,就有12组三角顶点信息,除去重叠的12个节点,共计24个顶点信息,这种情况称为顶点的冗余计算。
2.2三维物体UV信息索引
三维物体的表面渲染存在面的方向问题,也就是法线,表现为正面能看见,反面不能看见,三角形的渲染顺序与三角形的正面法线呈左手螺旋定则,如图2。采用k→k+2→k+3的方法组合三角面的方向,就能保证三角面法线方向朝外。
每一个UV信息和三角面的顶点对应,0,1分别代表贴图的U和V两个方向的比例,比如,0代表贴图某一方向起始位置,1代表贴图某一方向的结束位置。采用以下模式存入各个三角点对应的列表位置。
uv()=(0,0),(0,1),(1,1),(1,0)…(1)
3建筑结构的动态构建研究
3.1主体结构的实现方法
在对建筑主体进行构建时,采用墙体绘制—生成墙体和地面的方法。墙体绘制时,首先确定各个角点,每一面墙体都是一个box,实质就是一个六面体,将这个六面体的各个顶点和面按照上述方法进行建模,然后进行组合。在绘制时会对这个box进行动态运算,达到绘制时跟随鼠标伸缩的效果。
墙的类型分为A型和B型两类,A型墙是单朝向,B型墙是共墙,需要有两个朝向。
3.2转角的实现方法
墙体是由box构成,box是有厚度的,所以在实际创建时会导致交接的部位有缺口。如图3,同时模型的表面会重叠,影响表现效果。
解决的办法是先求出∠O的角度,然后根据角度对转角模型进行切割运算,实现两面墙体的完美结合。
当∠O=90°时,延长墙面的外墙线,两面墙的外墙线的交点就是墙面外墙的最长点,内墙面的交点就是墙面的最短点,沿着这两点就可以实现墙体的切割。
当∠O=90°时,需要通过系列运算方法得出角度大小[9]。
首先需要求出两面墙的斜率k,其中y1,y2代表墙面两个端点的y轴值,x1,x2代表墙面两个端点x轴值。然后根据两面墙的斜率,就可以得到夹角的值。
tanO=k1-k21+k1k2(2)
tanO=>∠O(3)
3.3顶和地面的实现方法
当检测到区域封闭的时候,开始计算顶部和地面的模型。首先判断每个区域的首位点是否重叠,如果重叠确认为一个封闭空间,根据每个空间的整体形状,判断中心点,确定每面墙设置朝向。
3.4门窗结构的实现方法
确定门窗的位置和大小:确定了墙面的方向后,需要在墙体上进行门窗开孔,在2D视图中先确定门窗的长宽高和位置,然后重新计算墙体的尺寸大小,[10]墙面长度是需要除去墙面厚度的修正值。
通过分割墙体计算门窗开孔:计算时对每一面墙按照方向确定起始和计算位置。如0代表起始点,1代表结束位置。如pos表示墙面位置,width表示墙面的宽度,门的开洞计算方式如:
pos(walla)=0+width(walla)(4)
方向的切换简化计算难度:每面墙的各个分块确定后,用初始的方向开始建模,模型建立完毕,按照墙面已经保存的方向还原到初始的方向。
4贴脚的实现
确定贴脚的长度:因为墙面都是box,具有厚度,所以在处理贴脚这种模型时要减去墙面的厚度,将贴脚附着在前面的内侧墙面之上。墙面的贴脚分两种情况,即阴贴脚和阳贴脚。阴贴脚就是区域空间的内面,这时候贴脚的长度小于墙面的实际长度。而如果是阳脚,贴脚会贴在墙面的外面,贴脚的长度会大于墙面的实际长度。采用的方式为墙面长度减去墙面厚度。
确定贴脚的位置:由于贴脚的长度和墙面的长度并不一致,所以贴脚的位置和墙面也有一定的差异。如果是阳贴脚就和墙面同向的位置一致,如果是阴贴脚就用墙面的位置除去墙面厚度的12,然后和墙面中部对齐。
处理贴脚转角点造型:贴脚在墙角的交接部位需要重新处理,否则模型会穿插而不正常。处理的办法是采用资源配合处理,也就是首先制作一个阴角和阳角的模型,在贴脚转角处加载该模型,并调整该贴脚转角的高度,完成与其他直线部分贴脚的吻合。
5仿真实验
5.1实验实施步骤
仿真实验以虚拟软件的形式进行、操作,主要进行墙体绘制、门窗的设置以及家具的摆放,模式包括2D视图、3D视图。2D视图主要用来进行平面布局,3D视图主要是用来查看效果。
5.2创建的建筑结构是否更合理和快捷
5.2.1自动生成墙体
墙体制作的方式首先选择绘制方式,可以分为区域绘制和线条绘制两种。接着就是在视图进行绘制,如图4。
图4顶视图绘制墙体
5.2.2自动生成地面和吊顶
墙体绘制完成后,开始判断墙体是否构成一个封闭空间。如果在一个封闭空间计算由这个封闭空间构成的区域,就可以生成地面和吊顶。
当墙面的交接处存在多面墙的交接时,这里采用递归的方式进行索引。当最后成功返回到第一面墙体时,我们说这些墙面构成了一个完整的空间。然后对这个空间进行box建模处理。[11]
5.3是否满足设计要求
5.3.1绘制的自动对齐
为了降低绘制墙体的难度,设置了自动对齐墙面的功能,从横向和纵向两个角度实时判断当前鼠标的位置是否和其他墙面的坐标对齐。设计首先就是要求仿真能满足可修改性。
5.3.2墙体的再编辑
墙体绘制完毕后,需要对其进行修改,包括以下方面:
修改墙体:在墙体上设置碰撞体,用户可以用鼠标拖动墙体。当拖动过程中,重新计算当前区域所有墙体的长度。用户也可以通过面板的方式设置墙体的长度。
删除墙体:点击墙体碰撞体,弹出删除墙体按钮。用户可以进行删除,之后,系统重新检测墙体是否构成完整的空间。
重新绘制墙体:重新绘制墙体就是在原有空间上添加墙体,用户在空间中的现有墙体找到两面墙的起点和终点,通过两面墙的点的x、y坐标检测墙体是否应该封闭。
5.3.3门窗的再编辑
门窗摆放完毕,进行进一步调整,其中包括位置和大小的调整。采用的方式就是利用门窗图标和墙体的x、y轴向位置。如果拖动门窗图标在墙体的范围内,门窗图标会沿墙体移动,反之,门窗图标就会完全跟随鼠标移动。当捕捉到新的墙面的时候,门窗图标会自动吸附到离光标最近的墙体位置,并保持和墙体一致。
结语
综上所述,动态构建室内建筑结构首先是从三维物体空间原理出发,计算出每一个节点元素的空间位置;其次根据室内建筑结构的特点,从墙面的创建到空间的识别和划分,再到门窗和贴脚等细节的处理,总结了要动态构建室内建筑结构需要的逻辑思路和具体实现路径[12]。通过本文分析,利用其原理,可以满足在室内仿真、设计等领域需要灵活处理建筑结构的需求,摆脱对固定模型的依赖,提高仿真效率的同时也让仿真的操作更具灵活性。
参考文献:
[1]廖浩宏,韦宇炜,刘强.工业仿真系统动态导入OBJ模型的研究与实现[J].计算机应用,2020,40(S1):161-164.
[2]SteveOmntngham.计算机图形学[M].石教英,潘志庚,译.北京:机械工业出版社,2008:83-85.
[3]Eisenback,JonathanD.1.Modelingandprinting3Dmodelsofnematodes[J].JournalofNematology,2023,55(1):30.
[4]王飞,张树生,白晓亮,等.拓扑和形状特征相结合的三维模型检索[J].计算机辅助设计与图形学学报,2008(01):99-103.
[5]邹英强,姚剑敏,林志贤,等.空间方位向量与包围体策略结合的3D模型拾取[J].光电工程,2015,42(04):49-55.
[6]李淑华.形状几何切割和对应的研究[D].大连:大连理工大学,2019.
[7]刘柯壮,贺体刚.基于Unity3d的mesh切割及优化[J].电子技术与软件工程,2019(06):63.
[8]袁玉波,汤伟,赵婷婷,等.一种基于Unity3D的三维体表面重构与渲染方法:CN105825471A[P].2016-08-03.
[9]孙立新,任美睿,黄明.计算几何算法在GIS图形分析中的应用[J].测绘工程,1997(04):30-35.
[10]柴蒙磊.基于单幅图像的三维发型建模技术及其应用[D].浙江:浙江大学,2017.
[11]陈煜,林玮.Web3D引擎中三维图形对象拾取的算法与实现[J].工程图学报,2011,32(06):82-88.
[12]宋福中.建筑工程装饰装修施工的关键技术分析[J].住宅与房地产,2020(24):115.
作者简介:陈世林(1977—),男,重庆人,硕士,讲师,研究方向:数字媒体技术、仿真游戏。