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