Unity Shader如何实现雨天的水面涟漪效果
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家分享的是有关Unity Shader如何实现雨天的水面涟漪效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。上个动态效果......项目需求,需要加一个雨天的
千家信息网最后更新 2026年11月01日Unity Shader如何实现雨天的水面涟漪效果
这篇文章给大家分享的是有关Unity Shader如何实现雨天的水面涟漪效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。


上个动态效果......
项目需求,需要加一个雨天的水面涟漪效果,一开始的想法是直接加特效,但过过脑子就知道有多费,不现实,最好的方法还是要用shader来实现,但是如何实现纹理的随机扩散(雨滴有大有小),和不规则的时间(雨滴有先有后),想了很久都没想明白,好在从AssetStore里发现了类似的效果,一顿研究以后,发现其实挺简单的......拿出来跟大家分享。
刚才我说的两个问题,随机扩散和不规则时间,这位大神用贴图来解决了(一开始我们想过,但是没有想到实现方法),接下来展示一下这张图。
这样看起来有点莫名其妙对吧,我们把四个通道来分开看,就清楚多了。
我来分别解释一下,R通道代表了涟漪生成的范围,并且带有淡出的效果,GB两个通道是高度,差不多就是法线图的效果,A通道用来存储时间差,从白到黑不同的颜色值代表了不同的时间。
接下来相信很多人就已经明白怎么写了,这里我贴出了代码,重要的地方都加了点自己的理解,没有多少行,还是比较简单的。
Shader "Custom/Ripple" {Properties {_Color ("Color", Color) = (1,1,1,1)_MainTex ("Albedo (RGB)", 2D) = "white" {}_Glossiness ("Smoothness", Range(0,1)) = 0.5_Metallic ("Metallic", Range(0,1)) = 0.0_RippleTex("RippleTex", 2D) = "white" {}_RippleScale("RippleScale",Range(1,10)) =1}SubShader {Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM// Physically based Standard lighting model, and enable shadows on all light types#pragma surface surf Standard fullforwardshadows#pragma target 3.0#define PI 3.141592653sampler2D _MainTex;struct Input {float2 uv_MainTex;half2 texcoord;};half _Glossiness;half _Metallic;fixed4 _Color;sampler2D _RippleTex;float _RippleScale;UNITY_INSTANCING_BUFFER_START(Props)UNITY_INSTANCING_BUFFER_END(Props)//计算波纹的主函数float3 ComputeRipple(float2 uv, float t){//波纹贴图采样,并把采样的高度值扩展到-1到1。float4 ripple = tex2D(_RippleTex, uv);ripple.yz = ripple.yz * 2.0 - 1.0;//获取波纹的时间,从A通道获取不同的波纹时间,float dropFrac = frac(ripple.a + t);//把时间限制在R通道内float timeFrac = dropFrac - 1.0 + ripple.x;//做淡出处理float dropFactor = 1-saturate( dropFrac);//计算最终的高度,用一个sin计算出随时间的振幅,修改一下值就知道什么效果了float final = dropFactor* sin(clamp(timeFrac * 9.0, 0.0, 4.0) * PI);return float3(ripple.yz * final, 1.0);}void surf (Input IN, inout SurfaceOutputStandard o) {fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;o.Albedo = c.rgb;//调用方法,获取高度。这里我懒得用一个新uv,索性直接用的主贴图UVfloat3 ripple = ComputeRipple(IN.uv_MainTex / _RippleScale, _Time.y);// Metallic and smoothness come from slider variableso.Metallic = _Metallic;o.Smoothness = _Glossiness;//赋值到法线上o.Normal = ripple;o.Alpha = c.a;}ENDCG}FallBack "Diffuse"}
感谢各位的阅读!关于"Unity Shader如何实现雨天的水面涟漪效果"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
效果
时间
通道
涟漪
波纹
高度
水面
雨天
不同
方法
贴图
不规则
接下来
两个
代表
内容
更多
法线
篇文章
还是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡
北京路客互联网科技有限公司
科技股互联网
互联网科技的
南京欣网互联网科技
汇久创客互联网科技
深圳互联网科技怎么样
汽车互联网创新科技园
科技与互联网哪个更好
重庆威客帮互联网科技
互联网金融科技公司干啥的
互联网科技有哪些公司
高科技互联网套路
互联网公司高科技产品
梅州GM互联网络科技有限公司
皮皮虾互联网科技有限公司
半导体是互联网高科技吗
亚光科技低轨卫星互联网
北京瑞云互联网科技有限公司
知域互联网科技有限公司官网
互联网科技金融
以房互联网科技
唐信互联网科技
互联网科技排名
厦门比较好的科技互联网公司
河南猎农互联网科技有限公司
千方科技属于互联网企业吗
中和天地互联网科技有限公司
互联网科技资金流入
广州燕处互联网科技有限公司