你是否曾經夢想過一種高效且簡單的方法,只需三行代碼即可在 Python 中創建 3D 幾何圖形?你的夢想成真了,它被稱為“PyPRT”。
PyPRT 是CityEngine Procedural Runtime 的 Python 綁定。PRT 代表“Procedural Runtime”,是 CityEngine 3D 生成的核心。不過這篇文章與 CityEngine 無關,你無需了解 CityEngine 即可對以下內容感興趣。
在可以使用它的所有可能示例中,PyPRT 非常強大,如果你想:
2019 年是 Python 年。越來越多的人在他們的項目中使用這種編程語言。根據排名,Python 確實是當今最流行的編程語言之一。
我個人經常使用 Python。實際上,當我 2018 年在蘇黎世的 Esri 研發中心開始工作時,我正在研究用於城市規劃的機器學習應用程序。作為任何機器學習項目的第一步,我必須處理很多(我的意思是,很多)數據:清理數據、擴展數據、刪除異常值、再次處理等等。對於這些任務,Python 很棒!它易於使用、直觀且功能強大。我特別喜歡使用Jupyter notebook以及 NumPy 和 Pandas 等庫。收集我的數據集後,我使用TensorFlow構建了對我的數據進行建模的神經網絡。最後,我可以使用 Matplotlib 繪制結果。Python 具有如此廣泛的應用程序,並且對於您正在嘗試構建的內容的快速反饋非常方便。
盡管如此,讓 Python 用戶可以訪問 CityEngine PRT API 對我們來說是完全有意義的。請訪問PyPRT 頁面以獲取有關包安裝、文檔和示例以及即用型規則包和初始形狀的更多信息。
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 規則輸入屬性的值來修改生成的建築物的參數。使用此功能,整個社區(甚至城市!)的生成大大簡化。
在重新開發城市區域時,城市規劃師、城市設計師或建築師必須設計出滿足各種要求的最有趣的建築。其中一些要求是定量的。它們可以是任何東西,從負擔得起的公寓數量到建築物的太陽能潛力。設計滿足一組要求的建築物可能是一項繁瑣的任務,尤其是當建築物的模型很復雜並且由許多可調參數組成時。使用 PyPRT,可以簡化建築設計的優化。
在米蘭,你可以參觀 Bosco Verticale(垂直森林)建築。這些建築被樹木和植物所覆蓋。在 CityEngine 中,我們編寫了一個 CGA 規則文件,允許生成受 Bosco Verticale 立面架構啟發的建築模型。然而,我們可以改變建築物的三個屬性:地塊覆蓋率、第一層高度和建築物占地面積形狀。給定建築物的建築設計(由 CGA 規則定義)和地塊,我們應該選擇這些屬性的哪些值來最大化建築綠地面積?
優化參數:層高、地塊覆蓋率、建築占地面積形狀
可以在下面找到解決上述問題所需步驟的簡短說明。可以同時查看代碼。
為了解決這個問題,我使用了 Python 社區中廣泛使用的SciPy優化庫。但是,任何優化算法都適用於 PyPRT。
原文鏈接:PyPRT生成 3D場景 — BimAnt
Preface Many people learn Pyt
Jane Medium : This paper gives