虚幻4渲染编程(光线追踪篇)【第五卷:RayMarching In Raytracing】

MY BLOG DIRECTORY:

YivanLee:专题概述及目录​zhuanlan.zhihu.com图标

INTRODUCTION:

在实时光线追踪里有个MissShader的概念,不知道为什么一看到“miss”我就想到了“return”?进而想到“失败返回”?这种惯性思维挺奇怪的。其实在MissShader只是光线未击中的时候要执行的shader,它还能做很多事情。延迟渲染,实时光线追踪和RayMarching各有优势,如果能把他们的优势都结合一下该有多好,所以下面我在Raytracing里尝试结合Raymarching的渲染方式。


MAIN CONTENT:

因为光线追踪的时候我们已经就从屏幕发射射线了,像ShaderToy一样,在做Raymarching之前需要RayMarchingRay的起始位置,这在Raytracing的时候就已经有了。

我们在RayTracingDebug.usf里添加如下代码:

v2-9bf58881eab346e65156211bc5a7dfd4_b.jpg

启动引擎把View调到对应的debug选项你将会看到:

v2-b591cc62497c84c9f393f2af29e50db0_b.jpg

这不就是RayMarching的第一步么!我们这样就轻松完成了一切麻烦的架构。下面就可以愉快地在世界空间做RayMarching啦。

为raymarching添加距离场函数和距离场场景构建函数

v2-d7c75e6415a7092983bd511590d6db54_b.jpg

然后再RayTracingDebugMainRGS中的miss分支进行raymarching

v2-b82d093d124ee7e7cb05bd1848aa0472_b.jpg

最后打开场景后我们将会看到:

v2-0f8188abd62b11beece3e19a9a6375cb_b.gif
v2-bb64291408a020664082a85cc089380e_b.jpg

我们成功在世界场景中Marching一个球出来。

修改下距离场函数,构建两个球出来:

v2-efc1ad9b64ffbd8c87296fcef44b4bbc_b.jpg
v2-cbbc580cc016958539804f428d50a594_b.jpg

最后用梯度方程求出法线:

float3 normal(float3 ro)
{
    float2 eps = float2(0.002, 0.0);
    return normalize(float3(
        scene(ro + eps.xyy) - scene(ro - eps.xyy),
        scene(ro + eps.yxy) - scene(ro - eps.yxy),
        scene(ro + eps.yyx) - scene(ro - eps.yyx)
    ));
}
v2-c6fd1d4ffafe1e93fc2d883838253ff6_b.jpg

RayMarching内的修改如下:

v2-a910a2ba8fac3e6d6f905ac4d6dd7c95_b.jpg

最后可得效果如下:

v2-6da3b5083630696e20d569335f7895a2_b.jpg

至此我们把光线追踪和Raymarching结合到了一起。


SUMMARY AND OUTLOOK:

现在已经可以将延迟渲染,光线追踪,Ray marching全部结合到一起,可以发挥无穷大的力量,相互弥补了双方的不足,我觉得未来这块有很大潜力。我这里只是抛砖引玉。

Enjoy it !


NEXT:

YivanLee:虚幻4渲染编程(光线追踪篇)【第六卷:Shadow in real-time raytracing】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpongo11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值