UnityShader(四)

这次要只用顶点着色器和片元着色器实现水面效果,思路很简单,就是先把顶点坐标从模型空间转变到齐次裁剪空间,再左乘unity_ObjectToWorld矩阵转变到世界坐标,将世界坐标的y按照正弦规律变化即可得到水面的波涛汹涌的效果,然后我们设置两个颜色,波峰我们设置为深色,波谷我们设置为浅色,只需要根据我们得到的y坐标偏移值lerp插值一下即可得到一个简单的水面效果,没有用到任何贴图

复制代码
Shader "Custom/MyWater3" {
    Properties {
        _MainTex ("Texture", 2D) = "white" {}
        _Speed ("Speed", Range(0, 10)) = 1
        _Height ("Height", Range(0, 100)) = 0.1
        _W("W",Range(0,1)) = 0.5
        _LowColor("LowColor",Color) = (1,1,1,1)
        _HighColor("HighColor",Color) = (0,0,1,1)
    }
 
    SubShader {
        Tags {"Queue"="Transparent" "RenderType"="Opaque"}
        LOD 100
 
        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
 
            struct appdata {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };
 
            struct v2f {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                float4 worldPos : TEXCOORD1;
                float offset:TEXCOORD2;
            };
 
            sampler2D _MainTex;
            float _Speed;
            float _Height;
            float _W;
            fixed4 _LowColor;
            fixed4 _HighColor;
 
            v2f vert (appdata v) {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                o.worldPos = mul(unity_ObjectToWorld, v.vertex);


                o.offset = _Height * sin(_Speed * _Time.y + _W * (abs(o.worldPos.x) + abs(o.worldPos.z)));
                o.vertex.y += o.offset;

                return o;
            }
 
            fixed4 frag (v2f i) : SV_Target {
                fixed4 waterColor = lerp(_LowColor,_HighColor,1 - i.offset/_Height);
                return waterColor;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

实现的效果图如下:

​​​​​​​

参数调节如下:

相关推荐
淡海水2 天前
【URP】Unity[内置Shader]光照着色器Lit
unity·游戏引擎·shader·urp·着色器·lit
雪下的新火4 天前
爆炸特效-Unity-04-shader&粒子系统
经验分享·笔记·unity·游戏引擎·shader·粒子系统
寻水的鱼、、1 个月前
【Unity Shader学习笔记】(二)图形显示系统
unity·shader
淡海水1 个月前
【URP】Unity Shader Tags
unity·游戏引擎·渲染·shader·tag·urp
淡海水1 个月前
【URP】Unity 插入自定义RenderPass
unity·游戏引擎·渲染·shader·renderpass
benben0442 个月前
《Unity Shader入门精要》学习笔记一
unity·shader
两水先木示2 个月前
【Unity3D】Shader圆形弧度裁剪
unity·shader·圆形裁剪·弧度裁剪
龚子亦4 个月前
【Shader学习】完整光照效果
unity·技术美术·shader
achonor5 个月前
UnityShader 植物被风吹弯效果
unity·shader·mesh
优雅永不过时·5 个月前
实现一个漂亮的Three.js 扫光地面 圆形贴图扫光
前端·javascript·智慧城市·three.js·贴图·shader