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用户定义

成果
成果