Howto modify the projection matrix

ULocalPlayer::CalcSceneView() is virtual (at least in 4.16 engine), so now it may be narrowed to overloading this method:

 static void UpdateProjectionMatrix(FSceneView* View, FMatrix PostProjectionMatrix)
   {
   View->ProjectionMatrixUnadjustedForRHI = View->ProjectionMatrixUnadjustedForRHI * PostProjectionMatrix;
 
   FMatrix* pProjectionMatrix = (FMatrix*)(&View->ViewMatrices.GetProjectionMatrix());
   *pProjectionMatrix = AdjustProjectionMatrixForRHI(View->ProjectionMatrixUnadjustedForRHI);
 
   FMatrix* pViewProjectionMatrix = (FMatrix*)(&View->ViewMatrices.GetViewProjectionMatrix());
   *pViewProjectionMatrix = View->ViewMatrices.GetViewMatrix() * View->ViewMatrices.GetProjectionMatrix();
 
   FMatrix* pInvViewProjectionMatrix = (FMatrix*)&View->ViewMatrices.GetInvViewProjectionMatrix();
   *pInvViewProjectionMatrix = View->ViewMatrices.GetViewProjectionMatrix().Inverse();
 
   FMatrix TranslatedViewMatrix = FTranslationMatrix(-View->ViewMatrices.GetPreViewTranslation()) * View->ViewMatrices.GetViewMatrix();
   FMatrix* pTranslatedViewProjectionMatrix = (FMatrix*)(&View->ViewMatrices.GetTranslatedViewProjectionMatrix());
   *pTranslatedViewProjectionMatrix = TranslatedViewMatrix * View->ViewMatrices.GetProjectionMatrix();
 
   FMatrix* pInvTranslatedViewProjectionMatrixx = (FMatrix*)(&View->ViewMatrices.GetInvTranslatedViewProjectionMatrix());
   *pInvTranslatedViewProjectionMatrixx = View->ViewMatrices.GetTranslatedViewProjectionMatrix().Inverse();
 
   View->ShadowViewMatrices = View->ViewMatrices;
 
   GetViewFrustumBounds(View->ViewFrustum, View->ViewMatrices.GetViewProjectionMatrix(), false);
   }
 
 FSceneView* UMyLocalPlayer::CalcSceneView(class FSceneViewFamily* ViewFamily, FVector& OutViewLocation, FRotator& OutViewRotation, FViewport* Viewport, class FViewElementDrawer* ViewDrawer /*= NULL*/, EStereoscopicPass StereoPass /*= eSSP_FULL*/)
   {
   auto View = ULocalPlayer::CalcSceneView(ViewFamily, OutViewLocation, OutViewRotation, Viewport, ViewDrawer, StereoPass);
   if (View)
     {
     FScaleMatrix scaleM(FVector(1.f, PixelAspect, 1.0f));
     FTranslationMatrix shiftM(FVector(CCDOffset.X, CCDOffset.Y, 0.0f));
     UpdateProjectionMatrix(View, scaleM * shiftM);
     }
 
   return View;
   }