You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.2 KiB
61 lines
2.2 KiB
// 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<UArchVisCineCameraComponent>() : nullptr;
|
|
}
|
|
else
|
|
{
|
|
FMinimalViewInfo SideCarViewInfo;
|
|
UCameraComponent* OutCamera = nullptr;
|
|
Pipeline->GetSidecarCameraData(CurrentShot, InOutSampleState.OutputState.CameraIndex, SideCarViewInfo, &OutCamera);
|
|
ArchVisComponent = Cast<UArchVisCineCameraComponent>(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
|
|
|
|
|