本教程提供有关以下任务的分步说明:
-
将点云转换为 3D 模型。
-
通过减少多边形数量以优化 3D 模型,使其与 Dynamics 365 混合现实应用程序的性能目标相匹配。
-
将经优化的 3D 模型导出为适用于 Dynamics 365 Guides 以及使用 Power Apps 所创建应用的混合现实组件的 .glb 文件。
-
创建处理管道模板,以便将来快速优化点云。
本教程仅用于提供信息,以说明 SideFX Houdini 如何与 Microsoft Dynamics 365 Guides 和 Power Apps 配合使用。 您对第三方应用程序的使用受您与第三方之间的条款约束。 Microsoft Corporation 与 SideFX 之间不存在附属、合作伙伴关系,也不公开支持 SideFX 或赞助 SideFX 产品。 您也可以使用几种其他的内容创作应用程序来准备 3D 模型。
什么是 Houdini?
Houdini 是用于创建 3D 程序内容的工具。 它使用基于节点的非破坏性工具系统来设计流程管道和 3D 内容。
设置您的环境
要设置环境,您必须完成以下任务:
-
安装 SideFX Labs 扩展。
-
设置用于摄影测量的 AliceVision。
安装 SideFX Labs 扩展
SideFX Labs 是一个工具测试平台,可帮助您更快速地将 Houdini 投入运行。 该免费工具集合包括可将点云转换为经优化的 3D 模型的实用工具。 要使用 SideFX Labs,您必须使用 Houdini 18 或更高版本。
SideFX 提供了有助于安装这些工具的教程视频。
备注
必须先安装 Houdini,才能安装 SideFX Labs。 详细了解如何安装 Houdini。
-
打开 Houdini。
-
要安装 SideFX Labs,选择 Houdini 窗口顶部的加号
,并选择货位,然后选择 SideFX Labs 复选框。
-
在窗口顶部附近显示的工具栏上,选择更新工具集以打开安装程序。
-
选择更新以安装工具。
如果安装成功,工具栏中会显示更多工具。 然后,您可以继续本教程中的后续操作。
设置用于摄影测量的 AliceVision
AliceVision 是由 Mikros Image 开发的摄影测量计算机视觉框架。 它提供 3D 重建和相机跟踪算法。 详细了解有关 AliceVision 和 AliceVision 插件的信息。
如需详细了解如何为 Houdini 安装和设置 AliceVision 插件,请参阅 SideFX 教程。
将点云导入 Houdini
Houdini 可以导入 PLY 文件格式的点云文件。 如果文件为 PTS 文件格式,则可以手动将其转换为 PLY 格式。
将 .pts 文件转换为 .ply 文件
-
在所选的文件编辑器中打开 .pts 文件,并添加以下标头。
复制
************************ ply format ascii 1.0 element vertex 534993 property float x property float y property float z property uchar intensity property uchar red property uchar green property uchar blue end_header ************************
-
在标头中的元素顶点旁,将值 534993 替换为最初显示在 .pts 文件顶部的值(但现在紧随标头)。
该值是点云中的总点数。
-
删除标头后的原始值。 下表显示了进行上述更改前后文件的并排比较。 element vertex 值以红色突出显示。
Expand table
.pts 文件顶部 .ply 文件顶部 -
保存文件,使其具有 .ply 文件扩展名。
导入 .ply 文件
-
打开 Houdini。 系统将自动创建一个新场景。 在此过程中,您将构建一个节点链,以将点云处理为 3D 模型。 这些节点构建在 Houdini 窗口的右下窗格中。
-
在右下角的窗格中右键单击,打开 TAB 菜单。 (或按 Tab 键。)
-
在 TAB 菜单上,选择导入 > 文件,然后在几何图形窗格中单击以放置节点。
-
在 file1 节点中间双击(或按 I)以逐级转至节点的文件选择部分,选择文件选择器按钮,然后选择要导入的文件。
-
在显示的文件浏览器中,转到要导入的 .ply 点云文件所在的位置,选择文件,然后选择接受。
点云随即显示在窗口的主要部分。 如果未看到点云,请尝试使用鼠标滚轮缩小视图,直到看到整个点云。
准备点云
重新调整点云的方向
有时,首次导入点云时方向是错误的。 您可以通过向节点树添加转换节点来调整方向。
-
右键单击几何图形窗格,打开 TAB 菜单,然后选择操作 > 转换添加一个转换节点。
-
从 file1 节点底部的点拖动到 transform1 节点顶部的点。 这样,您便可将 file1 节点的输出连接到 transform1 节点的输入。 然后,单击 transform1 节点右侧。 transform1 节点右侧变为蓝色,且该节点在窗口的主要部分中变为活动状态,此时您便可看到重新定向后的模型。
提示
要在 Houdini 流程的特定阶段中查看模型,请单击相应节点的右侧。 如果需要查看先前状态下的 3D 模型并编辑在该状态下进行的更改,此功能非常有用。
-
要更正模型的旋转,请在“Node”窗格上方的“options”窗格中将值添加到 Rotate 行。 通常,可以将 x 值设置为 270,以将模型旋转到正确的位置。 但如果该值无效,请尝试其他值。
-
要将点云在原点上居中,请在转换节点之后添加一个轴对齐节点。 要放置该节点,请将鼠标悬停在几何图形窗格上方,按 Tab 键打开 TAB 菜单,然后选择 Labs>位置>Labs 轴对齐。
-
拖动鼠标,将 transform1 节点底部的输出点连接到 axis_align1 节点顶部的输入点。 保留默认值以将点云放置在原点上方(理想位置)。
清理点云以删除游离点
如果需要删除点云中的游离点,可以选择并删除单个点或点组。
-
将几何图形选择方法更改为点,并将选择工具更改为套索捕获。
备注
您可以根据需要使用其他方法。
-
选择要删除的点。
-
按删除键。 此时将显示一个新的 blast1 节点。 该节点顶部的输入点已连接到您所使用的最后一个节点底部的输出点。
-
继续删除点,直到对结果满意为止。 每次删除都会添加一个新的 Blast 节点,可以随时查看或删除该节点。
将点云转换为网格
glTF 和实时渲染应用程序均要求模型表示为三角化多边形曲面。 您可以使用 Particle Fluid Surface 命令连接各个点,以形成多边形几何图形的逻辑曲面。
-
单击几何图形窗格打开 TAB 菜单,然后选择流体>粒子流体表面。 然后选择节点,并将其添加到几何图形窗格。
-
拖动鼠标,将 transform1 节点底部的输出点连接到 particlefluidsurface1 节点左上角的输入点。 然后,单击 pariclefluidsurface1 节点右侧以在窗口主要部分中激活节点。
点云作为网格呈现在窗口的主要部分中。 已在几何图形窗格右上方的窗格中选择了表面选项卡。
-
如果点云中的点关联了颜色数据,则可以将字母 Cd 添加到传递属性字段中值的末端以使用颜色属性。 网格中将随即显示相应颜色。
-
如果网格中有孔(如下图所示),请调整右上窗格中的粒子分离和体素缩放滑块以尝试解决此问题。
-
要为缩减(整个流程中的下一步)准备网格,请在输出下方将转换为字段的值从表面多边形集合更改为表面多边形。 这样,您就可以重新进行网格化并缩减网格。
-
右键单击几何图形窗格打开 TAB 菜单,然后选择多边形>重新网格化。 此时将添加重新网格化节点,以将网格转换为三角形。 这样,您就可以将 3D 模型缩减到符合性能要求的多边形数量。
-
拖动鼠标,将 particlefluidsurface1 节点底部的输出点连接到重新网格化节点左上角的输入点。 单击 remesh 节点中间,以在 Geometry 窗格上方的窗格中激活它。 然后,单击 remesh 节点右侧以在窗口主要部分中激活模型。 现在,您可以编辑重新网格化的属性,窗口主要部分中的模型将反映所编辑的内容。
-
请尝试使用调整元素大小下方的选项以获得所需结果。 对于边缘长度字段,您可以保留默认值(统一),也可以选择自适应并调整相对密度滑块(和其他选项)以生成所需的网格。
缩减 3D 模型以帮助提高性能
为了达到应用程序特定的目标,您可能需要缩减 3D 模型。 缩减过程是指重新计算模型的表面多边形以创建包含较少多边形的相似形状。 虽然此过程降低了视觉保真度,但有助于提高性能。 下表显示了用于 HoloLens 低场景复杂性的高质量模型与用于高场景复杂性的低质量模型之间的并排比较。
Expand table
高多边形 3D 模型 | 低多边形 3D 模型 |
---|---|
| |
500,000 个三角形 | 8,000 个三角形 |
缩减模型
-
在几何图形窗格中,按 Tab 键打开 TAB 菜单,然后选择多边形>PolyReduce 以将 PolyReduce 节点放置在几何图形窗格中。
-
拖动鼠标,将重新网格化节点底部的输出点连接到 polyreduce1 节点左上角的输入点。 单击 polyreduce1 节点中间,然后单击节点右侧,以在窗口主要部分中激活该节点。
-
在缩减数量下方的目标字段中,选择输出多边形数量,然后使用保留数量滑块调整多边形数量,以便在满足性能要求的同时保持可接受的视觉保真度。
点云现已转换为经优化的 3D 网格。 在下一步中,您将在 3D 模型上烘焙高分辨率纹理,以恢复缩减之前存在的视觉保真度。
将高分辨率纹理烘焙到低多边形网格上
缩减网格中的多边形数量有一个缺点,那就是很多细节可能会丢失。 要还原某些细节,您可以捕获相应细节并将其作为在低多边形模型上层叠的纹理进行应用。 该过程称为纹理烘焙,首先拍摄高多边形模型中的所有曲面,然后将它们纳入覆盖在低多边形模型之上的“覆盖层”中。 这样,既可以获得低多边形模型的性能,也保留了高多边形模型的更加精细的细节。
纹理坐标(也称为 UV)是存储在模型的几何图形中的一对数字(U 和 V)。 这些数字表示将 2D 图像映射到 3D 表面的方式,并可以将表面属性定义为图像。 图像可以是简单贴花,也可以是复杂的材质组件,例如粗糙度和金属度。 您可以手动生成网格的 UV 位置,也可以半自动或自动完成此过程。 AutoUV 表面操作器是 Houdini 中用于生成 UV 的工具。 它在创建 UV 时运用了一些自动化方法。
烘焙纹理
-
右键单击几何图形窗格打开 TAB 菜单,然后选择 Labs>UV>Labs Auto UV 以将 AutoUV 节点添加到场景中。
-
在方法下方,将方法字段的值更改为 UV 展开。
-
拖动鼠标,将 polyreduce1 节点底部的输出点连接到 autouv1 节点顶部的输入点。
-
要并排查看“之前”和“之后”模型,请选择视区布局按钮,然后选择两个视图并排。
-
在窗口主要部分的下拉菜单中,选择设置视图 > UV 视区。
展开的 UV 显示在左侧,而 3D 模型显示在右侧。
-
在几何图形窗格中,选择 Labs>输出>Labs Maps Baker 以添加 maps_baker1 节点。
-
拖动鼠标,将 autouv1 节点底部的输出点连接到 maps_baker1 节点左上角的输入点。 (左上角的点是低分辨率输入节点。)
-
拖动鼠标,将 particlefluidsurface1 节点底部的输出点连接到 maps_baker 1 节点右上角的输入点。 (右上角的点是高分辨率输入节点。)
-
选择 maps_baker1 节点,然后在烘焙下方,将预览频道字段的值更改为散射。 在烘焙选项下方,将散射图字段设置为散射。
提示
要将项目保存在特定文件夹中,请选择上图所示的输出目录字段旁边的文件选择器按钮。 烘焙纹理时,.png 纹理文件将保存到 render 文件夹,该文件夹创建于所保存项目的根文件夹中。 通过将项目保存在自己的文件夹中,便于轻松查找所烘焙的纹理。
-
选择 maps_baker1 节点,然后在选项窗格中选择烘焙。
-
右键单击几何图形窗格打开 TAB 菜单,然后选择管理器>材质网络,以将 matnet1 节点添加到场景中。
-
双击 matnet1 节点打开 VEX 生成器窗格。
-
右键单击 VEX 生成器窗格,然后选择着色器 > 标准化着色器以添加标准化着色器材质。
-
在选项窗格中的表面选项卡上,使用滑块将粗糙度字段的值更改为 0.6,并将金属度字段的值更改为 0.1。 (您可以根据需要设置这些字段,但我们建议一开始就将这些值与默认值一起使用。)
-
在纹理选项卡上的基本颜色下方,选择使用纹理复选框。 然后,选择文件选择器按钮,并选择此前保存在渲染文件夹中的 *_color.png 纹理文件。 Principled Shader 现已可供使用。
备注
您可以随时对材质进行进一步的修改。 就本教程而言,这种配置已经足够了。
-
在 VEX 生成器窗格中,选择返回(向左箭头)按钮以返回到几何图形窗格。
-
选择材质 > 材质以将材质节点放置在几何图形窗格中。
-
拖动鼠标,将 autouv1 节点底部的输出点连接到 material1 节点顶部的输入点。
-
选择 material1 节点,然后选择操作器选择器按钮。 然后,在选择操作器对话框中,选择 file1>matnet1>principledshader1 以选择之前创建的标准化着色器。
-
单击节点右侧以在窗口主要部分中激活该节点。
随即将在低多边形 3D 模型上渲染纹理。 如果看起来效果不错,请继续执行下一步。
将模型导出为 .glb 文件
在这一步中,您可将模型导出为 .glb 文件,以便可以将其用于 Dynamics 365 Guides 和 Power Apps。
-
右键单击几何图形窗格打开 TAB 菜单,然后选择导出>ROP GLTF 输出。
-
拖动鼠标,将 material1 节点底部的输出点连接到 rop_gltf1 节点顶部的输入点。
-
在上方窗格中,将导出类型字段的值更改为 glb。
-
选择输出文件字段旁边的文件选择器按钮,然后输入 .glb 文件的名称和目标文件夹。 确保在文件名末尾添加 .glb。 完成后,选择接受。
-
选择保存至磁盘,以完成导出操作并创建 .glb 文件。
创建模板以将设置重复用于其他点云
为了节省时间和精力,您可以创建一个模板。 这样,为点云创建的设置便可用于其他点云。 虽然您仍须手动选择烘焙并可能需要调整一些值,但大多数处理操作均可自动执行。
创建模板
-
将当前正在使用的几何图形替换为默认几何图形。 这一步可以使模板文件更轻巧,打开时能够快速加载。
-
在几何图形窗格中,单击文件节点中间以切换到上方窗格中的文件菜单。
-
将几何图形文件字段的值更改为 default.bgeo,然后选择重新加载几何图形。
-
请注意,这将重新绘制几何图形,使其成为通用立方体。
-
将文件名更改为较为通用的名称,如模板。
-
-
选择文件 > 保存,然后输入一个您能记住的名称,例如 Prep_Template。
-
关闭 Houdini。
使用模板
-
打开 Houdini,选择文件>打开,然后选择您刚才创建的模板。
-
在几何图形窗格中,单击文件节点中间以切换到上方窗格中的文件菜单。 然后,选择几何图形文件字段旁边的文件选择器按钮,以选择 .ply 点云文件。
-
选择重新加载几何图形以将点云加载到场景中。
-
转到 maps_baker1 节点,然后选择烘焙为您的 3D 模型烘焙新的纹理。
-
单击 material1 节点右侧以查看烘焙模型。
-
执行以下某个步骤:
-
如果对 3D 模型感到满意,转到 rop_gltfB 节点,然后选择保存至磁盘以导出 3D 模型。
-
如果对 3D 模型的外观不满意,请调整 particlefluidsurface1、重新网格化和 polyreduce1 节点设置。 当模型看起来可以接受时,再次烘焙纹理,然后导出 3D 模型。
-