You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Now only r.AntiAliasingMethod prevails to selects the anti-aliasing method explicitly for the deferred shading renderer. Each AA technic have it's own cvars to control their quality independently FXAA now have its own r.FXAA.Quality. The FXAA shader permutations where mis configured with r.PostProcessAAQuality=1 & 2 both mapping to the FXAA_PC_CONSOLE=1 that is now r.FXAA.Quality=0. Instead r.FXAA.Quality now offer more mid-quality settings for FXAA_PC=1 with r.FXAA.Quality=1 & 2 & 3. Backward comaptible migration is as followed: - r.AntiAliasingMethod=1 r.PostProcessAAQuality=0 -> r.FXAA.Quality=0 - r.AntiAliasingMethod=1 r.PostProcessAAQuality=1 -> r.FXAA.Quality=0 - r.AntiAliasingMethod=1 r.PostProcessAAQuality=2 -> r.FXAA.Quality=0 - r.AntiAliasingMethod=1 r.PostProcessAAQuality=3 -> r.FXAA.Quality=3 but with some neighborhood search setting changed in FXAAShader.usf - r.AntiAliasingMethod=1 r.PostProcessAAQuality=4 -> r.FXAA.Quality=4 - r.AntiAliasingMethod=1 r.PostProcessAAQuality=5 -> r.FXAA.Quality=5 TAA now have its own r.TemporalAA.Quality. Backward compatible migration is as followed: - r.AntiAliasingMethod=2 r.PostProcessAAQuality=0 -> r.AntiAliasingMethod=0 - r.AntiAliasingMethod=2 r.PostProcessAAQuality=1 -> r.AntiAliasingMethod=1 r.FXAA.Quality=0 - r.AntiAliasingMethod=2 r.PostProcessAAQuality=2 -> r.AntiAliasingMethod=1 r.FXAA.Quality=0 - r.AntiAliasingMethod=2 r.PostProcessAAQuality=3 r.TemporalAAUpsampleFiltered=0 -> r.TemporalAA.Quality=0 - r.AntiAliasingMethod=2 r.PostProcessAAQuality=3 r.TemporalAAUpsampleFiltered=1 -> r.TemporalAA.Quality=1 - r.AntiAliasingMethod=2 r.PostProcessAAQuality=4 -> r.TemporalAA.Quality=2 MSAA r.AntiAliasingMethod=3 & TSR r.AntiAliasingMethod=4 remains unchanged. sg.AntiAliasingQuality now maps to different r.TemporalAA.Quality or r.FXAA.Quality Automated tests on base CL: https://horde.devtools.epicgames.com/job/60d5b8410123b700014f9db5 Automated tests on change CL: https://horde.devtools.epicgames.com/job/60d47cde57b302000114bebf #rb none [FYI] jack.porter, wei.liu #lockdown michal.valient #ROBOMERGE-SOURCE: CL 16823623 via CL 16823646 #ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v836-16769935) [CL 16823657 by guillaume abadie in ue5-release-engine-test branch]
234 lines
8.9 KiB
C++
234 lines
8.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "UObject/ObjectMacros.h"
|
|
#include "Engine/LatentActionManager.h"
|
|
#include "Kismet/BlueprintFunctionLibrary.h"
|
|
#include "AutomationScreenshotOptions.h"
|
|
#include "HAL/IConsoleManager.h"
|
|
#include "Templates/UniquePtr.h"
|
|
#include "Misc/AutomationTest.h"
|
|
#include "AutomationBlueprintFunctionLibrary.generated.h"
|
|
|
|
class ACameraActor;
|
|
|
|
/**
|
|
* FAutomationTaskStatusBase - abstract class for task status
|
|
*/
|
|
class FAutomationTaskStatusBase
|
|
{
|
|
public:
|
|
virtual ~FAutomationTaskStatusBase() = default;
|
|
|
|
bool IsDone() const { return Done; };
|
|
virtual void SetDone() { Done = true; };
|
|
|
|
protected:
|
|
bool Done = false;
|
|
};
|
|
|
|
/**
|
|
* UAutomationEditorTask
|
|
*/
|
|
UCLASS(BlueprintType, Transient)
|
|
class FUNCTIONALTESTING_API UAutomationEditorTask : public UObject
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual ~UAutomationEditorTask() = default;
|
|
|
|
/** Query if the Editor task is done */
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
bool IsTaskDone() const;
|
|
|
|
/** Query if a task was setup */
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
bool IsValidTask() const;
|
|
|
|
void BindTask(TUniquePtr<FAutomationTaskStatusBase> inTask);
|
|
|
|
private:
|
|
TUniquePtr<FAutomationTaskStatusBase> Task;
|
|
};
|
|
|
|
USTRUCT(BlueprintType)
|
|
struct FAutomationWaitForLoadingOptions
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
|
|
UPROPERTY(BlueprintReadWrite, Category = "Automation")
|
|
bool WaitForReplicationToSettle = false;
|
|
};
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UCLASS(meta=(ScriptName="AutomationLibrary"))
|
|
class FUNCTIONALTESTING_API UAutomationBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
|
|
{
|
|
GENERATED_UCLASS_BODY()
|
|
|
|
public:
|
|
static void FinishLoadingBeforeScreenshot();
|
|
|
|
static bool TakeAutomationScreenshotInternal(UObject* WorldContextObject, const FString& ScreenShotName, const FString& Notes, FAutomationScreenshotOptions Options);
|
|
|
|
static FAutomationScreenshotData BuildScreenshotData(const FString& MapOrContext, const FString& ScreenShotName, int32 Width, int32 Height);
|
|
|
|
static FIntPoint GetAutomationScreenshotSize(const FAutomationScreenshotOptions& Options);
|
|
|
|
/**
|
|
* Takes a screenshot of the game's viewport. Does not capture any UI.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (Latent, HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject", LatentInfo = "LatentInfo", Name = "" ))
|
|
static void TakeAutomationScreenshot(UObject* WorldContextObject, FLatentActionInfo LatentInfo, const FString& Name, const FString& Notes, const FAutomationScreenshotOptions& Options);
|
|
|
|
/**
|
|
* Takes a screenshot of the game's viewport, from a particular camera actors POV. Does not capture any UI.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (Latent, HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject", LatentInfo = "LatentInfo", NameOverride = "" ))
|
|
static void TakeAutomationScreenshotAtCamera(UObject* WorldContextObject, FLatentActionInfo LatentInfo, ACameraActor* Camera, const FString& NameOverride, const FString& Notes, const FAutomationScreenshotOptions& Options);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
static bool TakeAutomationScreenshotOfUI_Immediate(UObject* WorldContextObject, const FString& Name, const FAutomationScreenshotOptions& Options);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = ( Latent, HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject", LatentInfo = "LatentInfo", NameOverride = "" ))
|
|
static void TakeAutomationScreenshotOfUI(UObject* WorldContextObject, FLatentActionInfo LatentInfo, const FString& Name, const FAutomationScreenshotOptions& Options);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
|
static void EnableStatGroup(UObject* WorldContextObject, FName GroupName);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
|
static void DisableStatGroup(UObject* WorldContextObject, FName GroupName);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
static float GetStatIncAverage(FName StatName);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
static float GetStatIncMax(FName StatName);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
static float GetStatExcAverage(FName StatName);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
static float GetStatExcMax(FName StatName);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
static float GetStatCallCount(FName StatName);
|
|
|
|
/**
|
|
* Lets you know if any automated tests are running, or are about to run and the automation system is spinning up tests.
|
|
*/
|
|
UFUNCTION(BlueprintPure, Category="Automation")
|
|
static bool AreAutomatedTestsRunning();
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (Latent, HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject", LatentInfo = "LatentInfo"))
|
|
static void AutomationWaitForLoading(UObject* WorldContextObject, FLatentActionInfo LatentInfo, FAutomationWaitForLoadingOptions Options);
|
|
|
|
/**
|
|
* take high res screenshot in editor.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (AdvancedDisplay="Camera, bMaskEnabled, bCaptureHDR, ComparisonTolerance, ComparisonNotes"))
|
|
static UAutomationEditorTask* TakeHighResScreenshot(int32 ResX, int32 ResY, FString Filename, ACameraActor* Camera = nullptr, bool bMaskEnabled = false, bool bCaptureHDR = false, EComparisonTolerance ComparisonTolerance = EComparisonTolerance::Low, FString ComparisonNotes = TEXT(""), float Delay = 0.0);
|
|
|
|
/**
|
|
* Add Telemetry data to currently running automated test.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (AdvancedDisplay = "Context"))
|
|
static void AddTestTelemetryData(FString DataPoint, float Measurement, FString Context = TEXT(""));
|
|
|
|
/**
|
|
* Set Telemetry data storage name of currently running automated test.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Automation")
|
|
static void SetTestTelemetryStorage(FString StorageName);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UFUNCTION(BlueprintPure, Category="Automation")
|
|
static FAutomationScreenshotOptions GetDefaultScreenshotOptionsForGameplay(EComparisonTolerance Tolerance = EComparisonTolerance::Low, float Delay = 0.2);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
UFUNCTION(BlueprintPure, Category="Automation")
|
|
static FAutomationScreenshotOptions GetDefaultScreenshotOptionsForRendering(EComparisonTolerance Tolerance = EComparisonTolerance::Low, float Delay = 0.2);
|
|
|
|
/**
|
|
* Mute the report of log error and warning matching a pattern during an automated test
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (AdvancedDisplay = "Occurrences, ExactMatch"))
|
|
static void AddExpectedLogError(FString ExpectedPatternString, int32 Occurrences = 1, bool ExactMatch = false);
|
|
|
|
/**
|
|
* Sets all other settings based on an overall value
|
|
* @param Value 0:Cinematic, 1:Epic...etc.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
|
static void SetScalabilityQualityLevelRelativeToMax(UObject* WorldContextObject, int32 Value = 1);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
|
static void SetScalabilityQualityToEpic(UObject* WorldContextObject);
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Automation", meta = (HidePin = "WorldContextObject", DefaultToSelf = "WorldContextObject"))
|
|
static void SetScalabilityQualityToLow(UObject* WorldContextObject);
|
|
};
|
|
|
|
#if WITH_AUTOMATION_TESTS
|
|
|
|
template<typename T>
|
|
class FConsoleVariableSwapperTempl
|
|
{
|
|
public:
|
|
FConsoleVariableSwapperTempl(FString InConsoleVariableName);
|
|
|
|
void Set(T Value);
|
|
|
|
void Restore();
|
|
|
|
private:
|
|
bool bModified;
|
|
FString ConsoleVariableName;
|
|
|
|
T OriginalValue;
|
|
};
|
|
|
|
class FAutomationTestScreenshotEnvSetup
|
|
{
|
|
public:
|
|
FAutomationTestScreenshotEnvSetup();
|
|
~FAutomationTestScreenshotEnvSetup();
|
|
|
|
// Disable AA, auto-exposure, motion blur, contact shadow if InOutOptions.bDisableNoisyRenderingFeatures.
|
|
// Update screenshot comparison tolerance stored in InOutOptions.
|
|
// Set visualization buffer name if required.
|
|
void Setup(UWorld* InWorld, FAutomationScreenshotOptions& InOutOptions);
|
|
|
|
/** Restore the old settings. */
|
|
void Restore();
|
|
|
|
private:
|
|
FConsoleVariableSwapperTempl<int32> DefaultFeature_AntiAliasing;
|
|
FConsoleVariableSwapperTempl<int32> DefaultFeature_AutoExposure;
|
|
FConsoleVariableSwapperTempl<int32> DefaultFeature_MotionBlur;
|
|
FConsoleVariableSwapperTempl<int32> MotionBlurQuality;
|
|
FConsoleVariableSwapperTempl<int32> ScreenSpaceReflectionQuality;
|
|
FConsoleVariableSwapperTempl<int32> EyeAdaptationQuality;
|
|
FConsoleVariableSwapperTempl<int32> ContactShadows;
|
|
FConsoleVariableSwapperTempl<float> TonemapperGamma;
|
|
FConsoleVariableSwapperTempl<float> TonemapperSharpen;
|
|
FConsoleVariableSwapperTempl<float> SecondaryScreenPercentage;
|
|
|
|
TWeakObjectPtr<UWorld> WorldPtr;
|
|
TSharedPtr< class FAutomationViewExtension, ESPMode::ThreadSafe > AutomationViewExtension;
|
|
};
|
|
|
|
#endif
|