17#include "Misc/CommandLine.h"
18#include "GenericPlatform/GenericPlatformMisc.h"
19#include "Kismet/GameplayStatics.h"
20#include "GameFramework/GameUserSettings.h"
21#include "Misc/CoreDelegates.h"
22#include "Misc/Parse.h"
24#include "Engine/Engine.h"
25#include "Engine/GameViewportClient.h"
26#include "UObject/ObjectPtr.h"
27#include "LandscapeSubsystem.h"
28#include "Engine/World.h"
29#include "Engine/GameInstance.h"
30#include "TimerManager.h"
33#include "RHIDefinitions.h"
61 ULandscapeSubsystem* LandscapeSubsystem =
CurrentWorld->GetSubsystem<ULandscapeSubsystem>();
62 if (LandscapeSubsystem)
64 LandscapeSubsystem->PrioritizeGrassCreation(
true);
74 GEngine->Exec(World, TEXT(
"g.TimeoutForBlockOnRenderFence 600000"));
75 GEngine->Exec(World, TEXT(
"r.Streaming.PoolSize 0"));
76 GEngine->Exec(World, TEXT(
"r.CustomDepth 0"));
79 GEngine->Exec(World, TEXT(
"t.IdleWhenNotForeground 0"));
97 if (FParse::Param(FCommandLine::Get(), TEXT(
"Fullscreen")))
101 else if (FParse::Param(FCommandLine::Get(), TEXT(
"WindowedFullscreen")))
114 Super::PostInitProperties();
116#if UE_BUILD_SHIPPING || UE_BUILD_DEVELOPMENT
126 return Cast<UAgrarsenseSettings>(UGameUserSettings::GetGameUserSettings());
131 Super::LoadSettings(bForceReload);
136 Super::ApplySettings(bCheckForCommandLineOverrides);
144 bool SettingsWereChanged =
false;
147 FString AntiAliasingString;
148 if (FParse::Value(FCommandLine::Get(), TEXT(
"-antialiasing="), AntiAliasingString))
151 int32 AntiAliasingInt;
152 if (AntiAliasingString.IsNumeric())
154 AntiAliasingInt = FCString::Atoi(*AntiAliasingString);
157 SettingsWereChanged =
true;
162 if (FParse::Param(FCommandLine::Get(), TEXT(
"-no-spectator-rendering")))
165 SettingsWereChanged =
true;
169 if (FParse::Param(FCommandLine::Get(), TEXT(
"-start-camerawindows-minimized")))
172 SettingsWereChanged =
true;
176 FString QualityLevelString;
177 if (FParse::Value(FCommandLine::Get(), TEXT(
"-quality-level="), QualityLevelString))
180 SettingsWereChanged =
true;
183 return SettingsWereChanged;
188 return FPlatformMisc::NumberOfWorkerThreadsToSpawn();
193 IConsoleVariable* ConsoleVariable = IConsoleManager::Get().FindConsoleVariable(*VariableName);
196 FString VariableValue = ConsoleVariable->GetString();
197 return VariableValue;
221 UGameUserSettings* UserSettings = GEngine->GetGameUserSettings();
224 UserSettings->SetFullscreenMode(WindowType);
225 UserSettings->ApplySettings(
false);
254 if (!GEngine || !World)
263 GEngine->Exec(World, TEXT(
"grass.enable 0"));
264 GEngine->Exec(World, TEXT(
"grass.FlushCache"));
268 GEngine->Exec(World, TEXT(
"grass.enable 1"));
287 if (GEngine && World)
293 GEngine->Exec(World, TEXT(
"r.Shadow.CSMCaching 1"));
297 GEngine->Exec(World, TEXT(
"r.Shadow.CSMCaching 0"));
311 if (InstanceRenderer)
327 if (GEngine && World)
329 MaxPixelsPerEdge = FMath::Clamp(MaxPixelsPerEdge, 0.1f, 10.0f);
331 FString Command = FString::Printf(TEXT(
"r.Nanite.MaxPixelsPerEdge %f"), MaxPixelsPerEdge);
332 GEngine->Exec(World, *Command);
350 FString BehaviourStringToLower = BehaviourString.ToLower();
352 if (BehaviourStringToLower ==
"auto")
356 else if (BehaviourStringToLower ==
"rigid")
360 else if (BehaviourStringToLower ==
"always")
364 else if (BehaviourStringToLower ==
"static")
398 if (GEngine || World)
401 if (RenderCustomDepthPass)
403 GEngine->Exec(World, TEXT(
"r.CustomDepth 3"));
407 GEngine->Exec(World, TEXT(
"r.CustomDepth 0"));
415 if (GEngine || World)
421 GEngine->Exec(World, TEXT(
"r.Shadow.Virtual.Enable 1"));
425 GEngine->Exec(World, TEXT(
"r.Shadow.Virtual.Enable 0"));
452 if (!GEngine || !World)
460 switch (AntiAliasingMethod)
463 ExecCommand = TEXT(
"r.AntiAliasingMethod 0");
467 ExecCommand = TEXT(
"r.AntiAliasingMethod 1");
471 ExecCommand = TEXT(
"r.AntiAliasingMethod 2");
477 ExecCommand = TEXT(
"r.AntiAliasingMethod 4");
484 GEngine->Exec(World, *ExecCommand);
497 if (GEngine && GEngine->GameViewport)
499 GEngine->GameViewport->bDisableWorldRendering = !enabled;
502 FString msg = FString::Printf(TEXT(
"World rendering: %s"), enabled ? TEXT(
"On") : TEXT(
"Off"));
533 FString Msg = FString::Printf(TEXT(
"Graphics settings: %s"), *QualityLevelString);
546 return GetFrameRateLimit();
551 SetFrameRateLimit(NewTargetFrameRate);
564 return UGameplayStatics::GetGlobalTimeDilation(World);
576 UGameplayStatics::SetGlobalTimeDilation(World, TimeDilation);
578 FString msg = FString::Printf(TEXT(
"Global time dilation: %f"), TimeDilation);
591 if (IsValid(Spectator))
608 if (IsValid(Spectator))
620 UGameplayStatics::SetGlobalTimeDilation(World, 0.0f);
621 UGameplayStatics::SetGamePaused(World,
true);
634 UGameplayStatics::SetGamePaused(World,
false);
656 FCoreDelegates::OnEndFrame.Remove(EndOfFrameHandle);
657 EndOfFrameHandle.Reset();
667 if (FramesToAdvance == 0)
722 FTimerHandle AdvanceTimeTimer;
723 World->GetTimerManager().SetTimer(AdvanceTimeTimer, FTimerDelegate::CreateLambda([
this]
730 }), TimeToAdvance,
false);
737 MapName = MapName.ToLower();
739 bool FoundMap =
false;
740 for (int32 i = 0; i <
MapNames.Num(); i++)
745 FString msg = FString::Printf(TEXT(
"Changing map to: %s"), *MapName);
755 FString msg = FString::Printf(TEXT(
"Couldn't find map: %s"), *MapName);
765 UGameplayStatics::OpenLevel(World, *Path, TRAVEL_Absolute);
814 SimulatorLog::Log(
"Graphics settings: Ray tracing not supported on this hardware.");
820 bool RayTracingSupported =
false;
823 IConsoleVariable* CVar = IConsoleManager::Get().FindConsoleVariable(TEXT(
"r.RayTracing"));
824 if (CVar && CVar->GetInt() > 0 && GRHISupportsRayTracing)
826 RayTracingSupported =
true;
829 return RayTracingSupported;
835 if (!World || !GEngine)
840 GEngine->Exec(World, TEXT(
"r.RayTracing 1"));
841 GEngine->Exec(World, TEXT(
"r.Lumen.HardwareRayTracing 1"));
842 GEngine->Exec(World, TEXT(
"r.RayTracing.Geometry 1"));
843 GEngine->Exec(World, TEXT(
"r.RayTracing.Reflections 1"));
844 GEngine->Exec(World, TEXT(
"r.RayTracing.AmbientOcclusion 1"));
845 GEngine->Exec(World, TEXT(
"r.RayTracing.GlobalIllumination 1"));
846 GEngine->Exec(World, TEXT(
"r.RayTracing.Translucency 1"));
847 GEngine->Exec(World, TEXT(
"r.RayTracing.SkyLight 1"));
854 GEngine->Exec(World, TEXT(
"r.RayTracing.Reflections.MaxRoughness 1.0"));
855 GEngine->Exec(World, TEXT(
"r.RayTracing.Reflections.Shadows 1"));
856 GEngine->Exec(World, TEXT(
"r.RayTracing.Reflections.SortTiles 1"));
857 GEngine->Exec(World, TEXT(
"r.RayTracing.GlobalIllumination.Quality 4"));
858 GEngine->Exec(World, TEXT(
"r.RayTracing.GlobalIllumination.SamplesPerPixel 4"));
860 GEngine->Exec(World, TEXT(
"r.Lumen.Reflections 1"));
861 GEngine->Exec(World, TEXT(
"r.Lumen.ScreenProbeGather.ScreenTraces 1"));
863 GEngine->Exec(World, TEXT(
"r.RayTracing.Denoiser 1"));
864 GEngine->Exec(World, TEXT(
"r.RayTracing.Denoiser.TemporalAccumulation 1"));
865 GEngine->Exec(World, TEXT(
"r.RayTracing.Denoiser.ReuseRadiance 1"));
871 if (!World || !GEngine)
876 GEngine->Exec(World, TEXT(
"r.RayTracing 0"));
877 GEngine->Exec(World, TEXT(
"r.RayTracing.Denoiser 0"));
878 GEngine->Exec(World, TEXT(
"r.Lumen.HardwareRayTracing 0"));
879 GEngine->Exec(World, TEXT(
"r.RayTracing.Geometry 0"));
880 GEngine->Exec(World, TEXT(
"r.RayTracing.Reflections 0"));
881 GEngine->Exec(World, TEXT(
"r.RayTracing.AmbientOcclusion 0"));
882 GEngine->Exec(World, TEXT(
"r.RayTracing.GlobalIllumination 0"));
883 GEngine->Exec(World, TEXT(
"r.RayTracing.Translucency 0"));
884 GEngine->Exec(World, TEXT(
"r.RayTracing.SkyLight 0"));
885 GEngine->Exec(World, TEXT(
"r.RayTracing.Shadows 0"));
891 if (!World || !GEngine)
899 GEngine->Exec(World, TEXT(
"sg.PostProcessQuality 3"));
900 GEngine->Exec(World, TEXT(
"sg.ShadowQuality 3"));
901 GEngine->Exec(World, TEXT(
"sg.TextureQuality 4"));
902 GEngine->Exec(World, TEXT(
"sg.EffectsQuality 4"));
903 GEngine->Exec(World, TEXT(
"sg.FoliageQuality 4"));
905 GEngine->Exec(World, TEXT(
"r.MinScreenRadiusForLights 0.03"));
906 GEngine->Exec(World, TEXT(
"r.SeparateTranslucency 1"));
907 GEngine->Exec(World, TEXT(
"r.DepthOfFieldQuality 2"));
908 GEngine->Exec(World, TEXT(
"r.TranslucencyVolumeBlur 1"));
909 GEngine->Exec(World, TEXT(
"r.TranslucencyLightingVolumeDim 64"));
910 GEngine->Exec(World, TEXT(
"r.MaxAnisotropy 8"));
911 GEngine->Exec(World, TEXT(
"r.LensFlareQuality 2"));
912 GEngine->Exec(World, TEXT(
"r.SceneColorFringeQuality 1"));
913 GEngine->Exec(World, TEXT(
"r.FastBlurThreshold 7"));
914 GEngine->Exec(World, TEXT(
"r.EarlyZPassMovable 1"));
915 GEngine->Exec(World, TEXT(
"r.ShadowQuality 5"));
916 GEngine->Exec(World, TEXT(
"r.TranslucentLightingVolume 1"));
917 GEngine->Exec(World, TEXT(
"r.LightShaftDownSampleFactor 2"));
918 GEngine->Exec(World, TEXT(
"r.DetailMode 2"));
919 GEngine->Exec(World, TEXT(
"foliage.DensityScale 1"));
920 GEngine->Exec(World, TEXT(
"grass.DensityScale 1"));
921 GEngine->Exec(World, TEXT(
"r.Streaming.PoolSize 0 "));
922 GEngine->Exec(World, TEXT(
"r.Shadow.RadiusThreshold 0.00"));
930 if (!World || !GEngine)
937 GEngine->Exec(World, TEXT(
"sg.PostProcessQuality 3"));
938 GEngine->Exec(World, TEXT(
"sg.TextureQuality 3"));
939 GEngine->Exec(World, TEXT(
"sg.EffectsQuality 3"));
940 GEngine->Exec(World, TEXT(
"sg.FoliageQuality 3"));
942 GEngine->Exec(World, TEXT(
"r.MinScreenRadiusForLights 0.03"));
943 GEngine->Exec(World, TEXT(
"r.SeparateTranslucency 1"));
944 GEngine->Exec(World, TEXT(
"r.DepthOfFieldQuality 2"));
945 GEngine->Exec(World, TEXT(
"r.TranslucencyVolumeBlur 1"));
946 GEngine->Exec(World, TEXT(
"r.TranslucencyLightingVolumeDim 64"));
947 GEngine->Exec(World, TEXT(
"r.MaxAnisotropy 8"));
948 GEngine->Exec(World, TEXT(
"r.LensFlareQuality 2"));
949 GEngine->Exec(World, TEXT(
"r.SceneColorFringeQuality 1"));
950 GEngine->Exec(World, TEXT(
"r.FastBlurThreshold 7"));
951 GEngine->Exec(World, TEXT(
"r.EarlyZPassMovable 1"));
952 GEngine->Exec(World, TEXT(
"r.ShadowQuality 3"));
953 GEngine->Exec(World, TEXT(
"r.TranslucentLightingVolume 1"));
954 GEngine->Exec(World, TEXT(
"r.LightShaftDownSampleFactor 2"));
955 GEngine->Exec(World, TEXT(
"r.DetailMode 2"));
956 GEngine->Exec(World, TEXT(
"r.BloomQuality 4"));
957 GEngine->Exec(World, TEXT(
"foliage.DensityScale 1"));
958 GEngine->Exec(World, TEXT(
"grass.DensityScale 1"));
959 GEngine->Exec(World, TEXT(
"r.Streaming.PoolSize 0 "));
960 GEngine->Exec(World, TEXT(
"r.Shadow.RadiusThreshold 0.01"));
968 if (!World || !GEngine)
975 GEngine->Exec(World, TEXT(
"sg.PostProcessQuality 0"));
976 GEngine->Exec(World, TEXT(
"sg.ShadowQuality 0"));
977 GEngine->Exec(World, TEXT(
"sg.TextureQuality 0"));
978 GEngine->Exec(World, TEXT(
"sg.EffectsQuality 0"));
979 GEngine->Exec(World, TEXT(
"sg.FoliageQuality 0"));
981 GEngine->Exec(World, TEXT(
"r.DefaultFeature.MotionBlur 0"));
982 GEngine->Exec(World, TEXT(
"r.DefaultFeature.Bloom 0"));
983 GEngine->Exec(World, TEXT(
"r.DefaultFeature.AmbientOcclusion 0"));
984 GEngine->Exec(World, TEXT(
"r.DefaultFeature.AmbientOcclusionStaticFraction 0"));
985 GEngine->Exec(World, TEXT(
"r.HZBOcclusion 0"));
986 GEngine->Exec(World, TEXT(
"r.MinScreenRadiusForLights 0.01"));
987 GEngine->Exec(World, TEXT(
"r.SeparateTranslucency 0"));
988 GEngine->Exec(World, TEXT(
"r.FinishCurrentFrame 0"));
989 GEngine->Exec(World, TEXT(
"r.MotionBlurQuality 0"));
990 GEngine->Exec(World, TEXT(
"r.BloomQuality 1"));
991 GEngine->Exec(World, TEXT(
"r.DepthOfFieldQuality 0"));
992 GEngine->Exec(World, TEXT(
"r.TranslucencyVolumeBlur 0"));
993 GEngine->Exec(World, TEXT(
"r.TranslucencyLightingVolumeDim 4"));
994 GEngine->Exec(World, TEXT(
"r.MaxAnisotropy 4"));
995 GEngine->Exec(World, TEXT(
"r.LensFlareQuality 0"));
996 GEngine->Exec(World, TEXT(
"r.SceneColorFringeQuality 0"));
997 GEngine->Exec(World, TEXT(
"r.FastBlurThreshold 0"));
998 GEngine->Exec(World, TEXT(
"r.SSR 0"));
999 GEngine->Exec(World, TEXT(
"r.EarlyZPassMovable 1"));
1000 GEngine->Exec(World, TEXT(
"r.TranslucentLightingVolume 0"));
1001 GEngine->Exec(World, TEXT(
"r.LightShaftDownSampleFactor 4"));
1002 GEngine->Exec(World, TEXT(
"r.OcclusionQueryLocation 1"));
1003 GEngine->Exec(World, TEXT(
"foliage.DensityScale 0"));
1004 GEngine->Exec(World, TEXT(
"grass.DensityScale 0"));
1005 GEngine->Exec(World, TEXT(
"r.Streaming.PoolSize 0 "));
@ SemanticSegmentationCamera
void SetInstancedRendering(bool ShouldRender)
virtual ESensorTypes GetSensorType() const
void SetMaxSpeed(float MaxSpeed=1500.0f)
bool IsNiagaraComponentVisible()
void SetNiagaraComponentVisibility(bool Visible)
static void Log(const FString &Message, bool LogToTextFile=true, bool LogToROS=true)
void ApplySettings(bool bCheckForCommandLineOverrides) override
EAntiAliasing GetAntiAliasingMethod() const
void OnSensorSpawned(ASensor *SensorPtr)
void SetStartWindowInitiallyMinimized(bool Minimized)
void SetQualityLevelFromString(const FString &QualityLevelString)
EShadowCacheInvalidationBehavior GetShadowCacheInvalidationBehavior() const
void SetUltraWithRaytracingLevel()
void SetSpectatorMaxSpeed(float MaxSpeed)
bool GetIsUsingVirtualShadowMaps() const
int32 GetWorldPositionOffsetRenderDistance() const
void SetShowSpectatorRainAndSnowfall(bool Show)
bool GetStartWindowInitiallyMinimized() const
bool ParseLaunchArguments()
FDelegateHandle AdvanceFramesHandle
FDelegateHandle EndOfFrameHandle
void SetSimulationSettings(FGlobalSimulationSettings NewSettings)
void AdvanceTime(float TimeToAdvance)
void ChangeMapByName(FString MapName)
int NumberOfPostProcessingSensors
void AdvanceFrameCount(int32 FramesToAdvance)
FGraphicsSettingsDelegate OnGraphicsSettingsChanged
void SetAntiAliasingMethod(EAntiAliasing AntiAliasingMethod)
int GetGlobalTargetFrameRate() const
const TArray< FString > MapPaths
void SetInstancedRenderingVisibility(bool Visible)
void SetLowQualityLevel()
virtual void PostInitProperties() override
float GetGlobalTimeDilation() const
void SetShadowCSMCache(bool CacheShadowCSM)
void SetAntiAliasingMethodFromString(const FString &AntiAliasingMethodString)
FGlobalSimulationSettings SimulationSettings
void SetUseVirtualShadowMaps(bool UseVirtualShadowMaps)
void SetGraphicsSettings(FGlobalGraphicsSettings NewSettings)
void SetBalancedQualityLevel()
TWeakObjectPtr< UWorld > CurrentWorld
void LoadSettings(bool bForceReload=false) override
void SetQualityLevel(EQualityLevel newQualityLevel)
void Setup(UWorld *World)
int32 GetNumberOfWorkerThreads() const
float GetNaniteMaxPixelsPerEdge() const
void SetGlobalTimeDilation(float TimeDilation)
static FString CurrentMapName
void SetWindowMode(EWindowMode::Type WindowType)
void SetGlobalTargetFrameRate(int NewTargetFrameRate)
void SetRenderCustomDepthPass(bool RenderCustomDepthPass)
bool GetIsRenderingCustomDepthPass() const
void OnSensorDestroyed(ASensor *SensorPtr)
void SetGrassVisibility(bool Visible)
void SetUltraQualityLevel()
bool GetShadowCSMCache() const
void SetShadowCacheInvalidationBehaviorFromString(const FString &BehaviourString)
void SetShadowCacheInvalidationBehavior(EShadowCacheInvalidationBehavior Behaviour=EShadowCacheInvalidationBehavior::Rigid)
void ChangeMapByMapPath(const FString &Path)
FString GetConsoleVariableValueString(const FString &VariableName) const
void PauseSimulationEndOfThisFrame()
static UAgrarsenseSettings * GetAgrarsenseSettings()
bool GetGrassVisibility() const
void SetWorldPositionOffsetRenderDistance(int32 WorldPositionOffsetDistance)
FGlobalGraphicsSettings GraphicsSettings
const TArray< FString > MapNames
void SetWorldRendering(bool enabled)
void SetNaniteMaxPixelsPerEdge(float MaxPixelsPerEdge=1.0f)
bool IsRaytracingSupported() const
static ASpectator * GetSpectator(const UObject *WorldContextObject)
static AInstancedRenderer * GetInstancedRenderer(const UObject *WorldContextObject)
static FString ConvertQualityLevelToString(EQualityLevel QualityLevel)
static EQualityLevel ConvertStringToQualityLevel(const FString &String)
static EAntiAliasing ConvertStringToAntiAliasingMethod(const FString &String)
static USensorManager * Get()
FSensorDestroyedDelegate OnSensorDestroyed
FSensorSpawnedDelegate OnSensorSpawned
EQualityLevel QualityLevel
bool DisableSpectatorRendering
float NaniteMaxPixelsPerEdge
EAntiAliasing AntiAliasingMethod
int32 WorldPositionOffsetDistance
EShadowCacheInvalidationBehavior FoliageShadowCacheInvalidationBehaviour
bool UseVirtualShadowMaps
bool ShowSpectatorRainAndSnowfall
bool StartCameraWindowsMinimized