背景
Godot的GDShader虽然简单好用,但是由于过度封装照顾新手,想要创建复杂且效果优化都不错的的Shader实则困难。
登陆Godot Shaders网站寻找相关水面Shader,大多只能做到叠加两层法线扰动,加上根据深度模拟光线吸收,加上根据深度差计算的物体边缘泡沫。如果有更复杂一些的,那就是加上折射,焦散,最多再在里面写一个非常暴力耗时的SSR。
这系列文章介绍了我制作这个可交互水面的完全过程,但是涉及一些Godot比较高级的渲染API知识,例如Compositor和Compute Shader。所以先写出这个用不着这两个东西的第一部分内容,单纯讨论水面本身。本系列文章最后结果如图:
