Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.86 KB | None | 0 0
  1. Shader "Nuvens2" {
  2. Properties {
  3. _Textura ("Textura", 2D) = "white" {}
  4. _Cutoff ("Alpha cutoff", Range(0,1)) = 1
  5. }
  6. SubShader {
  7. Tags {"Queue"="Transparent+100" "IgnoreProjector"="True" "RenderType"="Transparent"}
  8. LOD 400 //level of detail
  9.  
  10. Lighting On
  11. Cull Off
  12. ZWrite Off
  13. Blend SrcAlpha OneMinusSrcAlpha
  14.  
  15. Pass{ //dentro da pass, mapeia todo o objeto
  16.  
  17. Tags { "LightMode" = "ForwardBase" }
  18.  
  19. CGPROGRAM
  20.  
  21. #pragma target 3.0
  22. #pragma fragmentoption ARB_precision_hint_fastest
  23.  
  24. #pragma vertex vert
  25. #pragma fragment frag
  26. #pragma multi_compile_fwdbase
  27.  
  28. #include "UnityCG.cginc"
  29. #include "AutoLight.cginc"
  30. sampler2D _Textura;
  31. float _velocidade;
  32. float _altura;
  33. float _quantidade;
  34. float _claridade;
  35. float _tamanhoNuvem;
  36. float _opacidadeHorizonte;
  37. float _intensidade;
  38.  
  39. float getCloud(float2 uv, float scale, float disp) {
  40. float y = 0.0f;
  41.  
  42. int NN = 5;
  43. for(int i=0;i < NN; i++) {
  44. float k = scale*i + 0.11934;
  45. y+= tex2D( _Textura, k*uv + float2(0.1234*i*_velocidade*0.015 - 0.04234*i*i*_velocidade*0.015 + 0.9123559 + 0.23411*i , 0.31342 + 0.5923*i + disp) ).x;
  46. }
  47.  
  48. y /= 0.5f*NN;
  49. return clamp( pow(_quantidade/y, _tamanhoNuvem),0,1.0);
  50. }
  51.  
  52. float getNormal(float2 uv, float scale, float dst, out float3 n, float nscale, float disp) {
  53. float height = getCloud(uv, scale, disp);
  54. int N =5;
  55. for (int i=0;i<N;i++) {
  56.  
  57. float2 du1 = float2(dst*cos((i)*2*3.14159 / (N)), dst*sin(i*2*3.14159/(N)));
  58. float2 du2 = float2(dst*cos((i+1)*2*3.14159 / (N)), dst*sin((i+1)*2*3.14159/(N)));
  59.  
  60. float hx = getCloud(uv + du1, scale, disp);
  61. float hy = getCloud(uv + du2, scale, disp);
  62.  
  63. float3 d2 = float3(0,height*nscale,0) - float3(du1.x,hx*nscale,du1.y);
  64. float3 d1 = float3(0,height*nscale,0) - float3(du2.x,hy*nscale,du2.y);
  65.  
  66. n = n + normalize(cross(d1,d2));
  67. }
  68. n = normalize(n);
  69. return height;
  70.  
  71. }
  72. struct v2f{
  73.  
  74. float4 pos : POSITION;
  75. float4 texcoord : TEXCOORD0;
  76. float3 normal : TEXCOORD1;
  77. float4 uv : TEXCOORD2;
  78. float3 worldPosition: TEXCOORD3;
  79.  
  80. LIGHTING_COORDS(3,4)
  81. };
  82.  
  83. v2f vert (appdata_base v){
  84.  
  85. v2f o;
  86. o.pos = mul( UNITY_MATRIX_MVP, v.vertex);
  87. o.uv = v.texcoord;
  88. o.normal = normalize(v.normal).xyz;
  89. o.texcoord = v.texcoord;
  90. o.worldPosition = mul (_Object2World, v.vertex).xyz;
  91.  
  92. TRANSFER_VERTEX_TO_FRAGMENT(o);
  93.  
  94. return o;
  95. }
  96.  
  97. fixed4 frag(v2f IN) : COLOR {
  98. float3 worldSpacePosition = IN.worldPosition;
  99. float3 N;
  100. float3 lightDir = _WorldSpaceLightPos0;
  101.  
  102. float3 viewDirection = normalize(_WorldSpaceCameraPos - worldSpacePosition);
  103. float dist = clamp(1.0/pow(length(0.5 + 0.0001*_opacidadeHorizonte*(_WorldSpaceCameraPos - worldSpacePosition)),1.0),0,1);
  104. float2 newPos = worldSpacePosition.xz*0.00005;
  105.  
  106. float x = getNormal(newPos, 1.73252*_altura*0.1, 0.00375f, N, 0.05*0.75f, worldSpacePosition.y/1381.1234f + _velocidade*0.0002);
  107. float albedoColor = (0.5f*x, 0.9f*x, 0.9f*x);
  108. float3 norm=float3(0,1,0);
  109. float globalLight = saturate(dot(norm, lightDir));
  110. if (IN.normal.y<0) discard;
  111. float spec = pow(max(0.0, dot(
  112. reflect(-lightDir, N),
  113. viewDirection)), 2);
  114.  
  115. float NL = 0.3*_claridade*(1 + spec + saturate((pow((dot(-N, lightDir)),1))));
  116. albedoColor*=NL*globalLight;
  117.  
  118. float4 c = float4(0,0,0,0);
  119. c.a = _intensidade*pow(x,2)*dist;
  120. c.rgb = albedoColor;
  121. return c;
  122. }
  123. ENDCG
  124. }
  125. }
  126. Fallback "Transparent/Cutout/Diffuse"
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement