mixedreality/com.microsoft.mixedreality..../Core/Definitions/SceneSystem/RuntimeRenderSettings.cs

89 lines
4.1 KiB
C#

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using UnityEngine;
using UnityEngine.Rendering;
namespace Microsoft.MixedReality.Toolkit.SceneSystem
{
/// <summary>
/// A struct that mimics the render settings stored in a scene.
/// Used to store, retrieve and interpolate render settings.
/// Omits any editor-only settings, as well as some settings that are seldom used.
/// </summary>
[Serializable]
public struct RuntimeRenderSettings
{
public bool Fog;
public Color FogColor;
public FogMode FogMode;
public float FogDensity;
public float LinearFogStart;
public float LinearFogEnd;
public Color AmbientSkyColor;
public Color AmbientEquatorColor;
public Color AmbientGroundColor;
public Color AmbientLight;
public float AmbientIntensity;
public int AmbientMode;
public Color SubtractiveShadowColor;
public Material SkyboxMaterial;
public DefaultReflectionMode DefaultReflectionMode;
public int DefaultReflectionResolution;
public int ReflectionBounces;
public float ReflectionIntensity;
public Cubemap CustomReflection;
public bool UseRadianceAmbientProbe;
/// <summary>
/// Lerps between two settings
/// </summary>
/// <param name="t">Value from 0 to 1</param>
public static RuntimeRenderSettings Lerp(RuntimeRenderSettings from, RuntimeRenderSettings to, float t)
{
bool notStarted = t <= 0;
to.AmbientEquatorColor = Color.Lerp(from.AmbientEquatorColor, to.AmbientEquatorColor, t);
to.AmbientGroundColor = Color.Lerp(from.AmbientGroundColor, to.AmbientGroundColor, t);
to.AmbientIntensity = Mathf.Lerp(from.AmbientIntensity, to.AmbientIntensity, t);
to.AmbientLight = Color.Lerp(from.AmbientLight, to.AmbientLight, t);
to.AmbientMode = notStarted ? from.AmbientMode : to.AmbientMode;
to.AmbientSkyColor = Color.Lerp(from.AmbientSkyColor, to.AmbientSkyColor, t);
to.CustomReflection = notStarted ? from.CustomReflection : to.CustomReflection;
to.DefaultReflectionMode = notStarted ? from.DefaultReflectionMode : to.DefaultReflectionMode;
to.DefaultReflectionResolution = notStarted ? from.DefaultReflectionResolution : to.DefaultReflectionResolution;
to.Fog = notStarted ? from.Fog : to.Fog;
to.FogColor = Color.Lerp(from.FogColor, to.FogColor, t);
to.FogDensity = Mathf.Lerp(from.FogDensity, to.FogDensity, t);
to.FogMode = notStarted ? from.FogMode : to.FogMode;
to.LinearFogEnd = Mathf.Lerp(from.LinearFogEnd, to.LinearFogEnd, t);
to.LinearFogStart = Mathf.Lerp(from.LinearFogStart, to.LinearFogStart, t);
to.ReflectionBounces = notStarted ? from.ReflectionBounces : to.ReflectionBounces;
to.ReflectionIntensity = Mathf.Lerp(from.ReflectionIntensity, to.ReflectionIntensity, t);
to.SkyboxMaterial = notStarted ? from.SkyboxMaterial : to.SkyboxMaterial;
to.SubtractiveShadowColor = Color.Lerp(from.SubtractiveShadowColor, to.SubtractiveShadowColor, t);
to.UseRadianceAmbientProbe = notStarted ? from.UseRadianceAmbientProbe : to.UseRadianceAmbientProbe;
return to;
}
/// <summary>
/// Sets continuous settings to 'black' without changing any discrete features.
/// </summary>
public static RuntimeRenderSettings Black(RuntimeRenderSettings source)
{
source.AmbientEquatorColor = Color.clear;
source.AmbientGroundColor = Color.clear;
source.AmbientIntensity = 0;
source.AmbientLight = Color.clear;
source.AmbientSkyColor = Color.clear;
source.FogColor = Color.clear;
source.FogDensity = 0;
source.LinearFogEnd = 0;
source.LinearFogStart = 0;
source.ReflectionIntensity = 0;
source.SubtractiveShadowColor = Color.clear;
return source;
}
}
}