本工具包提供了用于创建和查看位移微网格的库、样本和工具。 这是一项正在进行中的工作,欢迎反馈!
要对微网格进行光线追踪,需要最新的支持 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 配置步骤中下载。
已在 Visual Studio 2017、2019 和 2022 上测试。使用 cmake-gui 生成项目文件。
GLM_INCLUDE_DIR
)micromesh_toolbox
并选择"设为启动项目"有关使用示例,请参阅 docs/examples.md。
已在 gcc 11.2.1 和 11.3.0 上测试。这假设已安装构建工具和 cmake。
sudo apt install libglm-dev
或 sudo dnf install glm-devel
)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。
NVIDIA 置换微贴图 SDK是一个用于嵌入其他应用程序和工具的低级 API。它具有 C 风格的 API 以及与 API 无关的 GPU 接口,以便于这种嵌入。因此,它有时使用起来不太容易。所有功能都通过 micromesh
命名空间提供,并频繁使用 micromesh::ArrayInfo
结构,这允许它以指针和步长组合的形式传递数据。所有用户可见的数据都由用户分配,因此某些操作分两步执行,其中 micromeshOpSomethingBegin 返回所需的大小,而 micromeshOpSomethingEnd 完成它。也可以使用 micromeshOpContextAbort 中止此类操作。因此,micromesh::Context
是有状态的,但相当轻量级,以便您可以为每个线程创建一个。目前,上下文内还有一些基本的自动线程处理。
micromesh_core
:用于创建或修改微贴图和微网格数据的基本数据结构、实用工具和操作的库。micromesh_displacement_compression
:处理置换微贴图压缩的库。micromesh_displacement_remeshing
:用于基于 GPU 的重新网格化的库。微贴图
的 .bary
文件容器的库。该仓库提供了三个库:
bary_core
:核心库定义了容器中使用的结构,并提供了辅助验证和序列化的基本函数。C 风格接口。bary_utils
:实用工具库具有 C++ 实用程序,可帮助使用 stl 容器存储数据以及通过文件操作加载或保存内容。bary_tool
:一个命令行工具,用于打印 .bary
文件内容的关键信息。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
进行位移细分,创建应用所有微图位移的细分网格(将网格展平为传统三角形)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
仍处于测试阶段,意味着 扩展可能会发生变化。请勿在生产代码中使用此处的头文件!