From e3680689903a2189f0a98df0422d81e259ae617d Mon Sep 17 00:00:00 2001 From: Arttu Peltonen Date: Wed, 29 Sep 2021 14:07:16 +0300 Subject: [PATCH] Fix potential crash in URP/HDRP/SG material import in case LoadAssetAtPath fails for some reason. - Example case: if the asset has a ".mat" suffix but it's not a Material. --- .../Editor/AssetProcessors/MaterialPostProcessor.cs | 2 ++ .../Editor/AssetPostProcessors/MaterialPostprocessor.cs | 3 +++ .../Editor/AssetPostProcessors/MaterialPostprocessor.cs | 3 +++ 3 files changed, 8 insertions(+) diff --git a/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/MaterialPostProcessor.cs b/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/MaterialPostProcessor.cs index a2ccc6dc147..b6ebe2af444 100644 --- a/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/MaterialPostProcessor.cs +++ b/com.unity.render-pipelines.high-definition/Editor/AssetProcessors/MaterialPostProcessor.cs @@ -334,6 +334,8 @@ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAsse // Materials (.mat) post processing: var material = (Material)AssetDatabase.LoadAssetAtPath(asset, typeof(Material)); + if (material == null) + continue; if (MaterialReimporter.s_ReimportShaderGraphDependencyOnMaterialUpdate && GraphUtil.IsShaderGraphAsset(material.shader)) { diff --git a/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/MaterialPostprocessor.cs b/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/MaterialPostprocessor.cs index d4ddaffadb3..34cc8fe4134 100644 --- a/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/MaterialPostprocessor.cs +++ b/com.unity.render-pipelines.universal/Editor/AssetPostProcessors/MaterialPostprocessor.cs @@ -135,6 +135,9 @@ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAsse // this skips any materials that only target other render pipelines, are user shaders, // or are shaders we don't care to version var material = (Material)AssetDatabase.LoadAssetAtPath(asset, typeof(Material)); + if (material == null) + continue; + var shaderID = GetShaderID(material.shader); if (shaderID == ShaderID.Unknown) continue; diff --git a/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/Editor/AssetPostProcessors/MaterialPostprocessor.cs b/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/Editor/AssetPostProcessors/MaterialPostprocessor.cs index b386acf1c1f..57edef3ed2f 100644 --- a/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/Editor/AssetPostProcessors/MaterialPostprocessor.cs +++ b/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/Editor/AssetPostProcessors/MaterialPostprocessor.cs @@ -74,6 +74,9 @@ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAsse // This skips any materials that only target other render pipelines, are user shaders, // or are shaders we don't care to version var material = (Material)AssetDatabase.LoadAssetAtPath(asset, typeof(Material)); + if (material == null) + continue; + var shaderID = GetShaderID(material.shader); if (shaderID == ShaderID.Unknown) continue;