Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ jobs:
- name: Download, Extract and Setup UE
working-directory: ue
run: |
gh release download --repo satisfactorymodding/UnrealEngine -p "UnrealEngine-CSS-Editor-Win64.7z.*" 5.3.2-css-68
gh release download --repo satisfactorymodding/UnrealEngine -p "UnrealEngine-CSS-Editor-Win64.7z.001" 5.3.2-css-68
gh release download --repo satisfactorymodding/UnrealEngine -p "UnrealEngine-CSS-Editor-Win64.7z.002" 5.3.2-css-68
gh release download --repo satisfactorymodding/UnrealEngine -p "UnrealEngine-CSS-Editor-Win64.7z.003" 5.3.2-css-68
7z x UnrealEngine-CSS-Editor-Win64.7z.001
rm UnrealEngine-CSS-Editor-Win64.7z*
.\\SetupScripts\\Register.bat
Expand Down
2 changes: 1 addition & 1 deletion FicsItCam.uplugin
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0",
"SemVersion": "1.0.0",
"SemVersion": "1.0.1",
"GameVersion": ">=415558",
"AcceptsAnyRemoteVersion": true,
"FriendlyName": "FicsIt-Cam",
Expand Down
46 changes: 32 additions & 14 deletions Source/FicsItCam/Private/Editor/Data/FICEditorCameraActor.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#include "Editor/Data/FICEditorCameraActor.h"

#include "EngineUtils.h"
#include "FICSubsystem.h"
#include "FICDummyViewport.h"
#include "FICSubsystem.h"
#include "SViewport.h"
#include "TextureResource.h"
#include "Components/LineBatchComponent.h"
#include "Components/SceneCaptureComponent2D.h"
Expand Down Expand Up @@ -93,18 +95,23 @@ AFICEditorCameraActor::AFICEditorCameraActor() {

CaptureComponent = CreateDefaultSubobject<USceneCaptureComponent2D>(TEXT("CaptureComponent"));
CaptureComponent->AttachToComponent(GetRootComponent(), FAttachmentTransformRules::KeepRelativeTransform);

RenderTarget = CreateDefaultSubobject<UTextureRenderTarget2D>(TEXT("RenderTarget"));
RenderTarget->InitAutoFormat(320, 320);
RenderTarget->TargetGamma = 1;
RenderTarget->InitCustomFormat(320, 320, PF_R8G8B8A8, false);
RenderTarget->bGPUSharedFlag = true;

CaptureComponent->TextureTarget = RenderTarget;
CaptureComponent->CaptureSource = ESceneCaptureSource::SCS_FinalColorLDR;
CaptureComponent->DetailMode = DM_MAX;
CaptureComponent->LODDistanceFactor = 0.01;
CaptureComponent->PrimitiveRenderMode = ESceneCapturePrimitiveRenderMode::PRM_RenderScenePrimitives;
CaptureComponent->bUseRayTracingIfEnabled = true;
CaptureComponent->ShowFlags.SetTemporalAA(true);
CaptureComponent->bCaptureEveryFrame = false;
CameraPreviewBrush = FSlateImageBrush(RenderTarget, FVector2D(RenderTarget->SizeX, RenderTarget->SizeY));

CaptureComponent->bCaptureOnMovement = false;
CaptureComponent->bUseRayTracingIfEnabled = true;
CaptureComponent->bAlwaysPersistRenderingState = true;

CaptureComponent->CaptureSource = ESceneCaptureSource::SCS_FinalColorLDR;
if (GEngine) CaptureComponent->ShowFlags = *GEngine->GameViewport->GetEngineShowFlags();

//CameraPreviewBrush = FSlateImageBrush(RenderTarget, FVector2D(RenderTarget->SizeX, RenderTarget->SizeY));

PrimaryActorTick.bCanEverTick = true;

LineBatcher = CreateDefaultSubobject<ULineBatchComponent>(TEXT("LineBatcher"));
Expand Down Expand Up @@ -154,6 +161,7 @@ void AFICEditorCameraActor::Tick(float DeltaSeconds) {
if (CameraPreview && CameraPreview.IsUnique()) {
CameraPreview.Reset();
CaptureComponent->bCaptureEveryFrame = false;
CameraPreviewViewport.Reset();
}
}

Expand All @@ -173,14 +181,24 @@ TSharedRef<SWidget> AFICEditorCameraActor::GetCameraPreview() {
UpdateRenderTarget();
CaptureComponent->bCaptureEveryFrame = true;
if (!CameraPreview) {
CameraPreview = SNew(SImage)
.Image(&CameraPreviewBrush);
CaptureComponent->CaptureScene();
FlushRenderingCommands();
FIntPoint Size = RenderTarget->GameThread_GetRenderTargetResource()->GetSizeXY();
CameraPreviewViewport = MakeShared<FFICDummyViewport>(RenderTarget->GameThread_GetRenderTargetResource()->GetRenderTargetTexture(), Size);
/*CameraPreview = SNew(SImage)
.Image(&CameraPreviewBrush);*/
CameraPreview = SNew(SViewport)
.ViewportInterface(CameraPreviewViewport)
.ForceVolatile(true)
.IsEnabled(true)
.RenderOpacity(1.0)
.EnableGammaCorrection(true);
}
return CameraPreview.ToSharedRef();
}

void AFICEditorCameraActor::UpdateRenderTarget() {
float AspectRatio = (float)EditorContext->GetScene()->ResolutionWidth / (float)EditorContext->GetScene()->ResolutionHeight;
RenderTarget->InitAutoFormat(AspectRatio*320, 320);
CameraPreviewBrush = FSlateImageBrush(RenderTarget, FVector2D(RenderTarget->SizeX, RenderTarget->SizeY));
RenderTarget->ResizeTarget(AspectRatio*320, 320);
//CameraPreviewBrush = FSlateImageBrush(RenderTarget, FVector2D(RenderTarget->SizeX, RenderTarget->SizeY));
}
4 changes: 2 additions & 2 deletions Source/FicsItCam/Private/Runtime/FICCaptureCamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ void AFICCaptureCamera::UpdateCaptureWithCameraData(UCameraComponent* InCamera)
InCamera->GetCameraView(0, ViewInfo);
CaptureComponent->SetCameraView(ViewInfo);

CaptureComponent->PostProcessSettings.AutoExposureSpeedDown = 10000.0f;
CaptureComponent->PostProcessSettings.AutoExposureSpeedUp = 10000.0f;
CaptureComponent->PostProcessSettings.AutoExposureSpeedDown = 100.0f;
CaptureComponent->PostProcessSettings.AutoExposureSpeedUp = 100.0f;
CaptureComponent->PostProcessSettings.bOverride_AutoExposureSpeedDown = true;
CaptureComponent->PostProcessSettings.bOverride_AutoExposureSpeedUp = true;
CaptureComponent->PostProcessBlendWeight = 1.0f;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,44 +8,9 @@
#include "Components/SceneCaptureComponent2D.h"
#include "Engine/TextureRenderTarget2D.h"
#include "Runtime/FICCaptureCamera.h"
#include "Slate/SceneViewport.h"
#include "Slate/SlateTextures.h"
#include "Widgets/Images/SImage.h"
#include "Widgets/SViewport.h"

class FFICFeedView : public ISlateViewport
{
public:
FFICFeedView(FTexture2DRHIRef RenderTargetTexture, FIntPoint InSize)
: RenderTarget( new FSlateRenderTargetRHI(RenderTargetTexture, InSize.X, InSize.Y))
, Size(InSize) {
BeginInitResource(RenderTarget);
}

~FFICFeedView() {
ReleaseResourceAndFlush(RenderTarget);
delete RenderTarget;
}

// Begin ISlateViewport
virtual FIntPoint GetSize() const override {
return Size;
}

virtual FSlateShaderResource* GetViewportRenderTargetTexture() const override {
return RenderTarget;
}

virtual bool RequiresVsync() const override {
return false;
}
// End ISlateViewport

private:
FSlateRenderTargetRHI* RenderTarget;
FIntPoint Size;
};

void UFICRuntimeProcessCameraFeed::SaveWindowSettings() {
WindowLocation = Window->GetPositionInScreen();
WindowSize = Window->GetSizeInScreen();
Expand Down Expand Up @@ -74,7 +39,7 @@ void UFICRuntimeProcessCameraFeed::Start(AFICRuntimeProcessorCharacter* InCharac

FIntPoint Size = FIntPoint(Camera->RenderTarget->SizeX, Camera->RenderTarget->SizeY);
FVector2D Resolution = CameraArgument.GetResolution(this);
View = MakeShared<FFICFeedView>(Camera->RenderTarget->GameThread_GetRenderTargetResource()->GetRenderTargetTexture(), Size);
View = MakeShared<FFICDummyViewport>(Camera->RenderTarget->GameThread_GetRenderTargetResource()->GetRenderTargetTexture(), Size);

Window = SNew(SWindow)[
SNew(SViewport)
Expand Down
1 change: 1 addition & 0 deletions Source/FicsItCam/Public/Editor/Data/FICEditorCameraActor.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ class AFICEditorCameraActor : public AActor, public IFICSelectionInteractionTarg
UFICEditorCameraPathComponent* CameraPathComponent = nullptr;

TSharedPtr<SWidget> CameraPreview;
TSharedPtr<ISlateViewport> CameraPreviewViewport;

AFICEditorCameraActor();

Expand Down
37 changes: 37 additions & 0 deletions Source/FicsItCam/Public/Rendering/FICDummyViewport.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#pragma once

#include "CoreMinimal.h"
#include "SlateTextures.h"
#include "Slate/SceneViewport.h"

class FFICDummyViewport : public ISlateViewport {
public:
FFICDummyViewport(FTexture2DRHIRef RenderTargetTexture, FIntPoint InSize)
: RenderTarget( new FSlateRenderTargetRHI(RenderTargetTexture, InSize.X, InSize.Y))
, Size(InSize) {
BeginInitResource(RenderTarget);
}

~FFICDummyViewport() {
ReleaseResourceAndFlush(RenderTarget);
delete RenderTarget;
}

// Begin ISlateViewport
virtual FIntPoint GetSize() const override {
return Size;
}

virtual FSlateShaderResource* GetViewportRenderTargetTexture() const override {
return RenderTarget;
}

virtual bool RequiresVsync() const override {
return false;
}
// End ISlateViewport

private:
FSlateRenderTargetRHI* RenderTarget;
FIntPoint Size;
};
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include "FICRuntimeProcess.h"
#include "Runtime/FICCameraArgument.h"
#include "Brushes/SlateImageBrush.h"
#include "Runtime/FICCameraReference.h"
#include "Rendering/FICDummyViewport.h"

#include "FICRuntimeProcessCameraFeed.generated.h"

Expand All @@ -24,7 +24,7 @@ class UFICRuntimeProcessCameraFeed : public UFICRuntimeProcess, public IFGSaveIn
UFICProceduralTexture* PreviewTexture = nullptr;

TSharedPtr<SWindow> Window;
TSharedPtr<FFICFeedView> View;
TSharedPtr<FFICDummyViewport> View;

UPROPERTY(SaveGame)
FVector2D WindowLocation;
Expand Down