From e6450960d7edd71f04a7d56cb7f92b068e6fdf31 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 31 Aug 2021 18:55:53 +0900 Subject: [PATCH 1/7] add GltfURPMaterialDescriptorGenerator --- .../ScriptedImporter/GlbScriptedImporter.cs | 2 +- .../ScriptedImporter/GltfScriptedImporter.cs | 2 +- .../GltfScriptedImporterBase.cs | 22 ++- .../ZipArchivedGltfScriptedImporter.cs | 2 +- .../Runtime/UniGLTF/IO/ImporterContext.cs | 5 +- .../Runtime/UniGLTF/IO/MaterialIO/URP.meta | 8 + .../URP/GltfPbrURPMaterialImporter.cs | 169 ++++++++++++++++++ .../URP/GltfPbrURPMaterialImporter.cs.meta | 11 ++ .../URP/GltfURPMaterialDescriptorGenerator.cs | 39 ++++ ...GltfURPMaterialDescriptorGenerator.cs.meta | 11 ++ 10 files changed, 264 insertions(+), 7 deletions(-) create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP.meta create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs.meta create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs.meta diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs index f14ff3e0b..bb996f84e 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs @@ -12,7 +12,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes()); + Import(this, ctx, m_reverseAxis.ToAxes(), m_useURPMaterial); } } } diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs index 2ab443cd6..1a6df70c2 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs @@ -12,7 +12,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes()); + Import(this, ctx, m_reverseAxis.ToAxes(), m_useURPMaterial); } } } diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs index cbb75086e..9ce13fe48 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs @@ -2,6 +2,7 @@ using UnityEngine; using UnityEditor; using System.Linq; using VRMShaders; +using UnityEngine.Rendering; #if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; #else @@ -19,13 +20,28 @@ namespace UniGLTF [SerializeField] public ScriptedImporterAxes m_reverseAxis = default; + [SerializeField] + public bool m_useURPMaterial; + + static IMaterialDescriptorGenerator GetMaterialGenerator(bool useURPMaterial) + { + if (useURPMaterial) + { + return new GltfURPMaterialDescriptorGenerator(); + } + else + { + return new GltfMaterialDescriptorGenerator(); + } + } + /// /// glb をパースして、UnityObject化、さらにAsset化する /// /// /// /// - protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis) + protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis, bool useURPMaterial) { #if VRM_DEVELOP Debug.Log("OnImportAsset to " + scriptedImporter.assetPath); @@ -46,7 +62,9 @@ namespace UniGLTF .Where(x => x.Value != null) .ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value); - using (var loader = new ImporterContext(data, extractedObjects)) + IMaterialDescriptorGenerator materialGenerator = GetMaterialGenerator(useURPMaterial); + + using (var loader = new ImporterContext(data, extractedObjects, materialGenerator: materialGenerator)) { // Configure TextureImporter to Extracted Textures. foreach (var textureInfo in loader.TextureDescriptorGenerator.Get().GetEnumerable()) diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs index 668cbe3a2..719b1995a 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs @@ -14,7 +14,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes()); + Import(this, ctx, m_reverseAxis.ToAxes(), m_useURPMaterial); } } } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs index 814eac7b2..d9ed0dba9 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs @@ -22,11 +22,12 @@ namespace UniGLTF public ImporterContext( GltfData data, IReadOnlyDictionary externalObjectMap = null, - ITextureDeserializer textureDeserializer = null) + ITextureDeserializer textureDeserializer = null, + IMaterialDescriptorGenerator materialGenerator = null) { Data = data; TextureDescriptorGenerator = new GltfTextureDescriptorGenerator(Data); - MaterialDescriptorGenerator = new GltfMaterialDescriptorGenerator(); + MaterialDescriptorGenerator = materialGenerator ?? new GltfMaterialDescriptorGenerator(); ExternalObjectMap = externalObjectMap ?? new Dictionary(); textureDeserializer = textureDeserializer ?? new UnityTextureDeserializer(); diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP.meta new file mode 100644 index 000000000..a716bc76f --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e25906189630c09469e8bdfcab01b754 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs new file mode 100644 index 000000000..7276126c7 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs @@ -0,0 +1,169 @@ +using UnityEngine; +using VRMShaders; +using ColorSpace = VRMShaders.ColorSpace; + +namespace UniGLTF +{ + /// + /// glTF PBR to URP Lit. + /// + /// see: https://github.com/Unity-Technologies/Graphics/blob/v7.5.3/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineMaterialUpgrader.cs#L354-L379 + /// + public static class GltfPbrURPMaterialImporter + { + public const string ShaderName = "Universal Render Pipeline/Lit"; + + private enum BlendMode + { + Opaque, + Cutout, + Fade, + Transparent + } + + public static bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc) + { + if (i < 0 || i >= data.GLTF.materials.Count) + { + matDesc = default; + return false; + } + + var src = data.GLTF.materials[i]; + matDesc = new MaterialDescriptor(GltfMaterialDescriptorGenerator.GetMaterialName(i, src), ShaderName); + + var standardTexDesc = default(TextureDescriptor); + if (src.pbrMetallicRoughness != null || src.occlusionTexture != null) + { + if (src.pbrMetallicRoughness.metallicRoughnessTexture != null || src.occlusionTexture != null) + { + SubAssetKey key; + (key, standardTexDesc) = GltfPbrTextureImporter.StandardTexture(data, src); + } + + if (src.pbrMetallicRoughness.baseColorFactor != null && src.pbrMetallicRoughness.baseColorFactor.Length == 4) + { + // from _Color ! + matDesc.Colors.Add("_BaseColor", + src.pbrMetallicRoughness.baseColorFactor.ToColor4(ColorSpace.Linear, ColorSpace.sRGB) + ); + } + + if (src.pbrMetallicRoughness.baseColorTexture != null && src.pbrMetallicRoughness.baseColorTexture.index != -1) + { + var (key, textureParam) = GltfPbrTextureImporter.BaseColorTexture(data, src); + // from _MainTex ! + matDesc.TextureSlots.Add("_BaseMap", textureParam); + } + + if (src.pbrMetallicRoughness.metallicRoughnessTexture != null && src.pbrMetallicRoughness.metallicRoughnessTexture.index != -1) + { + matDesc.Actions.Add(material => material.EnableKeyword("_METALLICGLOSSMAP")); + matDesc.TextureSlots.Add("_MetallicGlossMap", standardTexDesc); + // Set 1.0f as hard-coded. See: https://github.com/dwango/UniVRM/issues/212. + matDesc.FloatValues.Add("_Metallic", 1.0f); + matDesc.FloatValues.Add("_GlossMapScale", 1.0f); + // default value is 0.5 ! + matDesc.FloatValues.Add("_Smoothness", 1.0f); + } + else + { + matDesc.FloatValues.Add("_Metallic", src.pbrMetallicRoughness.metallicFactor); + // from _Glossiness ! + matDesc.FloatValues.Add("_Smoothness", 1.0f - src.pbrMetallicRoughness.roughnessFactor); + } + } + + if (src.normalTexture != null && src.normalTexture.index != -1) + { + matDesc.Actions.Add(material => material.EnableKeyword("_NORMALMAP")); + var (key, textureParam) = GltfPbrTextureImporter.NormalTexture(data, src); + matDesc.TextureSlots.Add("_BumpMap", textureParam); + matDesc.FloatValues.Add("_BumpScale", src.normalTexture.scale); + } + + if (src.occlusionTexture != null && src.occlusionTexture.index != -1) + { + matDesc.TextureSlots.Add("_OcclusionMap", standardTexDesc); + matDesc.FloatValues.Add("_OcclusionStrength", src.occlusionTexture.strength); + } + + if (src.emissiveFactor != null + || (src.emissiveTexture != null && src.emissiveTexture.index != -1)) + { + matDesc.Actions.Add(material => + { + material.EnableKeyword("_EMISSION"); + material.globalIlluminationFlags &= ~MaterialGlobalIlluminationFlags.EmissiveIsBlack; + }); + + if (src.emissiveFactor != null && src.emissiveFactor.Length == 3) + { + var emissiveFactor = src.emissiveFactor.ToColor3(ColorSpace.Linear, ColorSpace.Linear); + if (UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.GltfDeserializer.TryGet(src.extensions, + out UniGLTF.Extensions.VRMC_materials_hdr_emissiveMultiplier.VRMC_materials_hdr_emissiveMultiplier ex)) + { + emissiveFactor *= ex.EmissiveMultiplier.Value; + } + matDesc.Colors.Add("_EmissionColor", emissiveFactor); + } + + if (src.emissiveTexture != null && src.emissiveTexture.index != -1) + { + var (key, textureParam) = GltfPbrTextureImporter.EmissiveTexture(data, src); + matDesc.TextureSlots.Add("_EmissionMap", textureParam); + } + } + + matDesc.Actions.Add(material => + { + BlendMode blendMode = BlendMode.Opaque; + // https://forum.unity.com/threads/standard-material-shader-ignoring-setfloat-property-_mode.344557/#post-2229980 + switch (src.alphaMode) + { + case "BLEND": + blendMode = BlendMode.Fade; + material.SetOverrideTag("RenderType", "Transparent"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); + material.SetInt("_ZWrite", 0); + material.DisableKeyword("_ALPHATEST_ON"); + material.EnableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = 3000; + break; + + case "MASK": + blendMode = BlendMode.Cutout; + material.SetOverrideTag("RenderType", "TransparentCutout"); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.SetFloat("_Cutoff", src.alphaCutoff); + material.EnableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = 2450; + + break; + + default: // OPAQUE + blendMode = BlendMode.Opaque; + material.SetOverrideTag("RenderType", ""); + material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One); + material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero); + material.SetInt("_ZWrite", 1); + material.DisableKeyword("_ALPHATEST_ON"); + material.DisableKeyword("_ALPHABLEND_ON"); + material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); + material.renderQueue = -1; + break; + } + + material.SetFloat("_Mode", (float)blendMode); + }); + + return true; + } + } +} diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs.meta new file mode 100644 index 000000000..3a87eaf63 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08a0ae763ee70ed45809fad80ffe8e78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs new file mode 100644 index 000000000..479ad31cb --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using UnityEngine; +using VRMShaders; + + +namespace UniGLTF +{ + /// + /// GLTF の MaterialImporter + /// + public sealed class GltfURPMaterialDescriptorGenerator : IMaterialDescriptorGenerator + { + public MaterialDescriptor Get(GltfData data, int i) + { + if (!GltfUnlitMaterialImporter.TryCreateParam(data, i, out var param)) + { + if (!GltfPbrURPMaterialImporter.TryCreateParam(data, i, out param)) + { + // fallback +#if VRM_DEVELOP + Debug.LogWarning($"material: {i} out of range. fallback"); +#endif + return new MaterialDescriptor(GetMaterialName(i, null), GltfPbrMaterialImporter.ShaderName); + } + } + + return param; + } + + public static string GetMaterialName(int index, glTFMaterial src) + { + if (src != null && !string.IsNullOrEmpty(src.name)) + { + return src.name; + } + return $"material_{index:00}"; + } + } +} diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs.meta new file mode 100644 index 000000000..ba39444e7 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ae66bf5ee5e1cb44b7dc416727d3bc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 90f49c4262c982a4915e79dfe7a1a99d434fee90 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 31 Aug 2021 19:30:21 +0900 Subject: [PATCH 2/7] add Vrm10UrpMaterialDescriptorGenerator and VRMURPMaterialDescriptorGenerator --- Assets/VRM/Runtime/IO/VRMImporterContext.cs | 5 +-- .../IO/VRMURPMaterialDescriptorGenerator.cs | 34 +++++++++++++++++++ .../VRMURPMaterialDescriptorGenerator.cs.meta | 11 ++++++ .../ScriptedImporter/VrmScriptedImporter.cs | 5 ++- .../VrmScriptedImporterEditorGUI.cs | 5 +++ .../VrmScriptedImporterImpl.cs | 14 ++++++-- .../Vrm10UrpMaterialDescriptorGenerator.cs | 28 +++++++++++++++ ...rm10UrpMaterialDescriptorGenerator.cs.meta | 11 ++++++ Assets/VRM10/Runtime/IO/Vrm10Importer.cs | 5 +-- 9 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs create mode 100644 Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs.meta create mode 100644 Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs create mode 100644 Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs.meta diff --git a/Assets/VRM/Runtime/IO/VRMImporterContext.cs b/Assets/VRM/Runtime/IO/VRMImporterContext.cs index 9595006e2..ed413893c 100644 --- a/Assets/VRM/Runtime/IO/VRMImporterContext.cs +++ b/Assets/VRM/Runtime/IO/VRMImporterContext.cs @@ -23,7 +23,8 @@ namespace VRM public VRMImporterContext( GltfData data, IReadOnlyDictionary externalObjectMap = null, - ITextureDeserializer textureDeserializer = null) + ITextureDeserializer textureDeserializer = null, + IMaterialDescriptorGenerator materialGenerator = null) : base(data, externalObjectMap, textureDeserializer) { // parse VRM part @@ -31,7 +32,7 @@ namespace VRM { VRM = vrm; TextureDescriptorGenerator = new VrmTextureDescriptorGenerator(Data, VRM); - MaterialDescriptorGenerator = new VRMMaterialDescriptorGenerator(VRM); + MaterialDescriptorGenerator = materialGenerator ?? new VRMMaterialDescriptorGenerator(VRM); } else { diff --git a/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs b/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs new file mode 100644 index 000000000..a3661a255 --- /dev/null +++ b/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs @@ -0,0 +1,34 @@ +using UniGLTF; +using UnityEngine; +using VRMShaders; + +namespace VRM +{ + public sealed class VRMURPMaterialDescriptorGenerator : IMaterialDescriptorGenerator + { + readonly glTF_VRM_extensions m_vrm; + public VRMURPMaterialDescriptorGenerator(glTF_VRM_extensions vrm) + { + m_vrm = vrm; + } + + public MaterialDescriptor Get(GltfData data, int i) + { + // mtoon URP "MToon" shader is not ready. import fallback to unlit + // unlit "UniUnlit" work in URP + if (!GltfUnlitMaterialImporter.TryCreateParam(data, i, out MaterialDescriptor matDesc)) + { + // pbr "Standard" to "Universal Render Pipeline/Lit" + if (!GltfPbrURPMaterialImporter.TryCreateParam(data, i, out matDesc)) + { + // fallback +#if VRM_DEVELOP + Debug.LogWarning($"material: {i} out of range. fallback"); +#endif + return new MaterialDescriptor(GltfMaterialDescriptorGenerator.GetMaterialName(i, null), GltfPbrMaterialImporter.ShaderName); + } + } + return matDesc; + } + } +} diff --git a/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs.meta b/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs.meta new file mode 100644 index 000000000..2db886c74 --- /dev/null +++ b/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5aeab73a304ef644b0d20fac93bcfb9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs index c23c62e34..d0414cc82 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs @@ -14,9 +14,12 @@ namespace UniVRM10 [SerializeField] public bool MigrateToVrm1 = default; + [SerializeField] + public bool UseUrp = default; + public override void OnImportAsset(AssetImportContext ctx) { - VrmScriptedImporterImpl.Import(this, ctx, MigrateToVrm1); + VrmScriptedImporterImpl.Import(this, ctx, MigrateToVrm1, UseUrp); } } } diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs index c0c13a1d8..b17d8d5f9 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs @@ -102,6 +102,11 @@ namespace UniVRM10 { case Vrm10FileType.Vrm1: EditorGUILayout.HelpBox(m_result.Message, MessageType.Info); + { + serializedObject.Update(); + EditorGUILayout.PropertyField(serializedObject.FindProperty("UseUrp")); + serializedObject.ApplyModifiedProperties(); + } ApplyRevertGUI(); break; diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs index 83a50bf65..20e67c7a4 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs @@ -16,7 +16,7 @@ namespace UniVRM10 { public static class VrmScriptedImporterImpl { - public static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, bool migrateToVrm1) + public static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, bool migrateToVrm1, bool useUrp) { #if VRM_DEVELOP Debug.Log("OnImportAsset to " + scriptedImporter.assetPath); @@ -35,7 +35,17 @@ namespace UniVRM10 .Where(kv => kv.Value != null) .ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value); - using (var loader = new Vrm10Importer(result.Data, result.Vrm, extractedObjects)) + IMaterialDescriptorGenerator materialGenerator; + if (useUrp) + { + materialGenerator = new Vrm10UrpMaterialDescriptorGenerator(); + } + else + { + materialGenerator = new Vrm10MaterialDescriptorGenerator(); + } + + using (var loader = new Vrm10Importer(result.Data, result.Vrm, extractedObjects, materialGenerator: materialGenerator)) { // settings TextureImporters foreach (var textureInfo in loader.TextureDescriptorGenerator.Get().GetEnumerable()) diff --git a/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs new file mode 100644 index 000000000..2082d1d07 --- /dev/null +++ b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs @@ -0,0 +1,28 @@ +using UniGLTF; +using UnityEngine; +using VRMShaders; + +namespace UniVRM10 +{ + public sealed class Vrm10UrpMaterialDescriptorGenerator : IMaterialDescriptorGenerator + { + public MaterialDescriptor Get(GltfData data, int i) + { + // unlit + if (!GltfUnlitMaterialImporter.TryCreateParam(data, i, out MaterialDescriptor matDesc)) + { + // pbr + if (!GltfPbrURPMaterialImporter.TryCreateParam(data, i, out matDesc)) + { + // fallback +#if VRM_DEVELOP + Debug.LogWarning($"material: {i} out of range. fallback"); +#endif + return new MaterialDescriptor(GltfMaterialDescriptorGenerator.GetMaterialName(i, null), GltfPbrMaterialImporter.ShaderName); + } + } + return matDesc; + } + + } +} diff --git a/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs.meta b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs.meta new file mode 100644 index 000000000..109c9c92b --- /dev/null +++ b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 377d1bd166d5452408fc7772554715ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs index f2872b8c7..a64bdd98d 100644 --- a/Assets/VRM10/Runtime/IO/Vrm10Importer.cs +++ b/Assets/VRM10/Runtime/IO/Vrm10Importer.cs @@ -23,7 +23,8 @@ namespace UniVRM10 public Vrm10Importer( UniGLTF.GltfData data, UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm, IReadOnlyDictionary externalObjectMap = null, - ITextureDeserializer textureDeserializer = null) + ITextureDeserializer textureDeserializer = null, + IMaterialDescriptorGenerator materialGenerator = null) : base(data, externalObjectMap, textureDeserializer) { if (data == null) @@ -38,7 +39,7 @@ namespace UniVRM10 m_vrm = vrm; TextureDescriptorGenerator = new Vrm10TextureDescriptorGenerator(data); - MaterialDescriptorGenerator = new Vrm10MaterialDescriptorGenerator(); + MaterialDescriptorGenerator = materialGenerator ?? new Vrm10MaterialDescriptorGenerator(); m_externalMap = externalObjectMap; if (m_externalMap == null) From dc58edafdd9fd05fe2c631edf14a1574e33dd5a0 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 31 Aug 2021 19:31:42 +0900 Subject: [PATCH 3/7] rename URP to Urp --- .../UniGLTF/ScriptedImporter/GlbScriptedImporter.cs | 2 +- .../UniGLTF/ScriptedImporter/GltfScriptedImporter.cs | 2 +- .../ScriptedImporter/GltfScriptedImporterBase.cs | 12 ++++++------ .../ZipArchivedGltfScriptedImporter.cs | 2 +- .../IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs | 2 +- .../URP/GltfURPMaterialDescriptorGenerator.cs | 4 ++-- .../Runtime/IO/VRMURPMaterialDescriptorGenerator.cs | 6 +++--- .../Material/Vrm10UrpMaterialDescriptorGenerator.cs | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs index bb996f84e..cfafbec45 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs @@ -12,7 +12,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes(), m_useURPMaterial); + Import(this, ctx, m_reverseAxis.ToAxes(), m_useUrpMaterial); } } } diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs index 1a6df70c2..97a08b914 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs @@ -12,7 +12,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes(), m_useURPMaterial); + Import(this, ctx, m_reverseAxis.ToAxes(), m_useUrpMaterial); } } } diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs index 9ce13fe48..b1bf91d3b 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs @@ -21,13 +21,13 @@ namespace UniGLTF public ScriptedImporterAxes m_reverseAxis = default; [SerializeField] - public bool m_useURPMaterial; + public bool m_useUrpMaterial; - static IMaterialDescriptorGenerator GetMaterialGenerator(bool useURPMaterial) + static IMaterialDescriptorGenerator GetMaterialGenerator(bool useUrpMaterial) { - if (useURPMaterial) + if (useUrpMaterial) { - return new GltfURPMaterialDescriptorGenerator(); + return new GltfUrpMaterialDescriptorGenerator(); } else { @@ -41,7 +41,7 @@ namespace UniGLTF /// /// /// - protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis, bool useURPMaterial) + protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis, bool useUrpMaterial) { #if VRM_DEVELOP Debug.Log("OnImportAsset to " + scriptedImporter.assetPath); @@ -62,7 +62,7 @@ namespace UniGLTF .Where(x => x.Value != null) .ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value); - IMaterialDescriptorGenerator materialGenerator = GetMaterialGenerator(useURPMaterial); + IMaterialDescriptorGenerator materialGenerator = GetMaterialGenerator(useUrpMaterial); using (var loader = new ImporterContext(data, extractedObjects, materialGenerator: materialGenerator)) { diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs index 719b1995a..0ed65d3f7 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs @@ -14,7 +14,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes(), m_useURPMaterial); + Import(this, ctx, m_reverseAxis.ToAxes(), m_useUrpMaterial); } } } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs index 7276126c7..93c8d7a31 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfPbrURPMaterialImporter.cs @@ -9,7 +9,7 @@ namespace UniGLTF /// /// see: https://github.com/Unity-Technologies/Graphics/blob/v7.5.3/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineMaterialUpgrader.cs#L354-L379 /// - public static class GltfPbrURPMaterialImporter + public static class GltfPbrUrpMaterialImporter { public const string ShaderName = "Universal Render Pipeline/Lit"; diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs index 479ad31cb..e5422ae9a 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/GltfURPMaterialDescriptorGenerator.cs @@ -8,13 +8,13 @@ namespace UniGLTF /// /// GLTF の MaterialImporter /// - public sealed class GltfURPMaterialDescriptorGenerator : IMaterialDescriptorGenerator + public sealed class GltfUrpMaterialDescriptorGenerator : IMaterialDescriptorGenerator { public MaterialDescriptor Get(GltfData data, int i) { if (!GltfUnlitMaterialImporter.TryCreateParam(data, i, out var param)) { - if (!GltfPbrURPMaterialImporter.TryCreateParam(data, i, out param)) + if (!GltfPbrUrpMaterialImporter.TryCreateParam(data, i, out param)) { // fallback #if VRM_DEVELOP diff --git a/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs b/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs index a3661a255..376198d32 100644 --- a/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs +++ b/Assets/VRM/Runtime/IO/VRMURPMaterialDescriptorGenerator.cs @@ -4,10 +4,10 @@ using VRMShaders; namespace VRM { - public sealed class VRMURPMaterialDescriptorGenerator : IMaterialDescriptorGenerator + public sealed class VRMUrpMaterialDescriptorGenerator : IMaterialDescriptorGenerator { readonly glTF_VRM_extensions m_vrm; - public VRMURPMaterialDescriptorGenerator(glTF_VRM_extensions vrm) + public VRMUrpMaterialDescriptorGenerator(glTF_VRM_extensions vrm) { m_vrm = vrm; } @@ -19,7 +19,7 @@ namespace VRM if (!GltfUnlitMaterialImporter.TryCreateParam(data, i, out MaterialDescriptor matDesc)) { // pbr "Standard" to "Universal Render Pipeline/Lit" - if (!GltfPbrURPMaterialImporter.TryCreateParam(data, i, out matDesc)) + if (!GltfPbrUrpMaterialImporter.TryCreateParam(data, i, out matDesc)) { // fallback #if VRM_DEVELOP diff --git a/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs index 2082d1d07..f2844cfbe 100644 --- a/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs +++ b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs @@ -12,7 +12,7 @@ namespace UniVRM10 if (!GltfUnlitMaterialImporter.TryCreateParam(data, i, out MaterialDescriptor matDesc)) { // pbr - if (!GltfPbrURPMaterialImporter.TryCreateParam(data, i, out matDesc)) + if (!GltfPbrUrpMaterialImporter.TryCreateParam(data, i, out matDesc)) { // fallback #if VRM_DEVELOP From 32b728bd05442a3239f86a20218330671fc027cd Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 31 Aug 2021 21:12:10 +0900 Subject: [PATCH 4/7] Add Urp/UrpPipelineTypes.cs --- .../ScriptedImporter/GlbScriptedImporter.cs | 2 +- .../ScriptedImporter/GltfScriptedImporter.cs | 2 +- .../GltfScriptedImporterBase.cs | 25 ++++++++-------- .../ZipArchivedGltfScriptedImporter.cs | 2 +- .../IO/MaterialIO/URP/UrpPipelineTypes.cs | 12 ++++++++ .../MaterialIO/URP/UrpPipelineTypes.cs.meta | 11 +++++++ .../ScriptedImporter/VrmScriptedImporter.cs | 4 +-- .../VrmScriptedImporterImpl.cs | 29 +++++++++++-------- 8 files changed, 58 insertions(+), 29 deletions(-) create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs create mode 100644 Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs.meta diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs index cfafbec45..3c952fc04 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GlbScriptedImporter.cs @@ -12,7 +12,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes(), m_useUrpMaterial); + Import(this, ctx, m_reverseAxis.ToAxes(), m_renderPipeline); } } } diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs index 97a08b914..39d8914ba 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporter.cs @@ -12,7 +12,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes(), m_useUrpMaterial); + Import(this, ctx, m_reverseAxis.ToAxes(), m_renderPipeline); } } } diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs index b1bf91d3b..54a5c72dc 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs @@ -1,8 +1,6 @@ using UnityEngine; -using UnityEditor; using System.Linq; using VRMShaders; -using UnityEngine.Rendering; #if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; #else @@ -21,17 +19,20 @@ namespace UniGLTF public ScriptedImporterAxes m_reverseAxis = default; [SerializeField] - public bool m_useUrpMaterial; + public RenderPipelineTypes m_renderPipeline; - static IMaterialDescriptorGenerator GetMaterialGenerator(bool useUrpMaterial) + static IMaterialDescriptorGenerator GetMaterialGenerator(RenderPipelineTypes renderPipeline) { - if (useUrpMaterial) + switch (renderPipeline) { - return new GltfUrpMaterialDescriptorGenerator(); - } - else - { - return new GltfMaterialDescriptorGenerator(); + case RenderPipelineTypes.Builtin: + return new GltfUrpMaterialDescriptorGenerator(); + + case RenderPipelineTypes.UniversalRenderPipeline: + return new GltfMaterialDescriptorGenerator(); + + default: + throw new System.NotImplementedException(); } } @@ -41,7 +42,7 @@ namespace UniGLTF /// /// /// - protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis, bool useUrpMaterial) + protected static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, Axes reverseAxis, RenderPipelineTypes renderPipeline) { #if VRM_DEVELOP Debug.Log("OnImportAsset to " + scriptedImporter.assetPath); @@ -62,7 +63,7 @@ namespace UniGLTF .Where(x => x.Value != null) .ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value); - IMaterialDescriptorGenerator materialGenerator = GetMaterialGenerator(useUrpMaterial); + IMaterialDescriptorGenerator materialGenerator = GetMaterialGenerator(renderPipeline); using (var loader = new ImporterContext(data, extractedObjects, materialGenerator: materialGenerator)) { diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs index 0ed65d3f7..518019a0c 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/ZipArchivedGltfScriptedImporter.cs @@ -14,7 +14,7 @@ namespace UniGLTF { public override void OnImportAsset(AssetImportContext ctx) { - Import(this, ctx, m_reverseAxis.ToAxes(), m_useUrpMaterial); + Import(this, ctx, m_reverseAxis.ToAxes(), m_renderPipeline); } } } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs new file mode 100644 index 000000000..cbcb80e40 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs @@ -0,0 +1,12 @@ +namespace UniGLTF +{ + /// + /// TODO: HDRP ? + /// TODO: UserCustom ? + /// + public enum RenderPipelineTypes + { + Builtin, + UniversalRenderPipeline, + } +} diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs.meta new file mode 100644 index 000000000..6f9f7c807 --- /dev/null +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2ddf76db17176b4bb4480924f97c9d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs index d0414cc82..af17de1ff 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporter.cs @@ -15,11 +15,11 @@ namespace UniVRM10 public bool MigrateToVrm1 = default; [SerializeField] - public bool UseUrp = default; + public UniGLTF.RenderPipelineTypes RenderPipeline = default; public override void OnImportAsset(AssetImportContext ctx) { - VrmScriptedImporterImpl.Import(this, ctx, MigrateToVrm1, UseUrp); + VrmScriptedImporterImpl.Import(this, ctx, MigrateToVrm1, RenderPipeline); } } } diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs index 20e67c7a4..4878c1493 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs @@ -1,9 +1,7 @@ using System.Linq; using UnityEngine; using UniGLTF; -using System.IO; using System; -using UniJSON; using VRMShaders; #if UNITY_2020_2_OR_NEWER using UnityEditor.AssetImporters; @@ -16,7 +14,22 @@ namespace UniVRM10 { public static class VrmScriptedImporterImpl { - public static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, bool migrateToVrm1, bool useUrp) + static IMaterialDescriptorGenerator GetMaterialDescriptorGenerator(RenderPipelineTypes renderPipeline) + { + switch (renderPipeline) + { + case RenderPipelineTypes.Builtin: + return new Vrm10MaterialDescriptorGenerator(); + + case RenderPipelineTypes.UniversalRenderPipeline: + return new Vrm10UrpMaterialDescriptorGenerator(); + + default: + throw new NotImplementedException(); + } + } + + public static void Import(ScriptedImporter scriptedImporter, AssetImportContext context, bool migrateToVrm1, RenderPipelineTypes renderPipeline) { #if VRM_DEVELOP Debug.Log("OnImportAsset to " + scriptedImporter.assetPath); @@ -35,15 +48,7 @@ namespace UniVRM10 .Where(kv => kv.Value != null) .ToDictionary(kv => new SubAssetKey(kv.Value.GetType(), kv.Key.name), kv => kv.Value); - IMaterialDescriptorGenerator materialGenerator; - if (useUrp) - { - materialGenerator = new Vrm10UrpMaterialDescriptorGenerator(); - } - else - { - materialGenerator = new Vrm10MaterialDescriptorGenerator(); - } + var materialGenerator = GetMaterialDescriptorGenerator(renderPipeline); using (var loader = new Vrm10Importer(result.Data, result.Vrm, extractedObjects, materialGenerator: materialGenerator)) { From 784b8ba993e761d67fe9f000fd7e33fa8227f7a9 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 31 Aug 2021 21:16:49 +0900 Subject: [PATCH 5/7] fix UI. Experimental --- .../UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs | 1 + .../Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs index 54a5c72dc..8bae16f9d 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs @@ -19,6 +19,7 @@ namespace UniGLTF public ScriptedImporterAxes m_reverseAxis = default; [SerializeField] + [Header("Experimental")] public RenderPipelineTypes m_renderPipeline; static IMaterialDescriptorGenerator GetMaterialGenerator(RenderPipelineTypes renderPipeline) diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs index b17d8d5f9..0b6da37d6 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterEditorGUI.cs @@ -104,7 +104,8 @@ namespace UniVRM10 EditorGUILayout.HelpBox(m_result.Message, MessageType.Info); { serializedObject.Update(); - EditorGUILayout.PropertyField(serializedObject.FindProperty("UseUrp")); + EditorGUILayout.HelpBox("Experimental", MessageType.Warning); + EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(VrmScriptedImporter.RenderPipeline))); serializedObject.ApplyModifiedProperties(); } ApplyRevertGUI(); From eedf784c811884011e090cf78dc955cb90499bfe Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 31 Aug 2021 21:21:44 +0900 Subject: [PATCH 6/7] remove #if --- .../Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs index f2844cfbe..49434506f 100644 --- a/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs +++ b/Assets/VRM10/Runtime/IO/Material/Vrm10UrpMaterialDescriptorGenerator.cs @@ -15,9 +15,7 @@ namespace UniVRM10 if (!GltfPbrUrpMaterialImporter.TryCreateParam(data, i, out matDesc)) { // fallback -#if VRM_DEVELOP Debug.LogWarning($"material: {i} out of range. fallback"); -#endif return new MaterialDescriptor(GltfMaterialDescriptorGenerator.GetMaterialName(i, null), GltfPbrMaterialImporter.ShaderName); } } From 1117e9c2c792d266a88d9c6b9f3fd420e93c25ee Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 31 Aug 2021 21:34:54 +0900 Subject: [PATCH 7/7] mv URP/UrpPipelineTypes.cs to RenderPipelineTypes.cs. fix Builtin To BuiltinRenderPipeline --- .../Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs | 2 +- .../{URP/UrpPipelineTypes.cs => RenderPipelineTypes.cs} | 2 +- .../UrpPipelineTypes.cs.meta => RenderPipelineTypes.cs.meta} | 2 +- Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/{URP/UrpPipelineTypes.cs => RenderPipelineTypes.cs} (85%) rename Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/{URP/UrpPipelineTypes.cs.meta => RenderPipelineTypes.cs.meta} (83%) diff --git a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs index 8bae16f9d..75aa41e2f 100644 --- a/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs +++ b/Assets/UniGLTF/Editor/UniGLTF/ScriptedImporter/GltfScriptedImporterBase.cs @@ -26,7 +26,7 @@ namespace UniGLTF { switch (renderPipeline) { - case RenderPipelineTypes.Builtin: + case RenderPipelineTypes.BuiltinRenderPipeline: return new GltfUrpMaterialDescriptorGenerator(); case RenderPipelineTypes.UniversalRenderPipeline: diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/RenderPipelineTypes.cs similarity index 85% rename from Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs rename to Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/RenderPipelineTypes.cs index cbcb80e40..78c1cf7f9 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/RenderPipelineTypes.cs @@ -6,7 +6,7 @@ namespace UniGLTF /// public enum RenderPipelineTypes { - Builtin, + BuiltinRenderPipeline, UniversalRenderPipeline, } } diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs.meta b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/RenderPipelineTypes.cs.meta similarity index 83% rename from Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs.meta rename to Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/RenderPipelineTypes.cs.meta index 6f9f7c807..38093f034 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/URP/UrpPipelineTypes.cs.meta +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MaterialIO/RenderPipelineTypes.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c2ddf76db17176b4bb4480924f97c9d3 +guid: 87bf5e0c19fe0584084fcddfd5294ad3 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs index 4878c1493..c9290f8f7 100644 --- a/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs +++ b/Assets/VRM10/Editor/ScriptedImporter/VrmScriptedImporterImpl.cs @@ -18,7 +18,7 @@ namespace UniVRM10 { switch (renderPipeline) { - case RenderPipelineTypes.Builtin: + case RenderPipelineTypes.BuiltinRenderPipeline: return new Vrm10MaterialDescriptorGenerator(); case RenderPipelineTypes.UniversalRenderPipeline: