refactored the NNI system so RDG can keep track of the style transfer operations
This commit is contained in:
parent
f16119ca84
commit
9a83d413fc
@ -222,9 +222,8 @@ VoiceChatVolumeControlBus=/Game/Audio/Modulation/ControlBuses/CB_VoiceChat.CB_Vo
|
||||
LoadingScreenControlBusMix=/Game/Audio/Modulation/ControlBusMixes/CBM_LoadingScreenMix.CBM_LoadingScreenMix
|
||||
|
||||
[/Script/StyleTransfer.StyleTransferSettings]
|
||||
StyleTransferNetwork=/StyleTransfer/NN_TransferVGG.NN_TransferVGG
|
||||
StylePredictionNetwork=/StyleTransfer/NN_PredictorVGG.NN_PredictorVGG
|
||||
+StyleTextures=/StyleTransfer/T_StyleImage.T_StyleImage
|
||||
+StyleTextures=/StyleTransfer/T_StyleImage3.T_StyleImage3
|
||||
StyleTransferNetwork=/StyleTransfer/rstnet-960-32-3_transfer.rstnet-960-32-3_transfer
|
||||
StylePredictionNetwork=/StyleTransfer/rstnet-960-32-3_predictor.rstnet-960-32-3_predictor
|
||||
+StyleTextures=/StyleTransfer/Styles/T_StyleImage1.T_StyleImage1
|
||||
InterpolationCurve=(EditorCurveData=(Keys=((InterpMode=RCIM_Cubic,TangentMode=RCTM_User),(InterpMode=RCIM_Cubic,TangentMode=RCTM_User,Time=2.241476,Value=1.000000),(InterpMode=RCIM_Cubic,TangentMode=RCTM_User,Time=3.908512,Value=1.000000),(InterpMode=RCIM_Cubic,TangentMode=RCTM_User,Time=5.831762),(Time=7.971708)),DefaultValue=340282346638528859811704183484516925440.000000,PreInfinityExtrap=RCCE_Constant,PostInfinityExtrap=RCCE_Constant),ExternalCurve=None)
|
||||
|
||||
|
BIN
Plugins/StyleTransfer/Content/Styles/00059bb14dffa5cb836f35e2f207f39946d25ff6.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/00059bb14dffa5cb836f35e2f207f39946d25ff6.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/0011fc013403f895146b783b2dd338d639883ec8.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/0011fc013403f895146b783b2dd338d639883ec8.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/00217cb856d9d97865cd3c59669155d3b5c5c0cd.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/00217cb856d9d97865cd3c59669155d3b5c5c0cd.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/00218b41b034d31c8129a328879680c0771cd95d.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/00218b41b034d31c8129a328879680c0771cd95d.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/00230bf26630ee75ed5dfc8861047e1f13fbf38a.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/00230bf26630ee75ed5dfc8861047e1f13fbf38a.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage1.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage1.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage2.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage2.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage3.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage3.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage4.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/Styles/T_StyleImage4.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/T_StyleImage.uasset
(Stored with Git LFS)
BIN
Plugins/StyleTransfer/Content/T_StyleImage.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/T_StyleImage1.uasset
(Stored with Git LFS)
BIN
Plugins/StyleTransfer/Content/T_StyleImage1.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/T_StyleImage2.uasset
(Stored with Git LFS)
BIN
Plugins/StyleTransfer/Content/T_StyleImage2.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/T_StyleImage3.uasset
(Stored with Git LFS)
BIN
Plugins/StyleTransfer/Content/T_StyleImage3.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/T_StyleImage4.uasset
(Stored with Git LFS)
BIN
Plugins/StyleTransfer/Content/T_StyleImage4.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/rstnet-960-32-3_predictor.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/rstnet-960-32-3_predictor.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Plugins/StyleTransfer/Content/rstnet-960-32-3_transfer.uasset
(Stored with Git LFS)
Normal file
BIN
Plugins/StyleTransfer/Content/rstnet-960-32-3_transfer.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -173,10 +173,8 @@ FRDGTexture* FStyleTransferSceneViewExtension::TensorToTexture(FRDGBuilder& Grap
|
||||
FRDGTexture* OutputTexture = GraphBuilder.CreateTexture(
|
||||
DestinationDesc, TEXT("OutputTexture"));
|
||||
|
||||
FRDGBufferRef SourceTensorBuffer = GraphBuilder.RegisterExternalBuffer(SourceTensor.GetPooledBuffer());
|
||||
|
||||
auto OutputTensorToSceneColorParameters = GraphBuilder.AllocParameters<FOutputTensorToSceneColorCS::FParameters>();
|
||||
OutputTensorToSceneColorParameters->InputTensor = GraphBuilder.CreateSRV(SourceTensorBuffer, EPixelFormat::PF_R32_FLOAT);
|
||||
OutputTensorToSceneColorParameters->InputTensor = SourceTensor.GetBufferSRVRef();
|
||||
OutputTensorToSceneColorParameters->OutputTexture = GraphBuilder.CreateUAV(OutputTexture);
|
||||
OutputTensorToSceneColorParameters->TensorVolume = SourceTensor.Num();
|
||||
OutputTensorToSceneColorParameters->TextureSize = DestinationDesc.Extent;
|
||||
@ -219,10 +217,9 @@ FRDGTexture* TensorToTexture(FRDGBuilder& GraphBuilder, const FRDGTextureDesc& B
|
||||
FRDGTexture* OutputTexture = GraphBuilder.CreateTexture(
|
||||
DestinationDesc, TEXT("OutputTexture"));
|
||||
|
||||
FRDGBufferRef SourceTensorBuffer = GraphBuilder.RegisterExternalBuffer(SourceTensor.GetPooledBuffer());
|
||||
|
||||
auto OutputTensorToSceneColorParameters = GraphBuilder.AllocParameters<FOutputTensorToSceneColorCS::FParameters>();
|
||||
OutputTensorToSceneColorParameters->InputTensor = GraphBuilder.CreateSRV(SourceTensorBuffer, EPixelFormat::PF_R32_FLOAT);
|
||||
OutputTensorToSceneColorParameters->InputTensor = SourceTensor.GetBufferSRVRef();
|
||||
OutputTensorToSceneColorParameters->OutputTexture = GraphBuilder.CreateUAV(OutputTexture);
|
||||
OutputTensorToSceneColorParameters->TensorVolume = SourceTensor.Num();
|
||||
OutputTensorToSceneColorParameters->TextureSize = DestinationDesc.Extent;
|
||||
@ -246,7 +243,7 @@ FRDGTexture* TensorToTexture(FRDGBuilder& GraphBuilder, const FRDGTextureDesc& B
|
||||
return OutputTexture;
|
||||
}
|
||||
|
||||
void TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, const FNeuralTensor& DestinationTensor)
|
||||
FRDGPassRef TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, FNeuralTensor& DestinationTensor)
|
||||
{
|
||||
const FIntVector InputTensorDimensions = {
|
||||
CastNarrowingSafe<int32>(DestinationTensor.GetSize(1)),
|
||||
@ -255,12 +252,11 @@ void TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture,
|
||||
};
|
||||
const FIntPoint RgbRenderTargetDimensions = SourceTexture->Desc.Extent;
|
||||
|
||||
const FRDGBufferRef DestinationTensorBuffer = GraphBuilder.RegisterExternalBuffer(DestinationTensor.GetPooledBuffer());
|
||||
FSceneColorToInputTensorCS::FParameters* RgbToInputTensorParameters = GraphBuilder.AllocParameters<FSceneColorToInputTensorCS::FParameters>();
|
||||
RgbToInputTensorParameters->TensorVolume = CastNarrowingSafe<uint32>(DestinationTensor.Num());
|
||||
RgbToInputTensorParameters->InputTexture = SourceTexture;
|
||||
RgbToInputTensorParameters->InputTextureSampler = TStaticSamplerState<SF_Bilinear>::GetRHI();
|
||||
RgbToInputTensorParameters->OutputUAV = GraphBuilder.CreateUAV(DestinationTensorBuffer);
|
||||
RgbToInputTensorParameters->OutputUAV = DestinationTensor.GetBufferUAVRef();
|
||||
RgbToInputTensorParameters->OutputDimensions = {InputTensorDimensions.X, InputTensorDimensions.Y};
|
||||
RgbToInputTensorParameters->HalfPixelUV = FVector2f(0.5f / RgbRenderTargetDimensions.X, 0.5 / RgbRenderTargetDimensions.Y);
|
||||
FIntVector ComputeGroupCount = FComputeShaderUtils::GetGroupCount(
|
||||
@ -269,7 +265,7 @@ void TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture,
|
||||
);
|
||||
|
||||
TShaderMapRef<FSceneColorToInputTensorCS> RgbToInputTensorCS(GetGlobalShaderMap(GMaxRHIFeatureLevel));
|
||||
GraphBuilder.AddPass(
|
||||
return GraphBuilder.AddPass(
|
||||
RDG_EVENT_NAME("TextureToTensorRGB(%s)", FSceneColorToInputTensorCS::StaticType.GetName()),
|
||||
RgbToInputTensorParameters,
|
||||
ERDGPassFlags::Compute,
|
||||
@ -281,7 +277,7 @@ void TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture,
|
||||
);
|
||||
}
|
||||
|
||||
void TextureToTensorGrayscale(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, const FNeuralTensor& DestinationTensor)
|
||||
FRDGPassRef TextureToTensorGrayscale(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, FNeuralTensor& DestinationTensor)
|
||||
{
|
||||
const FIntVector InputTensorDimensions = {
|
||||
CastNarrowingSafe<int32>(DestinationTensor.GetSize(1)),
|
||||
@ -290,12 +286,11 @@ void TextureToTensorGrayscale(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTe
|
||||
};
|
||||
const FIntPoint GrayscaleRenderTargetDimensions = SourceTexture->Desc.Extent;
|
||||
|
||||
const FRDGBufferRef DestinationTensorBuffer = GraphBuilder.RegisterExternalBuffer(DestinationTensor.GetPooledBuffer());
|
||||
FShadowMaskToInputTensorCS::FParameters* GrayscaleToInputTensorParameters = GraphBuilder.AllocParameters<FShadowMaskToInputTensorCS::FParameters>();
|
||||
GrayscaleToInputTensorParameters->TensorVolume = CastNarrowingSafe<uint32>(DestinationTensor.Num());
|
||||
GrayscaleToInputTensorParameters->InputTexture = SourceTexture;
|
||||
GrayscaleToInputTensorParameters->InputTextureSampler = TStaticSamplerState<SF_Bilinear>::GetRHI();
|
||||
GrayscaleToInputTensorParameters->OutputUAV = GraphBuilder.CreateUAV(DestinationTensorBuffer);
|
||||
GrayscaleToInputTensorParameters->OutputUAV = DestinationTensor.GetBufferUAVRef();
|
||||
GrayscaleToInputTensorParameters->OutputDimensions = {InputTensorDimensions.X, InputTensorDimensions.Y};
|
||||
GrayscaleToInputTensorParameters->HalfPixelUV = FVector2f(0.5f / GrayscaleRenderTargetDimensions.X, 0.5 / GrayscaleRenderTargetDimensions.Y);
|
||||
FIntVector ComputeGroupCount = FComputeShaderUtils::GetGroupCount(
|
||||
@ -304,7 +299,7 @@ void TextureToTensorGrayscale(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTe
|
||||
);
|
||||
|
||||
TShaderMapRef<FShadowMaskToInputTensorCS> GrayscaleToInputTensorCS(GetGlobalShaderMap(GMaxRHIFeatureLevel));
|
||||
GraphBuilder.AddPass(
|
||||
return GraphBuilder.AddPass(
|
||||
RDG_EVENT_NAME("TextureToTensorGrayscale(%s)", FShadowMaskToInputTensorCS::StaticType.GetName()),
|
||||
GrayscaleToInputTensorParameters,
|
||||
ERDGPassFlags::Compute,
|
||||
@ -316,24 +311,19 @@ void TextureToTensorGrayscale(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTe
|
||||
);
|
||||
}
|
||||
|
||||
void FStyleTransferSceneViewExtension::TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, const FNeuralTensor& DestinationTensor)
|
||||
void FStyleTransferSceneViewExtension::TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, FNeuralTensor& DestinationTensor)
|
||||
{
|
||||
::TextureToTensorRGB(GraphBuilder, SourceTexture, DestinationTensor);
|
||||
}
|
||||
|
||||
void FStyleTransferSceneViewExtension::InterpolateTensors(FRDGBuilder& GraphBuilder, const FNeuralTensor& DestinationTensor, const FNeuralTensor& InputTensorA, const FNeuralTensor& InputTensorB, float Alpha)
|
||||
void FStyleTransferSceneViewExtension::InterpolateTensors(FRDGBuilder& GraphBuilder, FNeuralTensor& DestinationTensor, const FNeuralTensor& InputTensorA, const FNeuralTensor& InputTensorB, float Alpha)
|
||||
{
|
||||
RDG_EVENT_SCOPE(GraphBuilder, "InterpolateTensors");
|
||||
|
||||
const FRDGBufferRef DestinationBuffer = GraphBuilder.RegisterExternalBuffer(DestinationTensor.GetPooledBuffer());
|
||||
const FRDGBufferRef InputBufferA = GraphBuilder.RegisterExternalBuffer(InputTensorA.GetPooledBuffer());
|
||||
const FRDGBufferRef InputBufferB = GraphBuilder.RegisterExternalBuffer(InputTensorB.GetPooledBuffer());
|
||||
|
||||
|
||||
auto InterpolateTensorsParameters = GraphBuilder.AllocParameters<FInterpolateTensorsCS::FParameters>();
|
||||
InterpolateTensorsParameters->InputSrvA = GraphBuilder.CreateSRV(InputBufferA, EPixelFormat::PF_R32_FLOAT);
|
||||
InterpolateTensorsParameters->InputSrvB = GraphBuilder.CreateSRV(InputBufferB, EPixelFormat::PF_R32_FLOAT);
|
||||
InterpolateTensorsParameters->OutputUAV = GraphBuilder.CreateUAV(DestinationBuffer);
|
||||
InterpolateTensorsParameters->InputSrvA = InputTensorA.GetBufferSRVRef();
|
||||
InterpolateTensorsParameters->InputSrvB = InputTensorB.GetBufferSRVRef();
|
||||
InterpolateTensorsParameters->OutputUAV = DestinationTensor.GetBufferUAVRef();
|
||||
InterpolateTensorsParameters->Alpha = Alpha;
|
||||
InterpolateTensorsParameters->TensorVolume = DestinationTensor.Num();
|
||||
FIntVector InterpolateTensorsThreadGroupCount = FComputeShaderUtils::GetGroupCount(
|
||||
@ -379,21 +369,27 @@ FScreenPassTexture FStyleTransferSceneViewExtension::PostProcessPassAfterTonemap
|
||||
checkSlow(View.bIsViewInfo);
|
||||
const FViewInfo& ViewInfo = static_cast<const FViewInfo&>(View);
|
||||
|
||||
const FNeuralTensor& StyleTransferContentInputTensor = StyleTransferNetwork->GetInputTensorForContext(*InferenceContext, ContentInputTensorIndex);
|
||||
FNeuralTensor& StyleTransferContentInputTensor = StyleTransferNetwork->GetInputTensorForContextMutable(*InferenceContext, ContentInputTensorIndex);
|
||||
FNeuralTensor& StyleTransferStyleParamsInputTensor = StyleTransferNetwork->GetInputTensorForContextMutable(*InferenceContext, StyleParamsInputTensorIndex);
|
||||
|
||||
StyleTransferContentInputTensor.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
StyleTransferStyleParamsInputTensor.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
|
||||
if (StyleWeightsInputTensorIndex != INDEX_NONE)
|
||||
{
|
||||
const FNeuralTensor& StyleTransferStyleWeightsInputTensor = StyleTransferNetwork->GetInputTensorForContext(*InferenceContext, StyleWeightsInputTensorIndex);
|
||||
FNeuralTensor& StyleTransferStyleWeightsInputTensor = StyleTransferNetwork->GetInputTensorForContextMutable(*InferenceContext, StyleWeightsInputTensorIndex);
|
||||
StyleTransferStyleWeightsInputTensor.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
|
||||
check(GScreenShadowMaskTexture);
|
||||
::TextureToTensorGrayscale(GraphBuilder, GScreenShadowMaskTexture, StyleTransferStyleWeightsInputTensor);
|
||||
}
|
||||
|
||||
|
||||
::TextureToTensorRGB(GraphBuilder, SceneColor.Texture, StyleTransferContentInputTensor);
|
||||
|
||||
StyleTransferNetwork->Run(GraphBuilder, *InferenceContext);
|
||||
|
||||
const FNeuralTensor& StyleTransferContentOutputTensor = StyleTransferNetwork->GetOutputTensorForContext(*InferenceContext, 0);
|
||||
|
||||
FNeuralTensor& StyleTransferContentOutputTensor = StyleTransferNetwork->GetOutputTensorForContextMutable(*InferenceContext, 0);
|
||||
FRDGTexture* StyleTransferRenderTargetTexture = TensorToTexture(GraphBuilder, SceneColor.Texture->Desc, StyleTransferContentOutputTensor);
|
||||
|
||||
TSharedPtr<FScreenPassRenderTarget> StyleTransferOutputTarget = MakeShared<FScreenPassRenderTarget>(StyleTransferRenderTargetTexture, SceneColor.ViewRect,
|
||||
|
@ -92,6 +92,7 @@ void UStyleTransferSubsystem::StartStylizingViewport(FViewportClient* ViewportCl
|
||||
FTextureCompilingManager::Get().FinishCompilation({StyleTexture});
|
||||
#endif
|
||||
UpdateStyle(StyleTexture, i, StylePredictionInferenceContext);
|
||||
//UpdateStyle(StyleTexture, i, StylePredictionInferenceContext);
|
||||
}
|
||||
//UpdateStyle(FPaths::GetPath("C:\\projects\\realtime-style-transfer\\temp\\style_params_tensor.bin"));
|
||||
UE_LOG(LogStyleTransfer, Log, TEXT("Creating FStyleTransferSceneViewExtension"));
|
||||
@ -136,23 +137,26 @@ void UStyleTransferSubsystem::UpdateStyle(UTexture2D* StyleTexture, uint32 Style
|
||||
ENQUEUE_RENDER_COMMAND(StylePrediction)([this, StyleTexture, StylePredictionInferenceContext, StyleIndex](FRHICommandListImmediate& RHICommandList)
|
||||
{
|
||||
IRenderCaptureProvider* RenderCaptureProvider = ConditionalBeginRenderCapture(RHICommandList);
|
||||
|
||||
FRDGBuilder GraphBuilder(RHICommandList);
|
||||
{
|
||||
RDG_EVENT_SCOPE(GraphBuilder, "StylePrediction");
|
||||
|
||||
const FNeuralTensor& InputStyleImageTensor = StylePredictionNetwork->GetInputTensorForContext(StylePredictionInferenceContext, 0);
|
||||
FNeuralTensor& InputStyleImageTensor = StylePredictionNetwork->GetInputTensorForContextMutable(StylePredictionInferenceContext, 0);
|
||||
FNeuralTensor& InputStyleParams = StyleTransferNetwork->GetInputTensorForContextMutable(*StyleTransferInferenceContext, StyleTransferStyleParamsInputIndex);
|
||||
InputStyleImageTensor.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
InputStyleParams.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
FTextureResource* StyleTextureResource = StyleTexture->GetResource();
|
||||
FRDGTextureRef RDGStyleTexture = GraphBuilder.RegisterExternalTexture(CreateRenderTarget(StyleTextureResource->TextureRHI, TEXT("StyleInputTexture")));
|
||||
FStyleTransferSceneViewExtension::TextureToTensorRGB(GraphBuilder, RDGStyleTexture, InputStyleImageTensor);
|
||||
|
||||
|
||||
|
||||
StylePredictionNetwork->Run(GraphBuilder, StylePredictionInferenceContext);
|
||||
|
||||
const FNeuralTensor& OutputStyleParams = StylePredictionNetwork->GetOutputTensorForContext(StylePredictionInferenceContext, 0);
|
||||
const FNeuralTensor& InputStyleParams = StyleTransferNetwork->GetInputTensorForContext(*StyleTransferInferenceContext, StyleTransferStyleParamsInputIndex);
|
||||
|
||||
FRDGBufferRef OutputStyleParamsBuffer = GraphBuilder.RegisterExternalBuffer(OutputStyleParams.GetPooledBuffer());
|
||||
FRDGBufferRef InputStyleParamsBuffer = GraphBuilder.RegisterExternalBuffer(InputStyleParams.GetPooledBuffer());
|
||||
FNeuralTensor& OutputStyleParams = StylePredictionNetwork->GetOutputTensorForContextMutable(StylePredictionInferenceContext, 0);
|
||||
FRDGBufferRef OutputStyleParamsBuffer = OutputStyleParams.GetBufferSRVRef()->GetParent();
|
||||
FRDGBufferRef InputStyleParamsBuffer = InputStyleParams.GetBufferUAVRef()->GetParent();
|
||||
const uint64 NumBytes = OutputStyleParams.NumInBytes();
|
||||
const uint64 DstOffset = StyleIndex * NumBytes;
|
||||
|
||||
@ -162,12 +166,12 @@ void UStyleTransferSubsystem::UpdateStyle(UTexture2D* StyleTexture, uint32 Style
|
||||
Parameters->DstBuffer = InputStyleParamsBuffer;
|
||||
|
||||
GraphBuilder.AddPass(
|
||||
RDG_EVENT_NAME("CopyBuffer(%s Size=%ubytes)", Parameters->SrcBuffer, Parameters->SrcBuffer->Desc.GetSize()),
|
||||
RDG_EVENT_NAME("CopyBuffer(%s Size=%ubytes)", Parameters->SrcBuffer->Name, Parameters->SrcBuffer->Desc.GetSize()),
|
||||
Parameters,
|
||||
ERDGPassFlags::Copy,
|
||||
[Parameters, NumBytes, DstOffset](FRHICommandList& RHICmdList)
|
||||
{
|
||||
RHICmdList.CopyBufferRegion(Parameters->DstBuffer->GetRHI(), DstOffset, Parameters->SrcBuffer->GetRHI(), 0, NumBytes);
|
||||
RHICmdList.CopyBufferRegion(Parameters->DstBuffer->GetRHI(), /*DstOffset*/ 0, Parameters->SrcBuffer->GetRHI(), 0, NumBytes);
|
||||
});
|
||||
}
|
||||
GraphBuilder.Execute();
|
||||
@ -185,7 +189,7 @@ void UStyleTransferSubsystem::UpdateStyle(FString StyleTensorDataPath)
|
||||
{
|
||||
FArchive& FileReader = *IFileManager::Get().CreateFileReader(*StyleTensorDataPath);
|
||||
TArray<float> StyleParams;
|
||||
StyleParams.SetNumUninitialized(2758);
|
||||
StyleParams.SetNumUninitialized(2758); // hardcoded for brevity reasons
|
||||
|
||||
FileReader << StyleParams;
|
||||
|
||||
@ -268,9 +272,12 @@ void UStyleTransferSubsystem::InterpolateStyles(int32 StylePredictionInferenceCo
|
||||
{
|
||||
RDG_EVENT_SCOPE(GraphBuilder, "StylePrediction");
|
||||
|
||||
const FNeuralTensor& InputStyleImageTensorA = StylePredictionNetwork->GetOutputTensorForContext(StylePredictionInferenceContextA, 0);
|
||||
const FNeuralTensor& InputStyleImageTensorB = StylePredictionNetwork->GetOutputTensorForContext(StylePredictionInferenceContextB, 0);
|
||||
const FNeuralTensor& OutputStyleParamsTensor = StyleTransferNetwork->GetInputTensorForContext(*StyleTransferInferenceContext, StyleTransferStyleParamsInputIndex);
|
||||
FNeuralTensor& InputStyleImageTensorA = StylePredictionNetwork->GetOutputTensorForContextMutable(StylePredictionInferenceContextA, 0);
|
||||
FNeuralTensor& InputStyleImageTensorB = StylePredictionNetwork->GetOutputTensorForContextMutable(StylePredictionInferenceContextB, 0);
|
||||
FNeuralTensor& OutputStyleParamsTensor = StyleTransferNetwork->GetInputTensorForContextMutable(*StyleTransferInferenceContext, StyleTransferStyleParamsInputIndex);
|
||||
InputStyleImageTensorA.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
InputStyleImageTensorB.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
OutputStyleParamsTensor.GPUToRDGBuilder_RenderThread(&GraphBuilder);
|
||||
FStyleTransferSceneViewExtension::InterpolateTensors(GraphBuilder, OutputStyleParamsTensor, InputStyleImageTensorA, InputStyleImageTensorB, Alpha);
|
||||
}
|
||||
GraphBuilder.Execute();
|
||||
|
@ -42,9 +42,9 @@ public:
|
||||
|
||||
static void AddRescalingTextureCopy(FRDGBuilder& GraphBuilder, FRDGTexture& RDGSourceTexture, FScreenPassRenderTarget& DestinationRenderTarget);
|
||||
static FRDGTexture* TensorToTexture(FRDGBuilder& GraphBuilder, const FRDGTextureDesc& BaseDestinationDesc, const FNeuralTensor& SourceTensor);
|
||||
static void TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, const FNeuralTensor& DestinationTensor);
|
||||
static void TextureToTensorGrayscale(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, const FNeuralTensor& DestinationTensor);
|
||||
static void InterpolateTensors(FRDGBuilder& GraphBuilder, const FNeuralTensor& DestinationTensor, const FNeuralTensor& InputTensorA, const FNeuralTensor& InputTensorB, float Alpha);
|
||||
static void TextureToTensorRGB(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, FNeuralTensor& DestinationTensor);
|
||||
static void TextureToTensorGrayscale(FRDGBuilder& GraphBuilder, FRDGTextureRef SourceTexture, FNeuralTensor& DestinationTensor);
|
||||
static void InterpolateTensors(FRDGBuilder& GraphBuilder, FNeuralTensor& DestinationTensor, const FNeuralTensor& InputTensorA, const FNeuralTensor& InputTensorB, float Alpha);
|
||||
|
||||
private:
|
||||
/** The actual Network pointer is not tracked so we need a WeakPtr too so we can check its validity on the game thread. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user