5 个稳定版本
| 1.0.7 | 2024年2月16日 | 
|---|---|
| 1.0.6 | 2024年2月14日 | 
| 1.0.5 | 2023年6月15日 | 
| 1.0.3 | 2022年10月1日 | 
| 1.0.1 | 2021年9月27日 | 
在 #hdr 中排名 1
每月下载 71 次
43KB
865 行
hdrfix - 将 HDR 截图映射到 SDR 的工具
这是一款我为自己使用而编写的工具,用于处理 Microsoft Flight Simulator 的 HDR (高动态范围) 截图,这些截图是通过 Nvidia 的 GeForce Experience 游戏覆盖捕获实用程序捕获的,该实用程序以 32 位浮点精度 scRGB 保存 JPEG XR,以及一个 8 位通道的 PNG,具有较低分辨率的附加信息,但使用 BT.2100 颜色空间和传输函数编码。
输出文件为常规 SDR (标准动态范围) PNG,采用标准的 sRGB 颜色空间。有几个参数可以调整转换过程。
JPEG XR 转换使用 jpegxr crate 完成,该 crate 包装了 Microsoft 的 BSD 许可证 JPEG XR 编解码器。
现在还可以与从 Windows 游戏栏保存的 16 位浮点输入以及从 Xbox 的 10 位 RGB 输出一起使用,但这尚未经过充分测试。
作者,仓库等
- Brooke Vibber <bvibber @ pobox.com>
- https://github.com/brion/hdrfix
- 许可证:MIT (包装和转换代码),BSD (jpegxr 库)
依赖项
- clap 用于 CLI 设置
- time 用于 CLI 实用程序中的速度检查
- thiserror 用于错误聚合
- rayon 用于多线程
- glam 用于向量/矩阵数学
- png 用于读取输入 PNG
- mtpng 用于写入输出 PNG
- jpegxr 用于 JPEG XR C 库(以及通过它,bindgen 和 cc)
- oklab 用于感知颜色修改
- mozjpeg 用于写入输出 JPEG
- half 用于读取 16 位浮点输入
安装
从二进制发布下载
- 从 https://github.com/brion/hdrfix/releases 下载最新版本
- 将 hdrfix.exe和(可选)watch.bat复制到所需的目录中
- 例如,C:\Users\<Yourname>\Videos\Microsoft Flight Simulator
从源代码检出
cargo install --path=.
从 crates.io
cargo install hdrfix
用法
基本转换
hdrfix screenshot.jxr output.jpg
监视文件夹,将新添加的所有 *.jxr 文件转换为 *-sdr.jpg
hdrfix --watch=.
请注意,示例 Windows 批处理文件 watch.bat 包含了使用此模式的飞行模拟器截图设置。
交互式帮助!
hdrfix --help
可调整参数
- --auto-exposure=N将输入信号的百分比值平均以重新缩放输入到中性中色调。默认为- 0.5,这会使输入保持不变。
- --exposure=N通过所需的 f 停数上下调整输入信号。默认为- 0,传递原始信号。
- --pre-levels-min将输入亮度设置为 0 点,可以是绝对单位或百分比值- 0%..- 100%。默认为- 0。
- --pre-levels-max将输入亮度设置为 1.0 点,可以是绝对单位或百分比值- 0%..- 100%。如果使用色调映射,将保留较亮的颜色。默认为- 1。
- --pre-gamma-N在缩放后对输入应用指数伽玛曲线。默认为- 1.0,传递原始信号。
- --tone-map=A设置 HDR 到 SDR 色调映射算法;选项包括- linear,它将对亮度大于 1.0 的任何内容进行裁剪/校正,或者- hable、- uncharted2或- aces电影模式,或者- reinhard或- reinhard-rgb,它将 Reinhard 色调映射算法应用于亮度或单独的 RGB 颜色通道。亮度模式可以更好地保留颜色,但可能会导致需要校正的出 gamut 颜色;RGB 模式将很好地应用对较亮颜色的去饱和度,但也会稍微改变颜色和亮度。默认为- hable,与- uncharted2相同,但具有不同的亮度/去饱和度处理以匹配 ffmpeg。
- --hdr-max=N为 Reinhard 色调映射算法设置最大亮度级别。较高的值将在非常亮的部分保留更多细节,但会在高光处略微降低对比度。默认为- 100%,检查图像中最亮的值。较低的值会导致非常亮的细节爆炸,但稍微照亮暗区。可以是 nits 的亮度或输入数据的百分比。
- --saturation=N为 Reinhard 色调映射中确定去饱和度速度的系数设置。默认为- 1,不进行去饱和度。
- --post-gamma-N在色调映射后对输出应用指数伽玛曲线。默认为- 1.0,传递原始信号。
- --color-map=A设置色调映射后超出色域颜色的颜色映射算法。选项包括:- clip,可以改变颜色和亮度;- darken,可以引起相对对比度的重大变化,但精确保留颜色;或- desaturate,保留亮度,但根据需要使颜色去饱和以适应色域。默认为- clip。
- --post-levels-min设置保留的最小输出亮度级别,可以是绝对值- 0..- 1单位,也可以是百分比- 0%..- 100%。较暗的颜色将在输出中变为黑色。默认为- 0。
- --post-levels-max设置保留的最大输出亮度级别,可以是绝对值- 0..- 1单位,也可以是百分比- 0%..- 100%。较亮的颜色将在输出中变为白色。默认为- 1。
- --watch=P监视一个文件夹路径以查找新的- *.jxr文件,并将它们转换为SDR- *-sdr.jpg文件。
推荐设置
我正在使用当前默认设置("hable"色调映射)来转换微软飞行模拟器的截图,到目前为止看起来不错。还在调整,所以可能会改变。
待办事项/路线图
确定/短期
- 为JPEG输出添加压缩参数
可能/稍后/不急
- 看看是否能从Vec3A而不是Vec3中获得性能提升(到目前为止测试时略慢)
- 具有HDR和SDR并排视图的基本GUI
- GUI滑块可调整参数
- 拖放和打开/保存对话框支持
- 扩展到在--watch模式下运行后处理脚本
构建
cargo build --release
需要Rust和Cargo,以及C编译器。在Windows上,安装Visual Studio Community Edition的C++开发工具或命令行构建工具。在Linux或Mac上,由于jpegxr C库代码仍在适配,可能会出现一些编译问题。
由于C代码,必须安装LLVM + Clang才能完成构建;在Windows上,可以从https://github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.0或当前版本获取发布版本。在Linux或Mac上,使用系统或用户首选的包管理器。
依赖项
~45MB
~454K SLoC