Interactive Architectural Modeling with Procedural Extrusions
Download
Report
Transcript Interactive Architectural Modeling with Procedural Extrusions
INTERACTIVE ARCHITECTURAL MODELING
WITH PROCEDURAL EXTRUSIONS
基于过程式挤出的交互式建筑建模
许鹏飞
简介
目的:
针对复杂建筑曲面的交互式的、基
于过程的建模系统
原因:
多级编辑,之前的编辑会根据随后的
编辑做相应调整
有利于大型场景建模
交互与过程结合,易与用户使用
简介
交互方式与基本定义
Plan: 建筑平面图
每一条边有对应的Profile
不同高度会发生变化
Profile: 轮廓线
单调上升,允许水平
简介
交互方式与基本定义
Overhangs: 屋檐
构建多条防止破坏profile的单调性
Anchors:锚点
Relative:在active plan上,到达指定高度则定位锚点
Absolute: 在初始平面上,垂直水平面做射线与指定高度的平面
的交点
插入边改变active plan
插入模型,丰富模型细节
简介
交互方式与基本定义
Plan Edits : 在特定高度修改plan
Forced steps:插入固定的边
Natural steps::提供一系列可插入的形状,自适应的
Modeling Larger Environments:大规模建模
Footprint根据环境赋予不同建筑类型
自动对建筑plan的边赋标签
length ∈ {short,medium,long}
orientation ∈ {street,side,back}
根据标签赋上对应类型的profile
基本思路
根据用户输入定义初始plan,profile,anchor等
维护一个从地基逐渐上升的sweep plane,其上的
plan称为active plan
Active plan在上升过程根据每条边对应的profile进
行挤出,并在发生profile改变方向,锚点插入,平面
相交等事件发生时更新active plan。
最终得到所有事件发生时的plan,也就得到了表达
整栋建筑模型的所有点
具体实现
定义
Plan: 将水平面分割为内外个区域,逆时针有向边包围图形内
部,顺时针表示洞
j
第j个多变形有n 个角点,第i个点为
与下一点构成边
每条边对应一个方向平面
,由角度θ限定
具体实现
定义
Profile:用来控制边对应的方向平面的角度
有m个点表示为ti
ti与ti+1的连线和垂线沿顺时针方向的角度定义为θ
且最终角大于0
具体实现
概要
输入:
Plan
Profile
Anchor
输出:
Architectural shell(3d mesh)
具体实现
主循环
具体实现
Plan data structure
角点链表
有指向前后点的指针,和前后边的指针
具体实现
事件
Generalized Intersection Event:通用相
交事件
Edge Direction Events:边方向事件
Profile Offset Events: 偏移事件
Anchor Events: 锚点事件
具体实现
Generalized intersection event
早期定义
边事件:边减为0 ,例1
分割事件:相邻面与另一不相邻面相交,例3
顶点事件:多于三个平面相交,例2
通用定义
都是顶点事件的变形
具体实现
Generalized intersection event
自动发生
拓扑的改变
在active plan 上拓扑的进行修改以保证不会发生自相交
事件检测
用膨胀边界的方法
问题:
多个平面汇聚在一点(水平的),在一定范围内要当做一个
事件处理
在近似同一高度上距离很远的两个相交事件可能互相干扰,
要收集做统一处理
具体实现
Generalized intersection event
聚类
取出相交事件,聚集事件发生的z值在一定阈值内的事件
再通过在xy平面的投影,找出距离阈值满足的事件
失败情况:一系列点彼此满足阈值
具体实现
Generalized intersection event
链的构建
用与聚类后事件相关的边构建一个链的集合
i
链h 由相邻边构成
这些链在两种情况下更新活动平面:链内(intra-chain),和
链间(inter-chain)
链内(intra-chain):内部边缩为0 则去掉
链间(inter-chain): 链内只有一条边则加角点分为两
条边,多条边则加点,顺次连接。最后去掉无关联的角
点
具体实现
Generalized intersection event
筛选无效事件(filtering invalid events):
在clustering 之前 移除无效的边 ,原因:用无边界的方向平面
检测相交事件,可能在活动平面上有些边不会接近交点l
在前一个事件中移除的边也要从边集f中移除。
最后如果边集小于3,事件忽略。
非连通事件(Local non connected event):大规模建
模时,非连通的区域可能发生相交事件
链中边形成环,链被移除;如果有多于一个只有一条边的链,
相关的边一定平行,相邻链中得几何体也要移除(形成一条
脊),一个链嵌套在另一个链中,链间事件将失效,这时可以
反转闭合链。但在现实建筑中没有这样的例子
具体实现
Edge direction events
根据profile更新边集的角度和方向平面
standard:不等于正负90度
输入由单独角度构成,输入边集和新的角度
输出新的 active plan
horizontal:角度为正负90度
输入
与同一profile关联的边集f
连续两角
距离d
输出
新的 active plan
具体实现
horizontal:
新建临时plan,边
挤出,投影,替换
,角
具体实现
horizontal:
更新角度
在同一高度发生多个边方向事件按用户创建顺序排序,
用户可手动控制优先级
具体实现
Profile offset events
明确了屋檐的开始,难点在于过程定义,在更新active plan
的过程中避免自相交
输入
disabled 布尔值,表明边关联的偏移区域是否要在输出中表现
dist_inside dist_outside 定义了向偏移边界里或外的距离和方向,正
向外,负向内,要求同号
Profile 定义了内外边的轮廓
具体实现
Profile offset events
步骤
用active plan 向 0平面投影得到temporary plan 其中边 eji投
影得Eji 和对应的profile_recursiveij 它定义了
z=0时
就能得到内边对应的扩展边
z=1 时
得到外边对应的扩展边
具体实现
Profile offset events
步骤
执行 procedural extrusion,
z=0到z=2 得到 外壳 shell
对 z=1 到 2之间的平面投影就
得到偏移区域,用来构建屋顶
具体实现
Profile offset events
步骤
profile 更新
r为偏移区域的边集
为临时外壳的轮廓
移除面积为0或diabled=true
的区域
最后合并相邻区域来阻止自
交
具体实现
Insertions into the polygon
Forced steps 插入固定
不能保证不自交可能产生无效的拓扑
具体实现
Insertions into the polygon
Natural steps 依靠过程式挤出的递归解决
具体实现
Ambiguities in Procedural Extrusions
通常出现在同一侧的两相邻边合为一条线的时候
具体实现
Ambiguities in Procedural Extrusions
解决
以全局视角解决这种歧义
合并所有连续的共线的边,这个边采用有最高优先级的边的profile
优先级方案
1最小得关联角度(-PI/2)的边有最大优先级
2用户定义
成果
成果