虚幻4是吧很多shader片段用ufs保存,然后通过材质来组装成一个可以编译的hlsl文件。
/** The view independent uniform shader parameters associated with a view. */
BEGIN_UNIFORM_BUFFER_STRUCT_WITH_CONSTRUCTOR(FFrameUniformShaderParameters, ENGINE_API)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector2D, FieldOfViewWideAngles)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector2D, PrevFieldOfViewWideAngles)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4, ViewRectMin, EShaderPrecisionModifier::Half)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4, ViewSizeAndInvSize)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector4, BufferSizeAndInvSize)
// The exposure scale is just a scalar but needs to be a float4 to workaround a driver bug on IOS.
// After 4.2 we can put the workaround in the cross compiler.
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4, ExposureScale, EShaderPrecisionModifier::Half)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4, DiffuseOverrideParameter, EShaderPrecisionModifier::Half)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4, SpecularOverrideParameter, EShaderPrecisionModifier::Half)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector4, NormalOverrideParameter, EShaderPrecisionModifier::Half)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(FVector2D, RoughnessOverrideParameter, EShaderPrecisionModifier::Half)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float, PrevFrameGameTime)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(float, PrevFrameRealTime)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER_EX(float, OutOfBoundsMask, EShaderPrecisionModifier::Half)
DECLARE_UNIFORM_BUFFER_STRUCT_MEMBER(FVector, WorldCameraMovementSinceLastFrame)
DECLARE_U