GitHub – nvpro-samples/vk_gltf_renderer:使用光线追踪器和光栅渲染 glTF 场景 (Vulkan)
| Name | ||
|---|---|---|
|
E1ABBC7 · last week
|
||
|
|
2 months ago
|
|
|
|
last month
|
|
|
|
4 months ago
|
|
|
|
2 weeks ago
|
|
|
|
last week
|
|
|
|
last year
|
|
|
|
last year
|
|
|
|
4 months ago
|
|
|
|
last month
|
|
|
|
4 years ago
|
|
|
|
last year
|
|
|
|
2 months ago
|
|
|
|
last month
|
|
|
|
4 months ago
|
|
存储库文件导航
| 路径追踪者 | 光栅 |
|---|---|
![]() |
![]() |
此应用程序演示了 glTF 2.0 场景的双模式渲染器,实现光线追踪和光栅化管线。它展示了共享 Vulkan 资源在渲染模式(包括几何体、材质和纹理)中的利用情况。
此版本带来了显着的改进和现代化:
-
现代 Vulkan 框架:现在使用 Nvpro-Core2,它提供:
- Vulkan 1.4 支持
- Volk 用于动态 Vulkan 加载
- 现代 C++ 功能和改进的体系结构
- 增强的调试和验证层
- 更好的资源管理
-
俚语着色语言:将 GLSL 替换为俚语,用于:
- 增强的着色器开发体验
- 更好的跨平台兼容性
- 改进的着色器调试功能
- 热重载支持 (F5)
- 新式着色器语言功能
-
DLSS-RR 降噪器:添加了对 NVIDIA 的 DLSS 光线重建降噪器的支持(可选,使用 启用)。
USE_DLSS
- glTF 2.0 (.gltf/.glb) 场景加载
- 全局照明的路径追踪
- 基于 PBR 的光栅化
- HDR 环境映射和 Sun &; Sky 模拟
- 高级色调映射
- 摄像控制系统
- 广泛的调试可视化选项
- Vulkan SDK(最新版本)
- Nvpro-Core2 框架
- 俚语阴影语言(包含在nvpro_core2中)
- 克隆存储库
git clone https://github.com/nvpro-samples/nvpro_core2.git
git clone https://github.com/nvpro-samples/vk_gltf_renderer.git
- 生成项目
cd vk_gltf_renderer
cmake -B build -S . -DUSE_DLSS=ON -DUSE_DRACO=ON
cmake --build build --config release
- 运行应用程序
._binReleasevk_gltf_renderer.exe
- 安装 [可选] :如果要打包应用程序
cmake --install .
要启用 Draco 网格压缩,您需要启用选项 CMake。在 GUI 界面中,您将看到选项 .如果您使用的是命令行,则可以添加到 cmake 命令。这将下载 Draco 库,并将其包含在项目中。USE_DRACO-DUSE_DRACO=ON
此版本增加了对 NVIDIA 的 DLSS 光线重建 (DLSS-RR) 降噪器的支持。DLSS-RR 为路径追踪图像提供最先进的基于 AI 的去噪,显着提高图像质量和时间稳定性。
如何启用:
默认情况下,DLSS-RR 处于禁用状态。要启用它,请在配置项目时设置 CMake 选项:USE_DLSS=ON
cmake -DUSE_DLSS=ON ..
这将自动下载并集成所需的 DLSS SDK。然后,降噪器将作为渲染器中的一个选项提供。
注意:DLSS-RR 需要兼容的 NVIDIA GPU 和驱动程序。
- glTF 2.0 (.gltf/.glb)
- 图像(HDR、PNG、JPEG 等)
- 缓冲区(几何体、动画、蒙皮等)
- 纹理(基色、法线、金属、粗糙度等)
- 材料(PBR 等)
- 动画
- 皮肤
- 变体
- 相机
- 灯
- 节点
- 场景
- 取样
- 纹理
- 扩展
以下是此应用程序支持的扩展列表
- KHR_animation_pointer
- KHR_draco_mesh_compression
- KHR_lights_punctual
- KHR_materials_anisotropy
- KHR_materials_clearcoat
- KHR_materials_diffuse_transmission
- KHR_materials_dispersion
- KHR_materials_emissive_strength
- KHR_materials_ior
- KHR_materials_iridescence
- KHR_materials_sheen
- KHR_materials_specular
- KHR_materials_transmission
- KHR_materials_unlit
- KHR_materials_variants
- KHR_materials_volume
- KHR_mesh_quantization
- KHR_texture_basisu
- KHR_texture_transform
- KHR_xmp_json_ld
- EXT_mesh_gpu_instancing
- KHR_node_visibility
实现具有全局照明的路径追踪器。
选项包括:
- Max Depth :路径可以执行的反弹次数
- 最大采样数:每次帧迭代时每个像素的采样数
- 光圈:景深
- 调试方法:显示基色、金属色、粗糙度和一些属性等信息
- 间接和 RTX 管道之间的选择。
- 降噪器:A-trous 降噪器
利用与路径追踪器共享的 Vulkan 资源,包括:
- 场景几何体
- 材料数据
- 纹理
- 着色功能
选项包括:
- 显示线框:在几何图形顶部显示线框
- 超级采样:渲染图像 2 倍并使用线性滤镜进行 blit。
- 调试方法:显示基色、金属色、粗糙度和一些属性等信息
打开线框选项的示例
| 展示 | ![]() ![]() ![]() ![]() |
| 各向异性 | ![]() ![]() |
| 衰减 | ![]() |
| Alpha 混合 | ![]() |
| 动画 | ![]() |
| 透明涂层 | ![]() |
| 色散 | ![]() |
| IOR | ![]() |
| 发射的 | ![]() |
| 彩虹 | ![]() |
| 守时 | ![]() |
| 光泽 | ![]() |
| 传输 | ![]() ![]() |
| 变体 | ![]() |
| 别人 | ![]() |
还可以调试各种输出通道,例如:
| 金属 | 粗糙度 | 正常 | 基础 | 发射的 | 不透明度 | 切线 | TEX 坐标 |
|---|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
有一个内置的 Sun & Sky 物理着色器模块。
场景的照明可以来自 HDRi。
可以将 HDR 模糊到不同的级别。
HDR 也可以旋转以获得正确的照明。
背景也可以是纯色,如果另存为 PNG,则会考虑 alpha 通道。
如果没有色调映射器,我们就无法获得良好的结果。这是通过计算着色器完成的,可以进行不同的设置。
支持多个色调映射器:
- 电影
- 神秘海域2
- 剪辑:简单伽玛校正(线性到 sRGB)
- ACES:学院颜色编码系统
- 农业X
- Khronos PBR : PBR 中性规格
摄像机导航遵循 Softimage 默认行为。这意味着,相机始终注视着一个兴趣点并围绕它运行。
以下是默认导航:
可以通过编辑相机信息的值来微调相机信息。
注意:复制会以文本形式复制剪贴板中的相机,按粘贴按钮将解析剪贴板以设置相机。
前任:{0.47115, 0.32620, 0.52345}, {-0.02504, -0.12452, 0.03690}, {0.00000, 1.00000, 0.00000}
还可以在第二个选项卡中保存和恢复多个相机。按按钮保存相机,按中间按钮删除相机。通过按下其中一个保存的相机,它的位置、兴趣、方向和 FOV 将平滑地改变。+
注意:如果 glTF 场景包含多个摄像机,它们将在此处显示。
还存在其他导航模式,例如飞行,其中 、 、 键也会移动相机。wasd
景深仅适用于光线追踪,设置可以在RendererPathtracer>Depth-of-Field
nvvk::Application 是一个类,它提供了一个用于创建 Vulkan 应用程序的框架。它封装了 Vulkan 实例、设备和图面创建,以及窗口管理和事件处理。
使用 时,您可以附加到它,并且每个元素都将针对不同的状态被调用,从而允许自定义应用程序的行为。该类为这些函数提供了默认实现,因此您只需覆盖所需的函数。nvvk::Applicationnvvkhl::IAppElementnvvkhl::IAppElement
以下是工作原理的简要概述:nvvk::Application
创建 的实例时,它会设置 Vulkan 实例、设备和表面。它还会创建一个窗口并设置事件处理。nvvk::Application
我们附加了许多元素,例如:main()
ElementCamera:这允许控制单例相机ElementProfiler:允许在 GPU 上计时执行ElementBenchmarkParameters:命令行参数和测试目的ElementLogger:重定向窗口中的日志信息ElementNvml:显示 GPU 的状态
但是我们感兴趣的主要内容,也是此应用程序的主要内容是 .这是将控制场景和渲染的那个。GltfRendererElement
该类提供了一个主循环,用于持续处理事件并更新应用程序状态。在主循环中,它调用以下函数:nvvk::Application
-
onAttach():
每当元素附加到应用程序时,都会调用此函数。在 中,我们正在创建内部所需的资源。GltfRendererElement -
onDetach():
当用户尝试关闭窗口时调用此函数。您可以覆盖此函数来处理窗口关闭事件。 -
onRender(VkCommandBuffer):调用
此函数以使用帧的当前命令缓冲区渲染帧。您可以覆盖此函数以使用 Vulkan 执行渲染作。在这里调用活动渲染器。GltfRendererElement -
onResize():
调整 的大小时调用此函数。您可以覆盖此函数来处理窗口大小调整事件。在 G 缓冲区中将被重新创建viewportGltfRendererElement -
onUIRender():
调用此函数以允许渲染 UI 并查询任何鼠标或键盘事件。在 中,我们渲染 UI,但也渲染最终图像。渲染的图像被视为一个 UI 元素,该图像覆盖了整个 ImGui 窗口。IAppElementGltfRendererElementviewport -
onUIMenu()
将修改我们在窗口标题中看到的内容。它还将创建菜单,例如 ,并处理一些组合键。FileHelp -
onFileDrop()
将接收被删除的文件的路径。如果是 .gltf、.glb、.obj 或 .hdr,它将加载该文件。文件类型由其扩展名决定 – 3D 场景文件(.gltf、.glb、.obj)作为场景加载,而 HDR 文件(.hdr)作为环境贴图加载。
GLTF 场景使用 tinygltf 加载,然后转换为 Vulkan 版本。Vulkan 版本是场景的简化版本,其中几何体存储在缓冲区中,纹理上传到 GPU。Vulkan 版本用于光栅和光线追踪。
场景由节点组成,其中每个节点可以有子节点,每个节点可以有一个网格体。网格体由图元组成,其中每个图元都有一个材质。材质由纹理和参数组成。但是,这些都没有直接用于渲染,因为我们使用的是场景的简化版本。
加载场景后,我们继续解析它以收集 RenderNodes 和 RenderPrimitives。RenderNode 表示节点树的扁平化版本,其中存储了世界变换矩阵和材质。相比之下,RenderPrimitive 表示图元的唯一版本,其中存储了索引和顶点缓冲区。
RenderNodes 表示要渲染的元素,而 RenderPrimitives 则用作用于渲染的数据的引用。
如果场景中有动画,则场景部分下将出现一个新部分。它允许播放/暂停、步进和重置动画,以及更改其速度。
如果有多个场景,则场景部分下将出现一个新部分。它将显示所有场景及其名称。单击场景名称将切换到该场景。
如果有多个材质变体,则场景部分下将出现一个新部分。它将显示所有材质变体及其名称。单击变体名称会将其应用于模型。
可以可视化场景层次结构,选择节点,修改它们的变换和材质,达到某种程度。
这是文本的较短版本,专为 GitHub 上的开发人员量身定制:
若要快速测试着色器,请使用该按钮热重载俚语着色器 (F5)。着色器位于文件夹中,并在构建过程中自动编译。Recompile Shadersshaders
注意:如果没有共享库和着色器,热重载将无法工作,但应用程序仍将运行。
该应用程序附带了一些工具来帮助调试和可视化场景。
分析器是一种允许测量在 GPU 上花费的时间的工具。可以测量在渲染的不同阶段花费的时间,例如路径追踪、光栅化、色调映射等。
记录器是一种允许查看日志信息的工具。可以通过选择日志级别来过滤日志信息。
Nvml 是一种允许查看 GPU 状态的工具。可以看到温度、功率、内存使用情况等。
有一个切线空间工具,可以修复或重新创建模型的切线空间。当法线贴图看起来不正确或场景中的切线存在错误时,这很有用。
修改 GLTF 文件中的材质,并可选择将场景从 Z 向上重新定向到 Y 向上。
usage: gltf-material-modifier.py [-h] [--metallic METALLIC] [--roughness ROUGHNESS] [--override] [--reorient]
input_file output_file
位置参数:
input_file Path to the input GLTF file.
output_file Path to save the modified GLTF file.
选项:
-h, --help show this help message and exit
--metallic METALLIC Set the metallic factor (default: 0.1).
--roughness ROUGHNESS Set the roughness factor (default: 0.1).
--override Override existing material values if set.
--reorient Reorient the scene from Z-up to Y-up.
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 使用光线追踪器和光栅渲染 glTF 场景 (Vulkan)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办

























































































































