Files
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

236 lines
13 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "CineCameraActor.h"
#include "CineCameraComponent.h"
#include "DisplayClusterConfigurationTypes_ICVFX.h"
#include "DisplayClusterEditorPropertyReference.h"
#include "Render/Viewport/Containers/DisplayClusterViewport_Enums.h"
#include "Render/Viewport/Containers/DisplayClusterViewport_CameraMotionBlur.h"
#include "ShaderParameters/DisplayClusterShaderParameters_ICVFX.h"
#include "DisplayClusterICVFXCameraComponent.generated.h"
struct FMinimalViewInfo;
class SWidget;
class UCameraComponent;
class IDisplayClusterViewport;
/**
* nDisplay in-camera VFX camera representation
*/
UCLASS(ClassGroup = (DisplayCluster), HideCategories = (AssetUserData, Collision, Cooking, ComponentReplication, Events, Physics, Sockets, Activation, Tags, ComponentTick), meta = (BlueprintSpawnableComponent, DisplayName="ICVFX Camera"))
class DISPLAYCLUSTER_API UDisplayClusterICVFXCameraComponent
: public UCineCameraComponent
{
GENERATED_BODY()
public:
UDisplayClusterICVFXCameraComponent(const FObjectInitializer& ObjectInitializer);
virtual void Serialize(FArchive& Ar) override;
virtual void PostLoad() override;
virtual void PostApplyToComponent() override;
public:
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = NDisplay)
FDisplayClusterConfigurationICVFX_CameraSettings CameraSettings;
#if WITH_EDITOR
virtual bool GetEditorPreviewInfo(float DeltaTime, FMinimalViewInfo& ViewOut) override;
virtual TSharedPtr<SWidget> GetCustomEditorPreviewWidget() override;
#endif
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
/** The ICVFXCamera component uses its own PostProcess and applies it to the viewport.
*
* @param InViewport - a viewport that need to be configured with a PP settings.
* @param InPostProcessFlags - Define the PostProcess set that will be used
*/
virtual void ApplyICVFXCameraPostProcessesToViewport(IDisplayClusterViewport* InDestViewport, const EDisplayClusterViewportCameraPostProcessFlags InPostProcessingFlags);
public:
UE_DEPRECATED(5.5, "This function has been deprecated. Please use 'FDisplayClusterViewportConfigurationHelpers_Postprocess::GetICVFXCameraMotionBlurParameters()'.")
FDisplayClusterViewport_CameraMotionBlur GetMotionBlurParameters()
{
return FDisplayClusterViewport_CameraMotionBlur();
}
/**
* Return the actual source camera, e.g. the camera component of the referenced cine camera.
* Use GetCameraView() function to get viewinfo with actual camera position, postprocess and ICVFX postprocess
*/
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ICVFX Camera")
UCineCameraComponent* GetActualCineCameraComponent();
/** Returns true if this camera is active in the current node. */
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "ICVFX Camera")
bool IsICVFXEnabled() const;
// Return unique camera name
FString GetCameraUniqueId() const;
const FDisplayClusterConfigurationICVFX_CameraSettings& GetCameraSettingsICVFX() const;
/** Obtaining view information for the actual camera, such as the camera component to which the cine-camera is referencing.
* The data from the CameraSettings variable is used in postprocess settings (EnableCameraPP, OverrideMotionBlur, etc.).
*/
virtual void GetCameraView(float DeltaTime, FMinimalViewInfo& InOutViewInfo) override;
// UActorComponent interface
virtual void OnRegister() override;
/** Sets new depth of field parameters and updates the dynamically generated compensation LUT if needed */
UFUNCTION(BlueprintCallable, Category = "ICVFX Camera")
void SetDepthOfFieldParameters(const FDisplayClusterConfigurationICVFX_CameraDepthOfField& NewDepthOfFieldParams);
/** Get ICVFX camera frame resolution. */
FIntPoint GetICVFXCameraFrameSize(const FDisplayClusterConfigurationICVFX_StageSettings& InStageSettings, const FDisplayClusterConfigurationICVFX_CameraSettings& InCameraSettings);
/** Get ICVFX camera shader parameters. */
FDisplayClusterShaderParameters_ICVFX::FCameraSettings GetICVFXCameraShaderParameters(const FDisplayClusterConfigurationICVFX_StageSettings& InStageSettings, const FDisplayClusterConfigurationICVFX_CameraSettings& InCameraSettings);
private:
void UpdateOverscanEstimatedFrameSize();
//////////////////////////////////////////////////////////////////////////////////////////////
// Details Panel Property Referencers
//////////////////////////////////////////////////////////////////////////////////////////////
#if WITH_EDITORONLY_DATA
public:
// update the status of the Editor's ICVFX preview elements
void UpdateICVFXPreviewState();
// saves the value of external camera reference
TSoftObjectPtr<ACineCameraActor> ExternalCameraCachedValue;
virtual void PreEditChange(FProperty* PropertyThatWillChange) override;
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
private:
friend class FDisplayClusterICVFXCameraComponentDetailsCustomization;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.bEnable"))
FDisplayClusterEditorPropertyReference IsEnabledRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.HiddenICVFXViewports"))
FDisplayClusterEditorPropertyReference HiddenICVFXViewportsRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.UpscalerSettings"))
FDisplayClusterEditorPropertyReference UpscalerSettingsRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.BufferRatio"))
FDisplayClusterEditorPropertyReference BufferRatioRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (DisplayName = "Inner Frustum Overscan", PropertyPath = "CameraSettings.CustomFrustum"))
FDisplayClusterEditorPropertyReference CustomFrustumRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.SoftEdge"))
FDisplayClusterEditorPropertyReference SoftEdgeRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.Border"))
FDisplayClusterEditorPropertyReference BorderRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.FrustumRotation"))
FDisplayClusterEditorPropertyReference FrustumRotationRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.FrustumOffset"))
FDisplayClusterEditorPropertyReference FrustumOffsetRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.OffCenterprojectionoffset"))
FDisplayClusterEditorPropertyReference OffCenterProjectionOffsetRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.RenderSettings.GenerateMips"))
FDisplayClusterEditorPropertyReference GenerateMipsRef;
UPROPERTY(EditAnywhere, Transient, Category = "Camera ICVFX", meta = (PropertyPath = "CameraSettings.ExternalCameraActor"))
FDisplayClusterEditorPropertyReference ExternalCameraActorRef;
/** Exposed reference to the camera's inner depth of field settings */
UPROPERTY(EditAnywhere, Transient, Category = "Camera ICVFX", meta = (PropertyPath = "CameraSettings.CameraDepthOfField", DisplayName = "ICVFX Depth of Field"))
FDisplayClusterEditorPropertyReference CameraDepthOfFieldRef;
UPROPERTY(EditAnywhere, Transient, Category = "Camera ICVFX", meta = (PropertyPath = "CameraSettings.CameraMotionBlur", DisplayName = "ICVFX Camera Motion Blur"))
FDisplayClusterEditorPropertyReference CameraMotionBlurRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum", meta = (PropertyPath = "CameraSettings.CameraHideList"))
FDisplayClusterEditorPropertyReference CameraHideListRef;
UPROPERTY(EditAnywhere, Transient, Category = Chromakey, meta = (PropertyPath = "CameraSettings.Chromakey.bEnable"))
FDisplayClusterEditorPropertyReference ChromaKeyEnabledRef;
UPROPERTY(EditAnywhere, Transient, Category = Chromakey, meta = (PropertyPath = "CameraSettings.Chromakey.ChromakeyType"))
FDisplayClusterEditorPropertyReference ChromakeyTypeRef;
UPROPERTY(EditAnywhere, Transient, Category = Chromakey, meta = (PropertyPath = "CameraSettings.Chromakey.ChromakeySettingsSource"))
FDisplayClusterEditorPropertyReference ChromakeySettingsSourceRef;
UPROPERTY(EditAnywhere, Transient, Category = Chromakey, meta = (PropertyPath = "CameraSettings.Chromakey.ChromakeyColor"))
FDisplayClusterEditorPropertyReference ChromakeyColorRef;
UPROPERTY(EditAnywhere, Transient, Category = Chromakey, meta = (PropertyPath = "CameraSettings.Chromakey.ChromakeyMarkers"))
FDisplayClusterEditorPropertyReference ChromakeyMarkersRef;
UPROPERTY(EditAnywhere, Transient, Category = Chromakey, meta = (PropertyPath = "CameraSettings.Chromakey.ChromakeyRenderTexture"))
FDisplayClusterEditorPropertyReference ChromakeyRenderTextureRef;
UPROPERTY(EditAnywhere, Transient, Category = OCIO, meta = (PropertyPath = "CameraSettings.CameraOCIO.AllNodesOCIOConfiguration.bIsEnabled", DisplayName = "Enable Inner Frustum OCIO"))
FDisplayClusterEditorPropertyReference EnableInnerFrustuOCIORef;
UPROPERTY(EditAnywhere, Transient, Category = OCIO, meta = (PropertyPath = "CameraSettings.CameraOCIO.AllNodesOCIOConfiguration.ColorConfiguration", DisplayName = "All Nodes Color Configuration"))
FDisplayClusterEditorPropertyReference AllNodesOCIOConfigurationRef;
UPROPERTY(EditAnywhere, Transient, Category = OCIO, meta = (PropertyPath = "CameraSettings.CameraOCIO.PerNodeOCIOProfiles", DisplayName = "Per-Node OCIO Overrides"))
FDisplayClusterEditorPropertyReference PerNodeOCIOProfilesRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum Color Grading", meta = (PropertyPath = "CameraSettings.EnableInnerFrustumColorGrading", DisplayName = "Enable Inner Frustum Color Grading"))
FDisplayClusterEditorPropertyReference EnableInnerFrustumColorGrading;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum Color Grading", meta = (PropertyPath = "CameraSettings.AllNodesColorGrading", DisplayName = "All Nodes"))
FDisplayClusterEditorPropertyReference AllNodesColorGradingRef;
UPROPERTY(EditAnywhere, Transient, Category = "Inner Frustum Color Grading", meta = (PropertyPath = "CameraSettings.PerNodeColorGrading"))
FDisplayClusterEditorPropertyReference PerNodeColorGradingRef;
UPROPERTY(EditAnywhere, Transient, Category = "Texture Replacement", meta = (PropertyPath = "CameraSettings.RenderSettings.Replace.bAllowReplace", DisplayName = "Enable Inner Frustum Texture Replacement", ToolTip = "Set to True to replace the entire inner frustum with the specified texture."))
FDisplayClusterEditorPropertyReference TextureReplacementEnabledRef;
UPROPERTY(EditAnywhere, Transient, Category = "Texture Replacement", meta = (PropertyPath = "CameraSettings.RenderSettings.Replace.SourceTexture"))
FDisplayClusterEditorPropertyReference SourceTextureRef;
UPROPERTY(EditAnywhere, Transient, Category = "Texture Replacement", meta = (PropertyPath = "CameraSettings.RenderSettings.Replace.bShouldUseTextureRegion"))
FDisplayClusterEditorPropertyReference ShouldUseTextureRegionRef;
UPROPERTY(EditAnywhere, Transient, Category = "Texture Replacement", meta = (PropertyPath = "CameraSettings.RenderSettings.Replace.TextureRegion"))
FDisplayClusterEditorPropertyReference TextureRegionRef;
UPROPERTY(EditDefaultsOnly, Transient, Category = "Media", meta = (PropertyPath = "CameraSettings.RenderSettings.Media"))
FDisplayClusterEditorPropertyReference MediaRef;
UPROPERTY(EditAnywhere, Transient, Category = Configuration, meta = (PropertyPath = "CameraSettings.RenderSettings.RenderOrder"))
FDisplayClusterEditorPropertyReference RenderOrderRef;
UPROPERTY(EditAnywhere, Transient, Category = Configuration, meta = (PropertyPath = "CameraSettings.RenderSettings.CustomFrameSize"))
FDisplayClusterEditorPropertyReference CustomFrameSizeRef;
UPROPERTY(EditAnywhere, Transient, Category = Configuration, meta = (PropertyPath = "CameraSettings.RenderSettings.AdvancedRenderSettings.RenderTargetRatio"))
FDisplayClusterEditorPropertyReference RenderTargetRatioRef;
UPROPERTY(EditAnywhere, Transient, Category = Configuration, meta = (PropertyPath = "CameraSettings.RenderSettings.AdvancedRenderSettings.GPUIndex"))
FDisplayClusterEditorPropertyReference GPUIndexRef;
UPROPERTY(EditAnywhere, Transient, Category = Configuration, meta = (PropertyPath = "CameraSettings.RenderSettings.AdvancedRenderSettings.StereoGPUIndex"))
FDisplayClusterEditorPropertyReference StereoGPUIndexRef;
UPROPERTY(EditAnywhere, Transient, Category = Configuration, meta = (PropertyPath = "CameraSettings.RenderSettings.AdvancedRenderSettings.StereoMode"))
FDisplayClusterEditorPropertyReference StereoModeRef;
#endif // WITH_EDITORONLY_DATA
};