Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by gray24 · Aug 31, 2020 at 11:36 AM · shadersshader programmingshader writing

I try combine two shaders but not have to much experience to acheve this

This is cartoon water shader

     Shader "Roystan/Toon/Water Tut"
             {
             Properties
             {
                 // What color the water will sample when the surface below is shallow.
                 _DepthGradientShallow("Depth 
 
 Gradient Shallow", Color) = (0.325, 0.807, 0.971, 0.725)
     
             // What color the water will sample when the surface below is at its deepest.
             _DepthGradientDeep("Depth Gradient Deep", Color) = (0.086, 0.407, 1, 0.749)
     
             // Maximum distance the surface below the water will affect the color gradient.
             _DepthMaxDistance("Depth Maximum Distance", Float) = 1
     
             // Color to render the foam generated by objects intersecting the surface.
             _FoamColor("Foam Color", Color) = (1,1,1,1)
     
             // Noise texture used to generate waves.
             _SurfaceNoise("Surface Noise", 2D) = "white" {}
     
             // Speed, in UVs per second the noise will scroll. Only the xy components are used.
             _SurfaceNoiseScroll("Surface Noise Scroll Amount", Vector) = (0.03, 0.03, 0, 0)
     
             // Values in the noise texture above this cutoff are rendered on the surface.
             _SurfaceNoiseCutoff("Surface Noise Cutoff", Range(0, 1)) = 0.777
     
             // Red and green channels of this texture are used to offset the
             // noise texture to create distortion in the waves.
             _SurfaceDistortion("Surface Distortion", 2D) = "white" {}    
     
             // Multiplies the distortion by this value.
             _SurfaceDistortionAmount("Surface Distortion Amount", Range(0, 1)) = 0.27
     
             // Control the distance that surfaces below the water will contribute
             // to foam being rendered.
             _FoamMaxDistance("Foam Maximum Distance", Float) = 0.4
             _FoamMinDistance("Foam Minimum Distance", Float) = 0.04        
         }
         SubShader
         {
             Tags
             {
                 "Queue" = "Transparent"
             }
     
             Pass
             {
                 // Transparent "normal" blending.
                 Blend SrcAlpha OneMinusSrcAlpha
                 ZWrite Off
     
                 CGPROGRAM
                 #define SMOOTHSTEP_AA 0.01
     
                 #pragma vertex vert
                 #pragma fragment frag
     
                 #include "UnityCG.cginc"
     
                 // Blends two colors using the same algorithm that our shader is using
                 // to blend with the screen. This is usually called "normal blending",
                 // and is similar to how software like Photoshop blends two layers.
                 float4 alphaBlend(float4 top, float4 bottom)
                 {
                     float3 color = (top.rgb * top.a) + (bottom.rgb * (1 - top.a));
                     float alpha = top.a + bottom.a * (1 - top.a);
     
                     return float4(color, alpha);
                 }
     
                 struct appdata
                 {
                     float4 vertex : POSITION;
                     float4 uv : TEXCOORD0;
                     float3 normal : NORMAL;
                 };
     
                 struct v2f
                 {
                     float4 vertex : SV_POSITION;    
                     float2 noiseUV : TEXCOORD0;
                     float2 distortUV : TEXCOORD1;
                     float4 screenPosition : TEXCOORD2;
                     float3 viewNormal : NORMAL;
                 };
     
                 sampler2D _SurfaceNoise;
                 float4 _SurfaceNoise_ST;
     
                 sampler2D _SurfaceDistortion;
                 float4 _SurfaceDistortion_ST;
     
                 v2f vert (appdata v)
                 {
                     v2f o;
     
                     o.vertex = UnityObjectToClipPos(v.vertex);
                     o.screenPosition = ComputeScreenPos(o.vertex);
                     o.distortUV = TRANSFORM_TEX(v.uv, _SurfaceDistortion);
                     o.noiseUV = TRANSFORM_TEX(v.uv, _SurfaceNoise);
                     o.viewNormal = COMPUTE_VIEW_NORMAL;
     
                     return o;
                 }
     
                 float4 _DepthGradientShallow;
                 float4 _DepthGradientDeep;
                 float4 _FoamColor;
     
                 float _DepthMaxDistance;
                 float _FoamMaxDistance;
                 float _FoamMinDistance;
                 float _SurfaceNoiseCutoff;
                 float _SurfaceDistortionAmount;
     
                 float2 _SurfaceNoiseScroll;
     
                 sampler2D _CameraDepthTexture;
                 sampler2D _CameraNormalsTexture;
     
                 float4 frag (v2f i) : SV_Target
                 {
                     // Retrieve the current depth value of the surface behind the
                     // pixel we are currently rendering.
                     float existingDepth01 = tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.screenPosition)).r;
                     // Convert the depth from non-linear 0...1 range to linear
                     // depth, in Unity units.
                     float existingDepthLinear = LinearEyeDepth(existingDepth01);
     
                     // Difference, in Unity units, between the water's surface and the object behind it.
                     float depthDifference = existingDepthLinear - i.screenPosition.w;
     
                     // Calculate the color of the water based on the depth using our two gradient colors.
                     float waterDepthDifference01 = saturate(depthDifference / _DepthMaxDistance);
                     float4 waterColor = lerp(_DepthGradientShallow, _DepthGradientDeep, waterDepthDifference01);
                     
                     // Retrieve the view-space normal of the surface behind the
                     // pixel we are currently rendering.
                     float3 existingNormal = tex2Dproj(_CameraNormalsTexture, UNITY_PROJ_COORD(i.screenPosition));
                     
                     // Modulate the amount of foam we display based on the difference
                     // between the normals of our water surface and the object behind it.
                     // Larger differences allow for extra foam to attempt to keep the overall
                     // amount consistent.
                     float3 normalDot = saturate(dot(existingNormal, i.viewNormal));
                     float foamDistance = lerp(_FoamMaxDistance, _FoamMinDistance, normalDot);
                     float foamDepthDifference01 = saturate(depthDifference / foamDistance);
     
                     float surfaceNoiseCutoff = foamDepthDifference01 * _SurfaceNoiseCutoff;
     
                     float2 distortSample = (tex2D(_SurfaceDistortion, i.distortUV).xy * 2 - 1) * _SurfaceDistortionAmount;
     
                     // Distort the noise UV based off the RG channels (using xy here) of the distortion texture.
                     // Also offset it by time, scaled by the scroll speed.
                     float2 noiseUV = float2((i.noiseUV.x + _Time.y * _SurfaceNoiseScroll.x) + distortSample.x, 
                     (i.noiseUV.y + _Time.y * _SurfaceNoiseScroll.y) + distortSample.y);
                     float surfaceNoiseSample = tex2D(_SurfaceNoise, noiseUV).r;
     
                     // Use smoothstep to ensure we get some anti-aliasing in the transition from foam to surface.
                     // Uncomment the line below to see how it looks without AA.
                     // float surfaceNoise = surfaceNoiseSample > surfaceNoiseCutoff ? 1 : 0;
                     float surfaceNoise = smoothstep(surfaceNoiseCutoff - SMOOTHSTEP_AA, surfaceNoiseCutoff + SMOOTHSTEP_AA, surfaceNoiseSample);
     
                     float4 surfaceNoiseColor = _FoamColor;
                     surfaceNoiseColor.a *= surfaceNoise;
     
                     // Use normal alpha blending to combine the foam with the surface.
                     return alphaBlend(surfaceNoiseColor, waterColor);
                 }
                 ENDCG
             }
         }
     }
     



and this is simple curve/cel shader to donate horizon

 Shader "Custom/Cel" {
     Properties{
         _MainTex("Base (RGB)", 2D) = "white" {}
         _Tint("Tint", Color) = (1,1,1,0)
         _Curvature("Curvature", Range(-100,100)) = 0
     }
         SubShader{
             Tags { "RenderType" = "Opaque" }
             LOD 150
 
         CGPROGRAM
         #pragma surface surf Cel noforwardadd vertex:vert addshadow
 
         float _Curvature;
         void vert(inout appdata_base v) 
         {
             float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
             float dist = distance(_WorldSpaceCameraPos, worldPos);
             worldPos.y += dist * dist * _Curvature * 0.00001;
             v.vertex = mul(unity_WorldToObject, worldPos);
         }
 
         float4 LightingCel(SurfaceOutput s, float3 lightDir, half3 viewDir, float shadowAttenuation) 
         {            
             half NdotL = dot(s.Normal, lightDir);
             half NdotLChange = fwidth(NdotL);
             half light = smoothstep(0, NdotLChange, NdotL);
             
             //half attenuationChange = fwidth(shadowAttenuation) * 0.5;
             //half shadow = smoothstep(0.5 - attenuationChange, 0.5 + attenuationChange, shadowAttenuation);
             half shadow = shadowAttenuation;
             light = light * shadow;
 
             half4 c;
             c.rgb = s.Albedo * _LightColor0.rgb * (light);
             c.a = s.Alpha;
             return c;
         }
 
         sampler2D _MainTex;
 
         struct Input {
             float2 uv_MainTex;
         };
 
         fixed4 _Tint;
 
         void surf(Input IN, inout SurfaceOutput o) {
             fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
             o.Albedo = lerp(c.rgb, c.rgb * _Tint.rgb, _Tint.a);
             o.Alpha = c.a;
         }
         ENDCG
     }
 
         Fallback "Mobile/VertexLit"
 }


and i have no idea how to combine it, please help

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
â–¼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

221 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Operate the shader, rotate the material 90 degrees 0 Answers

Shader optimization: 3 color gradient with 2 middle points 0 Answers

How much operations does tex2d func take? 0 Answers

Metallic material decomposing light in rainbow spectre? 0 Answers

Get the original light / color in custom shader 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges