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.
158 lines
7.8 KiB
158 lines
7.8 KiB
using System.Linq;
|
|
using NUnit.Framework;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
using UnityEngine.Rendering.HighDefinition;
|
|
|
|
namespace UnityEditor.Rendering.HighDefinition.Test.GlobalSettingsMigration
|
|
{
|
|
class DefaultVolumeProfileSettingsMigrationTests : RenderPipelineGraphicsSettingsMigrationTestBase<HDRPDefaultVolumeProfileSettings>
|
|
{
|
|
class TestCase : IRenderPipelineGraphicsSettingsTestCase<HDRPDefaultVolumeProfileSettings>
|
|
{
|
|
bool m_ProfileExists;
|
|
bool m_OldDiffusionProfilesExist;
|
|
|
|
public TestCase(bool profileExists, bool oldDiffusionProfilesExist)
|
|
{
|
|
m_ProfileExists = profileExists;
|
|
m_OldDiffusionProfilesExist = oldDiffusionProfilesExist;
|
|
}
|
|
|
|
public void SetUp(HDRenderPipelineGlobalSettings globalSettingsAsset, HDRenderPipelineAsset renderPipelineAsset)
|
|
{
|
|
#pragma warning disable 618 // Type or member is obsolete
|
|
if (m_ProfileExists)
|
|
{
|
|
globalSettingsAsset.m_ObsoleteDefaultVolumeProfile = ScriptableObject.CreateInstance<VolumeProfile>();
|
|
globalSettingsAsset.m_ObsoleteDefaultVolumeProfile.name = "MigratedProfile";
|
|
}
|
|
else
|
|
{
|
|
globalSettingsAsset.m_ObsoleteDefaultVolumeProfile = null;
|
|
}
|
|
|
|
globalSettingsAsset.m_Version = HDRenderPipelineGlobalSettings.Version.ToRenderPipelineGraphicsSettings - 1;
|
|
|
|
if (m_OldDiffusionProfilesExist)
|
|
{
|
|
globalSettingsAsset.m_ObsoleteDiffusionProfileSettingsList = new DiffusionProfileSettings[1];
|
|
var diffusionProfile = ScriptableObject.CreateInstance<DiffusionProfileSettings>();
|
|
diffusionProfile.name = "MigratedDiffusionProfile";
|
|
diffusionProfile.profile.scatteringDistanceMultiplier = 987.6f;
|
|
globalSettingsAsset.m_ObsoleteDiffusionProfileSettingsList[0] = diffusionProfile;
|
|
globalSettingsAsset.m_Version = HDRenderPipelineGlobalSettings.Version.MoveDiffusionProfilesToVolume - 1;
|
|
}
|
|
#pragma warning restore 618
|
|
|
|
}
|
|
|
|
public bool IsMigrationCorrect(HDRPDefaultVolumeProfileSettings settings, out string message)
|
|
{
|
|
message = string.Empty;
|
|
|
|
if (settings.volumeProfile == null)
|
|
{
|
|
message = $"The {nameof(VolumeProfile)} is missing";
|
|
return false;
|
|
}
|
|
|
|
var expectedName = m_ProfileExists ? "MigratedProfile" : "DefaultSettingsVolumeProfile";
|
|
if (!settings.volumeProfile.name.Equals(expectedName))
|
|
{
|
|
message = $"The {nameof(VolumeProfile)} is has name {settings.volumeProfile.name}, when the expected name is {expectedName}";
|
|
return false;
|
|
}
|
|
|
|
if (m_OldDiffusionProfilesExist)
|
|
{
|
|
|
|
if (!settings.volumeProfile.TryGet<DiffusionProfileList>(out var overrides))
|
|
{
|
|
message = $"The {nameof(VolumeProfile)} ({settings.volumeProfile.name}) is missing {nameof(DiffusionProfileList)}.";
|
|
return false;
|
|
}
|
|
|
|
DiffusionProfileSettings migratedDiffusionProfileSettings = overrides.diffusionProfiles.value.FirstOrDefault(p => p.name.Equals("MigratedDiffusionProfile"));
|
|
if (migratedDiffusionProfileSettings == null)
|
|
{
|
|
message = $"The {nameof(VolumeProfile)} ({settings.volumeProfile.name}) does not have a profile with name MigratedDiffusionProfile";
|
|
return false;
|
|
}
|
|
|
|
var value = migratedDiffusionProfileSettings.profile.scatteringDistanceMultiplier;
|
|
if (!Mathf.Approximately(value, 987.6f))
|
|
{
|
|
message = $"The {nameof(VolumeProfile)} ({settings.volumeProfile.name}) 987.6f != {value}";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
class TestCaseMigrationOldDiffusionProfiles : IRenderPipelineGraphicsSettingsTestCase<HDRPDefaultVolumeProfileSettings>
|
|
{
|
|
private DiffusionProfileSettings[] m_Profiles;
|
|
|
|
public void SetUp(HDRenderPipelineGlobalSettings globalSettingsAsset,
|
|
HDRenderPipelineAsset renderPipelineAsset)
|
|
{
|
|
globalSettingsAsset.m_Version = HDRenderPipelineGlobalSettings.Version.DisableAutoRegistration;
|
|
|
|
m_Profiles = new[]
|
|
{
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
ScriptableObject.CreateInstance<DiffusionProfileSettings>(),
|
|
};
|
|
|
|
#pragma warning disable 618 // Type or member is obsolete
|
|
globalSettingsAsset.m_ObsoleteDiffusionProfileSettingsList = m_Profiles;
|
|
#pragma warning restore 618
|
|
}
|
|
|
|
public void TearDown(HDRenderPipelineGlobalSettings globalSettingsAsset,
|
|
HDRenderPipelineAsset renderPipelineAsset)
|
|
{
|
|
foreach (var p in m_Profiles)
|
|
ScriptableObject.DestroyImmediate(p);
|
|
}
|
|
|
|
public bool IsMigrationCorrect(HDRPDefaultVolumeProfileSettings settings, out string message)
|
|
{
|
|
// Check that the list is now on the Volume Component of the Default Volume Profile
|
|
var migratedDiffusionProfileList = VolumeUtils.GetOrCreateDiffusionProfileList(settings.volumeProfile);
|
|
message = string.Empty;
|
|
return m_Profiles.SequenceEqual(migratedDiffusionProfileList.diffusionProfiles.value);
|
|
}
|
|
}
|
|
|
|
|
|
static TestCaseData[] s_TestCaseDatas =
|
|
{
|
|
new TestCaseData(new TestCase(profileExists: true, oldDiffusionProfilesExist: false))
|
|
.SetName("When migrating an existing volume profile, settings are being transferred correctly"),
|
|
new TestCaseData(new TestCase(profileExists: false, oldDiffusionProfilesExist: false))
|
|
.SetName("When migrating a non-existing volume profile, the volume profile is being gather correctly"),
|
|
new TestCaseData(new TestCase(profileExists: true, oldDiffusionProfilesExist: true))
|
|
.SetName("When migrating old diffusion profiles to existing default volume profile, settings are being transferred correctly"),
|
|
new TestCaseData(new TestCase(profileExists: false, oldDiffusionProfilesExist: true))
|
|
.SetName("When migrating old diffusion profiles to non-existing default volume profile, settings are being transferred correctly"),
|
|
new TestCaseData(new TestCaseMigrationOldDiffusionProfiles())
|
|
.SetName("When migrating old diffusion profiles assigned directly on HDRPGlobalSettings, diffusion profiles are on the IRenderPipelineGraphicsSettings"),
|
|
};
|
|
|
|
[Test, TestCaseSource(nameof(s_TestCaseDatas))]
|
|
public void PerformMigration(IRenderPipelineGraphicsSettingsTestCase<HDRPDefaultVolumeProfileSettings> testCase)
|
|
{
|
|
base.DoTest(testCase);
|
|
}
|
|
}
|
|
}
|