Beispiel #1
0
    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");
    }
Beispiel #2
0
    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);
    }