Exemple #1
0
    /// <summary>
    /// 更新処理
    /// デバッグにて1フレームあたりの餌やり0.09ms、計算自体は33msとなっている
    /// </summary>
    void Update()
    {
        //自分が死んだときに発生する粒子は、移流の前でないと見た目がしょぼいことになる
        if (((ucomp.deathcounter > 2) & (ucomp.deathcounter < 19)) & (ucomp.deathcounter % 2 == 1))
        {
            if (ucomp.deathcounter == 3)
            {
                SE.aS.PlayOneShot(SE.exp0);
            }
            dtprtcomp.ExpRYS(ucomp.death_posx, ucomp.death_posy);
        }


        //ここで壁mapping
        CopyBufferToBuffer_f(kabeP, kabePori);//壁初期値をまず設定
        //すべての壁objをmapping、ufo含む
        AnotherObj();
        //マッピング情報からkabe情報を生成
        bulletsComputeShader.Dispatch(kernelkabemapping, 1, Const.CO.WY, 1);

        //CFD解析本編
        for (int loop = 0; loop < Const.CO.CFDFRAME_PAR_GAMEFRAME; loop++)
        {
            CopyBufferToBuffer_f(YU, YUN);
            CopyBufferToBuffer_f(YV, YVN);
            //veloc//ブロッキングモードoff
            bulletsComputeShader.Dispatch(kernelveloc, 1, Const.CO.WY, 1);
            CopyBufferToBuffer_f(GXd0, GXU);
            CopyBufferToBuffer_f(GYd0, GYU);
            CopyBufferToBuffer_f(GXd1, GXV);
            CopyBufferToBuffer_f(GYd1, GYV);
            CopyBufferToBuffer_f(GXd2, GXE);
            CopyBufferToBuffer_f(GYd2, GYE);
            //cip移流//ブロッキングモードoff
            bulletsComputeShader.Dispatch(kerneldcip0, 1, Const.CO.WY, 1);
            bulletsComputeShader.Dispatch(kerneldcip1, 1, Const.CO.WY, 1);
            bulletsComputeShader.Dispatch(kerneldcip2, 1, Const.CO.WY, 1);

            //過剰な渦度平滑化
            //bulletsComputeShader.Dispatch(kernelVorticityReduce, 1, Const.CO.WY, 1);

            CopyBufferToBuffer_f(YU, YUN); //これはいる!!しかしなぜなのかはわからない
            CopyBufferToBuffer_f(YV, YVN); //これはいる!!しかしなぜなのかはわからない
            CopyBufferYE_YEN();            //YE←YEN//これはただのコピーではない。熱量減量、噴射時マッピング

            //粘性//ブロッキングモードoff
            //CopyBufferToBuffer_f(YU, YUN);
            //CopyBufferToBuffer_f(YV, YVN);//もしかしたらnewgradのためいるのかもしれない
            //CopyBufferToBuffer_f(GXd0, YUN);
            //CopyBufferToBuffer_f(GYd0, YVN);
            //bulletsComputeShader.Dispatch(kernelnensei0, 1, Const.CO.WY, 1);
            //bulletsComputeShader.Dispatch(kernelnensei1, 1, Const.CO.WY, 1);

            //DIV//ブロッキングモードoff
            bulletsComputeShader.Dispatch(kerneldiv, 1, Const.CO.WY, 1);

            //pressure//ブロッキングモードoff
            for (int i = 0; i < (refer.POISSONLOOPNUM + BoolToInt(stgmngrcomp.fadeinflg < 2 && loop == 0) * 1000); i++)
            {
                bulletsComputeShader.Dispatch(kernelpressure0, Const.CO.WX * Const.CO.WY / 128 / 2, 1, 1);
                bulletsComputeShader.Dispatch(kernelpressure1, Const.CO.WX * Const.CO.WY / 128 / 2, 1, 1);
            }

            //ufoのうける外力
            //UFOのうける外力計算。1スレッドで144ループしてもらう。リダクション面倒くさいしどうせメモリ律速になるので・・
            bulletsComputeShader.SetFloat("OBJ0POSX", ucomp.ufo_pos.x);
            bulletsComputeShader.SetFloat("OBJ0POSY", ucomp.ufo_pos.y);
            bulletsComputeShader.Dispatch(kernelufopressure, 1, 1, 1);

            //rhs//ブロッキングモードoff
            bulletsComputeShader.Dispatch(kernelrhs, 1, Const.CO.WY, 1);

            //newgrad//ブロッキングモードoff
            bulletsComputeShader.Dispatch(kernelnewgrad, 1, Const.CO.WY, 1);
            bulletsComputeShader.Dispatch(kernelnewgrad2, 1, Const.CO.WY, 1);

            //粒子移流ブロッキングモードoff//一定フレームで更新
            if (loop % refer.RYRATIO == refer.RYRATIO - 1)
            {
                dtprtcomp.UpdateOFST(); //粒子場所一部初期化ブロッキングモードoff
                if ((Input.GetButton("Jump")) & (stgmngrcomp.keyflg > 0))
                {                       //粒子場所、噴射している場合赤い粒子発生ブロッキングモードoff
                    NozzleFire();
                }
                //粒子移動処理ブロッキングモードoff
                bulletsComputeShader.Dispatch(kernelryuusi, dtprtcomp.RYS.count / 64, 1, 1);
            }
        }


        //爆発判定ブロッキングモードoff
        bulletsComputeShader.Dispatch(kernelexpkabe, 1, Const.CO.WY, 1);
        //あとのブロッキングモードonになる処理は都合によりon Renderingで
        cnt++;
        extf *= 0.96f;
    }