无法在只读编辑器中编辑_Begin raymarching in UnrealEngine 4【第一卷:在材质编辑器中启程】...

MY BLOG DIRECTORY:

YivanLee:专题概述及目录​zhuanlan.zhihu.com
3513176d60c706c97a2a59af5cf1bdd8.png

INTRODUCTION:

RayMarching是一个比较好玩的技术,不需要什么顶点数据纹理数据就能画出很多东西。如果你对raymarching的概念还不是很清楚可以去看看下面的文章:

Ray Marching and Signed Distance Functions​jamie-wong.com
26f4e1e5989ee35c536a4ea57e036dfa.png

RayMarching其实是在像素着色器中自己创建渲染规则。我们使用距离场或者浓度场的方式描述场景中的物体,通过从屏幕发射一条射线来将场景渲染到屏幕上,如下视频所示。

6182620ef4cf0e491a109f81e149aff4.png
https://www.zhihu.com/video/1157969111958102016

下面我来梳理一下ray marching的步骤

(1)构建距离场,构建距离场的方法有很多,我们可以用公式或者用3Dtexture都可以,或者用2Dtexture的序列图3Dtexture拟合

(2)RayMarching出表面

(3)贴图映射 光影着色啥的

所以我们的代码框架就有了:

//高度场元素函数
float sphere(float3 p, float3 c, float r)
{
}
float cube( float3 p, float3 b, float r )
{
}
//高度场构建函数
float scene(float3 rp)
{
}
//raymarching函数
float4 render(float3 ro, float3 rd)
{
}
主函数
float4 MainImage(float3 ro, float3 rd)
{
}

可以看到我们的代码思路十分清晰,sphere函数和cube函数是距离场的子元素,scene是构建整个距离场,render函数负责raymarching,mainimage函数是我们的主函数。


MAIN CONTENT:

下面我们来一步步在unreal中实现一个简单的ray marching吧

【1】第一步:新建一个工程,版本是4.19的。

【2】第二部:把我们的UnrealShaderToy丢进我们的项目的plugin中

9db06807da8f2d06460f4ae4c18507b6.png

这个插件在技术美术群的群文件中,技术美术群号是:192946459

41e327cc3dd095ff561629149894971f.png

然后启动项目,确保插件是启用的

5d280e8828d3ab138e9e6944d34e0d48.png

然后在材质编辑器的主窗口呼出shadertoy节点

7db0cb4468f90efcedc8b4d3ee8ca738.png

键入如下代码:

9084250f7e002a1e8aa1d5e34d6cacfd.png

2c570df3805d83572e43d9e79da54e04.png

或者使用我前面介绍的修改引擎的方法:https://zhuanlan.zhihu.com/p/52652262

56f388c79e7ba632056f36cebc6b2c07.gif

然后你就能看到两个图元组成的几何体啦,让我们来修改一下scene函数

3f7fa424e5556a9d71b439e59a499c2f.gif
float scene(float3 rp)
{
    float d = 0;
    float sp = sphere(rp,float3(0,100,0),100);
    float sp2 = sphere(rp,float3(0,0,100),80);

    d = (sp < sp2) ? sp : sp2;

    return d;
}

可以看到有两个球啦

a5d9dffbd4b2bd0a9d577fe19b7a76e0.gif

让我们来加入更多变化,比如更新球的位置

1b134c2bbf709913b03a11911a0693ef.png

39895352e0e7e9b0ba73a1f428508075.gif

大概的raymarching框架就是这样了,后面我们为这个框架加入整套PBR管线。


SUMMARY AND OUTLOOK:

Raymarching在计算资源充足的情况下可以为游戏提供一个新的渲染思路,而且Ray marching的渲染思路接近光线追踪,几乎能渲染想要的一切,缺点就在于计算量大。


NEXT:

YivanLee:Begin ray marching in unreal engine 4【第二卷:开始加入光照】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值