【转载】UE4.24 中实现简单 Shader 插件(4) —— Compute Shader

925 阅读1分钟

原文链接:UE4.24中实现简单Shader插件(4)-Compute Shader

本文主要参考下面这两篇文章,

  1. YivanLee:虚幻4 渲染编程(Shader篇)【第七卷:虚幻4 中的 ComputeShader】
  2. bluerose:(虚幻4 Shader 篇)开始编写 ComputeShader

如果对于 UE 如何写 Shader 还不熟悉,请参考下面几篇文章:

  1. DAhe:UE4.24 中实现简单 Shader 插件(1)
  2. DAhe:UE4.24 中实现简单 Shader 插件(2)
  3. DAhe:UE4.24 中实现简单 Shader 插件(3)
  • 图1

前面几篇文章介绍了往 Shader 中添加 Color/Texture/Uniform 变量,本文章将介绍如何往 Shader中添加 Compute Shader。本文重点介绍使用步骤,关于原理性知识请参考最上面的两篇参考文章。

在蓝图中调用 UseComputeShader 函数

image.png

UseComputeShader 函数 C++ 实现

image.png

  • OutputRenderTarget,蓝图中的 RenderTarget 资源
  • UniformStructDataUniform 数据结构体

虽然最终渲染出来的效果(见图1)有纹理贴图的效果,但是这个贴图并不是从外面传入进去的,而是使用 Compute Shader 计算生成的纹理。

UseComputerShader_RenderThread 函数

image.png

该函数主要是由两部分组成:

  • 使用 Compute Shader 生成纹理 Texture;
  • 将生成好的 Texture 数据传输给 Vertex 和 Pixel 渲染函数进行渲染,这部分跟之前几篇文章渲染流程基本上是一样的,这里就不做重点阐述了。如果还有不清楚的地方,可以参考这个系列文章中的前面几篇文章。

ComputeShader.usf 的源码

image.png

UseComputerShader_RenderThread 函数剖析

image.png

image.png