Jeff's blog


  • Home

  • Tags

  • Categories

  • Archives

一个普通的水面涟漪Shader

Posted on 2020-03-26 | In Shader

都2020年了,咱终于升级到HDRP,试了试ShaderGraph,感觉还是好简陋,日常报错卡顿。作为练手的第一个Shader先不写复杂的了。

生成水波

单个涟漪就是计算到起点的距离,根据距离去做水波。应该是可以用正弦函数去做的,但是截取单个水波有点麻烦,这里偷懒直接用smoothstep的三次函数去做了。内外两个半波相乘得到一个环形。
波的生成
通过根据时间调整距离来让水波动起来。
手动扩散
接下来就要根据时间去计算偏移量,首先计算一个周期让它能够重复扩散。
计算周期
上面是扩散完成一次的周期,增大了一点来让每一次扩散之间有一定时间间隔。
下面的是水波传播一个波长的周期,这里是为了抵消初始时水波已经扩散的距离。没有的话水波会凭空出现。
然后就是用时间去做扩散。时间取模之后减去之前一个波长的周期,用来对距离做减法。这里引入一个相位来做随机。
波的扩散
最后要做一个波的衰减,不然最后波会凭空消失。
波的衰减
也是根据距离,做一个幂函数的衰减。最后作用到水波上。

分块重复

有了单个水波以后我们让他重复一下。先做个uv的分块。
UV分块
下面的噪声用来做每块里相位的随机。
生成单个水波
输入到之前写好的水波生成里。由于是uv分块水波不能跨越边界,调一下中心和扩散距离防止穿帮。
叠加多个水波
重复4次吧,再多了有点重复了。最后把4种水波叠加起来,求个法线,就做完了。

最终结果

最终
还算可以接受吧,其实因为分块不能大幅度调整位移,跟帧动画原理差不多,但是由于每个块加了一个随机相位效果还不错的样子。至于ShaderGraph怎么和其他材质做混合还是要再研究一下…

Hello World

Posted on 2020-03-26

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Jeff2310

努力成为正经程序员

2 posts
1 categories
1 tags
© 2020 Jeff2310
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4