写在前面
这是我上学期图形学的大作业。鉴于中文互联网上实在缺少黑洞视觉模拟的文章,最近有空,随手写一写;没怎么组织,内容有点混乱,见谅。
读懂结果图需要了解一些黑洞物理。强烈推荐:
我算是半个天文爱好者,虽说理论知识基本停留在“pop science”的程度(笑)。前段时间,EHT首次拍到黑洞的照片的新闻铺天盖地;恰逢图形学大作业选题,我就在想,能不能做个实时的黑洞模拟?《星际穿越》的卡冈图雅黑洞
《星际穿越》的卡冈图雅黑洞,给我的印象很深(虽然有相当多艺术化的处理,与物理真实图像的相差很多)。视觉效果上,我尽量与它接近。
最难的部分还是广义相对论的计算模型。其实计算的任务本身很直接,就是找到光在史瓦西度规下的运动轨迹(测地线方程);奈何隔行如隔山,维基上的测地线方程推导,看不懂,结论也是无从下手使用。最后找打了另外一篇做黑洞离线光线追踪的文章,写得很详实,我直接用了它的结论。地址:https://rantonels.github.io/starless/
后续在GPU上实现就比较trivial了,无非是写个像素着色器,做光线步进。然而,想要实时却又不失效果,只能是trick、trick、大量的trick。没太多值得写的。有兴趣可以看源码,后面会给出。
另外,其实当时是打算支持任意多粒子的,这样可以做出恒星被引力撕碎的效果。不过当时时间比较紧,这个功能就被砍掉了;以后有心情再做(逃)。
效果
Edit:似乎图片压缩过后质量一般,大家可以移步Github看,链接下面有。题图
默认场景,带有一个恒星,演示引力透镜
近距离
吸积盘近距离
正面
光子层附近(左侧为黑洞阴影,趋近水平)
爱因斯坦环
源码zhongjn/Messier87github.com
可执行程序zhongjn/Messier87github.com