Advertisement
Guest User

Untitled

a guest
Dec 29th, 2016
523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. struct PS_INPUT {
  2. float2 uv: TEXCOORD0;
  3. };
  4.  
  5. struct PS_OUTPUT {
  6. float4 color_0: SV_TARGET0;
  7. };
  8.  
  9. uniform sampler2D texture_divergence;
  10. uniform float2 texel_size;
  11.  
  12. float unpack_pressure(float2 data) {return data.x + (data.y / 255.0);}
  13. float2 pack_pressure(float data) {return float2(floor(data * 255.0) / 255.0, frac(data * 255.0));}
  14. float unpack_divergence(float2 data) {return data.x + (data.y / 255.0);}
  15. float2 pack_divergence(float data) {return float2(floor(data * 255.0) / 255.0, frac(data * 255.0));}
  16.  
  17. void main(in PS_INPUT IN, out PS_OUTPUT OUT) {
  18. float velocity_range = 10.0;
  19. float pressure_range = 10.0;
  20.  
  21. float right = unpack_pressure(tex2D(gm_BaseTexture, IN.uv + float2(texel_size.x, 0.0)).xy) * pressure_range;
  22. float left = unpack_pressure(tex2D(gm_BaseTexture, IN.uv - float2(texel_size.x, 0.0)).xy) * pressure_range;
  23. float bottom = unpack_pressure(tex2D(gm_BaseTexture, IN.uv + float2(0.0, texel_size.y)).xy) * pressure_range;
  24. float top = unpack_pressure(tex2D(gm_BaseTexture, IN.uv - float2(0.0, texel_size.y)).xy) * pressure_range;
  25.  
  26. float divergence = (unpack_divergence(tex2D(texture_divergence, IN.uv).xy) - 128.0 / 255.0) * velocity_range;
  27.  
  28. float pressure = (left + right + top + bottom - divergence) * 0.25;
  29.  
  30. OUT.color_0 = float4(pack_pressure(saturate(pressure / pressure_range)), 0.0, 0.0);
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement