Skip to content

Commit

Permalink
Improved EditorResourceAsset load and shader warnings (#236)
Browse files Browse the repository at this point in the history
Co-authored-by: Felipe Lira <felipedrl@gmail.com>
  • Loading branch information
ellioman and phi-lira committed Apr 27, 2020
1 parent d0bec93 commit 833aba6
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 40 deletions.
2 changes: 2 additions & 0 deletions com.unity.render-pipelines.universal/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Fixed OpenGL ES 3.0 support for URP ShaderGraph. [case 1230890](https://issuetracker.unity3d.com/issues/urptemplate-gles3-android-custom-shader-fails-to-compile-on-adreno-306-gpu)
- Fixed an issue where multi edit camera properties didn't work. [case 1230080](https://issuetracker.unity3d.com/issues/urp-certain-settings-are-not-applied-to-all-cameras-when-multi-editing-in-the-inspector)
- Fixed an issue where the emission value in particle shaders would not update in the editor without entering playmode.
- Fixed issues with performance when importing fbx files
- Fixed issues with NullReferenceException happening with URP shaders

## [7.1.1] - 2019-09-05
### Upgrade Guide
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ public class UniversalRenderPipelineAsset : RenderPipelineAsset, ISerializationC
internal UniversalRenderPipelineEditorResources m_EditorResourcesAsset;

public static readonly string packagePath = "Packages/com.unity.render-pipelines.universal";
public static readonly string editorResourcesGUID = "a3d8d823eedde654bb4c11a1cfaf1abb";

public static UniversalRenderPipelineAsset Create(ScriptableRendererData rendererData = null)
{
Expand All @@ -189,8 +190,10 @@ public static UniversalRenderPipelineAsset Create(ScriptableRendererData rendere
instance.m_RendererDataList[0] = rendererData;
else
instance.m_RendererDataList[0] = CreateInstance<ForwardRendererData>();

// Initialize default Renderer
instance.m_EditorResourcesAsset = LoadResourceFile<UniversalRenderPipelineEditorResources>();
instance.m_EditorResourcesAsset = instance.editorResources;

return instance;
}

Expand Down Expand Up @@ -247,38 +250,15 @@ static void CreateUniversalPipelineEditorResources()
AssetDatabase.CreateAsset(instance, string.Format("Assets/{0}.asset", typeof(UniversalRenderPipelineEditorResources).Name));
}

static T LoadResourceFile<T>() where T : ScriptableObject
{
T resourceAsset = null;
var guids = AssetDatabase.FindAssets(typeof(T).Name + " t:scriptableobject", new[] { "Assets" });
foreach (string guid in guids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
resourceAsset = AssetDatabase.LoadAssetAtPath<T>(path);
if (resourceAsset != null)
break;
}

// There's currently an issue that prevents FindAssets from find resources withing the package folder.
if (resourceAsset == null)
{
string path = packagePath + "/Runtime/Data/" + typeof(T).Name + ".asset";
resourceAsset = AssetDatabase.LoadAssetAtPath<T>(path);
}

// Validate the resource file
ResourceReloader.TryReloadAllNullIn(resourceAsset, packagePath);

return resourceAsset;
}

UniversalRenderPipelineEditorResources editorResources
{
get
{
if (m_EditorResourcesAsset == null)
m_EditorResourcesAsset = LoadResourceFile<UniversalRenderPipelineEditorResources>();
if (m_EditorResourcesAsset != null && !m_EditorResourcesAsset.Equals(null))
return m_EditorResourcesAsset;

string resourcePath = AssetDatabase.GUIDToAssetPath(editorResourcesGUID);
m_EditorResourcesAsset = AssetDatabase.LoadAssetAtPath<UniversalRenderPipelineEditorResources>(resourcePath);
return m_EditorResourcesAsset;
}
}
Expand Down Expand Up @@ -707,42 +687,42 @@ public override Shader defaultShader
#if UNITY_EDITOR
public override Shader autodeskInteractiveShader
{
get { return editorResources.shaders.autodeskInteractivePS; }
get { return editorResources?.shaders.autodeskInteractivePS; }
}

public override Shader autodeskInteractiveTransparentShader
{
get { return editorResources.shaders.autodeskInteractiveTransparentPS; }
get { return editorResources?.shaders.autodeskInteractiveTransparentPS; }
}

public override Shader autodeskInteractiveMaskedShader
{
get { return editorResources.shaders.autodeskInteractiveMaskedPS; }
get { return editorResources?.shaders.autodeskInteractiveMaskedPS; }
}

public override Shader terrainDetailLitShader
{
get { return editorResources.shaders.terrainDetailLitPS; }
get { return editorResources?.shaders.terrainDetailLitPS; }
}

public override Shader terrainDetailGrassShader
{
get { return editorResources.shaders.terrainDetailGrassPS; }
get { return editorResources?.shaders.terrainDetailGrassPS; }
}

public override Shader terrainDetailGrassBillboardShader
{
get { return editorResources.shaders.terrainDetailGrassBillboardPS; }
get { return editorResources?.shaders.terrainDetailGrassBillboardPS; }
}

public override Shader defaultSpeedTree7Shader
{
get { return editorResources.shaders.defaultSpeedTree7PS; }
get { return editorResources?.shaders.defaultSpeedTree7PS; }
}

public override Shader defaultSpeedTree8Shader
{
get { return editorResources.shaders.defaultSpeedTree8PS; }
get { return editorResources?.shaders.defaultSpeedTree8PS; }
}
#endif

Expand Down
11 changes: 7 additions & 4 deletions com.unity.render-pipelines.universal/Tests/Editor/EditorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,18 @@ public void CreateForwardRendererAssetWithoutErrors()
}
}

// Validate that resources Guids are valid
// Validate that resource Guids are valid
[Test]
public void ValidateBuiltinResourceFiles()
{
string templatePath = AssetDatabase.GUIDToAssetPath(ResourceGuid.rendererTemplate);
Assert.IsFalse(string.IsNullOrEmpty(templatePath));

string editorResourcesPath = AssetDatabase.GUIDToAssetPath(UniversalRenderPipelineAsset.editorResourcesGUID);
Assert.IsFalse(string.IsNullOrEmpty(editorResourcesPath));
}

// When creating LWRP all required resources should be initialized.
// When creating URP all required resources should be initialized.
[Test]
public void ValidateNewAssetResources()
{
Expand All @@ -73,7 +76,7 @@ public void ValidateNewAssetResources()
Assert.AreNotEqual(null, asset.defaultTerrainMaterial);
Assert.AreNotEqual(null, asset.defaultShader);

// LWRP doesn't override the following materials
// URP doesn't override the following materials
Assert.AreEqual(null, asset.defaultUIMaterial);
Assert.AreEqual(null, asset.defaultUIOverdrawMaterial);
Assert.AreEqual(null, asset.defaultUIETC1SupportedMaterial);
Expand All @@ -85,7 +88,7 @@ public void ValidateNewAssetResources()
ScriptableObject.DestroyImmediate(data);
}

// When changing LWRP settings, all settings should be valid.
// When changing URP settings, all settings should be valid.
[Test]
public void ValidateAssetSettings()
{
Expand Down

0 comments on commit 833aba6

Please sign in to comment.