用于 SideFX Houdini 将点云转换为优化的 3D 对象,用于 Dynamics 365 Guides 在使用 Power Apps

本教程提供了以下任务的分步说明:

  • 将点云 转换为 3D 对象。

  • 通过减少多边形计数来优化 3D 对象,使其与 Dynamics 365 混合现实应用程序 的性能目标相匹配

  • 将优化的 3D 对象导出为。glb 文件,该文件可在 Dynamics 365 Guides 以下应用中使用,并在使用 Power Apps

  • 创建处理流水线模板,以便将来可以快速优化点云。

本教程仅供参考,以展示如何 SideFX Houdini 与 Microsoft Dynamics 365 Guides 配合 Power Apps使用。 第三方应用程序的使用受您和第三方之间的条款约束。 Microsoft Corporation 不隶属于 SideFX,不是 SideFX 或其任何产品的合作伙伴,也不认可或赞助 SideFX 或其任何产品。 还有其他几个 内容创建应用程序可用于准备 3D 对象

什么是胡迪尼?

Houdini 是一种用于创建 3D 程序内容的工具。 它使用基于节点的无损工具系统来设计流程管道和 3D 内容。

设置环境

若要设置环境,必须完成以下任务:

  • 安装 SideFX Labs 扩展。

  • 设置用于摄影测量的 AliceVision。

安装 SideFX Labs 扩展

SideFX Labs 是一个工具的试验场,可以帮助您更快地启动和运行 Houdini。 此免费工具集合包括可用于将点云转换为优化的 3D 对象的工具。 要使用 SideFX Labs,您必须使用 Houdini 18 或更高版本。

SideFX 提供了一个 教程视频 ,可帮助您安装这些工具。

备注

您必须先安装 Houdini,然后才能安装 SideFX Labs。 详细了解如何安装 Houdini

  1. 打开 Houdini。

  2. 若要安装 SideFX Labs,请选择 Houdini 窗口顶部的加号 加号。,选择“ 磁盘架”,然后选中“SideFX Labs 复选框。

    SideFX Labs 复选框。

  3. 在窗口顶部附近显示的工具栏上,选择 “更新工具集 ”以打开安装程序。

    “更新工具集”按钮。

  4. 选择“ 更新” 以安装工具。

    “更新”按钮。

如果安装成功,工具栏上将显示更多工具。 然后,您可以继续学习本教程。

设置用于摄影测量的 AliceVision

AliceVision 是由 Mikros Image 开发的摄影测量 计算机视觉框架。 它提供 3D 重建和相机跟踪算法。 了解有关 AliceVision AliceVision 插件 的更多信息

有关如何安装和设置 Houdini 的 AliceVision 插件的信息,请参阅 SideFX 教程

将点云导入 Houdini

Houdini 可以导入 PLY 文件格式的点云文件。 如果您的文件是 PTS 文件格式,您可以手动将其转换为 PLY 格式。

将 a .pts 文件转换为 a .ply 文件

  1. 在您选择的文件编辑器中打开您的。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
    ************************
    
  2. 在标题中,在 元素顶点旁边,将值 534993 替换为最初出现在 ur .pts 文件顶部的值(但现在紧跟在标题后面)。

     .pts 文件顶部的值。

    此值是点云中的点总数。

  3. 删除标头后面的原始值。 下表显示了在进行上述更改之前和之后对文件的并排比较。 元素顶点 值以红色突出显示。

    .pts 文件的顶部 .ply 文件的顶部
     .pts 文件顶部的值  .ply 文件头中的值
  4. 保存文件,使其具有。ply 文件扩展名。

导入。ply 文件

  1. 打开 Houdini。 系统会自动创建一个新场景。 在此过程中,您将构建一个节点链,以将点云处理为 3D 对象。 这些节点构建在 Houdini 窗口的右下窗格中。

    节点窗格。

  2. 右下窗格中的鼠标右键以打开 Tab 菜单。 (Alternatively,按 Tab 键。

  3. 在“Tab”菜单上,选择“ 导入 > 文件”,然后在“ 几何” 窗格中选择以放置节点。

    File 命令。

  4. 双击 file1 节点的 中间(或按 I )向下钻取到节点的文件选择部分,选择“文件选择器 ”按钮,然后选择要导入 的文件。

    “文件选择器”按钮。

  5. 在显示的文件浏览器中,浏览到要导入的。ply 点云文件的位置,选择该文件,然后选择“ 接受”。

    “接受”按钮。

    点云出现在窗口的主要部分。 如果看不到它,请尝试使用鼠标滚轮缩小,直到可以看到整个点云。

    点云。

准备点云

重新定向点云

有时,当您第一次导入点云时,它的方向是错误的。 您可以通过向节点树添加转换节点来固定方向。

  1. 在“几何 ”窗格中 单击鼠标右键以打开 “Tab 菜单”,然后选择 “操作 > 变换 ”以添加变换节点。

    转换命令。

  2. 从 file1 节点底部 的点拖动到 transform1 节点顶部 的点。 这样,就可以将 file1 节点的 输出连接到 transform1 节点的 输入。 然后在 transform1 节点的 右侧进行选择。 transform1 节点的 右侧变为蓝色,并且该节点在窗口的主要部分变为活动状态,以便您可以在模型重新定向后看到它。

    转换节点。

    小费

    要在 Houdini 中查看流程特定阶段的模型,请单击相应节点的右侧。 如果您必须查看处于先前状态的 3D 对象并编辑在该状态下发生的更改,则此功能非常有用。

  3. 若要更正模型的旋转,请在节点窗格上方的选项窗格中,在“旋转 ”行中 添加值。 通常可以将 x 值设置为 270 以将模型旋转到正确的位置。 但是,如果该值不起作用,请尝试其他值。

    旋转值。

  4. 要将点云居中在原点上,请在变换节点后添加一个轴对齐节点。 若要放置节点,请将鼠标悬停在“ 几何 ”窗格上,按 Tab 键打开“ Tab 菜单”,然后选择 “Labs>Geo>Labs 轴对齐”。

    Labs Axis Align 命令。

  5. 拖动以将 transform1 节点底部 的输出点连接到 axis_align1 节点顶部 的输入 点。 保留默认值,以将点云定位在原点的顶部(这是它的理想位置)。

    节点已连接。

清理点云以去除杂散点

如果点云包含要移除的杂散点,则可以选择并删除单个点或点组。

  1. 将“ 几何选择 ”方法更改为 “点 ”,将“ 选择 工具”更改为 “套索拾取”。

    备注

    如果您愿意,可以使用其他方法。

    选择了点方法和套索拾取工具。

  2. 选择要删除的点。

    要删除的点已选定。

  3. 按 Delete 键。 将出现一个新的 blast1 节点。 此节点顶部的输入点连接到您正在使用的最后一个节点底部的输出点。

    Blast 节点。

  4. 继续删除分数,直到您对结果感到满意为止。 每次删除都会添加一个新的 blast 节点,您可以随时查看或删除该节点。

    多个爆炸节点。

将点云转换为网格

glTF 和实时渲染应用程序都要求将对象表示为三角化多边形表面。 可以使用“ 粒子流体曲面”(Particle Fluid Surface )命令将点作为多边形几何体连接到逻辑曲面中。

  1. 在“ 几何 ”窗格中选择以打开 “Tab 菜单”,然后选择“ 流体>粒子流体曲面”。 然后选择该节点,并将其添加到“几何图形 窗格中。

    “粒子流体表面”命令。

  2. 拖动以将 transform1 节点底部 的输出点连接到 particlefluidsurface1 节点左 上角的输入 点。 然后在 pariclefluidsurface1 节点的 右侧选择以激活窗口主要部分的节点。

    已连接节点的屏幕截图。

    在窗口的主要部分,点云被渲染为网格。 “曲面”(Sursurface) 选项卡在“几何” 窗格上方 的右上窗格中被选中。

    曲面选项卡。

  3. 如果颜色数据与点云中的点相关联,则可以通过在“传输属性 ”字段中的值 末尾添加字母 Cd 来使用颜色属性。 然后,颜色将显示在网格上。

    Cd 属性。

  4. 如果网格中存在孔洞(如下图所示),请调整 右上窗格中的“粒子分离”(Particle Separation )和 “体素比例”(Voxel Scale )滑块以尝试解决问题。

    “粒子分离”(Particle Separation) 和“体素比例”(Voxel Scale) 滑块。

  5. 要准备抽取网格(整个过程的下一步),请在输出下 ,将转换为 字段的值从 曲面多边形汤 更改为 曲面多边形 通过这种方式,您可以重新网格网格并对其进行破坏。

    “转换为”字段。

  6. 在“ 几何 ”窗格中单击鼠标右键以打开“Tab 菜单” ,然后选择“多边形 网格>。 添加了一个 remesh 节点以将网格转换为三角形。 通过这种方式,您可以将 3D 对象分解为满足性能要求的多边形计数。

    Remesh 命令。

  7. 拖动以将 particlefluidsurface1 节点底部 的输出点连接到重新网格 节点左 上角的输入 点。 在 remesh 节点的中间 选择以在“ 几何” 窗格上方的窗格中激活它。 然后在 remesh 节点的右侧 选择以激活窗口主要部分的模型。 您现在可以编辑网格的属性,窗口主要部分中的模型将反映这些编辑。

    连接的节点。

  8. 尝试使用“元素大小调整 ”下的 选项,以获得所需的结果。 对于“边长”(Edge Lengths )字段,可以保留默认值(均匀),也可以选择 “自适应”(Adaptive )并调整“相对密度”(Relative Density 滑块(和其他选项)以生成所需的网格。

    元素大小调整选项。

抽取 3D 对象以帮助提高性能

为了实现特定于应用程序的目标,您可能必须对 3D 对象进行剖析。 抽取 是重新计算模型的表面多边形以使用较少的多边形创建类似形状的过程。 Although 这个过程会降低视觉保真度,但它有助于提高性能。 下表显示了用于低场景复杂度的高质量模型和用于高场景复杂 HoloLens 度的低质量模型的并排比较。

高多边形 3D 对象 低多边形 3D 对象
高多边形模型 低多边形模型
500,000 个三角形 8,000 个三角形

抽取模型

  1. 在“ 几何 ”窗格中,按 Tab 键打开“ Tab 菜单”,然后选择 “多边形>”以 在“ 几何 ”窗格中放置 PolyReduce 节点。

    PolyReduce 命令。

  2. 拖动以将 remesh 节点底部 的输出点连接到 polyreduce1 节点左 上角的输入 点。 在 polyreduce1 节点的中间 选择,然后在节点的右侧选择以在窗口的主要部分激活它。

  3. 在“减少量” 下的“目标 ”字段中,选择 “输出多边形计数 ”,然后使用“要保留 的数量”滑块调整多边形计数,以满足性能要求,同时保持可接受的视觉保真 度。

    减少金额选项。

点云现已转换为优化的 3D 网格。 在下一步中,您将在 3D 对象上烘焙高分辨率纹理,以恢复抽取之前存在的一些视觉保真度。

将高分辨率纹理烘焙到低多边形网格上

减少网格中多边形数量的一个缺点是可能会丢失大部分细节。 要恢复其中的一些细节,您可以捕获它并将其应用为在低多边形模型之上分层的纹理。 在此过程(称为 纹理烘焙)中,您需要拍摄高多边形模型中所有曲面的照片,并将它们连接到一个“面组”中,然后悬叠在低多边形模型的顶部。 通过这种方式,您可以获得低多边形模型的性能,但保留了高多边形模型的一些更精细的细节。

纹理坐标(也称为 UV)是存储在模型几何体中的数字对(UV)。 这些数字表示可以将 2D 图像映射到 3D 表面,并使表面属性能够定义为图像。 图像可以是简单的贴花,也可以是复杂的材料组件,例如粗糙度和金属感。 您可以手动生成网格的 UV 位置,也可以半自动或自动完成该过程。 AutoUV 表面算子是 Houdini 中可以生成 UV 的一种工具。 它在创建 UV 期间使用一些自动方法。

烘烤质地

  1. 在“ 几何 图形”窗格中单击鼠标右键以打开 TAB 菜单,然后选择 “Labs>UV>”(实验室)和“实验室自动 UV”(Auto UV )以将 AutoUV 节点添加到场景中。

    Labs AutoUV 命令。

  2. 在“方法 ”下,将“ 方法 ”字段的值更改为 “UV 展开”。

    UV 展开方法已选中。

  3. 拖动以将 polyreduce1 节点底部 的输出点连接到 autouv1 节点顶部 的输入 点。

    拖动以创建连接的节点。

  4. 若要并排查看“之前”和“之后”对象,请选择 “视口布局 ”按钮,然后选择 “并排两个视图”

    两个视图并排选项。

  5. 在窗口的主要部分的下拉菜单中,选择 设置视图 > UV 视口

    UV 视口命令。

    展开的 UV 显示在左侧,3D 对象显示在右侧。

    展开的 UV 和 3D 对象。

  6. 在“ 几何” 窗格中,选择“ 实验室>输出>实验室映射贝克 ”以添加 maps_baker1 节点。

    Labs Maps Baker 命令。

  7. 拖动以将 autouv1 节点底部 的输出点连接到 maps_baker1 节点左 上角的输入 点。 (左上角的点是 低分辨率输入 节点。

    将 autouv1 节点连接到 maps_baker1 节点。

  8. 拖动以将 particlefluidsurface1 节点底部 的输出点连接到 maps_baker 1 节点右 上角的输入 点。 (右上角的点是 高分辨率输入 节点。

    将 particlefluidsurface1 节点连接到 maps_baker 1 节点。

  9. 选择“maps_baker1 ”节点,然后在“ 烘焙”下,将“ 预览通道 ”字段的值更改为 “扩散”。 在“烘焙选项 ”下,将“ 漫反射贴图”字段设置为 “漫反射

    烘烤选项。

    小费

    若要将项目保存在特定文件夹中,请选择上图中显示的“ 输出目录 ”字段旁边的“ 文件选择器 ”按钮。 烘焙纹理时,.png 纹理文件将保存到 在已保存项目的根文件夹中创建的渲染 文件夹中。 通过将项目保存在自己的文件夹中,可以轻松找到烘焙的纹理。

  10. 选择“maps_baker1 ”节点,然后在选项窗格中选择“烘焙

    烘烤按钮的屏幕截图。

  11. 在“ 几何” 窗格中单击鼠标右键以打开“ Tab”菜单,然后选择 “经理材料网络”(Managers>Material Network将 matnet1 节点添加到场景中。

    “材料网络”命令。

  12. 双击 matnet1 节点以打开 VEX Builder 窗格。

    Matnet 节点。

  13. 在 VEX Builder 窗格中 单击鼠标右键,然后选择 Shaders > Principled Shader 以添加 Principled Shader 材质。

    原则着色器命令。

  14. 在选项窗格的“ 曲面 ”选项卡上,使用滑块将“ 粗糙度 ”字段的值更改为 0.6将“金属 ”字段的值更改为 0.1。 (您可以将这些字段设置为所需的任何字段,但我们发现,当这些值与默认值一起使用时,它们是一个很好的起点。

    粗糙度和金属场。

  15. 在“纹理 ”选项卡上的“基色 ”下,选中“ 使用纹理 ”复选框。 然后选择“ 文件选择器 ”按钮,然后选择 之前保存到 渲染 文件夹的*_color.png 纹理文件。 原则着色器现在可以使用了。

    备注

    随意进一步修改材料。 就本教程而言,此配置就足够了。

    使用“纹理”复选框和选定的纹理。

  16. 在 VEX Builder 窗格中,选择“ 后退 ”(向左箭头)按钮以返回到“ 几何” 窗格。

    返回按钮。

  17. 选择 “材质材质”(Material > Material )以在“ 几何” 窗格中放置材质节点。

    材料命令。

  18. 拖动以将 autouv1 节点底部 的输出点连接到 material1 节点顶部 的输入点。

    将 autouv1 节点连接到 material1 节点。

  19. 选择 material1 节点,然后选择 Operator 选择器 按钮。 然后,在“选择运算符 ”对话框中 ,选择 file1>matnet1>principledshader1 以选择您之前创建的有原则着色器。

    选择“操作员”按钮和选定的材料文件。

  20. 在节点的右侧选择以在窗口的主要部分激活它。

纹理渲染在低多边形 3D 对象的顶部。 如果看起来可以接受,请继续下一步。

在低多边形模型上渲染的纹理。

将模型导出到。glb 文件

在此步骤中,您将模型导出到。glb 文件,以便可以将其与 Dynamics 365 Guides and Power Apps 一起使用。

  1. 在“ 几何 ”窗格中单击鼠标右键以打开“Tab 菜单 ,然后选择 “导出>ROP GLTF 输出”。

    ROP GLTF 输出命令。

  2. 拖动以将 material1 节点底部 的输出点连接到 rop_gltf1 节点顶部 的输入 点。

    将 material1 节点连接到 rop_gltf1 节点。

  3. 在上部窗格中,将“导出类型 字段的值更改为 glb

    在“导出类型”字段中选择了 glb。

  4. 选择“ 输出文件 ”字段旁边的“ 文件选择器 ”按钮,然后输入。glb 文件的名称和目标。 请务必将。glb 添加到 文件名的末尾。 完成后,选择“ 接受”。

    “文件选择器”按钮和“文件”字段。

  5. 选择 “渲染到磁盘 ”以完成导出并创建。glb 文件。

    “渲染到磁盘”按钮。

创建一个模板以将您的设置重用于其他点云

为了节省时间和精力,您可以创建一个模板。 这样,您为点云创建的设置可以用于其他点云。 Although 您仍然必须手动选择 烘焙 ,并且可能需要调整一些值,您可以自动执行大部分处理。

创建模板

  1. 将当前正在使用的几何图形替换为默认几何图形。 此步骤使模板文件变得轻量级,以便快速加载。

    1. 在“几何图形 窗格中,选择文件节点中间的位置以切换到上部窗格中的“文件 菜单。

    2. 将“几何文件” 字段的值更改为 default.bgeo ,然后选择“重新加载几何”

    3. 请注意,几何图形已重新绘制,因此它现在是一个通用多维数据集。

    4. 将文件名更改为通用名称,例如 “模板”。

    重绘几何图形。

  2. 选择“ 文件 > 保存”,然后输入您会记住的名称,例如 Prep_Template

    “保存”命令。

  3. 关闭 Houdini。

使用模板

  1. 打开 Houdini,选择“ 文件>打开”,然后选择刚刚创建的模板。

    打开命令。

  2. 在“几何图形 窗格中,选择文件节点中间的位置以切换到上部窗格中的“文件 菜单。 然后选择“ 几何文件 ”字段旁边的“ 文件选择器 ”按钮以选择。ply 点云文件。

    “选定节点”和“文件选择器”按钮。

  3. 选择“ 重新加载几何体 ”以将点云加载到场景中。

    “重新加载几何”按钮。

  4. 转到 “maps_baker1 ”节点,然后选择“ 烘焙 ”,为 3D 对象烘焙新纹理。

    烘烤按钮。

  5. 在 material1 节点的 右侧选择以查看烘焙模型。

    “材料”节点的右侧。

  6. 请执行以下步骤之一:

    • 如果对 3D 对象感到满意,请转到 “rop_gltfB ”节点,然后选择 “渲染到磁盘 ”以导出 3D 对象。

      “渲染到磁盘”命令。

    • 如果对 3D 对象的外观不满意,请调整 particlefluidsurface1、remesh polyreduce1 节点的设置 当您的模型看起来可以接受时,再次烘烤您的纹理,然后导出 3D 对象。

查看 Dynamics 365 Guides 3D 对象 或 Power Apps

准备好 3D 对象后,请使用以下链接了解有关在 or Dynamics 365 Guides 中使用 Power Apps模型的详细信息:

详细信息

本教程中的屏幕截图取自 Houdini 软件程序,以提供有关如何使用 Houdini 软件的明确说明。 了解更多。 SideFX Houdini

Microsoft Corporation 对因使用 Houdini 或依赖这些说明而引起的任何形式的损害概不负责,并明确表示不承担任何责任。 本文档仅用于向我们的客户提供一般信息,不考虑任何个性化的商业计划或规范。

本文档中商标名称和图像的使用仅用于提供信息和描述性目的,Microsoft Corporation 不对其使用提出任何商业声明,也不建议赞助或认可。