diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs index 4637c4ecb..9cf0a2113 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs @@ -20,34 +20,7 @@ namespace UniGLTF [SerializeField] [Header("Experimental")] - public RenderPipelineTypes m_renderPipeline; - - void OnValidate() - { - if (m_renderPipeline == UniGLTF.RenderPipelineTypes.UniversalRenderPipeline) - { - if (Shader.Find(UniGLTF.UrpGltfPbrMaterialImporter.ShaderName) == null) - { - Debug.LogWarning("URP is not installed. Force to BuiltinRenderPipeline"); - m_renderPipeline = UniGLTF.RenderPipelineTypes.BuiltinRenderPipeline; - } - } - } - - static IMaterialDescriptorGenerator GetMaterialGenerator(RenderPipelineTypes renderPipeline) - { - switch (renderPipeline) - { - case RenderPipelineTypes.BuiltinRenderPipeline: - return new BuiltInGltfMaterialDescriptorGenerator(); - - case RenderPipelineTypes.UniversalRenderPipeline: - return new UrpGltfMaterialDescriptorGenerator(); - - default: - throw new System.NotImplementedException(); - } - } + public ImporterRenderPipelineTypes m_renderPipeline; /// /// glb をパースして、UnityObject化、さらにAsset化する @@ -55,7 +28,8 @@ namespace UniGLTF /// /// /// - protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis, RenderPipelineTypes renderPipeline) + /// + protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis, ImporterRenderPipelineTypes renderPipeline) { UniGLTFLogger.Log("OnImportAsset to " + scriptedImporter.assetPath); @@ -68,7 +42,7 @@ namespace UniGLTF .Where(x => x.Value != null) .ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value); - IMaterialDescriptorGenerator materialGenerator = GetMaterialGenerator(renderPipeline); + var materialGenerator = GetMaterialDescriptorGenerator(renderPipeline); using (var data = new AutoGltfFileParser(scriptedImporter.assetPath).Parse()) using (var loader = new ImporterContext(data, extractedObjects, materialGenerator: materialGenerator)) @@ -94,5 +68,16 @@ namespace UniGLTF context.SetMainObject(root); } } + + private static IMaterialDescriptorGenerator GetMaterialDescriptorGenerator(ImporterRenderPipelineTypes renderPipeline) + { + return renderPipeline switch + { + ImporterRenderPipelineTypes.Auto => MaterialDescriptorGeneratorUtility .GetValidGltfMaterialDescriptorGenerator(), + ImporterRenderPipelineTypes.BuiltinRenderPipeline => MaterialDescriptorGeneratorUtility .GetGltfMaterialDescriptorGenerator(RenderPipelineTypes.BuiltinRenderPipeline), + ImporterRenderPipelineTypes.UniversalRenderPipeline => MaterialDescriptorGeneratorUtility .GetGltfMaterialDescriptorGenerator(RenderPipelineTypes.UniversalRenderPipeline), + _ => MaterialDescriptorGeneratorUtility.GetValidGltfMaterialDescriptorGenerator(), + }; + } } } diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ImporterRenderPipelineTypes.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ImporterRenderPipelineTypes.cs new file mode 100644 index 000000000..0acad15f1 --- /dev/null +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ImporterRenderPipelineTypes.cs @@ -0,0 +1,9 @@ +namespace UniGLTF +{ + public enum ImporterRenderPipelineTypes + { + Auto = 0, + BuiltinRenderPipeline = 1, + UniversalRenderPipeline = 2, + } +} \ No newline at end of file diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ImporterRenderPipelineTypes.cs.meta b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ImporterRenderPipelineTypes.cs.meta new file mode 100644 index 000000000..fcc3507a5 --- /dev/null +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ImporterRenderPipelineTypes.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d4f38213d6e442ef986fd3e633991ba7 +timeCreated: 1722347490 \ No newline at end of file diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/Import/MaterialDescriptorGeneratorUtility.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/Import/MaterialDescriptorGeneratorUtility.cs index dee8cba3d..97dda7c77 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/Import/MaterialDescriptorGeneratorUtility.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/Import/MaterialDescriptorGeneratorUtility.cs @@ -4,7 +4,12 @@ namespace UniGLTF { public static IMaterialDescriptorGenerator GetValidGltfMaterialDescriptorGenerator() { - return RenderPipelineUtility.GetRenderPipelineType() switch + return GetGltfMaterialDescriptorGenerator(RenderPipelineUtility.GetRenderPipelineType()); + } + + public static IMaterialDescriptorGenerator GetGltfMaterialDescriptorGenerator(RenderPipelineTypes renderPipelineType) + { + return renderPipelineType switch { RenderPipelineTypes.UniversalRenderPipeline => new UrpGltfMaterialDescriptorGenerator(), RenderPipelineTypes.BuiltinRenderPipeline => new BuiltInGltfMaterialDescriptorGenerator(),