using System; 
 | 
  
 | 
namespace UnityEngine.PostProcessing 
 | 
{ 
 | 
    [Serializable] 
 | 
    public class ScreenSpaceReflectionModel : PostProcessingModel 
 | 
    { 
 | 
        public enum SSRResolution 
 | 
        { 
 | 
            High = 0, 
 | 
            Low = 2 
 | 
        } 
 | 
  
 | 
        public enum SSRReflectionBlendType 
 | 
        { 
 | 
            PhysicallyBased, 
 | 
            Additive 
 | 
        } 
 | 
  
 | 
        [Serializable] 
 | 
        public struct IntensitySettings 
 | 
        { 
 | 
            [Tooltip("Nonphysical multiplier for the SSR reflections. 1.0 is physically based.")] 
 | 
            [Range(0.0f, 2.0f)] 
 | 
            public float reflectionMultiplier; 
 | 
  
 | 
            [Tooltip("How far away from the maxDistance to begin fading SSR.")] 
 | 
            [Range(0.0f, 1000.0f)] 
 | 
            public float fadeDistance; 
 | 
  
 | 
            [Tooltip("Amplify Fresnel fade out. Increase if floor reflections look good close to the surface and bad farther 'under' the floor.")] 
 | 
            [Range(0.0f, 1.0f)] 
 | 
            public float fresnelFade; 
 | 
  
 | 
            [Tooltip("Higher values correspond to a faster Fresnel fade as the reflection changes from the grazing angle.")] 
 | 
            [Range(0.1f, 10.0f)] 
 | 
            public float fresnelFadePower; 
 | 
        } 
 | 
  
 | 
        [Serializable] 
 | 
        public struct ReflectionSettings 
 | 
        { 
 | 
            // When enabled, we just add our reflections on top of the existing ones. This is physically incorrect, but several 
 | 
            // popular demos and games have taken this approach, and it does hide some artifacts. 
 | 
            [Tooltip("How the reflections are blended into the render.")] 
 | 
            public SSRReflectionBlendType blendType; 
 | 
  
 | 
            [Tooltip("Half resolution SSRR is much faster, but less accurate.")] 
 | 
            public SSRResolution reflectionQuality; 
 | 
  
 | 
            [Tooltip("Maximum reflection distance in world units.")] 
 | 
            [Range(0.1f, 300.0f)] 
 | 
            public float maxDistance; 
 | 
  
 | 
            /// REFLECTIONS 
 | 
            [Tooltip("Max raytracing length.")] 
 | 
            [Range(16, 1024)] 
 | 
            public int iterationCount; 
 | 
  
 | 
            [Tooltip("Log base 2 of ray tracing coarse step size. Higher traces farther, lower gives better quality silhouettes.")] 
 | 
            [Range(1, 16)] 
 | 
            public int stepSize; 
 | 
  
 | 
            [Tooltip("Typical thickness of columns, walls, furniture, and other objects that reflection rays might pass behind.")] 
 | 
            [Range(0.01f, 10.0f)] 
 | 
            public float widthModifier; 
 | 
  
 | 
            [Tooltip("Blurriness of reflections.")] 
 | 
            [Range(0.1f, 8.0f)] 
 | 
            public float reflectionBlur; 
 | 
  
 | 
            [Tooltip("Disable for a performance gain in scenes where most glossy objects are horizontal, like floors, water, and tables. Leave on for scenes with glossy vertical objects.")] 
 | 
            public bool reflectBackfaces; 
 | 
        } 
 | 
  
 | 
        [Serializable] 
 | 
        public struct ScreenEdgeMask 
 | 
        { 
 | 
            [Tooltip("Higher = fade out SSRR near the edge of the screen so that reflections don't pop under camera motion.")] 
 | 
            [Range(0.0f, 1.0f)] 
 | 
            public float intensity; 
 | 
        } 
 | 
  
 | 
        [Serializable] 
 | 
        public struct Settings 
 | 
        { 
 | 
            public ReflectionSettings reflection; 
 | 
            public IntensitySettings intensity; 
 | 
            public ScreenEdgeMask screenEdgeMask; 
 | 
  
 | 
            public static Settings defaultSettings 
 | 
            { 
 | 
                get 
 | 
                { 
 | 
                    return new Settings 
 | 
                    { 
 | 
                        reflection = new ReflectionSettings 
 | 
                        { 
 | 
                            blendType = SSRReflectionBlendType.PhysicallyBased, 
 | 
                            reflectionQuality = SSRResolution.Low, 
 | 
                            maxDistance = 100f, 
 | 
                            iterationCount = 256, 
 | 
                            stepSize = 3, 
 | 
                            widthModifier = 0.5f, 
 | 
                            reflectionBlur = 1f, 
 | 
                            reflectBackfaces = false 
 | 
                        }, 
 | 
  
 | 
                        intensity = new IntensitySettings 
 | 
                        { 
 | 
                            reflectionMultiplier = 1f, 
 | 
                            fadeDistance = 100f, 
 | 
  
 | 
                            fresnelFade = 1f, 
 | 
                            fresnelFadePower = 1f, 
 | 
                        }, 
 | 
  
 | 
                        screenEdgeMask = new ScreenEdgeMask 
 | 
                        { 
 | 
                            intensity = 0.03f 
 | 
                        } 
 | 
                    }; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
        [SerializeField] 
 | 
        Settings m_Settings = Settings.defaultSettings; 
 | 
        public Settings settings 
 | 
        { 
 | 
            get { return m_Settings; } 
 | 
            set { m_Settings = value; } 
 | 
        } 
 | 
  
 | 
        public override void Reset() 
 | 
        { 
 | 
            m_Settings = Settings.defaultSettings; 
 | 
        } 
 | 
    } 
 | 
} 
 |