【问题标题】:Bind buffers to Unreal Engine 4 Customized Compute Shader将缓冲区绑定到 Unreal Engine 4 自定义计算着色器
【发布时间】:2016-05-21 13:27:18
【问题描述】:

我正在开发一个基于 Unreal Engine 4 的项目,我需要在其中实现一个自定义的 directx11 计算着色器。我正在按照这个教程:Unreal HLSL Tutorial 在虚幻引擎中为我的项目编写自定义计算着色器。

我使用以下代码将资源绑定到计算着色器:

InputSurface.Bind(Initializer.ParameterMap, TEXT("InputSurfaceCS"));
OutputSurface.Bind(Initializer.ParameterMap, TEXT("OutputSurface"));

但是,我意识到编译器只能识别 OutputSurface 并且编译器为其分配了资源,但编译器没有为 InputSurfaceCS 资源分配任何资源。

在计算着色器 .usf 文件中,我像这样声明了这些参数:

Texture2D<float> InputSurfaceCS;
RWTexture2D<float> OutputSurface;

以前有人遇到过这个问题吗?或者知道怎么解决?

谢谢, ZH

【问题讨论】:

    标签: graphics gpu directx-11 unreal-engine4 compute-shader


    【解决方案1】:

    我终于解决了这个问题。在虚幻引擎 4 中,它使用 ShaderGraph 来管理所有着色器,并使用 ParameterMap 来管理在着色器中声明的所有资源。如果需要使用着色器并且之前编译过,虚幻引擎4只会读取缓存的着色器文件和相应的着色器参数文件。所以,每次你想绑定一个新的着色器资源(例如 Texture2D、RWStructuredBuffer 等)时,你必须让 ParameterMap 记住你的新着色器资源。您可以将以下代码应用于您自己的着色器声明:

    virtual bool Serialize(FArchive& Ar) override
    {
        bool bShaderHasOutdatedParams = FGlobalShader::Serialize(Ar);
    
        Ar << YourResourceName1 << YourResourceName2 << YourResourceName3 << ......;
    
        return bShaderHasOutdatedParams;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多