您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
140 行
4.8 KiB
140 行
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;
|
|
}
|
|
}
|
|
}
|