madfox03

Main sky box shader

Sep 24th, 2019
795
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "MadFox/SkyBox/ProcCloudSkyBox"
  2. {
  3.     Properties
  4.     {
  5.         _CubeBG("Background cube map", Cube) = "white" {}
  6.  
  7.         _StarsColor("Stars color", COLOR) = (1,1,1,1)
  8.         _StarsTex("Stars tex", 2D) = "black" {}
  9.  
  10.         _SkyColor1("Top Color", Color) = (0.37, 0.52, 0.73, 0)
  11.         _SkyExponent1("Top Exponent", Float) = 8.5
  12.  
  13.         _SkyColor2("Horizon Color", Color) = (0.89, 0.96, 1, 0)
  14.  
  15.         _SkyColor3("Bottom Color", Color) = (0.89, 0.89, 0.89, 0)
  16.         _SkyExponent2("Bottom Exponent", Float) = 3.0
  17.  
  18.         _SkyIntensity("Sky Intensity", Range(0.0, 1.0)) = 1.0
  19.         _SkyIntensity(" ", Float) = 1.0
  20.  
  21.         _SunColor("Sun Color", Color) = (1, 0.99, 0.87, 1)
  22.         _SunIntensity("Sun Intensity", float) = 2.0
  23.  
  24.         _MoonColor("Moon Color", Color) = (1, 0.99, 0.87, 1)
  25.         _MoonIntensity("Moon Intensity", float) = 2.0
  26.  
  27.         [HIDEININSPECTOR]_SunRadius("Sun radius", float) = 2000 //
  28.  
  29.         [Header(Cloud)]
  30.         _CloudColor("Cloud Color", Color) = (1, 1, 1, 1)
  31.         _CloudShadow("Cloud Shadow", Color) = (0.3, 0.3, 0.3, 0.9)
  32.  
  33.         [Header(Main Cloud Settings)]
  34.         _BaseNoise("Base Noise", 2D) = "black" {}
  35.         _Distort("Distort", 2D) = "black" {}
  36.         _SecNoise("Secondary Noise", 2D) = "black" {}
  37.         _BaseNoiseScale("Base Noise Scale",  Range(0, 1)) = 0.09
  38.             _BaseNoiseScale(" ",  float) = 0.09
  39.         _DistortScale("Distort Noise Scale",  Range(0, 1)) = 0.13
  40.             _DistortScale(" ",  float) = 0.13
  41.         _SecNoiseScale("Secondary Noise Scale",  Range(0, 1)) = 0.075
  42.             _SecNoiseScale(" ",  float) = 0.075
  43.         _Distortion("Extra Distortion",  Range(0, 1)) = 0.5
  44.         _Rotation("Rotation speed", float) = -0.5
  45.         _CloudCutoff("Cloud Cutoff",  Range(-1, 1)) = 0.66
  46.         _CloudCutoff(" ",  float) = 0.66
  47.         _Fuzziness("Cloud Fuzziness",  Range(0, 1)) = 1
  48.         _Fuzziness(" ",  float) = 1
  49.         _FuzzinessUnder("Cloud Fuzziness Under",  Range(0, 1)) = 1.5
  50.         _FuzzinessUnder(" ",  float) = 1.5
  51.         _CloudVisiblePower("Cloud visible power", float) = 1
  52.     }
  53.  
  54.         CGINCLUDE
  55.  
  56. #include "UnityCG.cginc"
  57. #include "I-Stars.cginc"
  58. #pragma exclude_renderers d3d11_9x
  59. #pragma fragmentoption ARB_precision_hint_fastest
  60.  
  61.         half _Rotation;
  62.  
  63.         half3 _SkyColor1;
  64.         half _SkyExponent1;
  65.  
  66.         half3 _SkyColor2;
  67.  
  68.         half3 _SkyColor3;
  69.         half _SkyExponent2;
  70.  
  71.         uniform half _SkyIntensity;
  72.  
  73.         sampler2D _SunTexture;
  74.         half4 _SunTexture_ST;
  75.  
  76.         half3 _SunColor;
  77.         half _SunIntensity;
  78.  
  79.         half _SunAlpha;
  80.         half _SunBeta;
  81.  
  82.         half3 _SunVector;
  83.         half _SunRadius;
  84.  
  85.         samplerCUBE _CubeBG;
  86.         half4 _CubeBG_ST;
  87.  
  88.         sampler2D _StarsTex;
  89.         half4 _StarsTex_ST;
  90.         half4 _StarsColor;
  91.  
  92.         half3 _MoonColor;
  93.         half _MoonIntensity;
  94.  
  95.         float _CloudVisiblePower;
  96.  
  97.         //cloud
  98.         sampler2D _BaseNoise, _Distort, _SecNoise;
  99.         float _BaseNoiseScale, _DistortScale, _SecNoiseScale, _Distortion;
  100.         float  _CloudCutoff, _Fuzziness, _FuzzinessUnder, _Brightness;
  101.         fixed4 _CloudColor, _CloudShadow;
  102.  
  103.         struct appdata
  104.         {
  105.             float4 vertex : POSITION;
  106.             float3 texcoord : TEXCOORD0;
  107.         };
  108.  
  109.         struct v2f
  110.         {
  111.             float4 pos : SV_POSITION;
  112.             float3 coord : TEXCOORD0;          
  113.             half3 c_sky : TEXCOORD1;
  114.             float3 viewDir : TEXCOORD2;
  115.             float3 worldPos : TEXCOORD3;
  116.             float3 suncoord : TEXCOORD4;
  117.         };     
  118.  
  119.  
  120.         float3 RotateAroundXInDegrees(float3 vertex, float degrees)
  121.         {
  122.             float alpha = degrees * UNITY_PI / 180.0;
  123.             float sina, cosa;
  124.             sincos(alpha, sina, cosa);
  125.             float2x2 m = float2x2(cosa, -sina, sina, cosa);
  126.             return float3(mul(m, vertex.xz), vertex.y).zyx;
  127.         }
  128.  
  129.         v2f vert(appdata v)
  130.         {
  131.             v2f o;
  132.             o.pos = UnityObjectToClipPos(v.vertex);
  133.             o.suncoord = v.texcoord;
  134.             float3 vn = normalize(v.texcoord);
  135.  
  136.             float p = vn.y;
  137.             float p1 = 1 - pow(min(1, 1 - p), _SkyExponent1); //---bottom horizon
  138.             float p3 = 1 - pow(min(1, 0.75 + p), _SkyExponent2); //---top horizon
  139.             float p2 = 1 - p1 - p3;
  140.  
  141.             o.c_sky = _SkyColor1 * p1 + _SkyColor2 * p2 + _SkyColor3 * p3 - _SkyColor1 * p1 * 0.5 + _SkyColor2 * p2 * 0.2 * dot(normalize(v.texcoord), -_WorldSpaceLightPos0.xyz);
  142.  
  143.             float4x4 modelMatrix = unity_ObjectToWorld;
  144.  
  145.             o.worldPos = mul(unity_ObjectToWorld, v.vertex);
  146.  
  147.             float4 pos = float4(v.vertex.xy * _CubeBG_ST.xy, v.vertex.z * _CubeBG_ST.z, v.vertex.w * _CubeBG_ST.w);
  148.             o.viewDir = mul(modelMatrix, pos).xyz - _WorldSpaceCameraPos;
  149.  
  150.             o.coord = v.texcoord;
  151.            
  152.             return o;
  153.         }
  154.  
  155.         half4 frag(v2f i) : COLOR
  156.         {
  157.             float3 v = normalize(i.suncoord);
  158.  
  159.             _SkyIntensity = max(0.35, lerp(_WorldSpaceLightPos0.y * 2.5, 0.85, saturate(_WorldSpaceLightPos0.y)));
  160.  
  161.             half4 cube = texCUBE(_CubeBG, i.viewDir) * _SkyIntensity;
  162.             cube *= _CloudVisiblePower;
  163.  
  164.             //---stars
  165.             half3 coord = sync(normalize(i.coord));
  166.             float2 angles = getCoordinate(coord);
  167.             float2 uv = saturate((-angles + half2(1, 1)) * 0.5f);
  168.             half2 stars_uv = TRANSFORM_TEX(uv, _StarsTex);
  169.             half4 stars = tex2D(_StarsTex, stars_uv) * _StarsColor;
  170.  
  171.             //---clouds        
  172.             float2 skyUV = i.coord.xz / i.coord.y;
  173.             skyUV += _Time.x * _Rotation;
  174.             float baseNoise1 = tex2D(_BaseNoise, (skyUV) * _BaseNoiseScale).r;
  175.             float noise11 = tex2D(_Distort, (skyUV + baseNoise1) * _DistortScale);
  176.             float noise22 = tex2D(_SecNoise, (skyUV + (noise11 * _Distortion)) * _SecNoiseScale);
  177.  
  178.             _DistortScale *= max(1, _Time.x * .25);
  179.             _SecNoiseScale *= max(1, _Time.x * .5);
  180.             float baseNoise = baseNoise1;
  181.             float noise1 = noise11;
  182.             float noise2 = noise22;
  183.             //
  184.             float finalNoise = saturate(noise1 * noise2) * 3 * saturate(i.worldPos.y);
  185.             float clouds = saturate(smoothstep(_CloudCutoff, _CloudCutoff + _Fuzziness, finalNoise));
  186.             float cloudsunder = 0.05 - saturate(smoothstep(_CloudCutoff, _CloudCutoff + _Fuzziness + _FuzzinessUnder , noise2) * clouds);
  187.             float3 cloudsColored = lerp(_CloudColor, lerp(_CloudShadow, _CloudColor, cloudsunder), clouds) * clouds;
  188.            
  189.             //---sun
  190.             half3 c_sun = _SunColor * pow(max(0, dot(v, _WorldSpaceLightPos0.xyz)), _SunRadius);
  191.             c_sun += pow(max(0, dot(v, _WorldSpaceLightPos0.xyz)), _SunRadius / 300) / 2.5 * _SunColor;
  192.  
  193.             //---moon
  194.             half3 c_moon = _MoonColor * pow(max(0, dot(-v, _WorldSpaceLightPos0.xyz)), 6000);
  195.             c_moon += pow(max(0, dot(-v, _WorldSpaceLightPos0.xyz)), 100) * 0.025 * _MoonColor;
  196.            
  197.            
  198.             //---result
  199.             half4 result = half4(i.c_sky * _SkyIntensity
  200.                                     + c_sun * _SunIntensity
  201.                                     + stars * (1 - _SkyIntensity)
  202.                                     + c_moon * _MoonIntensity
  203.                                     + cloudsColored * cube.a * _CloudVisiblePower
  204.                                     , 1);
  205.  
  206.             return result;
  207.         }
  208.  
  209.             ENDCG
  210.  
  211.             SubShader
  212.         {
  213.             Tags { "Queue" = "Background" "RenderType" = "Background" "PreviewType" = "Skybox" }
  214.             Pass
  215.             {
  216.                 ZWrite Off
  217.                 Cull Off
  218.                 Fog{ Mode Off }
  219.                 CGPROGRAM
  220.                 #pragma fragmentoption ARB_precision_hint_fastest
  221.                 #pragma exclude_renderers d3d11_9x
  222.                 #pragma vertex vert
  223.                 #pragma fragment frag
  224.             ENDCG
  225.             }
  226.         }
  227. }
RAW Paste Data