修改配置

修改 LoadingPhase

打开你的 .uproject(或 .uplugin)文件,将 Modules 的 "LoadingPhase" 改为 "PostConfigInit"

添加依赖

  1. /Source/<ProjectName>/<ProjectName>.Build.cs中的PublicDependencyModuleNames添加:
    • RenderCore
    • Renderer
    • RHI
  2. 关闭IDE,右键<ProjectName>.uproject,执行Generate Visual Studio project files

创建 USF

在对应位置创建 .usf 文件并写入 HLSL 代码。 注意需要包含#include "/Engine/Public/Platform.ush"

在C++中是声明并关联

  1. 引入必要的头文件
CPP
#include "CoreMinimal.h"
#include "GlobalShader.h"
#include "ShaderParameterStruct.h"
点击展开查看更多
  1. 声明 Shader Parameter Struct,在 .h 中,
CPP
BEGIN_SHADER_PARAMETER_STRUCT(FMyTestShaderParameters, )
	// 各种参数
	SHADER_PARAMETER...
END_SHADER_PARAMETER_STRUCT()
点击展开查看更多

更多信息

  1. 声明 C++ 类,在 .h 中,
HLSL
class FMyTestShaderPS : public FGlobalShader
{
    DECLARE_GLOBAL_SHADER(FMyTestShaderPS);
    SHADER_USE_PARAMETER_STRUCT(FMyTestShaderPS, FGlobalShader);

    using FParameters = FMyTestShaderParameters; // 上面声明的Shader Parameter Struct
};
点击展开查看更多
  1. C++类关联 USF,在 .cpp 中,
CPP
IMPLEMENT_GLOBAL_SHADER(
    FMyTestShaderPS,
    "USF 文件路径",
    "函数名", // MainVS、MainPS、MainCS等
    SF_Pixel
);
点击展开查看更多

使用 RDG 渲染

  1. 获取 Shader 实例
CPP
TShaderMapRef<FMyTestShaderPS> MyTestShader(GetGlobalShaderMap(GMaxRHIFeatureLevel));
点击展开查看更多
  1. 分配并填充Shader Parameter Struct
CPP
// 分配
FMyTestShaderParameters* PassParameters = GraphBuilder.AllocParameters<FMyTestShaderParameters>();
// 填充
PassParameters->XXX = ...
点击展开查看更多

参考

  1. 将 Pass 添加到 RDG 中
CPP
// 全屏像素着色器(用于后处理)
FPixelShaderUtils::AddFullscreenPass(
    GraphBuilder,
    GetGlobalShaderMap(GMaxRHIFeatureLevel),
    FRDGEventName(TEXT("MyTestShaderPass")), // 在 GPU 抓帧工具中显示的名字
    MyTestShader,
    PassParameters,
    FIntRect(FIntPoint::ZeroValue, OutputTexture->Desc.Extent) // 渲染区域(全屏)
);
// 计算着色器 Compute Shader
FComputeShaderUtils::AddPass(
	GraphBuilder,
	FRDGEventName(TEXT("MyTestShaderPass")), // 在 GPU 抓帧工具中显示的名字
	MyTestShader,
	PassParameters,
	GroupCount // 线程组的数量(FIntVector类型)
);
点击展开查看更多

版权声明

作者: Cheyne Xie

链接: https://chaim.eu.org/posts/decc2eab/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键