[自学记录09*]Unity Shader:在Unity里渲染一个黑洞

一、前言

记得很久很久以前,在ShaderToy上看过一个黑洞的效果,当时感觉太*8帅了,于是这几天就尝试自己弄了一个。

 

下面是我自己实现的黑洞

可以看到还是略逊一筹(感觉略逊百筹)。主要是吸积盘的纹理细节不够丰富,以及Bloom的调整。

本文着重介绍原理,工程实现等有空再写一篇文章。

二、引力透镜效应 

引力透镜效应,简单的说就是因为黑洞的质量太大,导致光线弯曲,以至于我们能看见黑洞后面的东西。如上图所示,如果绿色的球是某种发光物体,红色是光线原本应该发出去之后的方向,但因为黑洞的引力太大导致光线发生了弯曲,进入了人的眼睛,于是我们便看到了该物体(在眼睛的第一视角,这个绿色的球应该是一个绿色的环围着黑洞)。 、

而另一些光线就没那么幸运了,比如方向朝向黑洞中心的光线,它们收到的引力更大,无法逃逸,所以就不会被我们看见了。

传统的渲染都是默认我们的光线沿直线传播,但这里不同,光不再沿直线传播了。于是想要更精确的模拟光线的弯曲就只能使用RayMarching了,也就是光线步进

那么光线如何弯曲呢?

很简单,我们并不需要精确模拟,所以也不需要太复杂的公式,只需要简单的高中物理知识就能模拟一个大概的样子。简单地说光线原本沿直线传播,但因为黑洞的存在,我们需要在光线步进的途中时刻改变它的方向,用什么改变呢,当然是加速度了。记得吗?加速度也是矢量。

在光线步进的途中,根据万有引力定律求出当前点所受的引力就可以求出当前点的加速度大小和加速度方向,根据加速度改变下一次步进的方向和距离,最后采样就可以了。

三、SDF体渲染

黑洞中心的事件视界黑球,我们采用了SDF体渲染的方法,规定一个球心和一个半径,接着使用球的SDF,如果光线进入到了这个范围,直接返回黑色就好了。

吸积盘同样用SDF体渲染的方法,规定一个半径,然后高度随半径衰减就可以了。

最后如果之前光线步进到吸积盘上,就返回吸积盘的颜色就好了。

为吸积盘添加纹理,实现更多细节。当然也可以采用三维纹理。当然,你要先把纹理转为极坐标,否则无法形成旋转效果。

最后加上Bloom等后处理,一个黑洞就诞生了。

参考资料 

在Unity中渲染一个黑洞 - GuyaWeiren - 博客园 (cnblogs.com)

如何渲染一个黑洞(一) - 知乎 (zhihu.com)

Unity黑洞吸附是指在Unity游戏引擎中,利用编程技术实现的一种物理效果,即当游戏角色或物体进入黑洞范围时,会被黑洞吸附并被拉进黑洞的中心位置。 在实现这一效果的过程中,首先需要在Unity中创建一个黑洞物体,通常是一个具有重力属性的空心球体。接着,为黑洞物体添加一个吸附组件,这个组件将负责计算吸附物体的位置和速度变化。 当一个物体进入黑洞的感应范围时,通常会通过碰撞检测或者物体触发器来实现,黑洞吸附组件会开始计算被吸附物体的位置和速度。这个计算过程可以根据黑洞的吸附能力和被吸附物体的质量来确定。 一般情况下,黑洞吸附效果应该包括以下几个要点:首先,被吸附物体会逐渐接近黑洞的中心,并且速度会逐渐加快。其次,黑洞的吸附范围应该是有限的,否则物体不能离开黑洞。最后,被吸附的物体应该能够被黑洞完全吸进去,不再出现。 在实现黑洞吸附效果时,可以根据需求进行调整。例如,可以借助粒子效果来模拟黑洞的旋转和光影效果,增强黑洞的视觉效果和真实感。此外,还可以结合音效,使得黑洞吸附的过程更加生动有趣。 总而言之,Unity黑洞吸附是一种可以在游戏中实现的物理效果,它可以通过编程技术来实现,通过定义吸附范围和物体属性等参数来控制被吸附物体的位置和速度变化,从而实现黑洞吸附的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值