Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Shader "SweetRollStudio/Underwater"
- {
- Properties
- {
- _MainTex ("Texture", 2D) = "white" {}
- _WaveStrength("WaveStrength", Float) = 1
- _WaveSpeed("WaveSpeed", Float) = 1
- _Power("Power", Range(0,1)) = 1
- }
- SubShader
- {
- // No culling or depth
- Cull Off ZWrite Off ZTest Always
- 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;
- };
- v2f vert (appdata v)
- {
- v2f o;
- o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
- o.uv = v.uv;
- return o;
- }
- sampler2D _MainTex;
- float _WaveStrength;
- float _WaveSpeed;
- float _Power;
- float rayStrength(float2 raySource, float2 rayRefDirection, float2 coord, float seedA, float seedB, float speed)
- {
- float2 sourceToCoord = coord - raySource;
- float cosAngle = dot(normalize(sourceToCoord), rayRefDirection);
- return clamp(
- (0.45 + 0.15 * sin(cosAngle * seedA + _Time.y * speed)) +
- (0.3 + 0.2 * cos(-cosAngle * seedB + _Time.y * speed)),
- 0.0, 1.0) * clamp((_ScreenParams.x - length(sourceToCoord)) / _ScreenParams.x, 0.5, 1.0);
- }
- fixed4 frag (v2f i) : SV_Target
- {
- fixed4 main = tex2D(_MainTex, i.uv);
- if (_Power <= 0) {
- return main;
- }
- fixed4 ret;
- i.vertex.y *= -1;
- float2 uv = i.vertex.xy / _ScreenParams.xy;
- uv.y = 1.0 - uv.y;
- float2 coord = float2(i.vertex.x, _ScreenParams.y - i.vertex.y);
- float2 rayPos1 = float2(_ScreenParams.x * 0.7, _ScreenParams.y * 0.4);
- float2 rayRefDir1 = normalize(float2(1.0, -0.116));
- float raySeedA1 = 36.2214;
- float raySeedB1 = 21.11349;
- float raySpeed1 = 1.5 * _WaveSpeed;
- float2 rayPos2 = float2(_ScreenParams.x * 0.8, _ScreenParams.y * 0.6);
- float2 rayRefDir2 = normalize(float2(1.0, 0.241));
- const float raySeedA2 = 22.39910;
- const float raySeedB2 = 18.0234;
- const float raySpeed2 = 1.1 * _WaveSpeed;
- float4 rays1 = float4(1.0, 1.0, 1.0, 1.0) * rayStrength(rayPos1, rayRefDir1, coord, raySeedA1, raySeedB1, raySpeed1) ;
- float4 rays2 = float4(1.0, 1.0, 1.0, 1.0) * rayStrength(rayPos2, rayRefDir2, coord, raySeedA2, raySeedB2, raySpeed2);
- ret = rays1 * 0.5 + rays2 * 0.4;
- float brightness = (coord.y / _ScreenParams.y);
- ret.x = mul(ret.x, 0.1 + (brightness * 0.8));
- ret.y = mul(ret.x, 0.3 + (brightness * 0.6));
- ret.z = mul(ret.x, 0.5 + (brightness * 0.5));
- ret = main * ret * _WaveStrength;
- ret = lerp(main, ret, _Power);
- return ret;
- }
- ENDCG
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement