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(); }
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(); } }
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(); }