/** * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. * * Uber post process effect * */ class UberPostProcessEffect extends DOFBloomMotionBlurEffect native dependson(PostProcessVolume); /** */ var(Scene) vector SceneShadows; /** */ var(Scene) vector SceneHighLights; /** */ var(Scene) vector SceneMidTones; /** */ var(Scene) float SceneDesaturation; /** */ var(Scene) vector SceneColorize; /** Allows to specify the tone mapper function which maps HDR colors into the LDR color range. */ var(Tonemapper) enum ETonemapperType { Tonemapper_Off, Tonemapper_Filmic, Tonemapper_Customizable, } TonemapperType; /** * This tonemapper property allows to specify the HDR brightness value that is mapping to the maximum LDR value. Brighter values will be * mapped to white (good values are in the range 2 to 16). Only affects the "Customizable" tonemapper. */ var(Tonemapper) float TonemapperRange; /** * This tonemapper property allows to adjust the mapping of the darker colors (tonemapper toe). * As the adjustment is independent per color channel it can introduce slight shifts color and saturation changes. * Only affects the "Customizable" tonemapper. * 0=linear .. 1=crushed darks (more filmic) */ var(Tonemapper) float TonemapperToeFactor; /** * Scale the input for the tonemapper. Only used if a tonemapper is specified. * >=0, 0:black, 1(default), >1 brighter */ var(Tonemapper) float TonemapperScale; /** * The radius of the soft edge for motion blur. A value bigger than 0 enables the soft edge motion blur. The method improves motion blur * by blurring the silhuette of moving objects. The method works in screen space. Therefore the performance of the method only depends * on screen size, not on the object/vertex/triangle count. */ var(MotionBlur) float MotionBlurSoftEdgeKernelSize; /** Whether the image grain (noise) is enabled, to fight 8 bit quantization artifacts and to simulate film grain (scaled by SceneImageGrainScale) */ var(Scene) bool bEnableImageGrain; /** Image grain scale, only affects the darks, >=0, 0:none, 1(strong) should be less than 1 */ var(Scene) float SceneImageGrainScale; /** * To adjust the bloom to get an extra inner, more sharp glow. * 0=off * If this feature is used, it might costs additional performance depending on the bloom radius. * However in some cases it might get faster as the bigger radius is done in lower resolution. * The actual weight is computed as the ratio between all bloom weights. */ var(Bloom, Shape) float BloomWeightSmall; /** * To adjust the bloom shape to reduce the extra inner and outer weight. * Should be bigger than 0. * However in some cases it might get faster as the bigger radius is done in lower resolution. * The actual weight is computed as the ratio between all bloom weights. */ var(Bloom, Shape) float BloomWeightMedium; /** * To adjust the bloom to get an extra outer, more wide spread glow. * 0=off * If this feature is used, it might costs additional performance depending on the bloom radius. * However in some cases it might get faster as the bigger radius is done in lower resolution. * The actual weight is computed as the ratio between all bloom weights. */ var(Bloom, Shape) float BloomWeightLarge; /** * Scales the small kernel size. A good number is in the range from 0.1 to 0.5. * This property is only used if BloomWeightSmall specifies some weight. */ var(Bloom, Shape) float BloomSizeScaleSmall; /** * Scales the medium kernel size. A good number is in the range from 0.5 to 1.5. */ var(Bloom, Shape) float BloomSizeScaleMedium; /** * Scales the large kernel size. A good number is in the range from 2 to 4. * This property is only used if BloomWeightLarge specifies some weight. */ var(Bloom, Shape) float BloomSizeScaleLarge; /** affects BlurKernelSize, the attribute is scaled depending on the view size */ var(PostProcessEffect) bool bScaleEffectsWithViewSize; /** Only used if PostProcessAAType is MLAA */ var(PostprocessAntiAliasing) float EdgeDetectionThreshold; /** Allows to specify the postprocess antialiasing method (affects quality and performace). */ var(PostprocessAntiAliasing) enum EPostProcessAAType { PostProcessAA_Off, PostProcessAA_FXAA0, // NVIDIA 1 pass LQ PS3 and Xbox360 specific optimizations PostProcessAA_FXAA1, // NVIDIA 1 pass LQ PostProcessAA_FXAA2, // NVIDIA 1 pass LQ PostProcessAA_FXAA3, // NVIDIA 1 pass HQ PostProcessAA_FXAA4, // NVIDIA 1 pass HQ PostProcessAA_FXAA5, // NVIDIA 1 pass HQ PostProcessAA_MLAA, // AMD 3 pass, requires extra render targets } PostProcessAAType; /** LUTBlender parameters used last frame. */ var const native transient LUTBlender PreviousLUTBlender; var deprecated bool bEnableHDRTonemapper; var deprecated float SceneHDRTonemapperScale; cpptext { // UPostProcessEffect interface /** * Creates a proxy to represent the render info for a post process effect * @param WorldSettings - The world's post process settings for the view. * @return The proxy object. */ virtual class FPostProcessSceneProxy* CreateSceneProxy(const FPostProcessSettings* WorldSettings); // UObject interface /** * Called after this instance has been serialized. UberPostProcessEffect should only * ever exists in the SDPG_PostProcess scene */ virtual void PostLoad(); /** * Called when properties change. UberPostProcessEffect should only * ever exists in the SDPG_PostProcess scene */ virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent); /** * Tells the SceneRenderer is this effect includes the uber post process. */ virtual UBOOL IncludesUberpostprocess() const { return TRUE; } /** * This allows to print a warning when the effect is used. */ virtual void OnPostProcessWarning(FString& OutWarning) const { // we don't want to output any warning but derive from a effect that might do that. } #ifdef __TW /** * @param View - current view * @return TRUE if the effect should be rendered */ virtual UBOOL IsShown(const FSceneView* View) const { // The UberPostProcessEffect needs to be rendered even if bloom and // depth of field are disabled since it also contains desaturation, // tone mapping, etc. return UPostProcessEffect::IsShown(View); } #endif } // // The UberPostProcessingEffect performs DOF, Bloom, Material (Sharpen/Desaturate) and Tone Mapping // // For the DOF and Bloom parameters see DOFAndBloomEffect.uc. The Material parameters are used as // follows: // // Color0 = ((InputColor - SceneShadows) / SceneHighLights) ^ SceneMidTones // Color1 = Luminance(Color0) // // OutputColor = Color0 * (1 - SceneDesaturation) + Color1 * SceneDesaturation // OutputColor *= Colorize defaultproperties { SceneShadows=(X=0.0,Y=0.0,Z=-0.003); SceneHighLights=(X=0.8,Y=0.8,Z=0.8); SceneMidTones=(X=1.3,Y=1.3,Z=1.3); SceneDesaturation=0.4; SceneColorize=(X=1,Y=1,Z=1); bEnableHDRTonemapper=FALSE; bEnableImageGrain=FALSE; SceneHDRTonemapperScale=1.0; TonemapperScale=1.0; SceneImageGrainScale=0.02; TonemapperRange=8; TonemapperToeFactor=1; BloomWeightSmall=0 BloomWeightMedium=1 BloomWeightLarge=0 BloomSizeScaleSmall=0.25 BloomSizeScaleMedium=1 BloomSizeScaleLarge=3 // for backwards compatibility we keep it off by default bScaleEffectsWithViewSize=false EdgeDetectionThreshold=12.0 PostProcessAAType=PostProcessAA_Off }