public void VRMLookAtTest() { var parser = new GltfParser(); parser.ParsePath(AliciaPath); byte[] bytes = default; using (var loader = new VRMImporterContext(parser)) { loader.Load(); loader.ShowMeshes(); var go = loader.Root; var fp = go.GetComponent <VRMFirstPerson>(); GameObject.DestroyImmediate(go.GetComponent <VRMLookAtBoneApplyer>()); go.AddComponent <VRMLookAtBlendShapeApplyer>(); bytes = VRMEditorExporter.Export(go, null, new VRMExportSettings { PoseFreeze = true, }); } var parser2 = new GltfParser(); parser2.Parse(AliciaPath, bytes); var loader2 = new VRMImporterContext(parser2); Assert.AreEqual(LookAtType.BlendShape, loader2.VRM.firstPerson.lookAtType); }
static void ImportMenu() { var path = EditorUtility.OpenFilePanel("open vrm", "", "vrm"); if (string.IsNullOrEmpty(path)) { return; } if (Application.isPlaying) { // load into scene var parser = new GltfParser(); parser.ParsePath(path); using (var context = new VRMImporterContext(parser)) { context.Load(); context.EnableUpdateWhenOffscreen(); context.ShowMeshes(); context.DisposeOnGameObjectDestroyed(); Selection.activeGameObject = context.Root; } } else { if (path.StartsWithUnityAssetPath()) { Debug.LogWarningFormat("disallow import from folder under the Assets"); return; } var assetPath = EditorUtility.SaveFilePanel("save prefab", "Assets", Path.GetFileNameWithoutExtension(path), "prefab"); if (string.IsNullOrEmpty(path)) { return; } if (!assetPath.StartsWithUnityAssetPath()) { Debug.LogWarningFormat("out of asset path: {0}", assetPath); return; } // import as asset var prefabPath = UnityPath.FromUnityPath(assetPath); var parser = new GltfParser(); parser.ParseGlb(File.ReadAllBytes(path)); Action <IEnumerable <string> > onCompleted = texturePaths => { // // after textures imported // var map = texturePaths.Select(x => { var texture = AssetDatabase.LoadAssetAtPath(x, typeof(Texture2D)); return(texture.name, texture); }).ToArray();
static void ImportMenu() { var path = EditorUtility.OpenFilePanel("open vrm", "", "vrm"); if (string.IsNullOrEmpty(path)) { return; } if (Application.isPlaying) { // load into scene var parser = new GltfParser(); parser.ParsePath(path); var context = new VRMImporterContext(parser); context.Load(); context.ShowMeshes(); context.EnableUpdateWhenOffscreen(); Selection.activeGameObject = context.Root; } else { if (path.StartsWithUnityAssetPath()) { Debug.LogWarningFormat("disallow import from folder under the Assets"); return; } var assetPath = EditorUtility.SaveFilePanel("save prefab", "Assets", Path.GetFileNameWithoutExtension(path), "prefab"); if (string.IsNullOrEmpty(path)) { return; } if (!assetPath.StartsWithUnityAssetPath()) { Debug.LogWarningFormat("out of asset path: {0}", assetPath); return; } // import as asset var prefabPath = UnityPath.FromUnityPath(assetPath); var parser = new GltfParser(); parser.ParseGlb(File.ReadAllBytes(path)); var context = new VRMImporterContext(parser); var editor = new VRMEditorImporterContext(context); editor.ExtractImages(prefabPath); EditorApplication.delayCall += () => { // // after textures imported // context.Load(); editor.SaveAsAsset(prefabPath); editor.Dispose(); }; } }
/// <summary> /// VRM1 で パースし、失敗したら Migration してから VRM1 でパースする /// </summary> /// <param name="path"></param> /// <param name="migrateToVrm1"></param> /// <returns></returns> public static string TryParseOrMigrate(string path, bool migrateToVrm1, out GltfParser parser) { // // Parse(parse glb, parser gltf json) // parser = new GltfParser(); parser.ParsePath(path); if (UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.TryGet(parser.GLTF.extensions, out UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm)) { // success return(default);
public void MaterialImporterTest() { var parser = new GltfParser(); parser.ParsePath(AliciaPath); var vrmImporter = new VRMImporterContext(parser, null); var materialParam = new VRMMaterialImporter(vrmImporter.VRM).GetMaterialParam(parser, 0); Assert.AreEqual("VRM/MToon", materialParam.ShaderName); Assert.AreEqual("Alicia_body", materialParam.TextureSlots["_MainTex"].UnityObjectName); var(key, value) = materialParam.EnumerateSubAssetKeyValue().First(); Assert.AreEqual(new SubAssetKey(typeof(Texture2D), "Alicia_body"), key); }
static void ImportRuntime(string path) { // load into scene var parser = new GltfParser(); parser.ParsePath(path); using (var context = new VRMImporterContext(parser)) { context.Load(); context.EnableUpdateWhenOffscreen(); context.ShowMeshes(); context.DisposeOnGameObjectDestroyed(); Selection.activeGameObject = context.Root; } }
public void MToonMaterialParamTest() { if (!VRMTestAssets.TryGetPath("Models/VRoid/VictoriaRubin/VictoriaRubin.vrm", out string path)) { return; } var parser = new GltfParser(); parser.ParsePath(path); var importer = new VRMImporterContext(parser, null); var materialImporter = new VRMMaterialImporter(importer.VRM); Assert.AreEqual(73, parser.GLTF.materials.Count); Assert.True(materialImporter.TryCreateParam(parser, 0, out MaterialImportParam param)); }
static GameObject Load(FileInfo gltf, DirectoryInfo root, byte[] bytes = null) { var parser = new GltfParser(); try { if (bytes != null) { parser.Parse(gltf.FullName, bytes); } else { parser.ParsePath(gltf.FullName); } } catch (Exception ex) { Debug.LogError($"ParseError: {gltf}"); Debug.LogException(ex); return(null); } try { using (var importer = new VRMImporterContext(parser)) { importer.Load(); return(importer.DisposeOnGameObjectDestroyed().gameObject); } } catch (Exception ex) { Message(gltf.FullName.Substring(root.FullName.Length), ex); return(null); } }
public void VRMLookAtCurveMapTest() { var parser = new GltfParser(); parser.ParsePath(AliciaPath); byte[] bytes = default; CurveMapper horizontalInner = default; using (var loader = new VRMImporterContext(parser)) { loader.Load(); loader.ShowMeshes(); var go = loader.Root; var fp = go.GetComponent <VRMFirstPerson>(); var lookAt = go.GetComponent <VRMLookAtBoneApplyer>(); horizontalInner = lookAt.HorizontalInner; bytes = VRMEditorExporter.Export(go, null, new VRMExportSettings { PoseFreeze = false, }); } var parser2 = new GltfParser(); parser2.Parse(AliciaPath, bytes); using (var loader = new VRMImporterContext(parser2)) { loader.Load(); loader.ShowMeshes(); var lookAt = loader.Root.GetComponent <VRMLookAtBoneApplyer>(); Assert.AreEqual(horizontalInner.CurveXRangeDegree, lookAt.HorizontalInner.CurveXRangeDegree); Assert.AreEqual(horizontalInner.CurveYRangeDegree, lookAt.HorizontalInner.CurveYRangeDegree); } }
/// <summary> /// VRM1 で パースし、失敗したら Migration してから VRM1 でパースする /// </summary> /// <param name="path"></param> /// <param name="migrateToVrm1"></param> /// <returns></returns> public static GltfParser Parse(string path, bool migrateToVrm1) { // // Parse(parse glb, parser gltf json) // var parser = new GltfParser(); parser.ParsePath(path); if (UniGLTF.Extensions.VRMC_vrm.GltfDeserializer.TryGet(parser.GLTF.extensions, out UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm)) { return(parser); } if (migrateToVrm1) { // try migrateion var migrated = MigrationVrm.Migrate(File.ReadAllBytes(path)); parser = new GltfParser(); parser.Parse(path, migrated); return(parser); } return(null); }
async void LoadModelAsync(string path) { if (!File.Exists(path)) { return; } Debug.LogFormat("{0}", path); var ext = Path.GetExtension(path).ToLower(); switch (ext) { case ".vrm": { var file = File.ReadAllBytes(path); var parser = new GltfParser(); parser.ParseGlb(file); using (var context = new VRMImporterContext(parser)) { await m_texts.UpdateMetaAsync(context); await context.LoadAsync(); context.EnableUpdateWhenOffscreen(); context.ShowMeshes(); context.DisposeOnGameObjectDestroyed(); SetModel(context.Root); } break; } case ".glb": { var file = File.ReadAllBytes(path); var parser = new GltfParser(); parser.ParseGlb(file); var context = new UniGLTF.ImporterContext(parser); context.Load(); context.EnableUpdateWhenOffscreen(); context.ShowMeshes(); context.DisposeOnGameObjectDestroyed(); SetModel(context.Root); break; } case ".gltf": case ".zip": { var parser = new GltfParser(); parser.ParsePath(path); var context = new UniGLTF.ImporterContext(parser); context.Load(); context.EnableUpdateWhenOffscreen(); context.ShowMeshes(); context.DisposeOnGameObjectDestroyed(); SetModel(context.Root); break; } default: Debug.LogWarningFormat("unknown file type: {0}", path); break; } }
void LoadModel(string path) { if (!File.Exists(path)) { return; } Debug.LogFormat("{0}", path); var ext = Path.GetExtension(path).ToLower(); switch (ext) { case ".vrm": { var parser = new UniGLTF.GltfParser(); parser.ParsePath(path); using (var loader = new RuntimeUnityBuilder(parser)) { loader.Load(); loader.ShowMeshes(); loader.EnableUpdateWhenOffscreen(); var destroyer = loader.DisposeOnGameObjectDestroyed(); SetModel(destroyer.gameObject); } break; } case ".glb": { var file = File.ReadAllBytes(path); var parser = new GltfParser(); parser.ParseGlb(file); using (var loader = new UniGLTF.ImporterContext(parser)) { loader.Load(); loader.ShowMeshes(); loader.EnableUpdateWhenOffscreen(); loader.ShowMeshes(); var destroyer = loader.DisposeOnGameObjectDestroyed(); SetModel(destroyer.gameObject); } break; } case ".gltf": case ".zip": { var parser = new GltfParser(); parser.ParsePath(path); using (var loader = new UniGLTF.ImporterContext(parser)) { loader.Load(); loader.ShowMeshes(); loader.EnableUpdateWhenOffscreen(); loader.ShowMeshes(); var destroyer = loader.DisposeOnGameObjectDestroyed(); SetModel(destroyer.gameObject); } break; } default: Debug.LogWarningFormat("unknown file type: {0}", path); break; } }
void LoadModel(string path) { if (!File.Exists(path)) { return; } Debug.LogFormat("{0}", path); var ext = Path.GetExtension(path).ToLower(); switch (ext) { case ".vrm": { // var context = new ImporterContext(); var file = File.ReadAllBytes(path); // context.ParseGlb(file); // context.Load(); // context.ShowMeshes(); // context.EnableUpdateWhenOffscreen(); // context.ShowMeshes(); var model = UniVRM10.VrmLoader.CreateVrmModel(file, new FileInfo(path)); // UniVRM-0.XXのコンポーネントを構築する var assets = UniVRM10.RuntimeUnityBuilder.ToUnityAsset(model, showMesh: false); // showRenderer = false のときに後で表示する例 foreach (var renderer in assets.Renderers) { renderer.enabled = true; } UniVRM10.ComponentBuilder.Build10(model, assets); SetModel(assets.Root); break; } case ".glb": { var file = File.ReadAllBytes(path); var parser = new GltfParser(); parser.ParseGlb(file); var context = new UniGLTF.ImporterContext(parser); context.Load(); context.ShowMeshes(); context.EnableUpdateWhenOffscreen(); context.ShowMeshes(); SetModel(context.Root); break; } case ".gltf": case ".zip": { var parser = new GltfParser(); parser.ParsePath(path); var context = new UniGLTF.ImporterContext(parser); context.Load(); context.ShowMeshes(); context.EnableUpdateWhenOffscreen(); context.ShowMeshes(); SetModel(context.Root); break; } default: Debug.LogWarningFormat("unknown file type: {0}", path); break; } }