Mystery Mountains

Mystery Mountains

作者:Dave_Hoskins,网址:https://www.shadertoy.com/view/llsGW7

在这里插入图片描述

核心

// Add texture layers of differing frequencies and magnitudes...
#define F +texture(iChannel0,.3+p.xz*s/3e3)/(s+=s) 
...
t = F F F F F F F F;

类似随机布朗函数的过程,不过这里我们进行采样的,不是某个噪声函数,而是纹理。所以我们这里要不断改变的是采样的UV和幅度值( 1 / ( s + = s ) 1/(s+=s) 1/(s+=s))。这样得到我们的t

主函数

void mainImage( out vec4 c, vec2 w )
{
    vec4 p=vec4(w/iResolution.xy,1,1)-.5,d=p,t;
    p.z += iTime*20.;d.y-=.4;
    
    for(float i=1.5;i>0.;i-=.002)
    {
        float s=.5;
        t = F F F F F F F F;
        c =1.+d.x-t*i; c.y-=.1;
        if(t.x>p.y*.007 + 2.1)break;
        p += d;
    }
}

我们进行逐行分析,首先第一行:先是得到我们的UV,并转换为当前的世界坐标值p ( u , v , 1 , 1 ) (u,v,1,1) (u,v,1,1);然后初始化射线步进的步长d;最后是t的声明。

vec4 p=vec4(w/iResolution.xy,1,1)-.5,d=p,t;

第二行:移动我们的观察位置;d.y-=0.4让我们的整体观察方向是朝下,例如我们设置为0.7,效果就变成了。这样的话,其实我们这步就相当于旋转相机的朝向了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXuclsIC-1623377515253)(Mystery Mountains .assets/image-20210511154800667.png)]

进入的我们的射线步进过程。s就是我们随机布朗函数的核心参数(决定了曲线的自相似性)。然后是使用宏进行这个过程。

c =1.+d.x-t*i; c.y-=.1;

这个是根据我们的t进行颜色计算。根据我的分析,d.xt*i(核心还是步进过程)决定我们的颜色变化的平滑程度(前者更是作用不大)。t*i造成目前这种,山峰顶是黑色,而往下逐渐变白的情况。仔细看下代码,也很容易看出,越早结束循环,c的值越小(因为t*i越大)。c.y-=0.1决定整体色调:上图是紫色,是因为我们减去了G通道。

if(t.x>p.y*.007 + 2.1)break;
p += d;

这也是本代码的核心,毕竟决定如何结束步进过程。这里我们取t.x(不具备特殊性)作为高度值和当前位置的高度进行比较,但注意要乘上0.007进行单位转化,以及加上海平面2.1

不具备特殊性)作为高度值和当前位置的高度进行比较,但注意要乘上0.007进行单位转化,以及加上海平面2.1

最后则是步进更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JMXIN422

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

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

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

打赏作者

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

抵扣说明:

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

余额充值