核心思路:
第一种
- 双摄像机,Camera1用来渲染除了水之外的对象,Camera2只用来渲染水
- 在OnRenderImage函数中对Camera2进行后处理,也就是对水的效果进行处理,让水有融合的效果
- 如果不用粒子的话,用一个精灵当作水的最小单位,给精灵对象添加Collider2D与Rigidbody2D组件,建一个物理材质,把水的摩擦力和弹力都设置为0
第二种
- 双摄像机,Camera1用来渲染除了水之外的对象,Camera2只用来渲染水
- 把两个摄像机都结果存储到Target Texture中
- 首先,用一个shader对Camera2的RT进行处理,实现融合效果,然后叠加两张RT
- 和第一种一样,需要添加碰撞器和刚体组件
摄像机设置:
第一种方式的摄像机设置
对于第二种方式来说,设置好layer(或者摄像机的位置和视锥体远近截面位置,确保两个摄像机值看到自己需要看到的对象即可),然后为Target Texture设置RT。
水滴融合shader
在我的博客两滴水融合实现通过模糊和阈值的方式实现了两滴水的融合。
这种方式在这次并不适用,在Assets Store中有一个2D流体的包,里面用个更简单的算法来达到水融合效果。
float4 frag (v2f i) : SV_Target
{
float4 col = tex2D(_MainTex, i.uv);
if(col.a>0.1){
col.a=0.5;
col.b=floor((col.b*10)*0.5)*0.5;
return col;
}
col=(0,0,0,1);
return col;
}
其中,核心语句为
col.b=floor((col.b*10)*0.5)*0.5;
用来确保水有类似上图的边缘过渡,用matlab可以很方便的查看函数的效果
下载
大家可以下载2d流体包研究一下
https://pan.baidu.com/s/16tfc655aX81bctXI6Omvkw
提取码:ew0u