Displacement-MicroMap-Toolkit

Displacement-MicroMap-Toolkit

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

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

NVIDIA微置换图工具包开发渲染Github开源项目

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

编辑推荐精选

商汤小浣熊

商汤小浣熊

最强AI数据分析助手

小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。

imini AI

imini AI

像人一样思考的AI智能体

imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
下拉加载更多