// Copyright Voulz 2021-2025. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "MoviePipeline.h" #include "MoviePipelineDeferredPasses.h" #include "ArchVisMoviePipelineDeferredPass.generated.h" #define CURRENT_LOG_CATEGORY LogArchVisTools /** * */ UCLASS(BlueprintType) class ARCHVISTOOLS_API UArchVisMoviePipelineDeferredPass : public UMoviePipelineDeferredPassBase { GENERATED_BODY() public: UArchVisMoviePipelineDeferredPass() : UMoviePipelineDeferredPassBase() { PassIdentifier = FMoviePipelinePassIdentifier("FinalImage[ArchVis]"); } #if WITH_EDITOR virtual FText GetDisplayText() const override { return INVTEXT("[ArchVis] Deferred Rendering"); } #endif virtual UE::MoviePipeline::FImagePassCameraViewData GetCameraInfo(FMoviePipelineRenderPassMetrics& InOutSampleState, IViewCalcPayload* OptPayload = nullptr) const override { return UArchVisMoviePipelineDeferredPass::GetArchVisCameraInfo(Super::GetCameraInfo(InOutSampleState, OptPayload), InOutSampleState, GetPipeline(), GetNumCamerasToRender()); } protected: virtual void AddViewExtensions(FSceneViewFamilyContext& InContext, FMoviePipelineRenderPassMetrics& InOutSampleState) override { RemoveArchVisViewExtension(InContext, GetWorld()->Scene); Super::AddViewExtensions(InContext, InOutSampleState); } public: static UE::MoviePipeline::FImagePassCameraViewData GetArchVisCameraInfo(UE::MoviePipeline::FImagePassCameraViewData CameraInfo, FMoviePipelineRenderPassMetrics& InOutSampleState, UMoviePipeline* Pipeline, int32 NumCamerasToRender); static void RemoveArchVisViewExtension(FSceneViewFamilyContext& InContext, FSceneInterface* Scene); }; UCLASS(BlueprintType) class ARCHVISTOOLS_API UArchVisMoviePipelineDeferredPass_Unlit : public UMoviePipelineDeferredPass_Unlit { GENERATED_BODY() public: UArchVisMoviePipelineDeferredPass_Unlit() : UMoviePipelineDeferredPass_Unlit() { PassIdentifier = FMoviePipelinePassIdentifier("Unlit[ArchVis]"); } #if WITH_EDITOR virtual FText GetDisplayText() const override { return INVTEXT("[ArchVis] Deferred Rendering (Unlit)"); } #endif virtual UE::MoviePipeline::FImagePassCameraViewData GetCameraInfo(FMoviePipelineRenderPassMetrics& InOutSampleState, IViewCalcPayload* OptPayload = nullptr) const override { return UArchVisMoviePipelineDeferredPass::GetArchVisCameraInfo(Super::GetCameraInfo(InOutSampleState, OptPayload), InOutSampleState, GetPipeline(), GetNumCamerasToRender()); } protected: virtual void AddViewExtensions(FSceneViewFamilyContext& InContext, FMoviePipelineRenderPassMetrics& InOutSampleState) override { UArchVisMoviePipelineDeferredPass::RemoveArchVisViewExtension(InContext, GetWorld()->Scene); Super::AddViewExtensions(InContext, InOutSampleState); } }; UCLASS(BlueprintType) class ARCHVISTOOLS_API UArchVisMoviePipelineDeferredPass_DetailLighting : public UMoviePipelineDeferredPass_DetailLighting { GENERATED_BODY() public: UArchVisMoviePipelineDeferredPass_DetailLighting() : UMoviePipelineDeferredPass_DetailLighting() { PassIdentifier = FMoviePipelinePassIdentifier("DetailLightingOnly[ArchVis]"); } #if WITH_EDITOR virtual FText GetDisplayText() const override { return INVTEXT("[ArchVis] Deferred Rendering (Detail Lighting)"); } #endif virtual UE::MoviePipeline::FImagePassCameraViewData GetCameraInfo(FMoviePipelineRenderPassMetrics& InOutSampleState, IViewCalcPayload* OptPayload = nullptr) const override { return UArchVisMoviePipelineDeferredPass::GetArchVisCameraInfo(Super::GetCameraInfo(InOutSampleState, OptPayload), InOutSampleState, GetPipeline(), GetNumCamerasToRender()); } protected: virtual void AddViewExtensions(FSceneViewFamilyContext& InContext, FMoviePipelineRenderPassMetrics& InOutSampleState) override { UArchVisMoviePipelineDeferredPass::RemoveArchVisViewExtension(InContext, GetWorld()->Scene); Super::AddViewExtensions(InContext, InOutSampleState); } }; UCLASS(BlueprintType) class ARCHVISTOOLS_API UArchVisMoviePipelineDeferredPass_LightingOnly : public UMoviePipelineDeferredPass_LightingOnly { GENERATED_BODY() public: UArchVisMoviePipelineDeferredPass_LightingOnly() : UMoviePipelineDeferredPass_LightingOnly() { PassIdentifier = FMoviePipelinePassIdentifier("LightingOnly[ArchVis]"); } #if WITH_EDITOR virtual FText GetDisplayText() const override { return INVTEXT("[ArchVis] Deferred Rendering (Lighting Only)"); } #endif virtual UE::MoviePipeline::FImagePassCameraViewData GetCameraInfo(FMoviePipelineRenderPassMetrics& InOutSampleState, IViewCalcPayload* OptPayload = nullptr) const override { return UArchVisMoviePipelineDeferredPass::GetArchVisCameraInfo(Super::GetCameraInfo(InOutSampleState, OptPayload), InOutSampleState, GetPipeline(), GetNumCamerasToRender()); } protected: virtual void AddViewExtensions(FSceneViewFamilyContext& InContext, FMoviePipelineRenderPassMetrics& InOutSampleState) override { UArchVisMoviePipelineDeferredPass::RemoveArchVisViewExtension(InContext, GetWorld()->Scene); Super::AddViewExtensions(InContext, InOutSampleState); } }; UCLASS(BlueprintType) class ARCHVISTOOLS_API UArchVisMoviePipelineDeferredPass_ReflectionsOnly : public UMoviePipelineDeferredPass_ReflectionsOnly { GENERATED_BODY() public: UArchVisMoviePipelineDeferredPass_ReflectionsOnly() : UMoviePipelineDeferredPass_ReflectionsOnly() { PassIdentifier = FMoviePipelinePassIdentifier("ReflectionsOnly[ArchVis]"); } #if WITH_EDITOR virtual FText GetDisplayText() const override { return INVTEXT("[ArchVis] Deferred Rendering (Reflections Only)"); } #endif virtual UE::MoviePipeline::FImagePassCameraViewData GetCameraInfo(FMoviePipelineRenderPassMetrics& InOutSampleState, IViewCalcPayload* OptPayload = nullptr) const override { return UArchVisMoviePipelineDeferredPass::GetArchVisCameraInfo(Super::GetCameraInfo(InOutSampleState, OptPayload), InOutSampleState, GetPipeline(), GetNumCamerasToRender()); } protected: virtual void AddViewExtensions(FSceneViewFamilyContext& InContext, FMoviePipelineRenderPassMetrics& InOutSampleState) override { UArchVisMoviePipelineDeferredPass::RemoveArchVisViewExtension(InContext, GetWorld()->Scene); Super::AddViewExtensions(InContext, InOutSampleState); } }; UCLASS(BlueprintType) class ARCHVISTOOLS_API UArchVisMoviePipelineDeferredPass_PathTracer : public UMoviePipelineDeferredPass_PathTracer { GENERATED_BODY() public: UArchVisMoviePipelineDeferredPass_PathTracer() : UMoviePipelineDeferredPass_PathTracer() { PassIdentifier = FMoviePipelinePassIdentifier("PathTracer[ArchVis]"); } #if WITH_EDITOR virtual FText GetDisplayText() const override { return INVTEXT("[ArchVis] Path Tracer"); } #endif virtual UE::MoviePipeline::FImagePassCameraViewData GetCameraInfo(FMoviePipelineRenderPassMetrics& InOutSampleState, IViewCalcPayload* OptPayload = nullptr) const override { return UArchVisMoviePipelineDeferredPass::GetArchVisCameraInfo(Super::GetCameraInfo(InOutSampleState, OptPayload), InOutSampleState, GetPipeline(), GetNumCamerasToRender()); } protected: virtual void AddViewExtensions(FSceneViewFamilyContext& InContext, FMoviePipelineRenderPassMetrics& InOutSampleState) override { UArchVisMoviePipelineDeferredPass::RemoveArchVisViewExtension(InContext, GetWorld()->Scene); Super::AddViewExtensions(InContext, InOutSampleState); } }; #undef CURRENT_LOG_CATEGORY