看到这段代码的时候,俺愣了一下。
就这几行?没有复杂的指针,没有繁琐的内存管理,看起来就像是在写 Python。
scene = Scene(size=(800, 600), lights=[SunSkyLight(Vec3f(1, 2, 8))])
cam3d!(scene)
mesh!(scene, my_geometry; material=Hikari.Gold())
img = colorbuffer(scene;
device=AMDGPU.ROCBackend(),
integrator=Hikari.VolPath(samples=100, max_depth=12),
)
但这玩意儿跑起来,是实打实的物理级 GPU 光线追踪。
一个名为 Hikari 的渲染器,把图形学领域的“圣经”级代码 pbrt-v4,搬到了 Julia 语言上。
更有意思的是,在这个 NVIDIA 统治江湖的时代,它竟然先支持了 AMD。
能跑,且好用
这几年,关于 Julia 的声音确实小多了。
几年前还有人喊“Julia 要取代 Python 做数据科学”,现在也没人提了。
但这并不代表这门语言死了,相反,它正在往更深、更硬核的地方钻。
Hikari 就是个例子。
它不是孤立的,而是深度集成在了 Julia 的可视化生态 Makie 里。
这意味着你可以在同一个环境里,既做科研数据分析,又直接生成电影级的渲染画面。不需要切换语言,不需要导出模型。
只要装好环境,几行代码,光线追踪的数学魔法就开始在 GPU 上飞转。
有意思的是,开发者还特意加了一个“交互式窗口”。你调整摄像机,画面就跟着实时变,这种流畅感,谁用谁知道。
AMD Yes
通常这类开源项目,N 家的 CUDA 是标配,是亲儿子,AMD 的 ROCm 往往是后妈养的,要么不支持,要么全是 Bug。
但 Hikari 反过来了。
官方文档写得明明白白:目前只有 AMD GPU(通过 AMDGPU.jl)经过了充分测试,保证能跑得顺滑。
至于 NVIDIA?虽然通过 CUDA.jl 理论上能用,但开发者直接摊牌:还需要更多测试。
这点连 Hacker News 上的老外都看傻了。
有评论说:“看到个计算包优先支持 AMD 而不是 NVidia,真挺有意思的。看来 ROCm 终是要摆脱‘支持差’的恶名了。”
还有人好奇地问,这种复杂的加速结构(BVH)遍历,KernelAbstractions.jl 到底能不能扛得住?是不是还得写厂商特定的代码?
从目前的反馈看,Julia 的抽象层做得不错,至少没让 AMD 掉链子。
移植“圣经”的痛与快乐
Hikari 不是凭空造轮子,它是站在巨人的肩膀上。
它的核心逻辑直接移植了《Physically Based Rendering》这本书里的 pbrt-v4 代码。这可是图形学界的“圣经”,作者是 Matt Pharr、Wenzel Jakob 这些大神。
但这移植过程,绝对不轻松。
有读者在评论区问:“那本书是极好的资源,但实际把代码搬过来是个什么体验?”
虽然作者没细说,但从目前的“未来工作”列表里,能看出不少端倪。
现在的 Hikari,还只是个扎实的原型。
GPU 内存管理还很粗暴, eagerly allocated,用完还不赶紧释放,复杂场景很容易爆显存。
BVH 构建、光线批处理、内核占用率,这些性能深水区,都还有巨大的优化空间。
甚至 CPU 后端还有分配器的 Bug,怀疑是 Julia 语言层面的问题,还得去查。
但这正是开源的魅力所在。
不完美,甚至有点粗糙,但它把最难的那一步迈出去了。
还没到“封神”的时候
虽然我很想吹爆这个项目,但咱们还得实事求是。
评论区里有人提到了一个很细节的问题:材质描述。
在原本的 PBRT 里,材质之间的接口限制很大。
你想渲染一个装着水和冰块的玻璃杯?没门,除非你改源码,或者用些 Hack 手段。
Hikari 既然是基于 pbrt-v4 移植的,大概率也继承了这些“历史遗留问题”。
对于普通用户来说,这确实挺劝退的。
而且,现在的测试套件还很少,连视觉回归测试都没有。代码里也还有不少实验性质的接口,随时可能变。
Hikari 目前更像是一个给极客准备的玩具,或者是科研人员手中的利器,离生产级的 Blender 替代品还有很长的路要走。
写在最后
老实讲,Julia 没能取代 Python,一点都不意外。生态壁垒这东西,太难打破了。
但在那些需要极致性能、需要把科学计算和图形渲染无缝结合的“无人区”,Julia 正在悄悄地建立自己的优势。
这次 Sovereign Tech Agency 的投资,Muon Space 的赞助,说明这事儿不仅仅是爱好者自嗨,真的有人在用。
当一个语言能让你用脚本般的语法,调动 GPU 的每一滴算力去模拟光影时,它的生命力,其实比我们想象的要顽强得多。
你说呢?
参考链接:
https://makie.org/website/blogposts/raytracing/