Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct PS_INPUT {
- float2 uv: TEXCOORD0;
- };
- struct PS_OUTPUT {
- float4 color_0: SV_TARGET0;
- };
- uniform sampler2D texture_pressure;
- uniform float2 texel_size;
- float2 unpack_velocity(float4 data) {return float2(data.x + (data.y / 255.0), data.z + (data.w / 255.0));}
- float4 pack_velocity(float2 data) {return float4(floor(data.x * 255.0) / 255.0, frac(data.x * 255.0), floor(data.y * 255.0) / 255.0, frac(data.y * 255.0));}
- float unpack_pressure(float2 data) {return data.x + (data.y / 255.0);}
- float2 pack_pressure(float data) {return float2(floor(data * 255.0) / 255.0, frac(data * 255.0));}
- void main(in PS_INPUT IN, out PS_OUTPUT OUT) {
- float velocity_range = 10.0;
- float pressure_range = 10.0;
- float right = unpack_pressure(tex2D(texture_pressure, IN.uv + float2(texel_size.x, 0.0)).xy) * pressure_range;
- float left = unpack_pressure(tex2D(texture_pressure, IN.uv - float2(texel_size.x, 0.0)).xy) * pressure_range;
- float bottom = unpack_pressure(tex2D(texture_pressure, IN.uv + float2(0.0, texel_size.y)).xy) * pressure_range;
- float top = unpack_pressure(tex2D(texture_pressure, IN.uv - float2(0.0, texel_size.y)).xy) * pressure_range;
- float2 gradient = 0.5 * float2(right - left, bottom - top);
- float2 velocity = (unpack_velocity(tex2D(gm_BaseTexture, IN.uv)) - 128.0 / 255.0) * velocity_range;
- velocity -= gradient;
- OUT.color_0 = pack_velocity(saturate(velocity / velocity_range + 128.0 / 255.0));
- }
Add Comment
Please, Sign In to add comment