123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 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;
- }
- }
- }
|