whoimi

A geek blog

View on GitHub

在Unity渲染当中使用SDF

SDF通常是在光线追踪场景当中使用,不过最近尝试在unity当中使用这个技术。

尝试的出发点就是:宇宙魔方。

81a5d8936ced30636c3cf43e532234e3174375fd

他的效果就是正方体内部有一个可以看得到的球体。

最简单的思路就是:使用一个透明的正方体,内部放一个自发光的球体。他的问题在于如果大量使用可能会提升overdraw和drawcall。如果想做扭曲和折射更是需要一个额外的grabpass或者别的渲染流程。如果遇到不透明的水晶,但是内部有自发光物质时。如何控制不透明物质漏出内部的自发光球体是很大的问题。

所以,我尝试了SDF,结果如下:

2019623-134856

我们可以看到,同一个材质可以应用到任何模型上,并且他们都是不透明物体,可以有自己的材质同时还能维持内部自发光效果。同时由于光线经过不同的表面产生的折射效果也很容易就可以实现。

实现方式就是以物体表面为起点,沿视线方向(用法线扰动视线方向来模拟折射)进行SDF渲染,由于只有一个球体所以速度非常快。

他的扩展就是可以使用不同的SDF函数来生成不同的基础图形。