模拟黑洞图像_实时模拟黑洞视觉效果 | 开源

写在前面

这是我上学期图形学的大作业。鉴于中文互联网上实在缺少黑洞视觉模拟的文章,最近有空,随手写一写;没怎么组织,内容有点混乱,见谅。

读懂结果图需要了解一些黑洞物理。强烈推荐:

我算是半个天文爱好者,虽说理论知识基本停留在“pop science”的程度(笑)。前段时间,EHT首次拍到黑洞的照片的新闻铺天盖地;恰逢图形学大作业选题,我就在想,能不能做个实时的黑洞模拟?《星际穿越》的卡冈图雅黑洞

《星际穿越》的卡冈图雅黑洞,给我的印象很深(虽然有相当多艺术化的处理,与物理真实图像的相差很多)。视觉效果上,我尽量与它接近。

最难的部分还是广义相对论的计算模型。其实计算的任务本身很直接,就是找到光在史瓦西度规下的运动轨迹(测地线方程);奈何隔行如隔山,维基上的测地线方程推导,看不懂,结论也是无从下手使用。最后找打了另外一篇做黑洞离线光线追踪的文章,写得很详实,我直接用了它的结论。地址:https://rantonels.github.io/starless/

后续在GPU上实现就比较trivial了,无非是写个像素着色器,做光线步进。然而,想要实时却又不失效果,只能是trick、trick、大量的trick。没太多值得写的。有兴趣可以看源码,后面会给出。

另外,其实当时是打算支持任意多粒子的,这样可以做出恒星被引力撕碎的效果。不过当时时间比较紧,这个功能就被砍掉了;以后有心情再做(逃)。

效果

Edit:似乎图片压缩过后质量一般,大家可以移步Github看,链接下面有。题图默认场景,带有一个恒星,演示引力透镜近距离吸积盘近距离正面光子层附近(左侧为黑洞阴影,趋近水平)爱因斯坦环

源码zhongjn/Messier87​github.com

可执行程序zhongjn/Messier87​github.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑洞是一种极为神秘的天体,由于其巨大的质量和引力场,对于物理学家而言具有极大的研究价值。在Matlab中,可以使用一些数学模型和计算方法来生成黑洞模拟图像,以便更好地理解黑洞的物理特性。 以下是一个简单的例子,展示了如何使用Matlab生成黑洞模拟图像: 1. 定义黑洞的Schwarzschild半径,可以使用下面的公式计算: ```matlab R_s = 2 * G * M / (c^2); ``` 其中,G表示引力常数,M表示黑洞的质量,c表示光速。 2. 创建一个二维网格,用于表示黑洞的空间范围。可以使用meshgrid函数生成二维网格坐标: ```matlab [x, y] = meshgrid(linspace(-10, 10, 100)); ``` 这里假设黑洞的空间范围为[-10, 10]。 3. 计算每个网格点到黑洞中心的距离,可以使用下面的公式: ```matlab r = sqrt(x.^2 + y.^2); ``` 4. 根据Schwarzschild半径和距离计算引力势能,可以使用下面的公式: ```matlab phi = -G * M ./ r; phi(r < R_s) = -G * M / R_s; ``` 这里假设黑洞的质量为M,引力常数为G。 5. 绘制等势能线,以便更好地观察黑洞的形状。可以使用contour函数绘制等势能线: ```matlab contour(x, y, phi, linspace(-2*G*M/R_s, 0, 100)); ``` 这里假设绘制100条等势能线,范围为[-2GM/R_s, 0]。 运行上面的代码,可以看到一个简单的黑洞模拟图像,其中等势能线表示黑洞的引力场分布。需要注意的是,这只是一个简单的模拟,实际的黑洞形态和引力场分布非常复杂,需要更加精细的计算和模拟方法才能得到准确的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值