CityEngine自動化建模

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:線段結束的地標貼圖選項。

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/bicheng/89980.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89980.shtml
    英文地址,請注明出處:http://en.pswp.cn/bicheng/89980.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    Nacos+LoadBalancer實現服務注冊與發現

    目錄 一、相關文章 二、兼容說明 三、服務注冊到Nacos 四、服務發現 五、服務分級存儲模型 六、查看集群服務 七、LoadBalancer負載均衡 一、相關文章 基礎工程:gradle7.6.1springboot3.2.4創建微服務工程-CSDN博客 Nacos服務端安裝:Nacos服務端…

    事務并發-封鎖協議

    事務并發數據庫里面操作的是事務。事務特性:原子性:要么全做,要么不做。一致性:事務發生后數據是一致的。隔離性:任一事務的更新操作直到其成功提交的整個過程對其他事務都是不可見的,不同事務之間是隔離的…

    大氣波導數值預報方法全解析:理論基礎、預報模型與誤差來源

    我們希望能夠像天氣預報一樣,準確預測何時、何地會出現大氣波導,其覆蓋范圍有多大、持續時間有多長,以便為通信、雷達等應用提供可靠的環境保障。 目錄 (一)氣象預報 1.1 氣象預報的分類 1.2 大氣數值預報基礎 1.2…

    關于JavaWeb的總結筆記

    JavaWeb基礎描述Web服務器的作用是接受客戶端的請求,給客戶端響應服務器的使用Tomcat(最常用的)JBossWeblogicWebsphereJavaWeb的三大組件Servlet主要負責接收并處理來自客戶端的請求,隨后生成響應結果。例如,在處理用…

    生成式引擎優化(GEO)核心解析:下一代搜索技術的演進與落地策略

    最新統計數據聲稱,今天的 Google 搜索量是 ChatGPT 搜索的 373 倍,但我們大多數人都覺得情況恰恰相反。 那是因為很多人不再點擊了。他們在問。 他們不是瀏覽搜索結果,而是從 ChatGPT、Claude 和 Perfasciity 等工具獲得即時的對話式答案。這…

    網編數據庫小練習

    搭建服務器客戶端,要求 服務器使用 epoll 模型 客戶端使用多線程 服務器打開數據庫,表單格式如下 name text primary key pswd text not null 客戶端做一個簡單的界面:1:注冊2:登錄無論注冊還是登錄,…

    理解 PS1/PROMPT 及 macOS iTerm2 + zsh 終端配置優化指南

    終端提示符(Prompt)是我們在命令行中與 shell 交互的關鍵界面,它不僅影響工作效率,也影響終端顯示的穩定和美觀。本文將結合 macOS 上最流行的 iTerm2 終端和 zsh shell,講解 PS1/PROMPT 的核心概念、常見配置技巧&…

    Laravel 原子鎖概念講解

    引言 什么是競爭條件 (Race Condition)? 在并發編程中,當多個進程或線程同時訪問和修改同一個共享資源時,最終結果會因其執行時序的微小差異而變得不可預測,甚至產生錯誤。這種情況被稱為“競爭條件”。 例子1:定時…

    83、形式化方法

    形式化方法(Formal Methods) 是基于嚴格數學基礎,通過數學邏輯證明對計算機軟硬件系統進行建模、規約、分析、推理和驗證的技術,旨在保證系統的正確性、安全性和可靠性。以下從核心思想、關鍵技術、應用場景、優勢與挑戰四個維度展…

    解決 Ant Design v5.26.5 與 React 19.0.0 的兼容性問題

    #目前 Ant Design v5.x 官方尚未正式支持 React 19(截至我的知識截止日期2023年10月),但你仍可以通過以下方法解決兼容性問題: 1. 臨時解決方案(推薦) 方法1:使用 --legacy-peer-deps 安裝 n…

    算法與數據結構(課堂2)

    排序與選擇 算法排序分類 基于比較的排序算法: 交換排序 冒泡排序快速排序 插入排序 直接插入排序二分插入排序Shell排序 選擇排序 簡單選擇排序堆排序 合并排序 基于數字和地址計算的排序方法 計數排序桶排序基數排序 簡單排序算法 冒泡排序 void sort(Item a[],i…

    跨端分欄布局:從手機到Pad的優雅切換

    在 UniApp X 的世界里,我們常常需要解決一個現實問題: “手機上是全屏列表頁,Pad上卻要左右分欄”。這時候,很多人會想到 leftWindow 或 rightWindow。但別急——這些方案 僅限 Web 端,如果你的應用需要跨平臺&#xf…

    華為服務器管理工具(Intelligent Platform Management Interface)

    一、核心功能與技術架構 硬件級監控與控制 全維度傳感器管理:實時監測 CPU、內存、硬盤、風扇、電源等硬件組件的溫度、電壓、轉速等參數,支持超過 200 種傳感器類型。例如,通過 IPMI 命令ipmitool sdr elist可快速獲取服務器傳感器狀態,并通過正則表達式提取關鍵指標。 遠…

    Node.js Express keep-alive 超時時間設置

    背景介紹隨著 Web 應用并發量不斷攀升,長連接(keep-alive)策略已經成為提升性能和資源復用的重要手段。本文將從原理、默認值、優化實踐以及潛在風險等方面,全面剖析如何在 Node.js(Express)中正確設置和應…

    學習C++、QT---30(QT庫中如何自定義控件(自定義按鈕)講解)

    每日一言你比想象中更有韌性,那些看似艱難的日子,終將成為勛章。自定義按鈕我們要知道自定義控件就需要我們創建一個新的類加上繼承父類,但是我們還要注意一個點,就是如果我們是自己重頭開始造控件的話,那么我們就直接…

    【補充】Linux內核鏈表機制

    專題文章:Linux內核鏈表與Pinctrl數據結構解析 目標: 深入解析Pinctrl子系統中,struct pinctrl如何通過內核鏈表,來組織和管理其多個struct pinctrl_state。 1. 問題背景:一個設備,多種引腳狀態 一個復雜的…

    本地部署Dify、Docker重裝

    需要先安裝一個Docker,Docker就像是一個容器,將部署Dify的空間與本地環境隔離,避免因為本地環境的一些問題導致BUG。也確保了環境的統一,不會出現在自己的電腦上能跑但是移植到別人電腦上就跑不通的情況。那么現在就開始先安裝Doc…

    【每天一個知識點】非參聚類(Nonparametric Clustering)

    ChatGPT 說:“非參聚類”(Nonparametric Clustering)是一類不預先設定聚類數目或數據分布形式的聚類方法。與傳統“參數聚類”(如高斯混合模型)不同,非參聚類在建模過程中不假設數據來自于已知分布數量的某…

    人形機器人CMU-ASAP算法理解

    一原文在第一階段,用重定位的人體運動數據在模擬中預訓練運動跟蹤策略。在第二階段,在現實世界中部署策略并收集現實世界數據來訓練一個增量(殘差)動作模型來補償動態不匹配。,ASAP 使用集成到模擬器中的增量動作模型對…

    next.js刷新頁面時二級菜單展開狀態判斷

    在 Next.js 中保持二級菜單刷新后展開狀態的解決方案 在 Next.js 應用中,當頁面刷新時保持二級菜單的展開狀態,可以通過以下幾種方法實現: 方法1:使用 URL 參數保存狀態(推薦) import { useRouter } from n…