SceneCapture
创建一个SceneCapture2D类型的Actor,再新建一个RenderTarget资源交给它。随后,就能看到截屏的数据出现在RenderTarget中。通过修改 Capture Source ,可以改变截取的数据源,比如法线、基础色等等。

目标
本篇的目标是添加一种新的 Capture Source 。
需要对引擎的代码和shader文件做些修改。
1. 添加 Capture Source 枚举
在 Source\Runtime\Engine\Classes\Engine\EngineTypes.h 中添加一个ESceneCaptureSource枚举:

此枚举是细节面板中直接选择的枚举类。(还可以在这里修改它的显示名。)
2. 添加传入shader的宏
打开Source\Runtime\Renderer\Private\SceneCaptureRendering.cpp 。
添加一个ESourceMode枚举。

这个枚举用于帮助指定传入shader中的宏。
在随后的函数中指定ESourceMode和刚才的ESceneCaptureSource的对应关系:

最后,添加一个ShaderSourceModeDefineName字符串,保证此字符串序列和ESourceMode完全一一对应:

可以看到,后续的逻辑将会把Source对应的宏传入shader。
3. 在shader中指定对应的逻辑
打开 Shaders\Private\SceneCapturePixelShader.usf。
添加新Source对应的宏所对应的逻辑:

(作为简单的测试,这里让g通道是GBuffer中的Roughness,其余通道是1)
效果
可以看到多了“YakSue Test Capture Data”这种Source,并且其数据符合预期。

总结
总结来步骤如下:
- 增加
ESceneCaptureSource枚举类型,这是在细节面板中直接操控的枚举。 - 将
ESceneCaptureSource与ESourceMode对应起来。 ESourceMode将和传入shader中的宏一一对应。- shader中根据传入的宏指定对应的逻辑。



![[附源码]Python计算机毕业设计SSM基于的优质房源房租管理系统(程序+LW)](https://img-blog.csdnimg.cn/2e9e0174262a424786318e4b4eaee57b.png)















