1、glTF IBL Sampler工具简介
glTF IBL Sampler工具是一个用于生成和处理图像基础光照(Image-Based Lighting, IBL)环境贴图的工具。
执行转化流程如下:
Environment HDR image → Cube Map
Cube Map → Filtered Cube Map
Filtered Cube Map → KTX2 Output File
依赖第三方库:Vulkan SDK\STB\KTX-Software\Glslang\SPIRV-Tools
2、下载安装vcpkg install vulkan
3、编译KTX-Software
4、编译glslang
其中glslang依赖googletest
4、编译SPIRV-Tools
通过vcpkg install spirv-tools存在版本问题,建议下载源码cmake手动编译。
SPIR-V Tools可检查 SPIR-V 代码的正确性,对 SPIR-V 代码进行各种优化,以提高性能和减少代码大小。可以将其他着色器语言(如 GLSL 或 HLSL)转换为 SPIR-V 格式,或将 SPIR-V 转换为更高层次的表示。这对于跨平台开发和支持不同图形 API(如 Vulkan 和 OpenGL)非常重要。可以帮助开发者分析 SPIR-V 代码的性能,调试着色器问题,并理解代码的结构和执行流程。
5、编译glTF IBL Sampler
右键cli和GltflblSampler重新生成。
6、用法
命令行界面(Command Line Interface,CLI)将环境高动态范围(High Dynamic Range,HDR)图像作为输入。经过滤波的镜面反射和漫反射立方体贴图可以存储为 KTX1 或 KTX2(带有基础压缩)。
-inputPath:全景图像路径(默认)或立方体贴图路径(如果设置了 inputIsCubeMap 标志)
-outCubeMap:滤波后的立方体贴图输出路径(默认 = outputCubeMap.ktx2)
-outLUT:BRDF 查找表(Look-Up Table,LUT)输出路径(默认 = outputLUT.png)
-distribution:要采样的法线分布函数(Normal Distribution Function,NDF)(朗伯(Lambertian)、GGX、查理(Charlie))
-sampleCount:用于滤波的采样数量(默认 = 1024)
-mipLevelCount:镜面反射立方体贴图的 Mip 级别数。如果省略,则根据输入全景图的分辨率选择最佳 mipmap 级别。
-cubeMapResolution:输出立方体贴图的分辨率。如果省略,则根据输入全景图的分辨率选择最佳分辨率。
-targetFormat:指定输出纹理格式(R8G8B8A8_UNORM、R16G16B16A16_SFLOAT、R32G32B32A32_SFLOAT)
-lodBias:应用于筛选的细节级别偏差(默认值 = 0)
7、源码地址
https://github.com/KhronosGroup/glTF-IBL-Sampler
编译过程中着色器出现很多问题,主要修改primitive.vert和lib.cpp。
工具命令:
成功生成ktx2格式文件。