如何给shader上传UniformBuffer

想要自己上传UniformBuffer到shangder上,但是不知道是否遗漏了什么步骤导致shader编译失败。

UniformBuffer的声明部分:

BEGIN_UNIFORM_BUFFER_STRUCT(FMyUniformStructData, )
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4, ColorOne)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4, ColorTwo)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4, ColorThree)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4, ColorFour)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(uint32, ColorIndex)
END_UNIFORM_BUFFER_STRUCT(FMyUniformStructData)

IMPLEMENT_UNIFORM_BUFFER_STRUCT(FMyUniformStructData, TEXT(“FMyUniform”));

下面是我的shader:

Texture2D MyTexture;
SamplerState MyTextureSampler;

float4 SimpleColor;

void MainVS(
in float4 InPosition : ATTRIBUTE0,
in float2 InUV : ATTRIBUTE1,
out float2 OutUV : TEXCOORD0,
out float4 OutPosition : SV_POSITION
)
{
// screenspace position from vb
OutPosition = InPosition;
OutUV = InUV;

}

void MainPS(
in float2 UV : TEXCOORD0,
out float4 OutColor : SV_Target0
)
{
OutColor = float4(MyTexture.Sample(MyTextureSampler, UV.xy).rgb, 1.0f);
float4 Color = FMyUniform.ColorOne;
OutColor *= Color;
}

编译失败的信息是:

[2018.04.26-02.06.45:274][ 0]LogShaderCompilers: Warning: 1 Shader compiler errors compiling global shaders for platform PCD3D_SM5:
C:/Users/lishuang01/Desktop/ShadingModelTest/Plugins/ShadertestPlugin/Shaders/Private/MyShader.usf(28,20-29): Shader FShaderTestVS, VF None:
error X3004: undeclared identifier ‘FMyUniform’
[2018.04.26-02.06.45:275][ 0]LogShaderCompilers: Error: Errors compiling global shader FShaderTestVS :

[2018.04.26-02.06.45:275][ 0]LogShaderCompilers: Error: /Plugin/ShadertestPlugin/Private/MyShader.usf(28,20-29): error X3004: undeclared identifier ‘FMyUniform’
UE4Editor.exe 已触发了一个断点。

麻烦大神们帮我看看!

我找到原因了,你们不用回答了。

你好 我最近也遇到了相似的问题,但是我是在mobilebasepasspixelshader.usf中加了一个uniform buffer object,导致的。。。请问可能的问题在哪儿?

你之前遇到的问题是因为没有在shader中加common.ush,而导致未定义吗,

you can visit my blog ,Maybe useful : 虚幻4渲染编程专题概述及目录 - 知乎

好家伙,看到大佬了