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.
91 lines
4.6 KiB
91 lines
4.6 KiB
using UnityEditor.Rendering.HighDefinition;
|
|
|
|
using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties;
|
|
|
|
namespace UnityEngine.Rendering.HighDefinition
|
|
{
|
|
internal static class FogVolumeAPI
|
|
{
|
|
internal static readonly string k_BlendModeProperty = "_FogVolumeBlendMode";
|
|
internal static readonly string k_SrcColorBlendProperty = "_FogVolumeSrcColorBlend";
|
|
internal static readonly string k_DstColorBlendProperty = "_FogVolumeDstColorBlend";
|
|
internal static readonly string k_SrcAlphaBlendProperty = "_FogVolumeSrcAlphaBlend";
|
|
internal static readonly string k_DstAlphaBlendProperty = "_FogVolumeDstAlphaBlend";
|
|
internal static readonly string k_ColorBlendOpProperty = "_FogVolumeColorBlendOp";
|
|
internal static readonly string k_AlphaBlendOpProperty = "_FogVolumeAlphaBlendOp";
|
|
|
|
internal static readonly string k_SingleScatteringAlbedoProperty = "_FogVolumeSingleScatteringAlbedo";
|
|
internal static readonly string k_FogDistanceProperty = "_FogVolumeFogDistanceProperty";
|
|
|
|
internal static void ComputeBlendParameters(LocalVolumetricFogBlendingMode mode, out Rendering.BlendMode srcColorBlend,
|
|
out Rendering.BlendMode srcAlphaBlend, out Rendering.BlendMode dstColorBlend, out Rendering.BlendMode dstAlphaBlend,
|
|
out BlendOp colorBlendOp, out BlendOp alphaBlendOp)
|
|
{
|
|
colorBlendOp = BlendOp.Add;
|
|
alphaBlendOp = BlendOp.Add;
|
|
|
|
switch (mode)
|
|
{
|
|
default:
|
|
case LocalVolumetricFogBlendingMode.Additive:
|
|
srcColorBlend = Rendering.BlendMode.One;
|
|
dstColorBlend = Rendering.BlendMode.One;
|
|
srcAlphaBlend = Rendering.BlendMode.One;
|
|
dstAlphaBlend = Rendering.BlendMode.One;
|
|
break;
|
|
case LocalVolumetricFogBlendingMode.Multiply:
|
|
srcColorBlend = Rendering.BlendMode.DstColor;
|
|
dstColorBlend = Rendering.BlendMode.Zero;
|
|
srcAlphaBlend = Rendering.BlendMode.DstAlpha;
|
|
dstAlphaBlend = Rendering.BlendMode.Zero;
|
|
break;
|
|
case LocalVolumetricFogBlendingMode.Overwrite:
|
|
srcColorBlend = Rendering.BlendMode.One;
|
|
dstColorBlend = Rendering.BlendMode.Zero;
|
|
srcAlphaBlend = Rendering.BlendMode.One;
|
|
dstAlphaBlend = Rendering.BlendMode.Zero;
|
|
break;
|
|
case LocalVolumetricFogBlendingMode.Max:
|
|
srcColorBlend = Rendering.BlendMode.One;
|
|
dstColorBlend = Rendering.BlendMode.One;
|
|
srcAlphaBlend = Rendering.BlendMode.One;
|
|
dstAlphaBlend = Rendering.BlendMode.One;
|
|
alphaBlendOp = BlendOp.Max;
|
|
colorBlendOp = BlendOp.Max;
|
|
break;
|
|
case LocalVolumetricFogBlendingMode.Min:
|
|
srcColorBlend = Rendering.BlendMode.One;
|
|
dstColorBlend = Rendering.BlendMode.One;
|
|
srcAlphaBlend = Rendering.BlendMode.One;
|
|
dstAlphaBlend = Rendering.BlendMode.One;
|
|
alphaBlendOp = BlendOp.Min;
|
|
colorBlendOp = BlendOp.Min;
|
|
break;
|
|
}
|
|
}
|
|
|
|
internal static void SetupFogVolumeKeywordsAndProperties(Material material)
|
|
{
|
|
if (material.HasProperty(k_BlendModeProperty))
|
|
{
|
|
LocalVolumetricFogBlendingMode mode = (LocalVolumetricFogBlendingMode)material.GetFloat(k_BlendModeProperty);
|
|
SetupFogVolumeBlendMode(material, mode);
|
|
}
|
|
}
|
|
|
|
internal static int GetPassIndexFromBlendingMode(LocalVolumetricFogBlendingMode mode) => (int)mode;
|
|
|
|
internal static void SetupFogVolumeBlendMode(Material material, LocalVolumetricFogBlendingMode mode)
|
|
{
|
|
ComputeBlendParameters(mode, out var srcColorBlend, out var srcAlphaBlend, out var dstColorBlend, out var dstAlphaBlend, out var colorBlendOp, out var alphaBlendOp);
|
|
|
|
material.SetFloat(k_SrcColorBlendProperty, (float)srcColorBlend);
|
|
material.SetFloat(k_DstColorBlendProperty, (float)dstColorBlend);
|
|
material.SetFloat(k_SrcAlphaBlendProperty, (float)srcAlphaBlend);
|
|
material.SetFloat(k_DstAlphaBlendProperty, (float)dstAlphaBlend);
|
|
material.SetFloat(k_ColorBlendOpProperty, (float)colorBlendOp);
|
|
material.SetFloat(k_AlphaBlendOpProperty, (float)alphaBlendOp);
|
|
material.SetFloat(k_BlendModeProperty, (float)mode);
|
|
}
|
|
}
|
|
}
|