void ExportDebugMask() { if (!DebugRT || !DebugRT.IsCreated()) { var N = isf.N; var rtf4 = FFT.CreateRenderTexture3D(N[0], N[1], N[2]); DebugRT = DebugRT = rtf4; } CS.SetTexture(kernelZeroOutDebugOutput, "DebugOutput", DebugRT); DispatchCS(kernelZeroOutDebugOutput); CS.SetTexture(kernelBlitDebugMask, "Nozzle", NozzleRT); CS.SetTexture(kernelBlitDebugMask, "DebugOutput", DebugRT); DispatchCS(kernelBlitDebugMask); fft.ExportFloat4_3D(DebugRT, "test/isf.nozzle.mask.json"); }
public void PressureProject(ref RenderTexture psi1, ref RenderTexture psi2) { VelocityOneForm(ref psi1, ref psi2); if (dbg_call.velocity == 0) { fft.ExportFloat4_3D(Velocity, "test/isf.velo.json"); } ++dbg_call.velocity; // 计算散度 ISFCS.SetTexture(kernelComputeDivergence, "Velocity", Velocity); ISFCS.SetTexture(kernelComputeDivergence, "Divergence", Divergence); DispatchISFCS(kernelComputeDivergence); //fft.ExportComplex3D(Divergence, "test/isf.div.json"); // 求解 Possion 方程 fft.fft(ref Divergence, ref TempRT); // Divergence 比较大, FFT 之后会放大 Divergence, // float & double 会产生超过 0.02 的精度误差 ISFCS.SetTexture(kernelPossionSpectral, "PossionMul", PossionMul); ISFCS.SetTexture(kernelPossionSpectral, "Divergence", Divergence); DispatchISFCS(kernelPossionSpectral); fft.ifft(ref Divergence, ref TempRT); //fft.ExportComplex3D(Divergence, "test/isf.pos.json"); //fft.ExportFloat1_3D(PossionMul, "test/isf.fac.json"); ISFCS.SetTexture(kernelGaugeTransform, "Psi1", psi1); ISFCS.SetTexture(kernelGaugeTransform, "Psi2", psi2); ISFCS.SetTexture(kernelGaugeTransform, "Divergence", Divergence); DispatchISFCS(kernelGaugeTransform); }