展示 HN:我从零开始编写了一个 C++ 光线追踪器,没有使用 AI
Luz 是一个使用 C++20 开发的光线追踪器,它从零开始制作,没有任何第三方依赖。它支持蒙特卡洛路径追踪、全局光照、BVH 加速、自适应采样、去噪、气氛散射、自定义场景文件以及 Blender 到 Luz 的导出器。 特点: - 蒙特卡洛路径追踪 - 全局光照 - 多线程 CPU 渲染 - 自适应采样 - 去噪器(NFOR 风格) - 球体、平面、矩形、三角形、立方体、体积和 OBJ 网格 - 兰伯特、金属、电介质、发光和各向同性材料 - 区域灯、点光源、球体光和方向灯 - 自定义 .luz 场景文件 - .blend 到 .luz 转换器 - 通过 CLI 或场景文件完全可自定义渲染参数 - PDF 的重要性采样 - BVH 加速,包括带有分箱 SAH 构建和近首遍历的打包网格 BVH - 带散射的气氛模拟 - 景深、抗锯齿、曝光、对比度、色调映射、伽马校正和辉光 - BMP 和 TIFF 输出 - 具有渲染、去噪、后处理和评分细分的确定性基准测试工具 要求: - C++20 编译器 - Make 或 CMake 3.16+ - Python 3,仅用于可选工具/脚本 快速开始: 使用 Makefile 构建:make 渲染一个捆绑的示例场景:./Luz --file examples/scenes/blender_monkey.luz --samples 50 --resolution 300x300 默认输出为 render.bmp。场景文件可以设置 outputfilename=...,CLI 可以覆盖常见的渲染设置。 运行测试套件:make test 基准测试: Luz 包含渲染、去噪、后处理和整体评分比较的确定性基准测试。 make benchmark BENCH_CPUS=1 BENCH_THREADS=1 > before.csv make benchmark BENCH_CPUS=1 BENCH_THREADS=1 > after.csv make benchmark-compare BEFORE=before.csv AFTER=after.csv 有关详细信息,请参见 docs/benchmarks.md。 CMake: CMake 构建也可用: cmake -S . -B build cmake --build build ctest --test-dir build 平台支持: 支持的平台:macOS、Linux、Windows 在 macOS 和 Linux 上,Makefile 是主要路径。 在 Windows 上,使用 CMake 与 MSVC 或基于 MinGW 的 Makefile 目标: make windows WSL 也支持作为 Linux 构建环境。 构建优化: 默认情况下,发布构建会针对执行构建的机器进行优化。Makefile 启用 -O3、使用 -march=native 进行本地 CPU 调整,以及启用 -flto 的链接时间优化。它还启用快速浮点模式,当编译器/平台支持时。 CMake 使用相同的发布意图:-O3、本地 CPU 调优和在支持时的跨过程优化/LTO。这些默认设置生成更快的本地渲染,但使用 -march=native 构建的二进制文件可能无法在较旧或不同的 CPU 上运行,LTO 可能会暴露特定工具链的链接器问题。 如果遇到非法指令崩溃、链接器错误或需要更便携的二进制文件,请禁用激进选项并从干净对象重新构建: make clean make NATIVE=0 LTO=0 对于 CMake 构建,配置时关闭优化开关: cmake -S . -B build -DLUZ_NATIVE_OPTIMIZATIONS=OFF -DLUZ_ENABLE_LTO=OFF cmake --build build --clean-first CLI 使用: ./Luz [选项] -f, --file PATH 加载一个 .luz 场景文件 -r, --resolution WxH 覆盖渲染分辨率 -s, --samples N 覆盖每个像素的样本数 --adaptive [true|false] 启用自适应逐像素采样 --no-adaptive 禁用自适应采样 --adaptive-min-samples N 自适应停止前的最小样本数 --adaptive-threshold F 相对自适应噪声阈值 --adaptive-check-interval N 自适应收敛检查间隔 -mlb, --maxLightBounces N 覆盖最大光线反弹次数 --max-light-bounces N --maxLightBounces 的别名 -t, --threads N 使用 N 个工作线程进行渲染 --seed N 随机采样的种子 --gamma true|false 切换伽马校正 -tm, --tonemapping true|false 切换色调映射 --bloom true|false 切换辉光 --exposure EV 曝光补偿 --contrast F 显示对比度倍数 --denoise [true|false] 输出去噪的伴随渲染 --no-denoise 禁用去噪 -o, --output PATH 覆盖渲染输出路径 --denoise-output PATH 覆盖去噪输出路径 --render-times 输出 renderTime.bmp --benchmark 运行内置基准场景 --benchmark-case NAME 基准案例:default、many-objects、mesh-bvh、diffuse、postprocess、atmosphere、lights、emissive-geometry、primitives-materials、volumes、obj-mesh 自适应采样: --adaptive 将 --samples 视为每个像素的最大样本数。每个像素使用一个渐进的逐像素样本序列,至少渲染 --adaptive-min-samples,然后定期检查亮度和 RGB 置信区间。非常暗的像素使用保守的最小值才能停止,因此罕见的光贡献不太可能被错误地视为已收敛的黑色。较低的阈值保留更多细节,花费更多时间。对于最终渲染,首先使用高的最大样本计数,然后使用以下值进行调整: ./Luz --file exports/stormtroopers.luz --samples 4096 --adaptive --adaptive-min-samples 512 --adaptive-check-interval 64 --adaptive-threshold 0.005 --denoise
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡