Advertisement
_EagleOwle_

Snow Height Map Update

May 3rd, 2023
852
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.18 KB | None | 0 0
  1. Shader "Snow Height Map Update"
  2. {
  3.     Properties
  4.     {
  5.         _DrawBrush ("Brush", 2D) = "white" {}
  6.     }
  7.  
  8.     SubShader
  9.     {
  10.         Lighting Off
  11.         Blend One Zero
  12.        
  13.         Pass
  14.         {
  15.             CGPROGRAM
  16.             #include "UnityCustomRenderTexture.cginc"
  17.             #pragma vertex CustomRenderTextureVertexShader
  18.             #pragma fragment frag
  19.             #pragma target 3.0
  20.            
  21.             sampler2D _DrawBrush;
  22.             float4 _DrawPosition;
  23.             float _DrawAngle;
  24.             float _RestoreAmount;
  25.            
  26.             float4 frag(v2f_customrendertexture IN) : COLOR
  27.             {
  28.                 // Это цвет текущего пикселя карты высот в предыдущий фрейм, до нашего апдейта
  29.                 float4 previousColor = tex2D(_SelfTexture2D, IN.localTexcoord.xy);
  30.                
  31.                 // Считаем по каким координатам взять пиксель маски-кисти для текущего пикселя карты высот
  32.                 float2 pos = IN.localTexcoord.xy - _DrawPosition;
  33.                
  34.                 float2x2 rot = float2x2(cos(_DrawAngle), -sin(_DrawAngle),
  35.                                         sin(_DrawAngle), cos(_DrawAngle));
  36.                 pos = mul(rot, pos);
  37.                 pos /= 0.1;
  38.                 pos += float2(0.5, 0.5);
  39.                
  40.                 // И берём этот цвет (если он вообще вышел за пределы текстуры маски-кисти, то будет белый, т.к. у текстуры стоит Wrap Mode: Clamp)
  41.                 float4 drawColor = tex2D(_DrawBrush, pos);
  42.                
  43.                 // min можно заменить на умножение, тогда рисование будет ощущаться немного иначе. _RestoreAmount можно убрать чтобы снег не выпадал и текстура не восстанавливалась со временем
  44.                 return min(previousColor, drawColor) + _RestoreAmount;
  45.             }
  46.             ENDCG
  47.         }
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement