// Copyright Voulz 2021-2025. All Rights Reserved. #include "ArchVisMoviePipelineDeferredPass.h" #include "ArchVisCineCameraComponent.h" #include "ArchVisSceneViewExtension.h" #include "MoviePipeline.h" #define CURRENT_LOG_CATEGORY LogArchVisTools #define LOCTEXT_NAMESPACE "FArchVisToolsModule" UE::MoviePipeline::FImagePassCameraViewData UArchVisMoviePipelineDeferredPass::GetArchVisCameraInfo(UE::MoviePipeline::FImagePassCameraViewData CameraInfo, FMoviePipelineRenderPassMetrics& InOutSampleState, UMoviePipeline* Pipeline, int32 NumCamerasToRender) { // here, the CameraInfo.ViewActor doesn't always return the right actor for "consistency", see UMoviePipelineDeferredPassBase::GetCameraInfo // so we need to check the SidecarCameraData if we have more than one camera UArchVisCineCameraComponent* ArchVisComponent; UMoviePipelineExecutorShot* CurrentShot = Pipeline->GetActiveShotList()[Pipeline->GetCurrentShotIndex()]; if (NumCamerasToRender == 1) { ArchVisComponent = CameraInfo.ViewActor ? CameraInfo.ViewActor->FindComponentByClass() : nullptr; } else { FMinimalViewInfo SideCarViewInfo; UCameraComponent* OutCamera = nullptr; Pipeline->GetSidecarCameraData(CurrentShot, InOutSampleState.OutputState.CameraIndex, SideCarViewInfo, &OutCamera); ArchVisComponent = Cast(OutCamera); } if (!ArchVisComponent) { return CameraInfo; } const UWorld* World = Pipeline->GetWorld(); const FMinimalViewInfo ViewInfo = FArchVisSceneViewExtension::GetCorrectedViewInfo(World, ArchVisComponent, InOutSampleState.OverscannedResolution, CameraInfo.ViewInfo); CameraInfo.ViewInfo = ViewInfo; return CameraInfo; } void UArchVisMoviePipelineDeferredPass::RemoveArchVisViewExtension(FSceneViewFamilyContext& InContext, FSceneInterface* Scene) { // This part is a hack to disable the ArchVisScene. We want to be sure it is only disabled for MRQ, so we use this callback to remove it from the active extensions const FArchVisSceneViewExtensionContextDisableOnce Context {Scene}; for (auto It = InContext.ViewExtensions.CreateIterator(); It; ++It ) { if (!(*It)->IsActiveThisFrame(Context)) { It.RemoveCurrent(); } } } #undef CURRENT_LOG_CATEGORY #undef LOCTEXT_NAMESPACE