CityEngine學習記錄
學習網址:
百度安全驗證
CityEngine-CityEngine_Rule-based_Modeling-基于規則建模和輸出模型 - 豆丁網
CityEngine 初探-CSDN博客
City Engine CGA 規則包_cga規則-CSDN博客
CityEngine學習記錄
學習網址:百度安全驗證
CityEngine-CityEngine_Rule-based_Modeling-基于規則建模和輸出模型 - 豆丁網
CityEngine 初探-CSDN博客
City Engine CGA 規則包_cga規則-CSDN博客
1. 基礎教程
1.1 軟件布局
1.2 新建一個CityEngine工程
File→New→CityEngine→CityEngine project
然后Next輸入工程名稱,輸入工程名稱為“FirstTestHZ”,然后點擊“Finish”
一個新的工程創建成功,并會在導航器(Navigator)中顯示,Navigator一般在軟件的左下角顯示,工程創建成功后,會生成很多默認的文件夾,但是都是空的。
Assets —— 存放模型的零件與紋理圖片
Data —— 存放道路或地塊數據(.shp、.osm、.dxf等)
Images —— 存放場景快照
Maps —— 存放地圖圖層來源的影像,(.jpg、.img、.tif等)
Models —— 導出的3D模型存放位置
Rules —— 存放規則文件 .cga
Scenes —— 存放場景文件 .cej
Scripts —— 存放腳本文件
1.3 新建一個新的場景
File→New→CityEngine→CityEngine Scene
選擇場景所屬工程和填寫場景名稱后,點擊“Finish”完成創建。
此時會出現一個空白的3D View窗口。
1.4 復制rules和assets文件夾
在CityEngine中需要用到規則文件和資源文件來生成建筑模型,我們可以從已經加入到軟件中的“Tutorial_09_Advanced_Shape_Grammar__2016_1”工程來復制文件。
用ctrlC和ctrlV來復制文件即可。
1.5 常用操作
平移:ALT+鼠標中鍵
旋轉:ALT+鼠標左鍵
顯示模型:F12
全局顯示:A
全選要素:Ctrl+A
2. CityEngine白膜拉伸步驟
建筑建模主要依據含有建筑高度的建筑面shp數據。將shp數據導入CityEngine后,賦予建筑面建筑物規則,對建筑面數據拉伸高度并且賦予貼圖或者顏色效果。建筑物拉伸完成后,可以導出fbx或者obj格式模型。
2.1 拷貝數據
打開軟件,將建筑物面數據拷貝到data文件夾內
2.2 加載數據
然后選中后綴為“.shp”的文件,拖入到3D View的窗口中,為數據選擇一個正確的坐標系后,就可以看到shp數據已經加載到場景中了。
2.3 給建筑物賦予白膜拉伸規則
在3DView窗口里CtrlA全選建筑物面,然后在“rules”里找到復制過來的“Candler Building.cga”,鼠標按住后把規則拖動到建筑屋面上,就可以根據規則自動生成模型
2.4 自定義rules規則
在Navigator面板的Rules節點上右鍵,選擇New→CGA rule file,輸入文件名稱“testhz”,新建一個規則文件,打開規則文件編輯窗口。
規則語法等內容需要深入研究,目前常用的有
attr height = 250 —— 定義屬性
extrude(height)、extrude(axisWorld, height) —— 拉伸
comp(f){top: Roof | side: Facede} —— 面分割
comp(e) —— 邊分割
comp(v) —— 點分割
color(1, 0, 0) 或 color("#69431a") —— 顏色
case:else:根據屬性篩選條件,設置不同的顯示
2.4.1 申明變量
attr height =100
2.4.2 模型拉伸高度
exturde(hieght)
賦予規則后,模型將展示如圖所示
2.4.3 模型隨機高度
rand函數,賦予最小值與最大值,就可以給建筑物隨機添加高度
重新編寫cga文件后,Ctrl+G可以重新生成模型
2.4.4 拆分建筑六面
面分割采用comp(f){},關鍵字top,side表示屋頂和側面,top:roof表示將建筑物整體分割,且頂部賦值至變量roof
Ctrl+G重新生成后,顯示如下:
2.4.5 建筑物貼圖
設置貼圖的坐標系
setupProjection(uvset, prjAxesSelector, texWidth, texHeight)
uvset —— 要被貼圖的元素的索引值,[0, 9] 的整數
prjAxesSelector —— 設置有效的方向軸,有效參數有:scope.xy, scope.xz, scope.yx, scope.yz, scope.zx, scope.zy
texWidth —— 寬度方向上的貼圖比例,即貼圖大小與建筑大小的對應。設置為 '1 則自適應以一張貼圖貼滿整個面
texHeight —— 高度方向上的貼圖比例,即貼圖大小與建筑大小的對應。設置為 '1 則自適應以一張貼圖貼滿整個面
Ctrl+G重新構建后
同理,可以創建側面貼圖
后期對規則進行代碼編寫,可以實現快速模型構建。對于代碼接口,可以參考接口文檔:CGA 參考—ArcGIS CityEngine 資源 | 文檔
2.5 導出模型
選中需要導出的模型,然后選擇File→Export Models,選擇需要導出的模型格式,一般是選擇fbx或者obj。
導出fbx需要注意不同的選項導出的模型對象區分方式不一樣。
如上圖顯示默認選項,則導出的模型會按照材質來進行區分,同一材質的模型會是一個對象。
如上圖顯示選擇“Instances and Shape Groups”,則導出的模型則會按照當前對象進行導出。
3. CityEngine道路建模步驟
道路建模主要依據含有道路寬度的道路中心線shp數據。將shp數據導入CityEngine后,修改道路數據的拓撲錯誤,編輯特殊道路的高度和寬度后,對道路數據賦予道路規則。道路規則慢慢積累后,可以重復使用,根據不同的道路類型或者樣式,可以修改道路的中心樣式、人行道樣式、單向道路、橋梁樣式和車道停止線樣式。修改完成后可以導出fbx或者obj模型。
3.1 導入shp道路中心線
將shp數據、影像數據等放于項目data文件夾內。然后在Navigator視窗內可以看見數據被添加進來了,暗住鼠標左鍵不放,即可以把數據拖到3D視圖里,完成數據的添加。
3.2 修改道路拓撲錯誤
數據導入到3D視圖后,CityEngine會自動根據shp數據中的道路寬度字段完成道路面放樣。并且自動生成道路面、人行道面、道路交叉口等數據。
一些數據不符合拓撲規則時,CityEngine會用紅色標記出來,這時需要手動對數據進行拓撲校正。根據實際情況,選擇校正方法。
一般來說,如果道路交叉口有拓撲問題,可能是因為道路線節點過多導致的問題,這時候可以選擇清理工具,對節點進行融合。
融合時可以選擇適當的融合距離。
第二種情況是在道路末端會有拓撲錯誤,這個時候如果選擇清理工具,道路錯誤節點會被刪除,并且錯誤會繼續存在,這種情況,我們只需要把道路末端節點的屬性改為Crossing即可。
還有一種情況是高架匝道有拓撲問題,這時候,需要對匝道的寬度和高度做校正,這個放在下一章節進行介紹。
3.3 編輯道路高度和寬度
道路的寬度決定后面道路的樣式,并且高架和匝道的寬度也經常會引起道路的拓撲問題,所以道路的寬度和高度的編輯是至關重要的一環。
3.3.1 精確修改寬度
在Inspector視圖里,找到shape width選項,填入正確的道路寬度數值即可精確修改道路寬度。
道路寬度修改原則可以按照影像實際測量結果得出、也可以按照基礎地理數據庫中的屬性得出、如果知道車道數,道路基礎設施等信息,也可以根據車道數來修改道路寬度。
道路寬度=(3.5(車道寬)+0.13(線寬))*N(車道數) 如果是雙實線中間間隔0.13m,也需要加上
3.3.2 粗略修改寬度
選中道路面street,然后選擇編輯選項
道路面會變成編輯調整模式,選擇道路兩邊的綠色方塊,可以改變道路的寬度。
拓展:選擇黃色的端點,可以改變端點的位置
選擇綠色的圓點,可以改變道路的彎曲方向和彎曲度
3.3.3 修改道路高度
道路高度是由整體高度和節點高度決定的。選中道路后,再選擇調整功能,即可以對道路整體高度進行調整
選中單個道路節點,即可以對單個節點高度進行調整。
調整方式為對綠色的Z軸拖拽即可。
拓展:調整還有X和Y軸,可以調整道路線或者道路節點的坐標
3.4 配置道路規則
選中道路面,然后將道路規則拖動到道路上,道路限時橙色,即為正確。
配置完成后:
配置完成后,還需要對數據進行檢查,確認有無錯誤,常見的錯誤包括:
- 道路寬度錯誤,導致部分區域沒有道路貼圖樣式
解決方法:修改錯誤數據的寬度,即可恢復正常。
- 道路交叉口沒有斑馬線或者車道停止線等。這種問題的原因就是車道點過近,導致street與crossing之間距離過短,斑馬線與車道線沒有足夠距離顯示,所以可以將點融合,或者刪除點后,重新新建一條道路也可以,或者可以編輯節點,把節點距離調大即可。
- 有些道路是空白的,這是因為道路終點的類型不對導致的,可以把道路終點的類型改為crossing即可。
- 有些包含交叉口和道路終點的地方會有拓撲錯誤,這個一般選擇清理工具即可。
3.5 修改道路屬性
3.5.1 修改道路中心樣式
道路中心線可以是雙黃線,也可以是綠道樹木。需要改變的話,可以選擇道中心截面布局,Center_Type選擇median
3.5.2 修改道路人行道樣式
人行道可以修改樣式,默認是貼圖。
可以選擇人行道綠化+區域,選擇sidewalk_Ground_Cover中的Random或者standard grass。
3.5.3 修改單向道路
修改前
修改后
車道線發生變化
3.5.4 修改橋梁樣式
有些道路屬于高架橋,高架橋需要添加橋墩和路邊圍欄,這時候選中需要添加橋墩的模型,然后在道路規則里選擇橋墩樣式為“on,by the elevation”。
3.5.5 修改車道停止線樣式
3.6 模型導出
3.7 中國特色道路貼線、指示地表設置
目前使用CityEngine軟件自帶的Standard_Street.cga文件來進行簡易快速道路建模,只能設置車道線和地標指示,不包含中間隔離帶等其他復雜路面物體。
3.7.1 standard規則解釋
- NbrOfRightLanes
修改反向車道車道數,比如下圖四車道的道路,修改屬性值為3,則代表一邊為3車道一邊為1車道。
個人意見這個反向其實跟道路的線條方向有關,需要嘗試才可以決定是寫1還是寫3。
- Centerline
車道中心線設置,目前選項有yellow(黃實線)、none(黃虛線)
- RoadTraffic
right-hand:靠右行駛
Left-hand:靠左行駛
- Stop Markings
路口指示地標,目前選項有StopBegin和StopEnd。
StopBegin:線段開始的地標貼圖選項。
StopEnd:線段結束的地標貼圖選項。