Skip to content

Commit f0004a6

Browse files
alex-vazquez-unity3dEvergreen
authored andcommitted
[Render Pipeline Converter] BiRP to URP 2D : Adding readonly materials converter workflow.
1 parent f43acc7 commit f0004a6

10 files changed

Lines changed: 259 additions & 58 deletions

File tree

Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/ReadonlyMaterialConverter/ReadonlyMaterialConverter.MaterialReferenceChanger.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ internal bool ReassignGameObjectMaterials(GameObject go, StringBuilder errors)
117117
catch (Exception ex)
118118
{
119119
errors.Append($"{ex.Message} while trying to reassign materials from {component}.");
120+
ok = false;
120121
}
121122
}
122123
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using UnityEditor.Rendering.Converter;
4+
using UnityEngine;
5+
using UnityEngine.Categorization;
6+
using UnityEngine.Rendering;
7+
using UnityEngine.Rendering.Universal;
8+
9+
namespace UnityEditor.Rendering.Universal
10+
{
11+
[Serializable]
12+
[PipelineConverter("Built-in", "Universal Render Pipeline (2D Renderer)")]
13+
[ElementInfo(Name = "Material Reference Converter",
14+
Order = 100,
15+
Description = "Converts references to Built-In readonly materials to URP (2D) readonly materials.")]
16+
internal class BuiltInToURP2DReadonlyMaterialConverter : ReadonlyMaterialConverter
17+
{
18+
public override bool isEnabled
19+
{
20+
get
21+
{
22+
if (GraphicsSettings.currentRenderPipeline is not UniversalRenderPipelineAsset urpAsset)
23+
return false;
24+
25+
return urpAsset.scriptableRenderer is Renderer2D;
26+
}
27+
}
28+
29+
public override string isDisabledMessage => "Converter requires URP with a Renderer 2D. Convert your project to URP to use this converter.";
30+
31+
protected override Dictionary<string, Func<Material>> materialMappings
32+
{
33+
get
34+
{
35+
return new()
36+
{
37+
["Default-Material"] = () => GraphicsSettings.GetRenderPipelineSettings<Renderer2DResources>().defaultMesh2DLitMaterial,
38+
["Sprites-Default"] = () => GraphicsSettings.GetRenderPipelineSettings<Renderer2DResources>().defaultLitMaterial,
39+
["Sprites-Mask"] = () => GraphicsSettings.GetRenderPipelineSettings<Renderer2DResources>().defaultMaskMaterial,
40+
};
41+
}
42+
}
43+
}
44+
}

Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DReadonlyMaterialConverter.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using UnityEditor.Rendering.Converter;
4+
using UnityEngine;
5+
using UnityEngine.Categorization;
6+
using UnityEngine.Rendering;
7+
using UnityEngine.Rendering.Universal;
8+
9+
namespace UnityEditor.Rendering.Universal
10+
{
11+
[Serializable]
12+
[PipelineConverter("Universal Render Pipeline (Universal Renderer)", "Universal Render Pipeline (2D Renderer)")]
13+
[ElementInfo(Name = "Material Reference Converter",
14+
Order = 100,
15+
Description = "Converts references to URP Lit and Simple Lit readonly material to Mesh 2D Lit material.")]
16+
internal class URP3DToURP2DReadonlyMaterialConverter : ReadonlyMaterialConverter
17+
{
18+
private List<(string query, string description)> m_ContextSearchQueriesAndIds;
19+
private Dictionary<string, Func<Material>> m_MaterialMappings;
20+
21+
public override bool isEnabled
22+
{
23+
get
24+
{
25+
if (GraphicsSettings.currentRenderPipeline is not UniversalRenderPipelineAsset urpAsset)
26+
return false;
27+
return urpAsset.scriptableRenderer is Renderer2D;
28+
}
29+
}
30+
31+
public override string isDisabledMessage => "Converter requires URP with a Renderer 2D. Convert your project to URP to use this converter.";
32+
33+
private bool m_Initialized = false;
34+
35+
private void InitializeIfNeeded()
36+
{
37+
if (m_Initialized)
38+
return;
39+
40+
m_Initialized = true;
41+
42+
var urpMaterials = GraphicsSettings.GetRenderPipelineSettings<UniversalRenderPipelineEditorMaterials>();
43+
var lit = urpMaterials.defaultMaterial;
44+
var simpleLit = urpMaterials.simpleLitMaterial;
45+
46+
// -t:RenderPipelineGlobalSettings is to avoid adding the Global Settings as they reference the URP Lit and Simple Lit materials
47+
// We do not want to modify them as part of this conversion, because they must keep referencing the URP 3D materials.
48+
const string formattedId = "p: ref=<$object:{0},UnityEngine.Object$> -t:RenderPipelineGlobalSettings";
49+
50+
m_ContextSearchQueriesAndIds = new List<(string query, string description)>()
51+
{
52+
(string.Format(formattedId, GlobalObjectId.GetGlobalObjectIdSlow(lit)), "URP Lit is being referenced"),
53+
(string.Format(formattedId, GlobalObjectId.GetGlobalObjectIdSlow(simpleLit)), "URP Simple Lit is being referenced")
54+
};
55+
56+
Func<Material> mesh2DLitMaterial = () => GraphicsSettings.GetRenderPipelineSettings<Renderer2DResources>().defaultMesh2DLitMaterial;
57+
58+
m_MaterialMappings = new Dictionary<string, Func<Material>>()
59+
{
60+
["Lit"] = mesh2DLitMaterial,
61+
["SimpleLit"] = mesh2DLitMaterial
62+
};
63+
}
64+
65+
protected override List<(string query, string description)> contextSearchQueriesAndIds
66+
{
67+
get
68+
{
69+
InitializeIfNeeded();
70+
return m_ContextSearchQueriesAndIds;
71+
}
72+
}
73+
74+
protected override Dictionary<string, Func<Material>> materialMappings
75+
{
76+
get
77+
{
78+
InitializeIfNeeded();
79+
return m_MaterialMappings;
80+
}
81+
}
82+
}
83+
}

Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/URP3DToURP2DReadonlyMaterialConverter.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public enum ConverterId
101101
/// <summary>
102102
/// Use this for 2D material conversion
103103
/// </summary>
104-
[BatchModeConverterInfo(ConverterContainerId.BuiltInToURP2D, typeof(BuiltInToURP2DMaterialUpgrader))]
104+
[BatchModeConverterInfo(ConverterContainerId.BuiltInToURP2D, typeof(BuiltInToURP2DReadonlyMaterialConverter))]
105105
ReadonlyMaterial2D,
106106

107107
/// <summary>

Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DReadonlyMaterialConverter.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,20 @@ namespace UnityEditor.Rendering.Universal
1212
[PipelineConverter("Built-in", "Universal Render Pipeline (Universal Renderer)")]
1313
[ElementInfo(Name = "Material Reference Converter",
1414
Order = 100,
15-
Description = "Converts references to Built-In readonly materials to URP readonly materials. This will create temporarily a .index file and that can take a long time.")]
15+
Description = "Converts references to Built-In readonly materials to URP readonly materials.")]
1616
internal class BuiltInToURP3DReadonlyMaterialConverter : ReadonlyMaterialConverter
1717
{
18-
public override bool isEnabled => GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset;
19-
public override string isDisabledMessage => "Converter requires URP. Convert your project to URP to use this converter.";
18+
public override bool isEnabled
19+
{
20+
get
21+
{
22+
if (GraphicsSettings.currentRenderPipeline is not UniversalRenderPipelineAsset urpAsset)
23+
return false;
24+
25+
return urpAsset.scriptableRenderer is UniversalRenderer;
26+
}
27+
}
28+
public override string isDisabledMessage => "Converter requires URP with an Universal Renderer. Convert your project to URP to use this converter.";
2029

2130
protected override Dictionary<string, Func<Material>> materialMappings
2231
{

Packages/com.unity.render-pipelines.universal/Runtime/RenderPipelineResources/UniversalRenderPipelineEditorMaterials.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ public virtual Material defaultMaterial
2020
set => this.SetValueAndNotify(ref m_DefaultMaterial, value);
2121
}
2222

23+
[SerializeField]
24+
[ResourcePath("Runtime/Materials/SimpleLit.mat")]
25+
private Material m_SimpleLitMaterial;
26+
27+
public virtual Material simpleLitMaterial
28+
{
29+
get => m_SimpleLitMaterial;
30+
set => this.SetValueAndNotify(ref m_SimpleLitMaterial, value);
31+
}
32+
2333
// This is the URP default material for new particle systems, is the closest match to the built-in shader.
2434
[SerializeField]
2535
[ResourcePath("Runtime/Materials/ParticlesUnlit.mat")]

Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public static IEnumerable<TestCaseData> TestCases()
112112
ConverterFilter.Exclusive,
113113
new List<Type>
114114
{
115-
typeof(BuiltInToURP2DMaterialUpgrader),
115+
typeof(BuiltInToURP2DReadonlyMaterialConverter),
116116
}
117117
).SetName("BuiltInToURP2D - When Using Exclusive filter with no converters. The filter returns everything");
118118

0 commit comments

Comments
 (0)