学习在UE中为截屏工具(SceneCapture)添加一种新的源(Source)

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,并且其数据符合预期。
在这里插入图片描述

总结

总结来步骤如下:

  1. 增加ESceneCaptureSource枚举类型,这是在细节面板中直接操控的枚举。
  2. ESceneCaptureSourceESourceMode对应起来。
  3. ESourceMode将和传入shader中的宏一一对应。
  4. shader中根据传入的宏指定对应的逻辑。

猜你喜欢

转载自blog.csdn.net/u013412391/article/details/128265400