程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python程序化生成三維場景【PyPRT】

編輯:Python

你是否曾經夢想過一種高效且簡單的方法,只需三行代碼即可在 Python 中創建 3D 幾何圖形?你的夢想成真了,它被稱為“PyPRT”。

PyPRT 是CityEngine Procedural Runtime 的 Python 綁定。PRT 代表“Procedural Runtime”,是 CityEngine 3D 生成的核心。不過這篇文章與 CityEngine 無關,你無需了解 CityEngine 即可對以下內容感興趣。

在可以使用它的所有可能示例中,PyPRT 非常強大,如果你想:

  • 從建築物足跡(LOD2 建築物)中生成簡單的 3D 內容
  • 優化 3D 幾何設計(示例如下)
  • 將 3D 幾何圖形轉換為另一種格式

1、讓我們談談 Python

2019 年是 Python 年。越來越多的人在他們的項目中使用這種編程語言。根據排名,Python 確實是當今最流行的編程語言之一。

我個人經常使用 Python。實際上,當我 2018 年在蘇黎世的 Esri 研發中心開始工作時,我正在研究用於城市規劃的機器學習應用程序。作為任何機器學習項目的第一步,我必須處理很多(我的意思是,很多)數據:清理數據、擴展數據、刪除異常值、再次處理等等。對於這些任務,Python 很棒!它易於使用、直觀且功能強大。我特別喜歡使用Jupyter notebook以及 NumPy 和 Pandas 等庫。收集我的數據集後,我使用TensorFlow構建了對我的數據進行建模的神經網絡。最後,我可以使用 Matplotlib 繪制結果。Python 具有如此廣泛的應用程序,並且對於您正在嘗試構建的內容的快速反饋非常方便。

盡管如此,讓 Python 用戶可以訪問 CityEngine PRT API 對我們來說是完全有意義的。請訪問PyPRT 頁面以獲取有關包安裝、文檔和示例以及即用型規則包和初始形狀的更多信息。

2、PRT的 Python 綁定

CityEngine PRT SDK 是在 CityEngine 中執行 3D 生成的底層引擎。簡而言之,它允許將任何數據(2D 或 3D)轉換為詳細的 3D 幾何圖形。這種變換基於一組幾何規則。PRT 是一個 C++ API。因此,PyPRT 的目標是讓 Python 用戶能夠訪問 Python 世界中 PRT 的主要功能。

遵循 Python 在簡單性和易用性方面的理念,你不需要太多即可使 PyPRT 工作:初始形狀和規則文件。例如,初始形狀可以是建築物占地面積、地塊或任何多邊形。它對應於你要在其上應用程序操作以獲得 3D 生成模型的幾何圖形。將這些過程操作寫入規則文件中,該文件是 CGA(計算機生成體系結構)文件。從其名稱中可以看出,CGA 文件包含 CGA 代碼,它是程序建模語言。如果您想了解有關 CGA 的更多信息,請查看此內容。

程序建模:輸入幾何(左)和生成的 3D 模型(右)

讓我們看一個例子。想象一下,你想快速可視化城市社區的建築物。該區域的建築物設計在 CGA 規則文件中建模和編碼。也許你編寫了此規則文件,或者有人將其作為規則包與你共享。此規則包封裝了規則文件以及要應用於新建築物的資源和紋理。

在 Python 腳本或 Jupyter 筆記本中,調用 PyPRT “generate_model”函數。該函數將地塊和規則包作為參數,以便按程序計算 3D 幾何。然後,你可以將生成的幾何圖形作為 Python 數組讀取並進一步處理。然後,使用 Python 3D 可視化庫,可以使用在地塊頂部生成的 3D 建築物對社區進行可視化。

因此,使用 PyPRT,你可以輕松創建存儲為 Python 數據結構的 3D 幾何圖形。但是你也可以將這些生成的幾何圖形導出為其他格式,如 OBJ、Collada、GLTF、i3s 等。本質上,PyPRT 帶有一組幾何導出器。

在多個初始形狀上程序生成並導出為 OBJ 的 3D 建築物

最後但同樣重要的是,PyPRT 允許在多個初始形狀上生成 3D 幾何圖形。每個初始形狀都可以有一個定制的生成模型。例如,在對建築物進行建模時,可以通過更改 CGA 規則輸入屬性的值來修改生成的建築物的參數。使用此功能,整個社區(甚至城市!)的生成大大簡化。

3、示例:優化建築物的綠化面積

在重新開發城市區域時,城市規劃師、城市設計師或建築師必須設計出滿足各種要求的最有趣的建築。其中一些要求是定量的。它們可以是任何東西,從負擔得起的公寓數量到建築物的太陽能潛力。設計滿足一組要求的建築物可能是一項繁瑣的任務,尤其是當建築物的模型很復雜並且由許多可調參數組成時。使用 PyPRT,可以簡化建築設計的優化。

在米蘭,你可以參觀 Bosco Verticale(垂直森林)建築。這些建築被樹木和植物所覆蓋。在 CityEngine 中,我們編寫了一個 CGA 規則文件,允許生成受 Bosco Verticale 立面架構啟發的建築模型。然而,我們可以改變建築物的三個屬性:地塊覆蓋率、第一層高度和建築物占地面積形狀。給定建築物的建築設計(由 CGA 規則定義)和地塊,我們應該選擇這些屬性的哪些值來最大化建築綠地面積?

優化參數:層高、地塊覆蓋率、建築占地面積形狀

可以在下面找到解決上述問題所需步驟的簡短說明。可以同時查看代碼。

  • 使用宗地作為初始形狀來實例化 PyPRT ModelGenerator 類。初始形狀可以來自文件,也可以指定地塊的頂點坐標。在本例中,初始形狀是一個 OBJ 文件。
  • 然後,必須定義優化問題的目標函數。這是我們要最小化或最大化的功能。在其中,調用 ModelGenerator 實例的 PyPRT“generate_model”方法,並將建築物屬性作為參數進行變化。在我們的示例中,優化目標函數的返回值是綠色空間的數量。此編號位於生成模型的報告中。因此,在生成的建築物上調用“get_report”方法並讀取報告字典中的綠色空間條目。
  • 可以對屬性范圍指定一些約束(例如最小值和最大值)。
  • 最後,使用任何優化算法,將目標函數和屬性邊界作為算法的參數並運行它。它將給出每個屬性的最佳值,以最大化綠化面積。

為了解決這個問題,我使用了 Python 社區中廣泛使用的SciPy優化庫。但是,任何優化算法都適用於 PyPRT。


原文鏈接:PyPRT生成 3D場景 — BimAnt


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved