Unity Shader如何实现雨天的水面涟漪效果
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章给大家分享的是有关Unity Shader如何实现雨天的水面涟漪效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。上个动态效果......项目需求,需要加一个雨天的
千家信息网最后更新 2025年12月02日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安全错误
数据库的锁怎样保障安全
用友服务器参数
服务器ddr3能用普通主板吗
二维码制作数据库
mysql数据库架构方案
震达网络技术有限公司
数据库保证线程安全
知识分销软件开发
上海软件开发五年 收入
笔记本轻薄软件开发
数据库中的最基本对象是
网络安全法新增的内容
服务器cpu推荐视频
图书馆加强网络安全
鬼魂怎么连接服务器
gg服务器框架安全吗
惠普服务器怎么开启虚拟化
三一五互联网科技
五年网络安全手抄报
徐汇区互联网络技术服务信息
国家安全网络安全宣传周活动
计算机网络技术考什么内容
电子商务网络安全解决措施
加强网络安全和舆论引导保障
后台数据库被盗
it是不是网络技术的缩写
计算机网络技术专业本科院校
数据库全角半角存储
守望先锋服务器实力排行
超低价服务器
高顿教育互联网科技地址