Skip to content

Commit af155fc

Browse files
committed
add scene view state post
1 parent 06d44e0 commit af155fc

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

8.misc/ue4_view_and_state.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
UE4 View & State
2+
===
3+
4+
* FSceneView 包含Family,ViewState,ViewUniformBuffer
5+
* FViewInfo
6+
* FSceneViewFamily 包含Views,Scene,RenderTarget
7+
* FSceneViewStateInterface
8+
* FSceneViewState 存储渲染相关的**跨帧**资源(TAA历史信息、遮挡剔除信息、HLOD可见性、阴影等)
9+
* FSceneInterface
10+
* FScene 场景管理接口,物件和光源,特效以及阴影资源,绘制列表,光线追踪资源(场景加速结构)
11+
* FSceneRenderer 渲染器实例(**每帧都会销毁重建**,同时绘制多个View)
12+
13+
常见的用法
14+
```cpp
15+
auto RT = NewObject<UTextureRenderTarget2D>();
16+
RT->AddToRoot();
17+
RT->ClearColor = FLinearColor::Transparent;
18+
RT->TargetGamma = TargetGamma;
19+
RT->InitCustomFormat(TargetSize.X, TargetSize.Y, PF_FloatRGBA, false);
20+
FTextureRTResource* RTResource = RT->GameThread_GetRTResource();
21+
FSceneViewFamilyContext ViewFamily(
22+
FSceneViewFamily::ConstructionValues(RTResource, Scene, FEngineShowFlags(ESFIM_Game))
23+
.SetWorldTimes(FApp::GetCurrentTime() - GStartTime, FApp::GetDeltaTime(), FApp::GetCurrentTime() - GStartTime)
24+
);
25+
26+
// To enable visualization mode
27+
ViewFamily.EngineShowFlags.SetPostProcessing(true);
28+
ViewFamily.EngineShowFlags.SetVisualizeBuffer(true);
29+
ViewFamily.EngineShowFlags.SetTonemapper(false);
30+
ViewFamily.EngineShowFlags.SetScreenPercentage(false);
31+
32+
FSceneViewInitOptions ViewInitOptions;
33+
ViewInitOptions.SetViewRectangle(FIntRect(0, 0, TargetSize.X, TargetSize.Y));
34+
ViewInitOptions.ViewFamily = &ViewFamily;
35+
ViewInitOptions.HiddenPrimitives = HiddenPrimitives;
36+
ViewInitOptions.ViewOrigin = ViewOrigin;
37+
ViewInitOptions.ViewRotationMatrix = ViewRotationMatrix;
38+
ViewInitOptions.ProjectionMatrix = ProjectionMatrix;
39+
40+
FSceneView* NewView = new FSceneView(ViewInitOptions);
41+
NewView->CurrentBufferVisualizationMode = VisualizationMode;
42+
ViewFamily.Views.Add(NewView);
43+
44+
ViewFamily.SetScreenPercentageInterface(new FLegacyScreenPercentageDriver(
45+
ViewFamily, /* GlobalResolutionFraction = */ 1.0f, /* AllowPostProcessSettingsScreenPercentage = */ false));
46+
47+
FCanvas Canvas(RTResource, NULL, FApp::GetCurrentTime() - GStartTime, FApp::GetDeltaTime(), FApp::GetCurrentTime() - GStartTime, Scene->GetFeatureLevel());
48+
Canvas.Clear(FLinearColor::Transparent);
49+
GetRendererModule().BeginRenderingViewFamily(&Canvas, &ViewFamily);
50+
51+
// Copy the contents of the remote texture to system memory
52+
OutSamples.SetNumUninitialized(TargetSize.X*TargetSize.Y);
53+
FReadSurfaceDataFlags ReadSurfaceDataFlags;
54+
ReadSurfaceDataFlags.SetLinearToGamma(false);
55+
RTResource->ReadPixelsPtr(OutSamples.GetData(), ReadSurfaceDataFlags, FIntRect(0, 0, TargetSize.X, TargetSize.Y));
56+
FlushRenderingCommands();
57+
58+
RT->RemoveFromRoot();
59+
RT = nullptr;
60+
```

0 commit comments

Comments
 (0)