Project Icon

Displacement-MicroMap-Toolkit

NVIDIA置换微网格工具包创建与查看解决方案

NVIDIA置换微网格工具包提供库、样例和工具,用于创建和查看置换微网格。它支持gltf格式资产处理,包含置换微贴图烘焙和GPU加速重网格化功能。工具包配备图形化工作台,便于微网格检查和工具交互。基于Displacement Micro-Map技术,需要支持VK_NV_displacement_micromap的驱动程序。

NVIDIA 位移微地图工具包

本工具包提供了用于创建和查看位移微网格的库、样本和工具。 这是一项正在进行中的工作,欢迎反馈!

要对微网格进行光线追踪,需要最新的支持 VK_NV_displacement_micromap 的驱动程序,例如可在 https://developer.nvidia.com/vulkan-driver 获取的 Vulkan Beta 驱动程序

我们建议先查看微网格基础幻灯片以及 dmm_displacement 迷你样本

还有 NVIDIA GTC 演示 压缩微网格入门 [S51410]基于 GPU 的大型网格交互式重新网格化 [S51567]

NVIDIA 微网格技术涵盖了不透明度微地图和位移微地图。 目前,此 SDK 仅涉及位移,因为不透明度有单独的 SDK。

构建

此仓库包含子模块。克隆后,使用以下命令初始化它们:

git submodule update --init --recursive --jobs 8

唯一的手动依赖项是 Vulkan SDK。对于 Windows,请确保在安装过程中安装可选的 "glm",或者如果单独安装,请设置 cmake 的 GLM_INCLUDE_DIR 位置。

其他依赖项将在 cmake 配置步骤中下载。

Windows

已在 Visual Studio 2017、2019 和 2022 上测试。使用 cmake-gui 生成项目文件。

  • 安装 Vulkan SDK,包括 glm(如果单独安装 glm,请设置 cmake 的 GLM_INCLUDE_DIR
  • 克隆此仓库并初始化子模块
  • 运行 cmake-gui,源代码 = 此仓库,构建文件夹 = 任意位置
  • 配置并生成。Vulkan 路径应由 SDK 安装程序设置
  • 用 Visual Studio 打开 path\to\build\micromesh_toolkit.sln
  • 在解决方案资源管理器中,右键单击 micromesh_toolbox 并选择"设为启动项目"
  • 构建 -> 生成解决方案

有关使用示例,请参阅 docs/examples.md

Linux

已在 gcc 11.2.1 和 11.3.0 上测试。这假设已安装构建工具和 cmake。

  • 安装 Vulkan SDK
  • 安装 glm(例如 sudo apt install libglm-devsudo dnf install glm-devel
  • 安装 X11、GLFW 和 nVidia-ML 库 (sudo apt-get install libx11-dev libxcb1-dev libxcb-keysyms1-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libvulkan-dev libglfw3-dev libnvidia-ml-dev
  • 克隆此仓库并初始化子模块
  • 运行 source path/to/vulkan-sdk/1.3..<version>/setup-env.sh
  • 运行 cmake -DVULKAN_BUILD_DEPENDENCIES=on -S . -B path/to/build
  • 运行 make -C path/to/build -j

有关使用示例,请参阅 docs/examples.md

示例微网格

该工具包提供了一些基本工具来处理和烘焙位移微地图。可以将其视为创建一个应用于低多边形网格的高度图,不同之处在于高度图被高度压缩,支持硬件加速光线追踪,并且不需要 UV。这里提供了一些示例起始资产来演示工具包的使用。下载这些资产以开始,但也可以尝试使用您自己的资产。

请注意,这些工具目前仅支持 glTF 格式的资产。其他格式必须进行转换。

有关使用这些网格的典型资产处理示例,请参阅 docs/examples.md

SDK和工具包结构

micromesh SDK

NVIDIA 置换微贴图 SDK是一个用于嵌入其他应用程序和工具的低级 API。它具有 C 风格的 API 以及与 API 无关的 GPU 接口,以便于这种嵌入。因此,它有时使用起来不太容易。所有功能都通过 micromesh 命名空间提供,并频繁使用 micromesh::ArrayInfo 结构,这允许它以指针和步长组合的形式传递数据。所有用户可见的数据都由用户分配,因此某些操作分两步执行,其中 micromeshOpSomethingBegin 返回所需的大小,而 micromeshOpSomethingEnd 完成它。也可以使用 micromeshOpContextAbort 中止此类操作。因此,micromesh::Context 是有状态的,但相当轻量级,以便您可以为每个线程创建一个。目前,上下文内还有一些基本的自动线程处理。

bary 文件

  • NVIDIA 置换微贴图 BaryFile:用于存储 微贴图.bary 文件容器的库。该仓库提供了三个库:
    • bary_core:核心库定义了容器中使用的结构,并提供了辅助验证和序列化的基本函数。C 风格接口。
    • bary_utils:实用工具库具有 C++ 实用程序,可帮助使用 stl 容器存储数据以及通过文件操作加载或保存内容。
    • bary_tool:一个命令行工具,用于打印 .bary 文件内容的关键信息。

meshops API

meshops API 是 micromesh SDK 之上的一层,提供更易于使用的高级操作,如烘焙。这些函数通常对内存中提供的单个网格进行操作,通过称为 meshops::MeshView 的抽象来实现。这一层使用 Vulkan 实现来执行各种基于 GPU 的操作,并利用 nvpro_core 框架来实现。

这个 meshops 层仍在进行中,因为我们正在向其迁移更多功能,可能会比 micromesh API 看到更多的变化。

  • meshops_core:为 meshops 命名空间提供主要框架,并涵盖了几个基本操作
  • meshops_bake:提供各种基于从基础网格到高细节参考网格的光线追踪操作。 我们想指出,这不是商业级的烘焙器,它主要用于示例目的。
    • meshops_remesher:重新网格化器运行一种新颖的 GPU 加速网格简化算法,并生成其他有助于置换微贴图烘焙的网格属性。
    • 为高细节参考网格生成置换微贴图,可选择在运行时进行曲面细分以考虑提供的额外高度图置换。
    • 从高细节参考网格重新采样现有纹理到基础网格(还允许创建或重新采样切线空间法线贴图)。

工具和库

所有工具都操作 glTF 2.0 文件,并支持 NVIDIA 的额外微贴图特定 glTF 扩展。规范可在 https://github.com/KhronosGroup/glTF/pull/2273 查看。

所有微贴图数据都存储为 .bary 文件,这是一种新的容器/文件格式,专门设计用于允许直接存储光线追踪 API 消耗的数据,无需额外处理。有关更多详细信息,请参阅开源的 NVIDIA 置换微贴图 BaryFile

  • micromesh_tool:这是基于meshops操作的主要工具。 我们计划将所有工具操作迁移到这里,但尚未完成迁移和重构。 目前工具操作基于独立的场景状态(每次重新加载gltf),未来将有一个持久的内存场景供操作修改。 该工具目前支持:
    • 使用meshops_bake进行烘焙
    • 使用meshops_core进行预细分,计算细分级别并调整基础网格细分以适应5级细分限制
    • 使用meshops_core进行位移细分,创建应用所有微图位移的细分网格(将网格展平为传统三角形)
    • 优化:裁剪和压缩微网格。由于只有压缩的微图与光线追踪API兼容,这可用于准备未压缩的微图进行渲染。
    • 使用meshops_remesher进行重新网格化,简化网格作为烘焙的基础网格。
  • micromesh_python:这是一个Python模块,功能类似于micromesh_tool,公开了meshops_*层的工具包操作,但不依赖glTF。它操作的网格几何和其他属性由更通用的numpy数组定义。

微型示例

微型示例以最小化方式展示了我们的API,不依赖加载模型或其他文件,而只是程序化生成内容以减少复杂性

  • dmm_displacement:学习如何使用VK_NV_displacement_micromap扩展对位移微网格进行光线追踪。 它还展示了如何使用micromesh SDK以最小化方式创建所需数据。 此示例强制要求支持该扩展。

编写时VK_NV_displacement_micromap仍处于测试阶段,意味着 扩展可能会发生变化。请勿在生产代码中使用此处的头文件!

微网格工具箱

micromesh_toolbox是一个图形化工作台, 允许检查微网格并与一些工具交互。它依赖VK_NV_mesh_shader来实现微网格的光栅化显示。VK_KHR_acceleration_structure用于烘焙微图。 如果可用,选择Rendering -> RTX时会使用VK_NV_displacement_micromap通过光线追踪渲染微网格。VK_NV_displacement_micromap 在基于Ada Lovelace架构的RTX 40系列GPU中引入。之前的RTX卡也支持,但Ada性能更佳。如果看到缺少扩展的消息,请更新到最新驱动程序(注意:beta驱动可在https://developer.nvidia.com/vulkan-driver 获取)。

微网格的光栅化,尤其是压缩后的,本身是一个较为复杂的话题。一个专门的示例可在 https://github.com/nvpro-samples/vk_displacement_micromaps 找到。

编写时VK_NV_displacement_micromap仍处于测试阶段,意味着 扩展可能会发生变化。请勿在生产代码中使用此处的头文件!

微网格工具

命令行工具micromesh_tool可用于 自动化和定义持久的资产管道。

微网格Python

工具包的Python绑定,汇总在Jupyter Notebook中,可用于在任何支持Python环境的应用程序中集成资产管道。

更多详情请参见micromesh_python

基本数据结构

微网格是使用2的幂次方方案细分基本三角形的结果。 它由微三角形微顶点组成。

三角形W,U,V

          V                     V                       V
          x                     x                       x
         / \                   / \ 微                  / \
        /   \                 /   \ 三角形            x _ x 微顶点
       /     \               /     \                 / \ / \
      /       \             x _____ x               x _ x _ x
     /         \           / \     / \             / \ / \ / \
    /           \         /   \   /   \           x _ x _ x _ x
   /             \       /     \ /     \         / \ / \ / \ / \ 
  x _____________ x     x _____ x _____ x       x _ x _ x _ x _ x
W                  U   W                  U   W                   U

细分级别0           细分级别1             细分级别2
  1个微三角形          4个微三角形           16个微三角形
  即基本三角形

有关如何使用它生成位移的更多详细信息,请参见docs/data_structures.md

微网格资产管道

我们在微网格资产管道幻灯片 以及docs/asset_pipeline.md中描述了从原始输入网格创建微网格资产所需执行的核心步骤

关于最新版本

版本1.2

  • 在meshopsOpCompressDisplacementMicromaps()中添加对eR11_unorm_packed_align32的支持
  • 添加micromesh_tool --normal-textures-stem选项以生成法线贴图
  • micromesh_tool --resample-resolution参数现在接受2D分辨率
  • 光线追踪时或缺少法线贴图时的平面着色选项
  • 更新到最新的nvpro_core
  • 使用heightmap_rtx在光线追踪时预览高度图置换
  • 保存场景时并行写入纹理
  • 修复从基础网格材质烘焙高度图的问题 - 现在使用参考网格
  • 修复加载*.exr高度图的支持
  • 使用--height-textures-stem时过滤动态范围的异常值(实验性)
  • 使用软件纹理插值在光栅化时预览高度图置换

版本1.1

  • 在micromesh_toolkit中实现具有动态LOD的高度图渲染
  • 估算分批烘焙高分辨率高度图的内存
  • Micromesh USD模式定义和libusd API
  • meshopsOpApplyBounds()用于应用(并丢弃)方向边界到位置和方向
  • 改进对烘焙整个场景的glTF实例化/节点层级支持
  • 修复重采样时图像文件名生成的问题
  • 避免保留未使用和空的glTF扩展引用
  • 修复automation/link_heightmaps.py中常规纹理名称的匹配问题

第三方许可

本项目嵌入或包含(作为子模块)多个第三方开源库和/或由它们衍生的代码。所有这些库的许可证都包含在本项目nvpro_core依赖的PACKAGE-LICENSES文件夹中。

支持联系

欢迎直接在GitHub页面提交问题,或通过displacedmicromesh-sdk-support@nvidia.com联系NVIDIA

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号