Sometimes you need more advanced functionality to achieve a desired look, and a custom shader pass might help you.
In Unreal Engine 4, global shaders are shaders that can be used from the C++ side to render post-processing effects, dispatch compute shaders, clear the screen, etc. Sometimes you need more advanced functionality to achieve a desired look, and a custom shader pass might help you. Epic Games has shared a step-by-step guide by Rolando Caloca Olivares to doing that. Let’s check it out.
Art by Michael Gerard
Unreal Shader Files and How To Use Them
UE4 reads .usf files (Unreal Shader Files) from the Engine/Shaders folder. Any new shaders need their source files placed here. As of 4.17, shaders can also be read from a plugin (Plugin/Shaders). You should enable r.ShaderDevelopmentMode=1 in your ConsoleVariables.ini file for ease of development. Check out the documentation for more information.
Start by adding a new .usf file in your Engine/Shaders folder and calling it MyTest.usf. Then add a simple pass-through Vertex Shader and a Pixel Shader that returns a custom color:
// MyTest.usf // Simple pass-through vertex shader void MainVS( in float4 InPosition : ATTRIBUTE0, out float4 Output : SV_POSITION ) { Output = InPosition; } // Simple solid color pixel shader float4 MyColor; float4 MainPS() : SV_Target0 { return MyColor; }
Now, in order to get UE4 to pick up the shader and start compiling it, you need to declare a C++ class. Start with the Vertex Shader:
class FMyTestVS : public FGlobalShader
{
DECLARE_EXPORTED_SHADER_TYPE(FMyTestVS, Global, /*MYMODULE_API*/);
FMyTestVS()
{
}
FMyTestVS(const ShaderMetaType::CompiledShaderInitializerType& Initializer) : FGlobalShader(Initializer)
{
}
static bool ShouldCache(EShaderPlatform Platform)
{
return true;
}
};