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中根据传入的宏指定对应的逻辑。