687 lines
38 KiB
C#
687 lines
38 KiB
C#
using UnityEditor.Rendering.TestFramework;
|
|
using NUnit.Framework;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace UnityEngine.Rendering.HighDefinition.Tests
|
|
{
|
|
class FrameSettingsTests
|
|
{
|
|
Object m_ToClean;
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
try
|
|
{
|
|
if (m_ToClean != null)
|
|
CoreUtils.Destroy(m_ToClean);
|
|
FrameSettingsHistory.containers?.Clear();
|
|
}
|
|
catch {}
|
|
}
|
|
|
|
[Test]
|
|
public void NoDoubleBitIndex()
|
|
{
|
|
var values = Enum.GetValues(typeof(FrameSettingsField));
|
|
var singleValues = (values as IEnumerable<int>).Distinct();
|
|
|
|
#pragma warning disable 0612 // Type or member is obsolete
|
|
var excluded = new List<FrameSettingsField> { FrameSettingsField.RoughRefraction };
|
|
#pragma warning restore 0612 // Type or member is obsolete
|
|
|
|
//gathering helpful debug info
|
|
var messageDuplicates = new StringBuilder();
|
|
if (values.Length != singleValues.Count())
|
|
{
|
|
var names = Enum.GetNames(typeof(FrameSettingsField));
|
|
for (int i = 0; i < values.Length - 1; ++i)
|
|
{
|
|
var a = (int)values.GetValue(i);
|
|
var b = (int)values.GetValue(i + 1);
|
|
if (a == b && !excluded.Contains((FrameSettingsField)a))
|
|
{
|
|
messageDuplicates.AppendFormat("{{ {0}: {1}, {2}", (int)values.GetValue(i), names[i], names[i + 1]);
|
|
++i;
|
|
while (values.GetValue(i) == values.GetValue(i + 1))
|
|
{
|
|
if (values.GetValue(i) == values.GetValue(i + 1))
|
|
{
|
|
messageDuplicates.AppendFormat(", {0}", names[i + 1]);
|
|
++i;
|
|
}
|
|
}
|
|
messageDuplicates.Append(" }, ");
|
|
}
|
|
}
|
|
}
|
|
|
|
FrameSettingsOverrideMask fsm = default;
|
|
StringBuilder availables = new StringBuilder();
|
|
for (int i = 0; i < fsm.mask.capacity; ++i)
|
|
{
|
|
if (!singleValues.Contains(i))
|
|
availables.AppendFormat("{0} ", i);
|
|
}
|
|
Debug.Log($"Available bit in FrameSettings: {availables}");
|
|
// Weirdly if we pass directly the String.Format statement, the assert.Equal function generates an exception so we create it here.
|
|
var errorMessage = String.Format("Double bit index found: {0}\nNumber of bit index against number of distinct bit index:", messageDuplicates.ToString());
|
|
Assert.AreEqual(values.Length - excluded.Count, singleValues.Count(), errorMessage);
|
|
}
|
|
|
|
// deactivate this test for template package making issue
|
|
//[Test]
|
|
public void FrameSettingsAggregation()
|
|
{
|
|
for (int i = 0; i < 10; ++i)
|
|
{
|
|
//init
|
|
FrameSettings fs = default;
|
|
FrameSettingsOverrideMask fso = default;
|
|
FrameSettingsRenderType defaultFSType = RandomUtilities.RandomEnumValue<FrameSettingsRenderType>(i);
|
|
FrameSettings defaultFS;
|
|
FrameSettings result = FrameSettings.NewDefaultCamera();
|
|
FrameSettings tester = default;
|
|
RenderPipelineSettings supportedFeatures = new RenderPipelineSettings();
|
|
switch (defaultFSType)
|
|
{
|
|
case FrameSettingsRenderType.Camera:
|
|
defaultFS = FrameSettings.NewDefaultCamera();
|
|
break;
|
|
case FrameSettingsRenderType.CustomOrBakedReflection:
|
|
defaultFS = FrameSettings.NewDefaultCustomOrBakeReflectionProbe();
|
|
break;
|
|
case FrameSettingsRenderType.RealtimeReflection:
|
|
defaultFS = FrameSettings.NewDefaultRealtimeReflectionProbe();
|
|
break;
|
|
default:
|
|
throw new ArgumentException("Unknown FrameSettingsRenderType");
|
|
}
|
|
|
|
//change randomly override values
|
|
for (int j = 0; j < 10; ++j)
|
|
{
|
|
FrameSettingsField field = RandomUtilities.RandomEnumValue<FrameSettingsField>((i + 0.5f) * (j + 0.3f));
|
|
fs.SetEnabled(field, RandomUtilities.RandomBool((i + 1) * j));
|
|
fso.mask[(uint)field] = true;
|
|
}
|
|
|
|
//create and init gameobjects
|
|
var go = new GameObject("TestObject");
|
|
m_ToClean = go;
|
|
var cam = go.AddComponent<Camera>();
|
|
|
|
var add = cam.GetComponent<HDAdditionalCameraData>() ?? cam.gameObject.AddComponent<HDAdditionalCameraData>();
|
|
Assert.True(add != null && !add.Equals(null));
|
|
|
|
add.renderingPathCustomFrameSettings = fs;
|
|
add.renderingPathCustomFrameSettingsOverrideMask = fso;
|
|
add.defaultFrameSettings = defaultFSType;
|
|
add.customRenderingSettings = true;
|
|
|
|
//gather data two different ways
|
|
FrameSettings.AggregateFrameSettings(ref result, cam, add, ref defaultFS, supportedFeatures);
|
|
|
|
foreach (FrameSettingsField field in Enum.GetValues(typeof(FrameSettingsField)))
|
|
{
|
|
tester.SetEnabled(field, fso.mask[(uint)field] ? fs.IsEnabled(field) : defaultFS.IsEnabled(field));
|
|
}
|
|
tester.lodBias = result.lodBias;
|
|
tester.lodBiasMode = result.lodBiasMode;
|
|
tester.maximumLODLevel = result.maximumLODLevel;
|
|
tester.maximumLODLevelMode = result.maximumLODLevelMode;
|
|
FrameSettings.Sanitize(ref tester, cam, supportedFeatures);
|
|
|
|
//test
|
|
Assert.AreEqual(result, tester);
|
|
|
|
Object.DestroyImmediate(go);
|
|
}
|
|
}
|
|
|
|
// deactivate this test for template package making issue
|
|
//[Test]
|
|
public void FrameSettingsHistoryAggregation()
|
|
{
|
|
for (int i = 0; i < 10; ++i)
|
|
{
|
|
//init
|
|
FrameSettings fs = default;
|
|
FrameSettingsOverrideMask fso = default;
|
|
FrameSettingsRenderType defaultFSType = RandomUtilities.RandomEnumValue<FrameSettingsRenderType>(i);
|
|
FrameSettings defaultFS;
|
|
FrameSettings result = FrameSettings.NewDefaultCamera();
|
|
FrameSettings tester = default;
|
|
RenderPipelineSettings supportedFeatures = new RenderPipelineSettings();
|
|
switch (defaultFSType)
|
|
{
|
|
case FrameSettingsRenderType.Camera:
|
|
defaultFS = FrameSettings.NewDefaultCamera();
|
|
break;
|
|
case FrameSettingsRenderType.CustomOrBakedReflection:
|
|
defaultFS = FrameSettings.NewDefaultCustomOrBakeReflectionProbe();
|
|
break;
|
|
case FrameSettingsRenderType.RealtimeReflection:
|
|
defaultFS = FrameSettings.NewDefaultRealtimeReflectionProbe();
|
|
break;
|
|
default:
|
|
throw new ArgumentException("Unknown FrameSettingsRenderType");
|
|
}
|
|
|
|
//change randomly override values
|
|
for (int j = 0; j < 10; ++j)
|
|
{
|
|
FrameSettingsField field = RandomUtilities.RandomEnumValue<FrameSettingsField>((i + 0.5f) * (j + 0.3f));
|
|
fs.SetEnabled(field, RandomUtilities.RandomBool((i + 1) * j));
|
|
fso.mask[(uint)field] = true;
|
|
}
|
|
|
|
//create and init gameobjects
|
|
var go = new GameObject("TestObject");
|
|
m_ToClean = go;
|
|
var cam = go.AddComponent<Camera>();
|
|
|
|
var add = cam.GetComponent<HDAdditionalCameraData>() ?? cam.gameObject.AddComponent<HDAdditionalCameraData>();
|
|
Assert.True(add != null && !add.Equals(null));
|
|
|
|
add.renderingPathCustomFrameSettings = fs;
|
|
add.renderingPathCustomFrameSettingsOverrideMask = fso;
|
|
add.defaultFrameSettings = defaultFSType;
|
|
add.customRenderingSettings = true;
|
|
|
|
//gather simulated
|
|
foreach (FrameSettingsField field in Enum.GetValues(typeof(FrameSettingsField)))
|
|
{
|
|
tester.SetEnabled(field, fso.mask[(uint)field] ? fs.IsEnabled(field) : defaultFS.IsEnabled(field));
|
|
}
|
|
|
|
//simulate debugmenu changes
|
|
for (int j = 0; j < 10; ++j)
|
|
{
|
|
FrameSettingsField field = RandomUtilities.RandomEnumValue<FrameSettingsField>((i + 0.5f) * (j + 0.3f));
|
|
var fshc = FrameSettingsHistory.containers.Where(c => c == add as IFrameSettingsHistoryContainer).First();
|
|
bool debugValue = RandomUtilities.RandomBool((i + 1) * j);
|
|
|
|
//simulate on both
|
|
fshc.frameSettingsHistory.debug.SetEnabled(field, debugValue);
|
|
tester.SetEnabled(field, debugValue);
|
|
}
|
|
|
|
FrameSettings.Sanitize(ref tester, cam, supportedFeatures);
|
|
|
|
//gather computed
|
|
FrameSettingsHistory.AggregateFrameSettings(ref result, cam, add, ref defaultFS, supportedFeatures);
|
|
|
|
//non bit non tested
|
|
tester.lodBias = result.lodBias;
|
|
tester.lodBiasMode = result.lodBiasMode;
|
|
tester.maximumLODLevel = result.maximumLODLevel;
|
|
tester.maximumLODLevelMode = result.maximumLODLevelMode;
|
|
|
|
//test
|
|
result = FrameSettingsHistory.containers.Where(c => c == add as IFrameSettingsHistoryContainer).First().frameSettingsHistory.debug;
|
|
Debug.Log($"different {result} {tester}");
|
|
Assert.AreEqual(result, tester);
|
|
|
|
Object.DestroyImmediate(go);
|
|
}
|
|
}
|
|
|
|
public enum LegacyLitShaderMode
|
|
{
|
|
Forward,
|
|
Deferred
|
|
}
|
|
|
|
public enum LegacyLightLoopSettingsOverrides
|
|
{
|
|
FptlForForwardOpaque = 1 << 0,
|
|
BigTilePrepass = 1 << 1,
|
|
ComputeLightEvaluation = 1 << 2,
|
|
ComputeLightVariants = 1 << 3,
|
|
ComputeMaterialVariants = 1 << 4,
|
|
TileAndCluster = 1 << 5,
|
|
}
|
|
|
|
public enum LegacyFrameSettingsOverrides
|
|
{
|
|
//lighting settings
|
|
Shadow = 1 << 0,
|
|
ContactShadow = 1 << 1,
|
|
ShadowMask = 1 << 2,
|
|
SSR = 1 << 3,
|
|
SSAO = 1 << 4,
|
|
SubsurfaceScattering = 1 << 5,
|
|
Transmission = 1 << 6,
|
|
AtmosphericScaterring = 1 << 7,
|
|
Volumetrics = 1 << 8,
|
|
ReprojectionForVolumetrics = 1 << 9,
|
|
LightLayers = 1 << 10,
|
|
MSAA = 1 << 11,
|
|
ExposureControl = 1 << 12,
|
|
|
|
//rendering pass
|
|
TransparentPrepass = 1 << 13,
|
|
TransparentPostpass = 1 << 14,
|
|
MotionVectors = 1 << 15,
|
|
ObjectMotionVectors = 1 << 16,
|
|
Decals = 1 << 17,
|
|
RoughRefraction = 1 << 18,
|
|
Distortion = 1 << 19,
|
|
Postprocess = 1 << 20,
|
|
|
|
//rendering settings
|
|
ShaderLitMode = 1 << 21,
|
|
DepthPrepassWithDeferredRendering = 1 << 22,
|
|
OpaqueObjects = 1 << 24,
|
|
TransparentObjects = 1 << 25,
|
|
|
|
// Async settings
|
|
AsyncCompute = 1 << 23,
|
|
LightListAsync = 1 << 27,
|
|
SSRAsync = 1 << 28,
|
|
SSAOAsync = 1 << 29,
|
|
ContactShadowsAsync = 1 << 30,
|
|
VolumeVoxelizationsAsync = 1 << 31,
|
|
}
|
|
|
|
public class LegacyLightLoopSettings
|
|
{
|
|
public LegacyLightLoopSettingsOverrides overrides;
|
|
public bool enableDeferredTileAndCluster = false;
|
|
public bool enableComputeLightEvaluation = false;
|
|
public bool enableComputeLightVariants = false;
|
|
public bool enableComputeMaterialVariants = false;
|
|
public bool enableFptlForForwardOpaque = false;
|
|
public bool enableBigTilePrepass = false;
|
|
public bool isFptlEnabled = false;
|
|
}
|
|
|
|
public class LegacyFrameSettings
|
|
{
|
|
public LegacyFrameSettingsOverrides overrides;
|
|
|
|
public bool enableShadow = false;
|
|
public bool enableContactShadows = false;
|
|
public bool enableShadowMask = false;
|
|
public bool enableSSR = false;
|
|
public bool enableSSAO = false;
|
|
public bool enableSubsurfaceScattering = false;
|
|
public bool enableTransmission = false;
|
|
public bool enableAtmosphericScattering = false;
|
|
public bool enableVolumetrics = false;
|
|
public bool enableReprojectionForVolumetrics = false;
|
|
public bool enableLightLayers = false;
|
|
public bool enableExposureControl = false;
|
|
|
|
public float diffuseGlobalDimmer = 1.0f;
|
|
public float specularGlobalDimmer = 1.0f;
|
|
|
|
public LegacyLitShaderMode shaderLitMode;
|
|
public bool enableDepthPrepassWithDeferredRendering = false;
|
|
|
|
public bool enableTransparentPrepass = false;
|
|
public bool enableMotionVectors = false; // Enable/disable whole motion vectors pass (Camera + Object).
|
|
public bool enableObjectMotionVectors = false;
|
|
public bool enableDecals = false;
|
|
public bool enableRoughRefraction = false; // Depends on DepthPyramid - If not enable, just do a copy of the scene color (?) - how to disable refraction ?
|
|
public bool enableTransparentPostpass = false;
|
|
public bool enableDistortion = false;
|
|
public bool enablePostprocess = false;
|
|
|
|
public bool enableOpaqueObjects = false;
|
|
public bool enableTransparentObjects = false;
|
|
|
|
public bool enableMSAA = false;
|
|
|
|
public bool enableAsyncCompute = false;
|
|
public bool runLightListAsync = false;
|
|
public bool runSSRAsync = false;
|
|
public bool runSSAOAsync = false;
|
|
public bool runContactShadowsAsync = false;
|
|
public bool runVolumeVoxelizationAsync = false;
|
|
|
|
public LegacyLightLoopSettings lightLoopSettings;
|
|
}
|
|
|
|
static object[] s_LegacyFrameSettingsDatas =
|
|
{
|
|
new LegacyFrameSettings
|
|
{
|
|
overrides = LegacyFrameSettingsOverrides.SSR | LegacyFrameSettingsOverrides.MSAA | LegacyFrameSettingsOverrides.ShaderLitMode,
|
|
enableSSR = true,
|
|
enableMSAA = true,
|
|
shaderLitMode = LegacyLitShaderMode.Deferred,
|
|
lightLoopSettings = new LegacyLightLoopSettings()
|
|
},
|
|
new LegacyFrameSettings
|
|
{
|
|
overrides = LegacyFrameSettingsOverrides.ObjectMotionVectors | LegacyFrameSettingsOverrides.OpaqueObjects | LegacyFrameSettingsOverrides.ShaderLitMode,
|
|
enableOpaqueObjects = false,
|
|
enableMSAA = true,
|
|
enableMotionVectors = true,
|
|
shaderLitMode = LegacyLitShaderMode.Forward,
|
|
lightLoopSettings = new LegacyLightLoopSettings()
|
|
},
|
|
new LegacyFrameSettings
|
|
{
|
|
overrides = LegacyFrameSettingsOverrides.Postprocess | LegacyFrameSettingsOverrides.Shadow | LegacyFrameSettingsOverrides.ShaderLitMode,
|
|
diffuseGlobalDimmer = 42f,
|
|
enableMSAA = true,
|
|
enablePostprocess = false,
|
|
lightLoopSettings = new LegacyLightLoopSettings
|
|
{
|
|
overrides = LegacyLightLoopSettingsOverrides.ComputeLightVariants | LegacyLightLoopSettingsOverrides.ComputeLightEvaluation,
|
|
enableComputeLightVariants = true,
|
|
enableComputeMaterialVariants = false
|
|
}
|
|
}
|
|
};
|
|
|
|
[Test, TestCaseSource(nameof(s_LegacyFrameSettingsDatas))]
|
|
public void MigrationTest(LegacyFrameSettings legacyFrameSettingsData)
|
|
{
|
|
using (new PrefabMigrationTests(
|
|
GetType().Name,
|
|
GeneratePrefabYAML(legacyFrameSettingsData),
|
|
out GameObject prefab
|
|
))
|
|
{
|
|
var instance = Object.Instantiate(prefab);
|
|
m_ToClean = instance;
|
|
|
|
var probe = instance.GetComponent<HDAdditionalReflectionData>();
|
|
prefab.SetActive(true);
|
|
probe.enabled = true;
|
|
|
|
var frameSettingsData = probe.frameSettings;
|
|
var frameSettingsMask = probe.frameSettingsOverrideMask;
|
|
|
|
LitShaderMode litShaderModeEquivalent;
|
|
switch (legacyFrameSettingsData.shaderLitMode)
|
|
{
|
|
case LegacyLitShaderMode.Deferred:
|
|
litShaderModeEquivalent = LitShaderMode.Deferred;
|
|
break;
|
|
case LegacyLitShaderMode.Forward:
|
|
litShaderModeEquivalent = LitShaderMode.Forward;
|
|
break;
|
|
default:
|
|
throw new ArgumentException("Unknown LitShaderMode");
|
|
}
|
|
Assert.AreEqual(litShaderModeEquivalent, frameSettingsData.litShaderMode);
|
|
|
|
Assert.AreEqual(legacyFrameSettingsData.enableShadow, frameSettingsData.IsEnabled(FrameSettingsField.ShadowMaps));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableContactShadows, frameSettingsData.IsEnabled(FrameSettingsField.ContactShadows));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableShadowMask, frameSettingsData.IsEnabled(FrameSettingsField.Shadowmask));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableSSR, frameSettingsData.IsEnabled(FrameSettingsField.SSR));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableSSAO, frameSettingsData.IsEnabled(FrameSettingsField.SSAO));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableSubsurfaceScattering, frameSettingsData.IsEnabled(FrameSettingsField.SubsurfaceScattering));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableTransmission, frameSettingsData.IsEnabled(FrameSettingsField.Transmission));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableAtmosphericScattering, frameSettingsData.IsEnabled(FrameSettingsField.AtmosphericScattering));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableVolumetrics, frameSettingsData.IsEnabled(FrameSettingsField.Volumetrics));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableReprojectionForVolumetrics, frameSettingsData.IsEnabled(FrameSettingsField.ReprojectionForVolumetrics));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableLightLayers, frameSettingsData.IsEnabled(FrameSettingsField.LightLayers));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableExposureControl, frameSettingsData.IsEnabled(FrameSettingsField.ExposureControl));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableDepthPrepassWithDeferredRendering, frameSettingsData.IsEnabled(FrameSettingsField.DepthPrepassWithDeferredRendering));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableTransparentPrepass, frameSettingsData.IsEnabled(FrameSettingsField.TransparentPrepass));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableMotionVectors, frameSettingsData.IsEnabled(FrameSettingsField.MotionVectors));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableObjectMotionVectors, frameSettingsData.IsEnabled(FrameSettingsField.ObjectMotionVectors));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableDecals, frameSettingsData.IsEnabled(FrameSettingsField.Decals));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableRoughRefraction, frameSettingsData.IsEnabled(FrameSettingsField.Refraction));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableTransparentPostpass, frameSettingsData.IsEnabled(FrameSettingsField.TransparentPostpass));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableDistortion, frameSettingsData.IsEnabled(FrameSettingsField.Distortion));
|
|
Assert.AreEqual(legacyFrameSettingsData.enablePostprocess, frameSettingsData.IsEnabled(FrameSettingsField.Postprocess));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableOpaqueObjects, frameSettingsData.IsEnabled(FrameSettingsField.OpaqueObjects));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableTransparentObjects, frameSettingsData.IsEnabled(FrameSettingsField.TransparentObjects));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableMSAA, frameSettingsData.IsEnabled(FrameSettingsField.MSAA));
|
|
Assert.AreEqual(legacyFrameSettingsData.enableAsyncCompute, frameSettingsData.IsEnabled(FrameSettingsField.AsyncCompute));
|
|
Assert.AreEqual(legacyFrameSettingsData.runLightListAsync, frameSettingsData.IsEnabled(FrameSettingsField.LightListAsync));
|
|
Assert.AreEqual(legacyFrameSettingsData.runSSRAsync, frameSettingsData.IsEnabled(FrameSettingsField.SSRAsync));
|
|
Assert.AreEqual(legacyFrameSettingsData.runSSAOAsync, frameSettingsData.IsEnabled(FrameSettingsField.SSAOAsync));
|
|
Assert.AreEqual(legacyFrameSettingsData.runContactShadowsAsync, frameSettingsData.IsEnabled(FrameSettingsField.ContactShadowsAsync));
|
|
Assert.AreEqual(legacyFrameSettingsData.runVolumeVoxelizationAsync, frameSettingsData.IsEnabled(FrameSettingsField.VolumeVoxelizationsAsync));
|
|
|
|
Assert.AreEqual(legacyFrameSettingsData.lightLoopSettings.enableBigTilePrepass, frameSettingsData.IsEnabled(FrameSettingsField.BigTilePrepass));
|
|
Assert.AreEqual(legacyFrameSettingsData.lightLoopSettings.enableComputeLightEvaluation, frameSettingsData.IsEnabled(FrameSettingsField.ComputeLightEvaluation));
|
|
Assert.AreEqual(legacyFrameSettingsData.lightLoopSettings.enableComputeLightVariants, frameSettingsData.IsEnabled(FrameSettingsField.ComputeLightVariants));
|
|
Assert.AreEqual(legacyFrameSettingsData.lightLoopSettings.enableComputeMaterialVariants, frameSettingsData.IsEnabled(FrameSettingsField.ComputeMaterialVariants));
|
|
Assert.AreEqual(legacyFrameSettingsData.lightLoopSettings.enableDeferredTileAndCluster, frameSettingsData.IsEnabled(FrameSettingsField.DeferredTile));
|
|
Assert.AreEqual(legacyFrameSettingsData.lightLoopSettings.enableFptlForForwardOpaque, frameSettingsData.IsEnabled(FrameSettingsField.FPTLForForwardOpaque));
|
|
|
|
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.Shadow) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ShadowMaps]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.ContactShadow) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ContactShadows]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.ShadowMask) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.Shadowmask]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.SSR) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.SSR]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.SSAO) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.SSAO]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.SubsurfaceScattering) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.SubsurfaceScattering]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.Transmission) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.Transmission]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.AtmosphericScaterring) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.AtmosphericScattering]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.Volumetrics) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.Volumetrics]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.ReprojectionForVolumetrics) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ReprojectionForVolumetrics]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.LightLayers) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.LightLayers]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.ExposureControl) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ExposureControl]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.DepthPrepassWithDeferredRendering) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.DepthPrepassWithDeferredRendering]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.TransparentPrepass) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.TransparentPrepass]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.MotionVectors) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.MotionVectors]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.ObjectMotionVectors) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ObjectMotionVectors]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.Decals) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.Decals]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.RoughRefraction) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.Refraction]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.TransparentPostpass) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.TransparentPostpass]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.Distortion) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.Distortion]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.Postprocess) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.Postprocess]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.OpaqueObjects) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.OpaqueObjects]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.TransparentObjects) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.TransparentObjects]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.MSAA) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.MSAA]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.AsyncCompute) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.AsyncCompute]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.LightListAsync) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.LightListAsync]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.SSRAsync) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.SSRAsync]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.SSAOAsync) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.SSAOAsync]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.ContactShadowsAsync) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ContactShadowsAsync]);
|
|
Assert.AreEqual((legacyFrameSettingsData.overrides & LegacyFrameSettingsOverrides.VolumeVoxelizationsAsync) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.VolumeVoxelizationsAsync]);
|
|
|
|
Assert.AreEqual((legacyFrameSettingsData.lightLoopSettings.overrides & LegacyLightLoopSettingsOverrides.BigTilePrepass) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.BigTilePrepass]);
|
|
Assert.AreEqual((legacyFrameSettingsData.lightLoopSettings.overrides & LegacyLightLoopSettingsOverrides.ComputeLightEvaluation) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ComputeLightEvaluation]);
|
|
Assert.AreEqual((legacyFrameSettingsData.lightLoopSettings.overrides & LegacyLightLoopSettingsOverrides.ComputeLightVariants) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ComputeLightVariants]);
|
|
Assert.AreEqual((legacyFrameSettingsData.lightLoopSettings.overrides & LegacyLightLoopSettingsOverrides.ComputeMaterialVariants) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.ComputeMaterialVariants]);
|
|
Assert.AreEqual((legacyFrameSettingsData.lightLoopSettings.overrides & LegacyLightLoopSettingsOverrides.TileAndCluster) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.DeferredTile]);
|
|
Assert.AreEqual((legacyFrameSettingsData.lightLoopSettings.overrides & LegacyLightLoopSettingsOverrides.FptlForForwardOpaque) > 0, frameSettingsMask.mask[(uint)FrameSettingsField.FPTLForForwardOpaque]);
|
|
}
|
|
}
|
|
|
|
string GeneratePrefabYAML(LegacyFrameSettings legacyFrameSettings)
|
|
=> $@"%YAML 1.1
|
|
%TAG !u! tag:unity3d.com,2011:
|
|
--- !u!1 &3102262843427888416
|
|
GameObject:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {{fileID: 0}}
|
|
m_PrefabInstance: {{fileID: 0}}
|
|
m_PrefabAsset: {{fileID: 0}}
|
|
serializedVersion: 6
|
|
m_Component:
|
|
- component: {{fileID: 3102262843427888420}}
|
|
- component: {{fileID: 3102262843427888421}}
|
|
- component: {{fileID: 3102262843427888418}}
|
|
m_Layer: 5
|
|
m_Name: Reflection Probe
|
|
m_TagString: Untagged
|
|
m_Icon: {{fileID: 0}}
|
|
m_NavMeshLayer: 0
|
|
m_StaticEditorFlags: 0
|
|
m_IsActive: 1
|
|
--- !u!4 &3102262843427888420
|
|
Transform:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {{fileID: 0}}
|
|
m_PrefabInstance: {{fileID: 0}}
|
|
m_PrefabAsset: {{fileID: 0}}
|
|
m_GameObject: {{fileID: 3102262843427888416}}
|
|
m_LocalRotation: {{x: 0, y: 0, z: 0.26681787, w: 0.963747}}
|
|
m_LocalPosition: {{x: 3.9601986, y: 0.8451278, z: -1.4354408}}
|
|
m_LocalScale: {{x: 1, y: 1, z: 1}}
|
|
m_Children: []
|
|
m_Father: {{fileID: 0}}
|
|
m_RootOrder: 0
|
|
m_LocalEulerAnglesHint: {{x: 0, y: 0, z: 30.95}}
|
|
--- !u!215 &3102262843427888421
|
|
ReflectionProbe:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {{fileID: 0}}
|
|
m_PrefabInstance: {{fileID: 0}}
|
|
m_PrefabAsset: {{fileID: 0}}
|
|
m_GameObject: {{fileID: 3102262843427888416}}
|
|
m_Enabled: 1
|
|
serializedVersion: 2
|
|
m_Type: 0
|
|
m_Mode: 1
|
|
m_RefreshMode: 0
|
|
m_TimeSlicingMode: 0
|
|
m_Resolution: 128
|
|
m_UpdateFrequency: 0
|
|
m_BoxSize: {{x: 6, y: 6, z: 6}}
|
|
m_BoxOffset: {{x: 0.32623026, y: 1.5948586, z: 1.3}}
|
|
m_NearClip: 2.76
|
|
m_FarClip: 5
|
|
m_ShadowDistance: 100
|
|
m_ClearFlags: 2
|
|
m_BackGroundColor: {{r: 0.1882353, g: 0.023529412, b: 0.13529739, a: 0}}
|
|
m_CullingMask:
|
|
serializedVersion: 2
|
|
m_Bits: 310
|
|
m_IntensityMultiplier: 1
|
|
m_BlendDistance: 0
|
|
m_HDR: 1
|
|
m_BoxProjection: 0
|
|
m_RenderDynamicObjects: 0
|
|
m_UseOcclusionCulling: 1
|
|
m_Importance: 1
|
|
m_CustomBakedTexture: {{fileID: 8900000, guid: b7a0288be1440c140849eb49d3b12573,
|
|
type: 3}}
|
|
--- !u!114 &3102262843427888418
|
|
MonoBehaviour:
|
|
m_ObjectHideFlags: 0
|
|
m_CorrespondingSourceObject: {{fileID: 0}}
|
|
m_PrefabInstance: {{fileID: 0}}
|
|
m_PrefabAsset: {{fileID: 0}}
|
|
m_GameObject: {{fileID: 3102262843427888416}}
|
|
m_Enabled: 1
|
|
m_EditorHideFlags: 0
|
|
m_Script: {{fileID: 11500000, guid: d0ef8dc2c2eabfa4e8cb77be57a837c0, type: 3}}
|
|
m_Name:
|
|
m_EditorClassIdentifier:
|
|
m_ProxyVolume: {{fileID: 0}}
|
|
m_InfiniteProjection: 1
|
|
m_InfluenceVolume:
|
|
m_Shape: 1
|
|
m_Offset: {{x: 1.1, y: 1.2, z: 1.3}}
|
|
m_BoxSize: {{x: 7, y: 8, z: 9}}
|
|
m_BoxBlendDistancePositive: {{x: 1, y: 2, z: 3}}
|
|
m_BoxBlendDistanceNegative: {{x: 1.5, y: 2.5, z: 3.5}}
|
|
m_BoxBlendNormalDistancePositive: {{x: 0.5, y: 0.4, z: 0.3}}
|
|
m_BoxBlendNormalDistanceNegative: {{x: 0.2, y: 0.1, z: 0.6}}
|
|
m_BoxSideFadePositive: {{x: 0.1, y: 0.2, z: 0.3}}
|
|
m_BoxSideFadeNegative: {{x: 0.15, y: 0.25, z: 0.35}}
|
|
m_EditorAdvancedModeBlendDistancePositive: {{x: 1, y: 2, z: 3}}
|
|
m_EditorAdvancedModeBlendDistanceNegative: {{x: 1.5, y: 2.5, z: 3.5}}
|
|
m_EditorSimplifiedModeBlendDistance: 3.5
|
|
m_EditorAdvancedModeBlendNormalDistancePositive: {{x: 0.5, y: 0.4, z: 0.3}}
|
|
m_EditorAdvancedModeBlendNormalDistanceNegative: {{x: 0.2, y: 0.1, z: 0.6}}
|
|
m_EditorSimplifiedModeBlendNormalDistance: 4.5
|
|
m_EditorAdvancedModeEnabled: 1
|
|
m_EditorAdvancedModeFaceFadePositive: {{x: 0.1, y: 0.2, z: 0.3}}
|
|
m_EditorAdvancedModeFaceFadeNegative: {{x: 0.15, y: 0.25, z: 0.35}}
|
|
m_SphereRadius: 6
|
|
m_SphereBlendDistance: 2
|
|
m_SphereBlendNormalDistance: 1
|
|
m_Version: 1
|
|
m_ObsoleteSphereBaseOffset: {{x: 0, y: 0, z: 0}}
|
|
m_FrameSettings:
|
|
overrides: {legacyFrameSettings.overrides}
|
|
enableShadow: {(legacyFrameSettings.enableShadow ? 1 : 0)}
|
|
enableContactShadows: {(legacyFrameSettings.enableContactShadows ? 1 : 0)}
|
|
enableShadowMask: {(legacyFrameSettings.enableShadowMask ? 1 : 0)}
|
|
enableSSR: {(legacyFrameSettings.enableSSR ? 1 : 0)}
|
|
enableSSAO: {(legacyFrameSettings.enableSSAO ? 1 : 0)}
|
|
enableSubsurfaceScattering: {(legacyFrameSettings.enableSubsurfaceScattering ? 1 : 0)}
|
|
enableTransmission: {(legacyFrameSettings.enableTransmission ? 1 : 0)}
|
|
enableAtmosphericScattering: {(legacyFrameSettings.enableAtmosphericScattering ? 1 : 0)}
|
|
enableVolumetrics: {(legacyFrameSettings.enableVolumetrics ? 1 : 0)}
|
|
enableReprojectionForVolumetrics: {(legacyFrameSettings.enableReprojectionForVolumetrics ? 1 : 0)}
|
|
enableLightLayers: {(legacyFrameSettings.enableLightLayers ? 1 : 0)}
|
|
enableExposureControl: {(legacyFrameSettings.enableExposureControl ? 1 : 0)}
|
|
diffuseGlobalDimmer: {legacyFrameSettings.diffuseGlobalDimmer}
|
|
specularGlobalDimmer: {legacyFrameSettings.specularGlobalDimmer}
|
|
shaderLitMode: {(legacyFrameSettings.shaderLitMode == LegacyLitShaderMode.Deferred ? 1 : 0)}
|
|
enableDepthPrepassWithDeferredRendering: {(legacyFrameSettings.enableDepthPrepassWithDeferredRendering ? 1 : 0)}
|
|
enableTransparentPrepass: {(legacyFrameSettings.enableTransparentPrepass ? 1 : 0)}
|
|
enableMotionVectors: {(legacyFrameSettings.enableMotionVectors ? 1 : 0)}
|
|
enableObjectMotionVectors: {(legacyFrameSettings.enableObjectMotionVectors ? 1 : 0)}
|
|
enableDecals: {(legacyFrameSettings.enableDecals ? 1 : 0)}
|
|
enableRoughRefraction: {(legacyFrameSettings.enableRoughRefraction ? 1 : 0)}
|
|
enableTransparentPostpass: {(legacyFrameSettings.enableTransparentPostpass ? 1 : 0)}
|
|
enableDistortion: {(legacyFrameSettings.enableDistortion ? 1 : 0)}
|
|
enablePostprocess: {(legacyFrameSettings.enablePostprocess ? 1 : 0)}
|
|
enableAsyncCompute: {(legacyFrameSettings.enableAsyncCompute ? 1 : 0)}
|
|
runLightListAsync: {(legacyFrameSettings.runLightListAsync ? 1 : 0)}
|
|
runSSRAsync: {(legacyFrameSettings.runSSRAsync ? 1 : 0)}
|
|
runSSAOAsync: {(legacyFrameSettings.runSSAOAsync ? 1 : 0)}
|
|
runContactShadowsAsync: {(legacyFrameSettings.runContactShadowsAsync ? 1 : 0)}
|
|
runVolumeVoxelizationAsync: {(legacyFrameSettings.runVolumeVoxelizationAsync ? 1 : 0)}
|
|
enableOpaqueObjects: {(legacyFrameSettings.enableOpaqueObjects ? 1 : 0)}
|
|
enableTransparentObjects: {(legacyFrameSettings.enableTransparentObjects ? 1 : 0)}
|
|
enableMSAA: {(legacyFrameSettings.enableMSAA ? 1 : 0)}
|
|
lightLoopSettings:
|
|
overrides: {legacyFrameSettings.lightLoopSettings.overrides}
|
|
enableTileAndCluster: {(legacyFrameSettings.lightLoopSettings.enableDeferredTileAndCluster ? 1 : 0)}
|
|
enableComputeLightEvaluation: {(legacyFrameSettings.lightLoopSettings.enableComputeLightEvaluation ? 1 : 0)}
|
|
enableComputeLightVariants: {(legacyFrameSettings.lightLoopSettings.enableComputeLightVariants ? 1 : 0)}
|
|
enableComputeMaterialVariants: {(legacyFrameSettings.lightLoopSettings.enableComputeMaterialVariants ? 1 : 0)}
|
|
enableFptlForForwardOpaque: {(legacyFrameSettings.lightLoopSettings.enableFptlForForwardOpaque ? 1 : 0)}
|
|
enableBigTilePrepass: {(legacyFrameSettings.lightLoopSettings.enableBigTilePrepass ? 1 : 0)}
|
|
isFptlEnabled: {(legacyFrameSettings.lightLoopSettings.isFptlEnabled ? 1 : 0)}
|
|
m_CaptureSettings:
|
|
overrides: 0
|
|
clearColorMode: 2
|
|
backgroundColorHDR: {{r: 0.1882353, g: 0.023529412, b: 0.13529739, a: 0}}
|
|
clearDepth: 0
|
|
cullingMask:
|
|
serializedVersion: 2
|
|
m_Bits: 310
|
|
useOcclusionCulling: 0
|
|
volumeLayerMask:
|
|
serializedVersion: 2
|
|
m_Bits: 33
|
|
volumeAnchorOverride: {{fileID: 0}}
|
|
projection: 0
|
|
nearClipPlane: 2.76
|
|
farClipPlane: 5
|
|
fieldOfView: 90
|
|
orthographicSize: 5
|
|
renderingPath: 1
|
|
shadowDistance: 666
|
|
m_Multiplier: 20
|
|
m_Weight: 0.66
|
|
m_Mode: 1
|
|
m_RefreshMode: 1
|
|
m_CustomTexture: {{fileID: 0}}
|
|
m_BakedTexture: {{fileID: 0}}
|
|
m_RenderDynamicObjects: 0
|
|
lightLayers: 9
|
|
m_ReflectionProbeVersion: 6
|
|
m_ObsoleteInfluenceShape: 0
|
|
m_ObsoleteInfluenceSphereRadius: 3
|
|
m_ObsoleteBlendDistancePositive: {{x: 0, y: 0, z: 0}}
|
|
m_ObsoleteBlendDistanceNegative: {{x: 0, y: 0, z: 0}}
|
|
m_ObsoleteBlendNormalDistancePositive: {{x: 0, y: 0, z: 0}}
|
|
m_ObsoleteBlendNormalDistanceNegative: {{x: 0, y: 0, z: 0}}
|
|
m_ObsoleteBoxSideFadePositive: {{x: 1, y: 1, z: 1}}
|
|
m_ObsoleteBoxSideFadeNegative: {{x: 1, y: 1, z: 1}}
|
|
";
|
|
}
|
|
}
|