【博物纳新】是UWA重磅推出的全新栏目,旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。
大千世界,无奇不有!更多精彩内容尽在开源库:lab.uwa4d.com
导读
WaveProvider是一个组件和着色器库,可以使用Unity轻松表达波形,利用该组件可以实现受物理影响的水面动态涟漪效果,
效果展示
实现原理
1. 添加用于绘制倒影图像的反射相机
考虑到主摄像机的位置可能会动态地改变,所以反射摄像机也需要使用脚本控制使其动态移动到合适位置(与主相机相对水面对称)以绘制正确的反射图像。
2. 根据投影面编写一个水面投影反射的着色器
投影时,需要统一投影侧的空间并确定投影面(项目中的这个投影面就是水面)。使用反射相机的变换矩阵变换,并渲染每个对象。当使用主摄像机在水面上绘制对象时,使用反射相机的变换矩阵来转换对象顶点。
下面的代码段是水面投影反射着色器的一部分:
1 struct v2f
2 {
3 float2 uv : TEXCOORD0;
4 float4 vertex : SV_POSITION;
5 float4 ref : TEXCOORD1;
6