Movie Pipeline: Fixed the example editor utility widget not working due to API changes during development.

This removes an unused variable (to prevent confusion), adds UFUNCTIONs to some functions, and adds some safe guards against common scripting mistakes.

#jira UE-91501
#rb Andrew.Rodham
#lockdown simon.tourangeau

#ROBOMERGE-OWNER: jeanmichel.dignard
#ROBOMERGE-AUTHOR: matt.hoffman
#ROBOMERGE-SOURCE: CL 12634452 in //UE4/Release-4.25/... via CL 12634466 via CL 12634480 via CL 12634509
#ROBOMERGE-BOT: TOOLS (Main -> Dev-Tools-Staging) (v675-12543919)

[CL 12643974 by matt hoffman in Dev-Tools-Staging branch]
This commit is contained in:
matt hoffman
2020-04-06 19:55:35 -04:00
9 changed files with 23 additions and 187 deletions

View File

@@ -40895,7 +40895,7 @@
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/Blueprints/UI_MovieRenderPipelineInfoTableRow.uasset" Hash="4953394a044869e4dded03333580fb7c77ac6b5e" />
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/Blueprints/UI_MovieRenderPipelineScreenOverlay.uasset" Hash="79cea97fca83b7e4133bf9a9bc5621088d26e532" />
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/ButtonHoverHint.png" Hash="e5dff31080f2818ba199deab710885802d5fde41" />
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/Editor/MovieRenderPipelineExampleEditorWidget.uasset" Hash="01e2d8a762321b5453219d8e7a11758e40b882b7" />
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/Editor/MovieRenderPipelineExampleEditorWidget.uasset" Hash="3b3de6b1e92781a487f3dfc8256f2e5857373cd2" />
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/Switch_OFF.png" Hash="d544ab5d4cdec9eee472a1940ade1d3362be9d00" />
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/Switch_ON.png" Hash="f5fe4d4d4e5080e2d8088090e87a0790e659be85" />
<File Name="Engine/Plugins/MovieScene/MovieRenderPipeline/Content/TabIcon_24x.png" Hash="15eef2bd6a683ce699b6b425f8faec8184165c80" />
@@ -61041,7 +61041,6 @@
<Blob Hash="01dee57d0c766e28906d3ee006eb650b4bd39dc6" Size="385" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="1019796" />
<Blob Hash="01df028c6864d922b014a7e3776504b2c4c248e3" Size="38391" PackHash="0c9578c545bd2333a4be670893470a926491d507" PackOffset="1409986" />
<Blob Hash="01df3958a093ca1d895dc4d8e7c1c4f1aa51c9c2" Size="104" PackHash="cca5a69a24718ef21c5a46099acf07d223f787fd" PackOffset="1539180" />
<Blob Hash="01e2d8a762321b5453219d8e7a11758e40b882b7" Size="245005" PackHash="9afbb29532637bc15449e1a783e43e49bcaca6e3" PackOffset="8" />
<Blob Hash="01ebdc3cdcd48724d68aef11790e6e18dd22a0a2" Size="47784" PackHash="739196fc7439861c4458969395497183bd768263" PackOffset="2013235" />
<Blob Hash="01efec6cc6020608bd18d1c3d79f55cb93af76aa" Size="191" PackHash="63b24429e811a198d948d6fbf044db9b5e1ac5c5" PackOffset="1018698" />
<Blob Hash="01f050c2c5215bf44cbd7a90ed307bef33ecfddb" Size="20252" PackHash="a8ed11c69d5776ee844bd440e344bd93f1fda46c" PackOffset="42771" />
@@ -67375,7 +67374,7 @@
<Blob Hash="29867370767f2cf7d3530d112ad1efa696bd77fb" Size="12525" PackHash="8962c9283d246aa6183316165b2eabb0cb7e0781" PackOffset="1906380" />
<Blob Hash="298943e10373b8cba2792d3f63c14048c39e8b93" Size="6030" PackHash="12d213957fbfe643a97d5072b1f6ae30aeebcbb7" PackOffset="107584" />
<Blob Hash="298c9e1d955f10f6f72c6915c3c6ff9bf9695cec" Size="2520" PackHash="ba6e6f4eaf7c50e1dcff51145723e736d4474d28" PackOffset="1623294" />
<Blob Hash="2992c5bc37065a260e24cc0a52b4fbf76a9a85b4" Size="17735" PackHash="9afbb29532637bc15449e1a783e43e49bcaca6e3" PackOffset="270804" />
<Blob Hash="2992c5bc37065a260e24cc0a52b4fbf76a9a85b4" Size="17735" PackHash="e3983a17ff6a285c0cf35e4f98df1a32ce93fe00" PackOffset="295017" />
<Blob Hash="299549efe83e9edf3f4d92b950dea88f98423b1b" Size="4567" PackHash="63aeef61540766058c9217278f4c99890729a052" PackOffset="681864" />
<Blob Hash="2995e2f3bb163772737f41e2aeebb1009c151095" Size="2405" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="933125" />
<Blob Hash="2996119f1d621ab769414a3affc26c629052bb15" Size="897" PackHash="74fc4e491bddbae9f76d9198edf1efb42e23dbb0" PackOffset="144791" />
@@ -70276,6 +70275,7 @@
<Blob Hash="3b3afd9d56a4cb6810073c8f4ff080039ca74ce4" Size="952" PackHash="afc5cb40d4e6c77d1775d83fce7636691d3fa748" PackOffset="730154" />
<Blob Hash="3b3b29e460309055f1a3d829d02e7fc62278e6fc" Size="22016" PackHash="303ddf28767e0ef83c669c43d74ec40d813f6251" PackOffset="1700044" />
<Blob Hash="3b3c9b814b05faa15e3da920d89b7663aa87e940" Size="357181" PackHash="5b22694ec563bdb868aa87303c90f06998e15369" PackOffset="1733701" />
<Blob Hash="3b3de6b1e92781a487f3dfc8256f2e5857373cd2" Size="269218" PackHash="e3983a17ff6a285c0cf35e4f98df1a32ce93fe00" PackOffset="8" />
<Blob Hash="3b3df1798cf20cc12a8041c6112a2c917eebd9aa" Size="401" PackHash="6974b9c6f99dd329465ca79c60ac6eebd6d448a5" PackOffset="490637" />
<Blob Hash="3b3e2ba247bb5ac526626c5ec12f2a9963a37031" Size="3762" PackHash="4905bf362dac5be04631d1ce552b8184a6f9eb7f" PackOffset="2060481" />
<Blob Hash="3b41009cd9a07de0bd6628a3f61e45954c69c30f" Size="15101" PackHash="cb936ac75ecfadbfd97c634641fc2428d92083f9" PackOffset="125812" />
@@ -77662,7 +77662,7 @@
<Blob Hash="68a026d12742851ddbcc7857a299f9eaa311326e" Size="2812" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="851827" />
<Blob Hash="68a15efde1060617a78b402dbb46a249e65d1050" Size="1668" PackHash="7ca0e1410f00142dc9791ff1fb493669e443f644" PackOffset="1006340" />
<Blob Hash="68a639f8effd9c6d580f9785f2ce94ac3938dba6" Size="826" PackHash="740468294ff5dc113d230e62ae67c145d10bfb6c" PackOffset="1533733" />
<Blob Hash="68a8867683359f42e6bb958922357d985564594e" Size="21732" PackHash="9afbb29532637bc15449e1a783e43e49bcaca6e3" PackOffset="288539" />
<Blob Hash="68a8867683359f42e6bb958922357d985564594e" Size="21732" PackHash="e3983a17ff6a285c0cf35e4f98df1a32ce93fe00" PackOffset="312752" />
<Blob Hash="68ab699ac30c775a099a69fc6fe3c487554add1c" Size="1580" PackHash="5cb17f3f8319e59e99cf89cdd430848948628eee" PackOffset="611112" />
<Blob Hash="68acae026ab3634789db2fd57ba2511e06b7ed13" Size="143" PackHash="c7fb5a52786de3f047f9949d98826960b11eac96" PackOffset="2096986" />
<Blob Hash="68acc369055fc8fcc07abfdd72fbfab00f95b377" Size="88" PackHash="de2e42ad57386aaae5fdc67c8512ac9ea3798d6d" PackOffset="622536" />
@@ -91340,7 +91340,7 @@
<Blob Hash="bd36f754ee885a0a03c6c802b5bf6c5b730a7cda" Size="9229" PackHash="5e7d96af5e5b1cafa670bd77ae918457a118f7a5" PackOffset="9237" />
<Blob Hash="bd37e85bf38192614d2b8fb5048d7e9f38eb34ac" Size="454656" PackHash="a546f5b5ac5ed8bf6182b7d63936e2caf8ab0638" PackOffset="385032" />
<Blob Hash="bd395a29345adcdaa0436ac0b35a8a8ad393a0c6" Size="7262448" PackHash="27bc2da5af690873b31c77fb1fd2754fb68372e5" PackOffset="8" />
<Blob Hash="bd3c3d018cd85f664f89c74cf155399252c7ba87" Size="16979" PackHash="9afbb29532637bc15449e1a783e43e49bcaca6e3" PackOffset="310271" />
<Blob Hash="bd3c3d018cd85f664f89c74cf155399252c7ba87" Size="16979" PackHash="e3983a17ff6a285c0cf35e4f98df1a32ce93fe00" PackOffset="334484" />
<Blob Hash="bd3c46df953ab712c847d12d03bc3f6bac4fa0b3" Size="120" PackHash="d5bafdf3f50a35765f845dea41332e85db30f9ec" PackOffset="387790" />
<Blob Hash="bd40bd875a3b7dd16978580685ab4dd7ebbbc2ad" Size="32" PackHash="2e3237f4ac211e07a6a21bd72eb72dcb0a8d87ed" PackOffset="1699143" />
<Blob Hash="bd4325bf16f680d1ebb4718f683737a03b007224" Size="121" PackHash="0fe10da645346a0bddc78fefb2134f9e5b40d3a7" PackOffset="8" />
@@ -95898,7 +95898,7 @@
<Blob Hash="d93b16f3d000c4f4593147276cec0ec574f0d528" Size="584" PackHash="4b0f6024494e02f2b2cdd75b48b059c81bde532c" PackOffset="45862" />
<Blob Hash="d93c3a9a4fbddc96a6c35afce089e234bfa4a5c6" Size="378" PackHash="f1f7c9d958c098113ab1fca1fd2355ab72172280" PackOffset="1403036" />
<Blob Hash="d93c76c348c5179eb57e84e2b30c314013fffdd9" Size="88628" PackHash="c9e4b45c6cc512de9832f75e289ce69056260b5a" PackOffset="8" />
<Blob Hash="d93ea05c5eaf8b4514a76927acbeeeeedca90f43" Size="25791" PackHash="9afbb29532637bc15449e1a783e43e49bcaca6e3" PackOffset="245013" />
<Blob Hash="d93ea05c5eaf8b4514a76927acbeeeeedca90f43" Size="25791" PackHash="e3983a17ff6a285c0cf35e4f98df1a32ce93fe00" PackOffset="269226" />
<Blob Hash="d93eaf735d05f6466472987a1b3e757a8628e6ad" Size="1912" PackHash="c6a87a27121ee980a108fbacde92cb925b2682d0" PackOffset="493317" />
<Blob Hash="d93f2348a79eef850011c925d197a93fff7400f5" Size="157552" PackHash="d1cc40fc311b1fe882b059047a6c7f53925c9827" PackOffset="680466" />
<Blob Hash="d9401e293d89535ed0c9963ea353d283b10a5cd7" Size="26213" PackHash="1922efdc75b4835f1e0cd19d027a86f5cea255af" PackOffset="1550447" />
@@ -104449,7 +104449,6 @@
<Pack Hash="9adbee8a4624a34e02cd98b2e6024b65c2f7a677" Size="2053770" CompressedSize="2013213" RemotePath="UnrealEngine-12388917-ea8cd47f6ca74426b55c4ca2adcbc8cc" />
<Pack Hash="9aec8735040beb57da24cffa27ef5d254408275f" Size="2396655" CompressedSize="956325" RemotePath="2487260-b428468bcd6545bfbb79f02a6605b9ef" />
<Pack Hash="9af52409e333bbf4b230646a16524de6e0d5b266" Size="1963015" CompressedSize="602374" RemotePath="UnrealEngine-7312987-0ad2049677f34445af16c2d8fca0dc3c" />
<Pack Hash="9afbb29532637bc15449e1a783e43e49bcaca6e3" Size="327250" CompressedSize="115703" RemotePath="UnrealEngine-11171981-f3048b1fab5844efa21a44990480d3fa" />
<Pack Hash="9b12e8b5b7088940221ebeb80ab678cac285f904" Size="4300" CompressedSize="2391" RemotePath="UnrealEngine-4209456-367f0e8d6f0c46a49dc0846733a82826" />
<Pack Hash="9b15bc831d3929d38198d490cb85a4feace577bc" Size="330" CompressedSize="198" RemotePath="UnrealEngine-11546101-75fb664889794962ba9b048ff60a0b8c" />
<Pack Hash="9b1f19cdae964121a086e84458f6b82f45dd84e3" Size="35368" CompressedSize="11275" RemotePath="UnrealEngine-7810763-4a7566c610654a05a33dd7dbc356cad9" />
@@ -105522,6 +105521,7 @@
<Pack Hash="e2f107fbd5a4382c70c2d259a7d86e25928d3ec5" Size="2036063" CompressedSize="445035" RemotePath="UnrealEngine-12001713-fc0f59035a724183afc7f52051f62076" />
<Pack Hash="e2fa2ac520eb51bd27214ee5bf3c3511f0803850" Size="2038418" CompressedSize="1625268" RemotePath="UnrealEngine-3545186-3e1e53de154c41009b26c236d720f37a" />
<Pack Hash="e380f683db24a7cfe78e8b2762eedb95af1e281b" Size="106452" CompressedSize="98943" RemotePath="UnrealEngine-3437498-56fbf497639649cca9f98b12b727c3c2" />
<Pack Hash="e3983a17ff6a285c0cf35e4f98df1a32ce93fe00" Size="351463" CompressedSize="119371" RemotePath="UnrealEngine-12634452-f729dcf8384949c88203a458e04bd3e2" />
<Pack Hash="e39b1ffe375995e81f45f2d90aaf437e84c11ca7" Size="2097116" CompressedSize="1458424" RemotePath="3041367-5ed8062ed7b244fbbe088cb9a31b34cd" />
<Pack Hash="e3a05c83ce77dfa959040db8be0048c53ec803f5" Size="1143699" CompressedSize="517194" RemotePath="UnrealEngine-7205959-a30cfcda3e624bf3a4ac3f26bef57248" />
<Pack Hash="e3a2d76455fdea0d1a6fe3a8bd3b2925536ebd19" Size="28046368" CompressedSize="6235794" RemotePath="UnrealEngine-8652397-312e66bcf6fe48d1acafe9592bbd7b30" />

View File

@@ -86,12 +86,6 @@ UMoviePipelineShotConfig* UMoviePipelineMasterConfig::GetConfigForShot(const FSt
{
UMoviePipelineShotConfig* OutConfig = PerShotConfigMapping.FindRef(ShotName);
// They didn't customize this shot, return the global pipeline default
if (!OutConfig)
{
OutConfig = DefaultShotConfig;
}
return OutConfig;
}
@@ -255,8 +249,6 @@ TRange<FFrameNumber> UMoviePipelineMasterConfig::GetEffectivePlaybackRange(const
UMoviePipelineMasterConfig::UMoviePipelineMasterConfig()
{
DefaultShotConfig = CreateDefaultSubobject<UMoviePipelineShotConfig>("DefaultShotConfig");
// Always add at least the output settings block since having a framerate/directory/etc. is critical.
OutputSetting = CreateDefaultSubobject<UMoviePipelineOutputSetting>("DefaultOutputSetting");
}

View File

@@ -226,7 +226,10 @@ void UMoviePipeline::RenderFrame()
int32 NumSpatialSamples = AntiAliasingSettings->SpatialSampleCount;
int32 NumTemporalSamples = AntiAliasingSettings->TemporalSampleCount;
ensure(TileCount.X > 0 && TileCount .Y> 0 && NumSpatialSamples > 0);
if (!ensureAlways(TileCount.X > 0 && TileCount.Y > 0 && NumSpatialSamples > 0 && NumTemporalSamples > 0))
{
return;
}
FrameInfo.PrevViewLocation = FrameInfo.CurrViewLocation;
FrameInfo.PrevViewRotation = FrameInfo.CurrViewRotation;

View File

@@ -45,6 +45,11 @@ public:
UFUNCTION(BlueprintCallable, Category = "Movie Render Pipeline")
void Execute(UMoviePipelineQueue* InPipelineQueue)
{
if (!InPipelineQueue)
{
FFrame::KismetExecutionMessage(TEXT("Cannot execute movie render queue with null queue object."), ELogVerbosity::Error);
return;
}
ExecuteImpl(InPipelineQueue);
}

View File

@@ -75,15 +75,11 @@ protected:
virtual void OnSettingAdded(UMoviePipelineSetting* InSetting) override;
virtual void OnSettingRemoved(UMoviePipelineSetting* InSetting) override;
void AddTransientSettingByClass(const UClass* InSettingClass);
public:
/** The default shot-setup to use for any shot that doesn't a specific implementation. This is required! */
UPROPERTY(EditAnywhere, Instanced, BlueprintReadWrite, Category = "Movie Render Pipeline")
UMoviePipelineShotConfig* DefaultShotConfig;
public:
/** A mapping of Shot Name -> Shot Config to use for rendering specific shots with specific configs. */
UPROPERTY(VisibleAnywhere, Instanced, BlueprintReadOnly, Category = "Movie Render Pipeline")
UPROPERTY(Instanced)
TMap<FString, UMoviePipelineShotConfig*> PerShotConfigMapping;
private:

View File

@@ -56,6 +56,7 @@ public:
return LoadedSequence;
}
UFUNCTION(BlueprintCallable, Category = "Movie Render Pipeline")
void SetPresetOrigin(UMoviePipelineMasterConfig* InPreset)
{
if (InPreset)
@@ -65,16 +66,19 @@ public:
}
}
UFUNCTION(BlueprintPure, Category = "Movie Render Pipeline")
UMoviePipelineMasterConfig* GetPresetOrigin() const
{
return PresetOrigin.Get();
}
UFUNCTION(BlueprintPure, Category = "Movie Render Pipeline")
UMoviePipelineMasterConfig* GetConfiguration() const
{
return Configuration;
}
UFUNCTION(BlueprintCallable, Category = "Movie Render Pipeline")
void SetConfiguration(UMoviePipelineMasterConfig* InPreset)
{
if (InPreset)

View File

@@ -72,45 +72,6 @@ namespace
}
void FMovieRenderPipelineEditorModule::PerformTestPipelineRender(const TArray<FString>& Args)
{
if (Args.Num() == 0)
{
UE_LOG(LogMovieRenderPipeline, Warning, TEXT("No arguments specified. Specify the path to a sequence asset to render."));
return;
}
FSoftObjectPath SequencePath = FSoftObjectPath(FPackageName::ExportTextPathToObjectPath(Args[0]));
const UMovieRenderPipelineProjectSettings* ProjectSettings = GetDefault<UMovieRenderPipelineProjectSettings>();
TSubclassOf<UMoviePipelineExecutorBase> ExecutorClass = ProjectSettings->DefaultLocalExecutor;
check(false);
// Create an instance of the Executor and add it to the root so it never dies.
// Executor = NewObject<UMoviePipelineExecutorBase>(GetTransientPackage(), ExecutorClass);
// Executor->AddToRoot();
// Executor->OnExecutorFinished().AddRaw(this, &FMovieRenderPipelineEditorModule::OnTestPipelineExecutorFinished);
//
// TArray<UMoviePipelineMasterConfig*> Pipelines = GenerateTestPipelineConfigs();
//
// TArray<FMoviePipelineExecutorJobPrev> Jobs;
// for(UMoviePipelineMasterConfig* Pipeline : Pipelines)
// {
// Jobs.Add(FMoviePipelineExecutorJobPrev(SequencePath, Pipeline));
// }
//
// Executor->Execute(Jobs);
}
void FMovieRenderPipelineEditorModule::OnTestPipelineExecutorFinished(UMoviePipelineExecutorBase* InExecutor, bool bSuccess)
{
if (Executor)
{
Executor->RemoveFromRoot();
Executor = nullptr;
}
}
void FMovieRenderPipelineEditorModule::RegisterSettings()
{
ISettingsModule& SettingsModule = FModuleManager::LoadModuleChecked<ISettingsModule>("Settings");
@@ -120,13 +81,6 @@ void FMovieRenderPipelineEditorModule::RegisterSettings()
LOCTEXT("ProjectSettings_Description", "Configure project-wide defaults for the movie render pipeline."),
GetMutableDefault<UMovieRenderPipelineProjectSettings>()
);
IConsoleManager::Get().RegisterConsoleCommand(
TEXT("MovieRenderPipeline.TestRenderSequence"),
TEXT("Renders the specified sequence asset using the default executor and a pre-made configuration."),
FConsoleCommandWithArgsDelegate::CreateRaw(this, &FMovieRenderPipelineEditorModule::PerformTestPipelineRender),
ECVF_Default
);
}
void FMovieRenderPipelineEditorModule::UnregisterSettings()

View File

@@ -17,13 +17,4 @@ public:
private:
void RegisterSettings();
void UnregisterSettings();
void PerformTestPipelineRender(const TArray<FString>& Args);
void OnTestPipelineExecutorFinished(UMoviePipelineExecutorBase* InExecutor, bool bSuccess);
private:
TArray<UMoviePipelineMasterConfig*> GenerateTestPipelineConfigs();
private:
class UMoviePipeline* ActiveMoviePipeline;
class UMoviePipelineMasterConfig* PipelineConfig;
UMoviePipelineExecutorBase* Executor;
};

View File

@@ -1,109 +0,0 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "MovieRenderPipelineEditorModule.h"
#include "MoviePipelineShotConfig.h"
#include "MoviePipelineGameOverrideSetting.h"
#include "MoviePipelineAntiAliasingSetting.h"
#include "MoviePipelineImageSequenceOutput.h"
#include "Misc/Paths.h"
#include "MoviePipelineMasterConfig.h"
#include "MoviePipelineOutputSetting.h"
#include "MoviePipelineHighResSetting.h"
#include "MoviePipelineDeferredPasses.h"
#include "MoviePipelineCameraSetting.h"
#include "GameFramework/GameModeBase.h"
UMoviePipelineShotConfig* GenerateTestShotConfig(UObject* InOwner, int32 InSampleCount,
int32 InShutterAngle, EMoviePipelineShutterTiming InFrameTiming, int32 InTileCount,
int32 InSpatialSampleCount, float PadRatioX, float PadRatioY, float AccumulationGamma)
{
UMoviePipelineShotConfig* OutConfig = NewObject<UMoviePipelineShotConfig>(InOwner);
OutConfig->FindOrAddSetting<UMoviePipelineDeferredPassBase>();
UMoviePipelineAntiAliasingSetting* AntiAliasing = OutConfig->FindOrAddSetting< UMoviePipelineAntiAliasingSetting>();
AntiAliasing->SpatialSampleCount = InSpatialSampleCount;
AntiAliasing->AccumulationGamma = AccumulationGamma;
AntiAliasing->TemporalSampleCount = InSampleCount;
{
UMoviePipelineCameraSetting* CameraSetting = OutConfig->FindOrAddSetting<UMoviePipelineCameraSetting>();
CameraSetting->CameraShutterAngle = InShutterAngle;
CameraSetting->ShutterTiming = InFrameTiming;
CameraSetting->bManualExposure = false;
CameraSetting->ExposureCompensation = 10;
}
{
UMoviePipelineHighResSetting* HighRes = OutConfig->FindOrAddSetting<UMoviePipelineHighResSetting>();
HighRes->TileCount = InTileCount;
HighRes->OverlapRatio = PadRatioX;
// HighRes->bWriteAllSamples = true;
// HighRes->OverlapPercentage = 0.f;
}
return OutConfig;
}
TArray<UMoviePipelineMasterConfig*> FMovieRenderPipelineEditorModule::GenerateTestPipelineConfigs()
{
// int32 ShutterAngles[] = { 180, 360 };
// EMoviePipelineShutterTiming ShutterTimings[] = { EMoviePipelineShutterTiming::FrameOpen, EMoviePipelineShutterTiming::FrameCenter, EMoviePipelineShutterTiming::FrameClose };
// FString ShutterTimingNames[] = { TEXT("FOpen"), TEXT("FCenter"), TEXT("FClose") };
// int32 TemporalSampleCounts[] = { 1, 5 };
int32 ShutterAngles[] = { 180 };
EMoviePipelineShutterTiming ShutterTimings[] = { EMoviePipelineShutterTiming::FrameCenter };
FString ShutterTimingNames[] = { TEXT("FCenter") };
int32 TemporalSampleCounts[] = { 1 };
TArray<UMoviePipelineMasterConfig*> Configs;
for (int32 ShutterAngleIndex = 0; ShutterAngleIndex < UE_ARRAY_COUNT(ShutterAngles); ShutterAngleIndex++)
{
for (int32 ShutterTimingIndex = 0; ShutterTimingIndex < UE_ARRAY_COUNT(ShutterTimings); ShutterTimingIndex++)
{
for (int32 TemporalSampleCountIndex = 0; TemporalSampleCountIndex < UE_ARRAY_COUNT(TemporalSampleCounts); TemporalSampleCountIndex++)
{
// Build a folder string to place this particular test in.
FString DirectoryName = FString::Printf(TEXT("SA_%d_ST_%s_SC_%d"), ShutterAngles[ShutterAngleIndex], *ShutterTimingNames[ShutterTimingIndex], TemporalSampleCounts[TemporalSampleCountIndex]);
UMoviePipelineMasterConfig* OutPipeline = NewObject<UMoviePipelineMasterConfig>(GetTransientPackage());
UMoviePipelineOutputSetting* OutputSetting = OutPipeline->FindOrAddSetting<UMoviePipelineOutputSetting>();
int32 SizeX = 1920;
int32 SizeY = 1080;
int32 TileX = 4;
int32 TileY = 4;
int32 TestNumSamples = 8;
float PadRatioX = 0.5f;
float PadRatioY = 0.5f;
float AccumulationGamma = 1.0f;
OutputSetting->OutputResolution = FIntPoint(SizeX*TileX, SizeY*TileY);
OutputSetting->OutputDirectory.Path = FPaths::ProjectSavedDir() / TEXT("/VideoCaptures/") / *DirectoryName;
const int32 NumSpatialSamples = TestNumSamples;
const int32 NumTiles = TileX;
UMoviePipelineShotConfig* DefaultConfig = GenerateTestShotConfig(OutPipeline,
TemporalSampleCounts[TemporalSampleCountIndex],
ShutterAngles[ShutterAngleIndex],
ShutterTimings[ShutterTimingIndex],
NumTiles, NumSpatialSamples, PadRatioX, PadRatioY, AccumulationGamma);
OutPipeline->DefaultShotConfig = DefaultConfig;
// Add some Outputs
OutPipeline->FindOrAddSetting<UMoviePipelineImageSequenceOutput_EXR>();
OutPipeline->FindOrAddSetting<UMoviePipelineImageSequenceOutput_PNG>();
UMoviePipelineGameOverrideSetting* GamemodeOverride = OutPipeline->FindOrAddSetting<UMoviePipelineGameOverrideSetting>();
GamemodeOverride->GameModeOverride = AGameModeBase::StaticClass();
// Add it to our list to be processed.
Configs.Add(OutPipeline);
}
}
}
return Configs;
}