/** * AmbientOcclusionEffect - A screen space ambient occlusion implementation. * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved. */ class AmbientOcclusionEffect extends PostProcessEffect native; /** The color that will replace scene color where there is a lot of occlusion. */ var(Color) interp LinearColor OcclusionColor; /** * Power to apply to the calculated occlusion value. * Higher powers result in more contrast, but will need other factors like OcclusionScale to be tweaked as well. */ var(Color) float OcclusionPower ; /** Scale to apply to the calculated occlusion value. */ var(Color) float OcclusionScale ; /** Bias to apply to the calculated occlusion value. */ var(Color) float OcclusionBias ; /** Minimum occlusion value after all other transforms have been applied. */ var(Color) float MinOcclusion; /** SSAO2 is SSAO with quality improvements, it is now the new method so the flag is no longer needed */ var deprecated bool SSAO2; /** SSAO quality improvements, less noise, more detail, no darkening of flat surfaces, no overbright on convex, parameter retweak needed */ var(Occlusion) bool bAngleBasedSSAO; /** Distance to check around each pixel for occluders, in world units. */ var(Occlusion) float OcclusionRadius ; /** Attenuation factor that determines how much to weigh in samples based on distance, larger values result in a faster falloff over distance. */ var deprecated float OcclusionAttenuation ; enum EAmbientOcclusionQuality { AO_High, AO_Medium, AO_Low }; /** * Quality of the ambient occlusion effect. Low quality gives the best performance and is appropriate for gameplay. * Medium quality smooths noise between frames at a slightly higher performance cost. High quality uses extra samples to preserve detail. */ var(Occlusion) EAmbientOcclusionQuality OcclusionQuality; /** * Distance at which to start fading out the occlusion factor, in world units. * This is useful for hiding distant artifacts on skyboxes. */ var(Occlusion) float OcclusionFadeoutMinDistance; /** Distance at which the occlusion factor should be fully faded, in world units. */ var(Occlusion) float OcclusionFadeoutMaxDistance; /** * Distance in front of a pixel that an occluder must be to be considered a different object, in world units. * This threshold is used to identify halo regions around nearby objects, for example a first person weapon. */ var(Halo) float HaloDistanceThreshold; /** * Scale factor to increase HaloDistanceThreshold for distant pixels. * A value of .001 would result in HaloDistanceThreshold being 1 unit larger at a distance of 1000 world units. */ var(Halo) float HaloDistanceScale; /** * Occlusion factor to assign to samples determined to be contributing to a halo. * 0 would result in full occlusion for that sample, increasing values map to quadratically decreasing occlusion values. */ var(Halo) float HaloOcclusion; /** Difference in depth that two pixels must be to be considered an edge, and therefore not blurred across, in world units. */ var(Filter) float EdgeDistanceThreshold; /** * Scale factor to increase EdgeDistanceThreshold for distant pixels. * A value of .001 would result in EdgeDistanceThreshold being 1 unit larger at a distance of 1000 world units. */ var(Filter) float EdgeDistanceScale; /** * Distance in world units which should map to the kernel size in screen space. * This is useful to reduce filter kernel size for distant pixels and keep detail, at the cost of leaving more noise in the result. */ var(Filter) float FilterDistanceScale; /** Size of the blur filter, in pixels. */ var deprecated int FilterSize; /** * Time in which the occlusion history should approximately converge. * Longer times (.5s) allow more smoothing between frames and less noise but history streaking is more noticeable. * 0 means the feature is off (less GPU performance and memory overhead) */ var(History) float HistoryConvergenceTime; /** * Time in which the weight history should approximately converge. */ var float HistoryWeightConvergenceTime; `if(`__TW_GAMEWORKS_HBAO_) /** AO radius in meters */ var(HBAO) float HBAO_Radius; /** To hide low-tessellation artifacts, 0.0~1.0 */ var(HBAO) float HBAO_Bias; /** Scale factor for the detail AO, the greater the darker, 0.0~2.0 */ var(HBAO) float HBAO_DetailAO; /** Scale factor for the coarse AO, the greater the darker, 0.0~2.0 */ var(HBAO) float HBAO_CoarseAO; /** Final AO output is pow(AO, powerExponent) */ var(HBAO) float HBAO_PowerExponent; /** To return white AO for ViewDepths > MaxViewDepth */ var(HBAO) bool HBAO_EnableDepthThreshold; /** Custom view-depth threshold */ var(HBAO) float HBAO_MaxViewDepth; /** The higher, the sharper the AO-to-white transitions */ var(HBAO) float HBAO_Sharpness; /** To blur the AO with an edge-preserving blur */ var(HBAO) bool HBAO_EnableBlur; /** BLUR_RADIUS_2, BLUR_RADIUS_4, or BLUR_RADIUS_8 */ enum EHBAOBlurRadius { HBAO_BLUR_RADIUS_2, HBAO_BLUR_RADIUS_4, HBAO_BLUR_RADIUS_8 }; var(HBAO) EHBAOBlurRadius HBAO_BlurRadius; /** The higher, the more the blur preserves edges, 0.0~16.0 */ var(HBAO) float HBAO_BlurSharpness; `endif 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); /** * @param View - current view * @return TRUE if the effect should be rendered */ virtual UBOOL IsShown(const FSceneView* View) const; virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent); } defaultproperties { bAffectsLightingOnly=TRUE SceneDPG = SDPG_World; OcclusionColor=(R=0.0,G=0.0,B=0.0,A=1.0) OcclusionPower=4.0 OcclusionScale=20.0 OcclusionBias=0 MinOcclusion=.1 OcclusionRadius=25.0 OcclusionQuality=AO_Medium OcclusionFadeoutMinDistance=4000.0 OcclusionFadeoutMaxDistance=4500.0 HaloDistanceThreshold=40.0 HaloDistanceScale=.1 HaloOcclusion=.04 EdgeDistanceThreshold=10.0 EdgeDistanceScale=.003 FilterDistanceScale=10.0 HistoryConvergenceTime=0 HistoryWeightConvergenceTime=.07 bAngleBasedSSAO=FALSE `if(`__TW_GAMEWORKS_HBAO_) HBAO_Radius=1.0 HBAO_Bias=0.1 HBAO_DetailAO=0.0 HBAO_CoarseAO=1.0 HBAO_PowerExponent=2.0 HBAO_EnableDepthThreshold=false HBAO_MaxViewDepth=0.0 HBAO_Sharpness=100.0 HBAO_EnableBlur=true HBAO_BlurRadius=HBAO_BLUR_RADIUS_4 HBAO_BlurSharpness=4.0 `endif }