// Copyright Voulz 2021-2025. All Rights Reserved. #pragma once #include "MoviePipelineImagePassBase.h" #include "MovieRenderPipelineDataTypes.h" #include "ArchVisMoviePipelineDeferredPassObjectId.generated.h" enum class EArchVisMoviePipelineObjectIdPassIdType : uint8; UCLASS(BlueprintType) class ARCHVISTOOLSEDITOR_API UArchVisMoviePipelineObjectIdRenderPass : public UMoviePipelineImagePassBase { GENERATED_BODY() public: UArchVisMoviePipelineObjectIdRenderPass(); virtual UE::MoviePipeline::FImagePassCameraViewData GetCameraInfo(FMoviePipelineRenderPassMetrics& InOutSampleState, IViewCalcPayload* OptPayload = nullptr) const override; public: virtual FText GetDisplayText() const override { return INVTEXT("[ArchVis] Object Ids (Limited)"); } protected: virtual int32 GetNumCamerasToRender() const; public: virtual void GetViewShowFlags(FEngineShowFlags& OutShowFlag, EViewModeIndex& OutViewModeIndex) const override; virtual void RenderSample_GameThreadImpl(const FMoviePipelineRenderPassMetrics& InSampleState) override; virtual void TeardownImpl() override; virtual void SetupImpl(const MoviePipeline::FMoviePipelineRenderPassInitSettings& InPassInitSettings) override; virtual void GatherOutputPassesImpl(TArray& ExpectedRenderPasses) override; virtual bool IsScreenPercentageSupported() const override { return false; } virtual int32 GetOutputFileSortingOrder() const override { return 10; } virtual void UpdateTelemetry(FMoviePipelineShotRenderTelemetry* InTelemetry) const override; virtual TWeakObjectPtr CreateViewRenderTargetImpl(const FIntPoint& InSize, IViewCalcPayload* OptPayload = nullptr) const override; virtual TSharedPtr CreateSurfaceQueueImpl(const FIntPoint& InSize, IViewCalcPayload* OptPayload = nullptr) const override; protected: void PostRendererSubmission(const FMoviePipelineRenderPassMetrics& InSampleState); virtual void AddViewExtensions(FSceneViewFamilyContext& InContext, FMoviePipelineRenderPassMetrics& InOutSampleState) override; private: /** Gets the typename hash used as part of the cryptomatte metadata. Eg, "cryptomatte//..." */ FString GetTypenameHash() const; public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Settings") EArchVisMoviePipelineObjectIdPassIdType IdType; /** If true, translucent objects will be included in the ObjectId pass (but as an opaque layer due to limitations). False will omit translucent objects. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Settings") bool bIncludeTranslucentObjects; private: TSharedPtr AccumulatorPool; TArray ExpectedPassIdentifiers; bool bPrevAllowSelectTranslucent; };