Files
Bombaleila/Library/PackageCache/com.unity.render-pipelines.universal@37e0d4fc2503/Tests/Editor/Tools/Converters/RenderSettingsConverterTests.cs
2026-03-03 00:39:30 +05:00

135 lines
6.9 KiB
C#

using System.Linq;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using ShadowQuality = UnityEngine.ShadowQuality;
namespace UnityEditor.Rendering.Universal.Tools
{
[TestFixture]
[Category("Graphics Tools")]
class RenderSettingsConverterTests
{
[OneTimeSetUp]
public void OneTimeSetup()
{
if (QualitySettings.names.Length == 0)
Assert.Ignore("Project without quality settings. Skipping test");
}
RenderPipelineAsset m_RenderPipelineAsset;
int m_QualityLevel = -1;
string m_DefaultFolder = string.Empty;
string m_QualityLevelName = string.Empty;
[SetUp]
public void Setup()
{
m_RenderPipelineAsset = QualitySettings.renderPipeline;
QualitySettings.renderPipeline = null;
m_QualityLevel = QualitySettings.GetQualityLevel();
m_QualityLevelName = QualitySettings.names[m_QualityLevel];
m_DefaultFolder = UniversalProjectSettings.projectSettingsFolderPath;
UniversalProjectSettings.projectSettingsFolderPath = nameof(RenderSettingsConverterTests);
}
[TearDown]
public void TearDown()
{
var path = $"Assets/{UniversalProjectSettings.projectSettingsFolderPath}";
if (AssetDatabase.AssetPathExists(path))
{
AssetDatabase.DeleteAsset(path);
AssetDatabase.Refresh();
}
QualitySettings.renderPipeline = m_RenderPipelineAsset;
UniversalProjectSettings.projectSettingsFolderPath = m_DefaultFolder;
}
[Test]
public void WhenRunningTheConverter_TheCurrent_QualityLevel_IsNowURP_AndHasEverythingProperlyAssigned()
{
var renderSettingsConverter = new RenderSettingsConverter();
var expectedEntry = $"[{m_QualityLevel}] {m_QualityLevelName}";
InitializeConverterContext ctx = new() { items = new() };
renderSettingsConverter.OnInitialize(ctx, null);
Assert.AreEqual(m_QualityLevel, QualitySettings.GetQualityLevel(), "Initialization did not rollback quality level");
ConverterItemDescriptor? desc = null;
foreach (var item in ctx.items)
{
if (item.name.Equals(expectedEntry))
{
desc = item;
break;
}
}
Assert.IsTrue(desc.HasValue, "Initialization did not found the item to convert");
RunItemContext runItemContext = new RunItemContext(new ConverterItemInfo
{
descriptor = desc.Value,
index = 0,
});
renderSettingsConverter.OnRun(ref runItemContext);
Assert.AreEqual(m_QualityLevel, QualitySettings.GetQualityLevel(), "Run did not rollback quality level");
// ---------- ASSET REFERENCE CHECK ----------
var urpAsset = QualitySettings.renderPipeline as UniversalRenderPipelineAsset;
Assert.IsNotNull(urpAsset, "URP asset is not assigned");
Assert.AreEqual($"Assets/{UniversalProjectSettings.projectSettingsFolderPath}/{m_QualityLevelName}.asset", AssetDatabase.GetAssetPath(urpAsset));
// ---------- RENDERER REFERENCE CHECK ----------
Assert.IsNotNull(urpAsset.m_RendererDataList);
Assert.AreEqual(1, urpAsset.m_RendererDataList.Length);
Assert.AreEqual($"Assets/{UniversalProjectSettings.projectSettingsFolderPath}/Default_Forward_Renderer.asset", AssetDatabase.GetAssetPath(urpAsset.m_RendererDataList[0]));
// ---------- SETTINGS FORWARDING CHECK ----------
var targetGrp = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
var tier = EditorGraphicsSettings.GetTierSettings(targetGrp, GraphicsTier.Tier3);
Assert.AreEqual(QualitySettings.softParticles, urpAsset.supportsCameraDepthTexture, "supportsCameraDepthTexture mismatch");
Assert.AreEqual(tier.hdr, urpAsset.supportsHDR, "supportsHDR mismatch");
Assert.AreEqual(QualitySettings.antiAliasing == 0 ? 1 : QualitySettings.antiAliasing, urpAsset.msaaSampleCount, "msaaSampleCount mismatch");
var expectedMainLightMode = QualitySettings.pixelLightCount == 0 ? LightRenderingMode.Disabled : LightRenderingMode.PerPixel;
Assert.AreEqual(expectedMainLightMode, urpAsset.mainLightRenderingMode, "mainLightRenderingMode mismatch");
Assert.AreEqual(QualitySettings.shadows != ShadowQuality.Disable, urpAsset.supportsMainLightShadows, "supportsMainLightShadows mismatch");
Assert.AreEqual(RenderSettingsConverter.GetEquivalentMainlightShadowResolution((int)QualitySettings.shadowResolution), urpAsset.mainLightShadowmapResolution, "mainLightShadowmapResolution mismatch");
var expectedAdditionalLightsMode = QualitySettings.pixelLightCount == 0 ? LightRenderingMode.PerVertex : LightRenderingMode.PerPixel;
Assert.AreEqual(expectedAdditionalLightsMode, urpAsset.additionalLightsRenderingMode, "additionalLightsRenderingMode mismatch");
Assert.AreEqual(QualitySettings.pixelLightCount != 0 ? Mathf.Max(0, QualitySettings.pixelLightCount) : 4, urpAsset.maxAdditionalLightsCount, "maxAdditionalLightsCount mismatch");
Assert.AreEqual(QualitySettings.shadows != ShadowQuality.Disable, urpAsset.supportsAdditionalLightShadows, "supportsAdditionalLightShadows mismatch");
Assert.AreEqual(RenderSettingsConverter.GetEquivalentAdditionalLightAtlasShadowResolution((int)QualitySettings.shadowResolution), urpAsset.additionalLightsShadowmapResolution, "additionalLightsShadowmapResolution mismatch");
Assert.AreEqual(tier.reflectionProbeBlending, urpAsset.reflectionProbeBlending, "reflectionProbeBlending mismatch");
Assert.AreEqual(tier.reflectionProbeBoxProjection, urpAsset.reflectionProbeBoxProjection, "reflectionProbeBoxProjection mismatch");
Assert.AreEqual(QualitySettings.shadowDistance, urpAsset.shadowDistance, "shadowDistance mismatch");
var expectedCascadeCount = tier.cascadedShadowMaps ? QualitySettings.shadowCascades : 1;
Assert.AreEqual(expectedCascadeCount, urpAsset.shadowCascadeCount, "shadowCascadeCount mismatch");
Assert.AreEqual(QualitySettings.shadowCascade2Split, urpAsset.cascade2Split, "cascade2Split mismatch");
Assert.AreEqual(QualitySettings.shadowCascade4Split, urpAsset.cascade4Split, "cascade4Split mismatch");
Assert.AreEqual(QualitySettings.shadows == ShadowQuality.All, urpAsset.supportsSoftShadows, "supportsSoftShadows mismatch");
// ---------- RENDERER FORWARDING CHECK ----------
Assert.AreEqual(1, urpAsset.m_RendererDataList.Length);
Assert.IsNotNull(urpAsset.m_RendererDataList[0]);
}
}
}