#include "fluid_common.hlsli" ////////////////////////////////////////////////////////////////////////////////////////// // Pixel float4 main(p_fluidsim input) : SV_Target { if (IsNonEmptyCell(input.texcoords.xyz)) { return 0; } float3 npos = GetAdvectedPosTexCoords(input); float4 r; float3 diff = abs(floatVolumeDim.xyz - input.cell0.xyz); // Must use regular semi-Lagrangian advection instead of BFECC at the volume boundaries if ((diff.x > (floatVolumeDim.x - 4)) || (diff.y > (floatVolumeDim.y - 4)) || (diff.z > (floatVolumeDim.z - 4))) { r = Texture_color.SampleLevel(samLinear, npos, 0); } else { // Texture_color contains \phi^n; Texture_tempscalar contains \bar{\phi} // (i.e.: the result of 1 forward advection step, followed by a backwards advection step) r = 1.5f * Texture_color.SampleLevel(samLinear, npos, 0) - 0.5f * Texture_tempscalar.SampleLevel(samLinear, npos, 0); } r = saturate(r); return r * modulate; }