Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "CustomFogCube"
  2. {
  3.     Properties
  4.     {
  5.         _FogCube("Fog Cube", CUBE) = "" {}
  6.         _FogStart("Fog Start", float = 0
  7.         _FogEnd("Fog End", float) = 50
  8.     }
  9.  
  10.         SubShader
  11.         {
  12.             Tags{ "RenderType" = "Opaque"}
  13.             Fog{ Mode off }
  14.  
  15.             Pass
  16.             {
  17.                 CGPROGRAM
  18.                 #pragma vertex vert
  19.                 #pragma fragment frag
  20.                 #pragma multi_compile _ LIGHTMAP_ON
  21.                 #inculde "UnityCG.cginc"
  22.  
  23.                 samplerCube _FogCube;
  24.                 float _FogStart;
  25.                 float _FogEnd;
  26.  
  27.                 struct appdata
  28.                 {
  29.                     float4 vertex : POSITION;
  30.                     float4 color : COLOR;
  31.                     float4 uv : TEXCOORD1;
  32.                 };
  33.  
  34.                 struct v2f
  35.                 {
  36.                     float4 pos : SV_POSITION;
  37.                     UNITY_VERTEX_OUTPUT_STEREO
  38.                     float4 uv : TEXCOORD1;
  39.                     float fog : TEXCOORD2;
  40.                     float4 color : COLOR;
  41.                     half3 viewDir : TEXCOORD3;
  42.                 };
  43.  
  44.                 v2f vert(appdata v)
  45.                 {
  46.            
  47.                     v2f o;
  48.                     UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  49.                     o.color = v.color;
  50.                     o.pos = UnityObjectToClipPos(v.vertex);
  51.  
  52.                     //lightmaps
  53.                     o.uv.xy = v.uv.xy * unity_LightmapST.xy + unity_LightmapST.zw;
  54.  
  55.                     //fog
  56.                     float fogz = UnityObjectToViewPos(v.vertex).z;
  57.                     o.fog = saturate((fogz + _FogStart) / (_FogStart - _FogEnd));
  58.                     float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
  59.                     o.viewDir = -(normalize(UnityWorldSpaceViewDir(worldPos)));
  60.  
  61.                     return o
  62.                 }
  63.  
  64.                 half4 frag(v2f i) : COLOR
  65.                 {
  66.                     UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
  67.  
  68.                     fixed4 c = i.color * 0.5;
  69.  
  70.                     //lightmaps
  71.                     #ifdef LIGHTMAP_ON
  72.                         fixed4 lm = UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uv.xy);
  73.                         c.rgb *= lm.rgb * 4;
  74.                     #endif
  75.  
  76.                     //fog
  77.                     half4 fogCube = texCube(_FogCube, i.viewDir);
  78.  
  79.                     return lerp(c, fogCube, i.fog);
  80.                 }
  81.  
  82.                 ENDCG
  83.  
  84.  
  85.                 }
  86.         }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement