2016-02-10 3 views
4

Я работаю над проектом на базе Unreal Engine 4, где мне нужно реализовать настраиваемый шейдер Directx11. Я следую этому руководству: Unreal HLSL Tutorial, чтобы написать настраиваемый шейдер вычислений в Unreal Engine для моего проекта.Bind buffers to Unreal Engine 4 Customized Compute Shader

Я использовал следующие коды, чтобы связать ресурс вычислительного шейдере:

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

Однако я понял, что только OutputSurface распознается компилятором и компилятор назначенного ресурса к нему, но Didn компилятора Не назначайте ресурс ресурсу InputSurfaceCS.

В файле .usf Compute Shader, я decalared эти параметры, как это:

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

ли кто-нибудь, прежде чем столкнуться с этой проблемой? или знаете, как его решить?

Спасибо, ZH

ответ

4

я, наконец, решить эту проблему. В Unreal Engine 4 он использует ShaderGraph для управления всеми шейдерами и использует ParameterMap для управления всеми ресурсами, которые были объявлены в шейдерах. Если требуется использовать шейдер, и он компилируется ранее, Unreal Engine 4 будет просто читать файл кэшированного шейдера и соответствующий файл параметров шейдера. Таким образом, каждый раз, когда вы хотите привязать новый шейдерный ресурс (например, Texture2D, RWStructuredBuffer и т. Д.), Вы должны сделать ParameterMap запоминать новые ресурсы шейдера. Вы можете применить следующий код к своей собственной заявке на шейдер:

virtual bool Serialize(FArchive& Ar) override 
{ 
    bool bShaderHasOutdatedParams = FGlobalShader::Serialize(Ar); 

    Ar << YourResourceName1 << YourResourceName2 << YourResourceName3 << ......; 

    return bShaderHasOutdatedParams; 
} 
Смежные вопросы