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智能助手,随时解答生活与工作的多样问题

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

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

Transly

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

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

讯飞智文

讯飞智文

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

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

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

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多