中级Shader教程04 2D海洋

本篇主要技术点有: 1. sin波函数的理解和应用 2. 极坐标+sin 对于波动圆环的实现 3. 2D模拟3D中”分层”的概念 1.原理:sin函数是周期函数,对于无限重复的现象是一种很好的模拟 类似傅里叶变换一样,复杂的函数可以用简单的sin cos 组合进行比逼近 波浪这种效果是一种典型。2.分析:1.云的实现形状:多个不同大小,偏移的...
摘要由CSDN通过智能技术生成

layout: post
title: “中级Shader教程04 2D海洋”
date: 2018-03-27 16:09:03
author: Jiepeng Tan
categories:

  • shader tutorial
    tags: shader_tutorial sea wave shader
    img_path: /assets/img/blog/ShaderTutorial2D/Snow
    mathjax: true

Shader 视频教程

本篇主要技术点有:

  1. sin波函数的理解和应用
  2. 极坐标+sin 对于波动圆环的实现
  3. 2D模拟3D中"分层"的概念

1.原理:

sin函数是周期函数,对于无限重复的现象是一种很好的模拟
类似傅里叶变换一样,复杂的函数可以用简单的sin cos 组合进行比逼近
波浪这种效果是一种典型。

2.分析:

1.云的实现
  1. 形状:多个不同大小,偏移的圆,通过mix的方式合成云朵
  2. 动态:简单的走UV
    当然你也可以使用类似太阳光晕的那种方式实现
2.太阳的实现
  1. 形状:光的边缘是通过极坐标中的角度带入多个不同频率的sin函数中是实现
  2. 动态:不同频率的sin函数不同的相位偏移速度来实现
3. 海洋的实现
  1. 原理:观察海洋,海浪的变化是连续的,随机的,而且是相似的。
    这几个特点是不是非常像前面文章提到过的Noise的感觉,局部是连续的,但整体的感觉又是随机的。
    很类似对吧,后面我们实现山脉(FBM)和3D海洋(FFT)的时候,再回过头来看待这两种方式,会发现他们的合成形式是一样的,这里我们使用多个频率,振幅不同的Sin函数海实现对波浪的模拟。
    我们通过"多层"的方式来模拟3D效果,同样需要考虑透视对于图像大小,范围,清晰度的影响
  2. 形态:分层实现,单层中叠加不同频率,振幅,偏移的方式sin函数
  3. 动态:不同的层不同的频率,同一层中,不同频率之间拥有不同的相位偏移速度

3.代码实现:

为了方便画圆,调整UV为(-0.5,-0.5,0.5,0.5)

1.云朵

通过不同的圆来合成云朵

float Circle(fixed2 uv,fixed2 center,float size,float blur){
   
    uv = uv - center;
    uv /= size;
    float len = length(uv);
    return smoothstep(1.,1.-blur,len);
}
//简单直观的合成方式
float DrawCloud(fixed2 uv,fixed2 center,float size){
   
    uv = uv - center;
    uv /= size;
    float col = Circle(uv,fixed2(0.,0.),0.2,0.05);
    col =col *  smoothstep(-0.1,-0.1+0.01,uv.y);//将圆中不想要的的部分给剪切掉
    col += Circle(uv,fixed2
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JiepengTan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值