Add support for warm up frames when doing an AsyncCaptureScene.

#ROBOMERGE-AUTHOR: jeremy.moore
#ROBOMERGE-SOURCE: CL 19322048 via CL 19322310 via CL 19322368 via CL 19327116 via CL 19328047 via CL 19328071
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v926-19321884)

[CL 19348318 by jeremy moore in ue5-main branch]
This commit is contained in:
jeremy moore
2022-03-10 22:04:48 -05:00
parent 73b2d43271
commit fe453b026c
2 changed files with 22 additions and 4 deletions

View File

@@ -30,12 +30,20 @@ UAsyncCaptureScene::UAsyncCaptureScene()
UAsyncCaptureScene* UAsyncCaptureScene::CaptureSceneAsync(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY)
{
UAsyncCaptureScene* AsyncTask = NewObject<UAsyncCaptureScene>();
AsyncTask->Start(ViewCamera, SceneCaptureClass, ResX, ResY);
AsyncTask->Start(ViewCamera, SceneCaptureClass, ResX, ResY, 0);
return AsyncTask;
}
void UAsyncCaptureScene::Start(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY)
UAsyncCaptureScene* UAsyncCaptureScene::CaptureSceneWithWarmupAsync(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY, int WarmUpFrames)
{
UAsyncCaptureScene* AsyncTask = NewObject<UAsyncCaptureScene>();
AsyncTask->Start(ViewCamera, SceneCaptureClass, ResX, ResY, WarmUpFrames);
return AsyncTask;
}
void UAsyncCaptureScene::Start(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY, int InWarmUpFrames)
{
const FVector CaptureLocation = ViewCamera->GetComponentLocation();
const FRotator CaptureRotation = ViewCamera->GetComponentRotation();
@@ -64,6 +72,8 @@ void UAsyncCaptureScene::Start(UCameraComponent* ViewCamera, TSubclassOf<ASceneC
ViewCamera->GetCameraView(0, CaptureView);
CaptureComponent->SetCameraView(CaptureView);
}
WarmUpFrames = FMath::Max(InWarmUpFrames, 1);
}
void UAsyncCaptureScene::Activate()
@@ -80,7 +90,10 @@ void UAsyncCaptureScene::Activate()
FinishLoadingBeforeScreenshot();
CaptureComponent->CaptureScene();
for (int32 FrameCount = 0; FrameCount < WarmUpFrames; ++FrameCount)
{
CaptureComponent->CaptureScene();
}
NotifyComplete(SceneCaptureRT);
}

View File

@@ -28,6 +28,9 @@ public:
UFUNCTION(BlueprintCallable, meta=( BlueprintInternalUseOnly="true" ))
static UAsyncCaptureScene* CaptureSceneAsync(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY);
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))
static UAsyncCaptureScene* CaptureSceneWithWarmupAsync(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY, int WarmUpFrames);
virtual void Activate() override;
public:
@@ -38,7 +41,7 @@ public:
private:
void NotifyComplete(UTextureRenderTarget2D* InTexture);
void Start(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY);
void Start(UCameraComponent* ViewCamera, TSubclassOf<ASceneCapture2D> SceneCaptureClass, int ResX, int ResY, int InWarmUpFrames);
void FinishLoadingBeforeScreenshot();
private:
@@ -47,4 +50,6 @@ private:
UPROPERTY()
TObjectPtr<UTextureRenderTarget2D> SceneCaptureRT;
int32 WarmUpFrames;
};