Python程序化生成三维场景【PyPRT】

你是否曾经梦想过一种高效且简单的方法,只需三行代码即可在 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
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 现在,利用Python生成三维模型已成为一种非常流行的技术,其中之一是基于图片生成三维模型。 此技术使用图像识别算法,通过对图片进行处理和分析,最终生成三维模型。这里的图片可以是一个物体的照片、地形等。 这种技术的步骤主要包括如下: 1.图像预处理:将图片转成灰度图或二值图,进行去噪、尺度归一化等处理。 2.物体分割:将图片中的物体区分开,并提取出其特征。 3.点云生成:根据特征点生成点云数据,即将图片转化成一组三维坐标点。 4.网格化:将点云数据进行三角形网格化,即连接所有点构成三角形面孔。 5.贴图:在三角形网格上贴上原始图片的纹理。 最终就能够生成可视化的三维模型了。而Python提供了很多图像处理和三维模型库,如OpenCV、Pillow、Mayavi等,能够在这个过程中很好的应用。 当然,根据图片生成三维模型的应用范围还很广,如数字文物保护、三维建筑模型制作等。对于有志于从事数字文化领域的人员来说,学习这种技术是很有必要的。 ### 回答2: Python可以利用计算机视觉技术和三维图形学知识根据图片生成三维模型。首先,需要通过OpenCV或者其他图像处理库对图片进行处理,提取出图片中的特征点和边缘等信息。然后,可以使用这些信息构建三维点云数据,并通过三角剖分等算法生成三角网格模型。最后,利用三维建模软件对三角网格模型进行平滑、修剪、细节添加等处理,生成最终的三维模型。 实现这个过程需要对计算机视觉和三维图形学技术有一定的了解,同时还需要掌握相应的编程技能和代码库的使用。因此,对于初学者来说可能比较困难,需要具备一定的编程和数学基础。但是,对于有经验的程序员来说,利用Python生成三维模型是完全可行的,同时还可以结合深度学习技术来进行更加复杂的三维场景还原和模拟。 ### 回答3: Python可以使用多种模块和库根据图片生成三维模型,其中比较常用的是OpenCV和Maya。以下是详细介绍: 1. 使用OpenCV生成三维模型 OpenCV是一个广泛使用的计算机视觉库,可以帮助实现三维重建技术。通过OpenCV中的SFM(Structure From Motion)模块,可以使用Python创建三维模型。该模块基于照片进行三维重建,依靠照片间共同搭建场景。因此,在使用SFM模块之前,需要先准备好一组图片,并且它们之间需要有足够的重叠区域。下面是使用OpenCV生成三维模型的步骤: 1)加载图片:使用OpenCV读取需要进行三维重建的图片。 2)提取特征点:使用ORB或SIFT等算法从图片中提取出关键点。 3)匹配特征点:为每个关键点在不同照片中进行匹配,以便确定它们在3D空间中的坐标。 4)三维重建:通过三角测量或空间重构等技术,计算相邻关键点间的距离,从而得到三维坐标。 5)生成三维模型:将三维坐标连成三角形形成一个三维模型。 2. 使用Maya生成三维模型 Maya是一款3D建模、动画和渲染软件,可以轻松创建复杂的三维模型。Python可以通过Maya提供的API来创建三维模型。以下是使用Maya生成三维模型的步骤: 1)准备图片:由于Maya更适合用于创建复杂的三维模型,因此需要先将图片处理成灰度图。 2)导入图片:通过Python脚本导入灰度图片到Maya场景中。 3)曲线绘制:使用Maya提供的曲线工具描绘出图片中的轮廓线。 4)建模:借助曲线模型化工具,将曲线转换为三维的NURBS或多边形模型。 5)渲染:根据需要添加材质、灯光等元素,对三维模型进行渲染并输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值