You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
4.8 KiB
140 lines
4.8 KiB
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; |
|
} |
|
} |
|
}
|
|
|