Пример #1
0
        public void TickLogic()
        {
            if (mSV_PickedSetUp == null)
            {
                return;
            }

            ScopeTickLogic.Begin();

            mSV_PickedSetUp.CookSpecRenderLayerDataToPass(mRHICtx, ERenderLayer.RL_Opaque, mCamera, mSE_PickedSetUp, PrebuildPassIndex.PPI_PickedEditor);
            mSV_PickedSetUp.CookSpecRenderLayerDataToPass(mRHICtx, ERenderLayer.RL_CustomOpaque, mCamera, mSE_PickedSetUp, PrebuildPassIndex.PPI_PickedEditor);
            mSV_PickedSetUp.CookSpecRenderLayerDataToPass(mRHICtx, ERenderLayer.RL_CustomTranslucent, mCamera, mSE_PickedSetUp, PrebuildPassIndex.PPI_PickedEditor);
            mSV_PickedSetUp.CookSpecRenderLayerDataToPass(mRHICtx, ERenderLayer.RL_Translucent, mCamera, mSE_PickedSetUp, PrebuildPassIndex.PPI_PickedEditor);
            mSV_PickedSetUp.CookSpecRenderLayerDataToPass(mRHICtx, ERenderLayer.RL_Gizmos, mCamera, mSE_PickedSetUp, PrebuildPassIndex.PPI_PickedEditor);

            var CmdList = mCLDB_Picked[0];

            mSV_PickedSetUp.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_Opaque);
            mSV_PickedSetUp.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_CustomOpaque);
            mSV_PickedSetUp.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_CustomTranslucent);
            mSV_PickedSetUp.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_Translucent);
            mSV_PickedSetUp.PushSpecRenderLayerDataToRHI(CmdList, ERenderLayer.RL_Gizmos);

            CmdList.BeginCommand();
            CmdList.BeginRenderPass(mRenderPassDesc_Picked, mSV_PickedSetUp.FrameBuffer);
            CmdList.BuildRenderPass(mDPLimitter);
            CmdList.EndRenderPass();

            mSV_PickedBlurH.CookViewportMeshToPassInMultiPassMode(mRHICtx, mSE_PickedBlurH, 0, mCamera, mScreenAlignedTriangle);
            mSV_PickedBlurH.PushPassToRHIInMultiPassMode(CmdList, 0);
            CmdList.BeginRenderPass(mRenderPassDesc_Picked, mSV_PickedBlurH.FrameBuffer);
            CmdList.BuildRenderPass();
            CmdList.EndRenderPass();

            mSV_PickedBlurV.CookViewportMeshToPass(mRHICtx, mSE_PickedBlurV, mCamera, mScreenAlignedTriangle);
            mSV_PickedBlurV.PushPassToRHI(CmdList);
            CmdList.BeginRenderPass(mRenderPassDesc_Picked, mSV_PickedBlurV.FrameBuffer);
            CmdList.BuildRenderPass();
            CmdList.EndRenderPass();
            CmdList.EndCommand();

            CmdList = mCLDB_DisableWarning[0];
            mSV_PickedBlurH.CookViewportMeshToPassInMultiPassMode(mRHICtx, mSE_PickedHollow, 1, mCamera, mScreenAlignedTriangle);
            mSV_PickedBlurH.PushPassToRHIInMultiPassMode(CmdList, 1);
            CmdList.BeginCommand();
            CmdList.BeginRenderPass(mRenderPassDesc_Picked, mSV_PickedBlurH.FrameBuffer);
            CmdList.BuildRenderPass();
            CmdList.EndRenderPass();
            CmdList.EndCommand();

            ScopeTickLogic.End();
        }
Пример #2
0
        public void TickLogic(CRenderContext RHICtx, CGfxCamera camera, CGfxSceneView BaseSceneView)
        {
            if (RHICtx == null)
            {
                System.Diagnostics.Debug.Assert(false);
                return;
            }

            if (CEngine.EnableMobileAo == true)
            {
                mAoParam.X = mRadius;
                mAoParam.Z = mBias;
                //float temp0 = 1.0f / (mRadius * mRadius * mRadius);
                //mDarkness = temp0 * temp0 * mDarkness;
                mAoParam.W = mDarkness;

                if (CEngine.Instance.RenderSystem.RHIType != ERHIType.RHT_OGL)
                {
                    mAoParam.Y = 1.0f;
                }
                else
                {
                    mAoParam.Y = -1.0f;
                }

                //ao mask pass
                var CmdList = mCLDB_AoMask[0];
                CmdList.BeginCommand();
                mSE_AoMask.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0);
                mView_AoMask.AoParam      = mAoParam;
                mView_AoMask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_AoMask, 0, camera, mScreenAlignedTriangle);
                mView_AoMask.PushPassToRHIInMultiPassMode(CmdList, 0);
                CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_AoMask.FrameBuffer);
                CmdList.BuildRenderPass();
                CmdList.EndRenderPass();
                CmdList.EndCommand();

                //ao blur h;
                CmdList = mCLDB_BlurH[0];
                CmdList.BeginCommand();
                //mSE_BlurH.mSRV_AoMask = mView_AoMask.FrameBuffer.GetSRV_RenderTarget(0);
                mView_BlurH.CookViewportMeshToPass(RHICtx, mSE_BlurH, camera, mScreenAlignedTriangle);
                mView_BlurH.PushPassToRHI(CmdList);
                CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_BlurH.FrameBuffer);
                CmdList.BuildRenderPass();
                CmdList.EndRenderPass();
                CmdList.EndCommand();

                //ao blur v;
                CmdList = mCLDB_BlurV[0];
                CmdList.BeginCommand();
                mSE_BlurV.mSRV_Src = mView_BlurH.FrameBuffer.GetSRV_RenderTarget(0);
                mView_AoMask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_BlurV, 1, camera, mScreenAlignedTriangle);
                mView_AoMask.PushPassToRHIInMultiPassMode(CmdList, 1);
                CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_AoMask.FrameBuffer);
                CmdList.BuildRenderPass();
                CmdList.EndRenderPass();
                CmdList.EndCommand();

                //CmdList = mCLDB_BlurV[0];
                //CmdList.BeginCommand();
                //mView_BlurV.CookViewportMeshToPass(RHICtx, mSE_BlurV, camera, mScreenAlignedTriangle);
                //mView_BlurV.PushPassToRHI(CmdList);
                //CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_BlurV.FrameBuffer);
                //CmdList.BuildRenderPass(ref DPLimitter);
                //CmdList.EndRenderPass();
                //CmdList.EndCommand();
            }
            else
            {
                //ao blur v;
                var CmdList = mCLDB_BlurV[0];
                CmdList.BeginCommand();
                CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_AoMask.FrameBuffer);
                CmdList.EndRenderPass();
                CmdList.EndCommand();
                //var CmdList = mCLDB_BlurV[0];
                //CmdList.BeginCommand();
                //CmdList.BeginRenderPass(mRenderPassDesc_Ao, mView_BlurV.FrameBuffer);
                //CmdList.EndRenderPass();
                //CmdList.EndCommand();
            }
        }
Пример #3
0
        private void TickLogic_Impl(CRenderContext RHICtx, CGfxCamera camera, Vector3 SunDir, CGfxSceneView BaseSceneView)
        {
            if (CEngine.EnableSunShaft == false)
            {
                mStopSunShaftUpdate = true;
                return;
            }
            if (RHICtx == null)
            {
                return;
            }

            ScopeTickLogic.Begin();
            mSunPosNdc.X = -SunDir.X * mSunDistance;
            mSunPosNdc.Y = -SunDir.Y * mSunDistance;
            mSunPosNdc.Z = -SunDir.Z * mSunDistance;
            mSunPosNdc.W = 1.0f;

            mSunPosNdc   = Vector4.Transform(mSunPosNdc, camera.CameraData.ViewProjection);
            mSunPosNdc.X = Clamp(mSunPosNdc.X / mSunPosNdc.W, mSunPosNdcMin, mSunPosNdcMax);
            mSunPosNdc.Y = Clamp(mSunPosNdc.Y / mSunPosNdc.W, mSunPosNdcMin, mSunPosNdcMax);
            float AttenOffset = Clamp(Math.Abs(mSunPosNdc.X) - 1.0f, 0.0f, 0.5f) + Clamp(Math.Abs(mSunPosNdc.Y) - 1.0f, 0.0f, 0.5f);

            mSunShaftAtten = Clamp(Vector3.Dot(-1.0f * camera.CameraData.Direction, SunDir) * 2.0f - AttenOffset, 0.0f, 1.0f);
            if (mSunShaftAtten <= 0.0f)
            {
                mStopSunShaftUpdate = true;
                return;
            }
            else
            {
                mStopSunShaftUpdate = false;
            }

            if (CEngine.Instance.RenderSystem.RHIType != ERHIType.RHT_OGL)
            {
                mSunPosNdc.W = 1.0f;
            }
            else
            {
                mSunPosNdc.W = -1.0f;
            }

            var CmdList = mCLDB_SunShaft[0];

            CmdList.BeginCommand();
            //generate mask;
            mSE_Mask.mBaseSceneView = BaseSceneView.FrameBuffer.GetSRV_RenderTarget(0);
            mView_Mask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Mask, 0, camera, mViewportMesh);
            mView_Mask.PushPassToRHIInMultiPassMode(CmdList, 0);
            CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Mask.FrameBuffer);
            CmdList.BuildRenderPass();
            CmdList.EndRenderPass();

            //blur0;
            mSunPosNdc.Z           = 0.2f;
            mView_Blur.SunPosNDC   = mSunPosNdc;
            mSE_Blur.mSunShaftMask = mView_Mask.FrameBuffer.GetSRV_RenderTarget(0);
            mView_Blur.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Blur, 0, camera, mViewportMesh);
            mView_Blur.PushPassToRHIInMultiPassMode(CmdList, 0);
            CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Blur.FrameBuffer);
            CmdList.BuildRenderPass();
            CmdList.EndRenderPass();

            CmdList.EndCommand();

            CmdList = mCLDB_DisableWarning0[0];
            CmdList.BeginCommand();
            //blur1;
            mSunPosNdc.Z           = 0.4f;
            mView_Mask.SunPosNDC   = mSunPosNdc;
            mSE_Blur.mSunShaftMask = mView_Blur.FrameBuffer.GetSRV_RenderTarget(0);
            mView_Mask.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Blur, 1, camera, mViewportMesh);
            mView_Mask.PushPassToRHIInMultiPassMode(CmdList, 1);
            CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Mask.FrameBuffer);
            CmdList.BuildRenderPass();
            CmdList.EndRenderPass();

            CmdList.EndCommand();

            CmdList = mCLDB_DisableWarning1[0];
            CmdList.BeginCommand();
            //blur2;
            mSunPosNdc.Z           = 0.7f;
            mView_Blur.SunPosNDC   = mSunPosNdc;
            mSE_Blur.mSunShaftMask = mView_Mask.FrameBuffer.GetSRV_RenderTarget(0);
            mView_Blur.CookViewportMeshToPassInMultiPassMode(RHICtx, mSE_Blur, 1, camera, mViewportMesh);
            mView_Blur.PushPassToRHIInMultiPassMode(CmdList, 1);
            CmdList.BeginRenderPass(mRenderPassDesc_SunShaft, mView_Blur.FrameBuffer);
            CmdList.BuildRenderPass();
            CmdList.EndRenderPass();

            CmdList.EndCommand();

            ScopeTickLogic.End();
        }