async void LoadModelAsync(string path, bool isVrm) { if (!File.Exists(path)) { return; } Debug.LogFormat("{0}", path); GltfData data; try { data = new AutoGltfFileParser(path).Parse(); } catch (Exception ex) { Debug.LogWarningFormat("parse error: {0}", ex); return; } if (isVrm) { try { var vrm = new VRMData(data); using (var loader = new VRMImporterContext(vrm, materialGenerator: GetVrmMaterialGenerator(m_useUrpMaterial.isOn, vrm.VrmExtension))) { await m_texts.UpdateMetaAsync(loader); var instance = await loader.LoadAsync(GetIAwaitCaller(m_useAsync.isOn)); SetModel(instance); } } catch (NotVrm0Exception) { // retry Debug.LogWarning("file extension is vrm. but not vrm ?"); using (var loader = new UniGLTF.ImporterContext(data, materialGenerator: GetGltfMaterialGenerator(m_useUrpMaterial.isOn))) { var instance = await loader.LoadAsync(GetIAwaitCaller(m_useAsync.isOn)); SetModel(instance); } } } else { using (var loader = new UniGLTF.ImporterContext(data, materialGenerator: GetGltfMaterialGenerator(m_useUrpMaterial.isOn))) { var instance = await loader.LoadAsync(GetIAwaitCaller(m_useAsync.isOn)); SetModel(instance); } } }
/// <summary> /// Build unity objects from parsed gltf /// </summary> public static void Load(this ImporterContext self) { var meassureTime = new ImporterContextSpeedLog(); var task = self.LoadAsync(default(ImmediateCaller), meassureTime.MeasureTime); if (!task.IsCompleted) { throw new Exception(); } #if VRM_DEVELOP Debug.Log(meassureTime.GetSpeedLog()); #endif }
public static async Task <RuntimeGltfInstance> LoadAsync(string path, IAwaitCaller awaitCaller = null, MaterialGeneratorCallback materialGeneratorCallback = null, MetaCallback metaCallback = null, bool loadAnimation = false ) { if (!File.Exists(path)) { throw new FileNotFoundException(path); } if (awaitCaller == null) { Debug.LogWarning("VrmUtility.LoadAsync: awaitCaller argument is null. ImmediateCaller is used as the default fallback. When playing, we recommend RuntimeOnlyAwaitCaller."); awaitCaller = new ImmediateCaller(); } using (GltfData data = new AutoGltfFileParser(path).Parse()) { try { var vrm = new VRMData(data); IMaterialDescriptorGenerator materialGen = default; if (materialGeneratorCallback != null) { materialGen = materialGeneratorCallback(vrm.VrmExtension); } using (var loader = new VRMImporterContext(vrm, materialGenerator: materialGen, loadAnimation: loadAnimation)) { if (metaCallback != null) { var meta = await loader.ReadMetaAsync(awaitCaller, true); metaCallback(meta); } return(await loader.LoadAsync(awaitCaller)); } } catch (NotVrm0Exception) { // retry Debug.LogWarning("file extension is vrm. but not vrm ?"); using (var loader = new UniGLTF.ImporterContext(data)) { return(await loader.LoadAsync(awaitCaller)); } } } }
public static void LoadVrmAsync(string path, Byte[] bytes, Action <GameObject> onLoaded, Action <Exception> onError = null, bool show = true) { var context = new ImporterContext(); context.Parse(path, bytes); context.LoadAsync(_ => { if (show) { context.ShowMeshes(); } onLoaded(context.Root); }, onError); }
/// <summary> /// Build unity objects from parsed gltf /// </summary> public static void Load(this ImporterContext self) { var meassureTime = new ImporterContextSpeedLog(); var task = self.LoadAsync(default(ImmediateCaller), meassureTime.MeasureTime); if (!task.IsCompleted) { throw new Exception(); } if (task.IsFaulted) { throw new AggregateException(task.Exception); } #if VRM_DEVELOP Debug.Log($"{self.Parser.TargetPath}: {meassureTime.GetSpeedLog()}"); #endif }
public static async Task <RuntimeGltfInstance> LoadAsync(string path, IAwaitCaller awaitCaller = null, MaterialGeneratorCallback materialGeneratorCallback = null, MetaCallback metaCallback = null ) { if (!File.Exists(path)) { throw new FileNotFoundException(path); } using (GltfData data = new AutoGltfFileParser(path).Parse()) { try { var vrm = new VRMData(data); IMaterialDescriptorGenerator materialGen = default; if (materialGeneratorCallback != null) { materialGen = materialGeneratorCallback(vrm.VrmExtension); } using (var loader = new VRMImporterContext(vrm, materialGenerator: materialGen)) { if (metaCallback != null) { var meta = await loader.ReadMetaAsync(new ImmediateCaller(), true); metaCallback(meta); } return(await loader.LoadAsync(awaitCaller)); } } catch (NotVrm0Exception) { // retry Debug.LogWarning("file extension is vrm. but not vrm ?"); using (var loader = new UniGLTF.ImporterContext(data)) { return(await loader.LoadAsync(awaitCaller)); } } } }
/// <summary> /// Build unity objects from parsed gltf /// </summary> public static RuntimeGltfInstance Load(this ImporterContext self) { var meassureTime = new ImporterContextSpeedLog(); var task = self.LoadAsync(new ImmediateCaller(), meassureTime.MeasureTime); if (!task.IsCompleted) { throw new Exception(); } if (task.IsFaulted) { throw new AggregateException(task.Exception); } #if VRM_DEVELOP Debug.Log($"{self.Data.TargetPath}: {meassureTime.GetSpeedLog()}"); #endif return(task.Result); }
/// <summary> /// Build unity objects from parsed gltf /// </summary> public static void Load(this ImporterContext self) { var meassureTime = new ImporterContextSpeedLog(); var task = self.LoadAsync(default(ImmediateCaller), meassureTime.MeasureTime); if (!task.IsCompleted) { throw new Exception(); } if (task.IsFaulted) { if (task.Exception is AggregateException ae && ae.InnerExceptions.Count == 1) { throw ae.InnerException; } else { throw task.Exception; } }
/// <summary> /// Build unity objects from parsed gltf /// </summary> public static void Load(this ImporterContext self) { var meassureTime = new ImporterContextSpeedLog(); using (var queue = TaskQueue.Create()) { var task = self.LoadAsync(meassureTime.MeasureTime); // 中断された await を消化する while (!task.IsCompleted) { // execute synchronous queue.ExecuteOneCallback(); } } #if VRM_DEVELOP Debug.Log(meassureTime.GetSpeedLog()); #endif }
async void LoadModel(string path) { if (!File.Exists(path)) { return; } Debug.LogFormat("{0}", path); GltfData data; try { data = new AutoGltfFileParser(path).Parse(); } catch (Exception ex) { Debug.LogWarning(ex); return; } var vrm = await System.Threading.Tasks.Task.Run(() => { if (Vrm10Data.TryParseOrMigrate(data, doMigrate: true, out Vrm10Data _vrm)) { return(_vrm); } else { return(null); } }); if (vrm != null) { // vrm using (var loader = new Vrm10Importer(vrm, materialGenerator: GetVrmMaterialDescriptorGenerator(m_useUrpMaterial.isOn), doNormalize: m_useNormalization.isOn)) { // migrate しても thumbnail は同じ var thumbnail = await loader.LoadVrmThumbnailAsync(); if (vrm.OriginalMetaBeforeMigration != null) { // migrated from vrm-0.x. use OldMeta m_texts.UpdateMeta(vrm.OriginalMetaBeforeMigration, thumbnail); } else { // load vrm-1.0. use newMeta m_texts.UpdateMeta(vrm.VrmExtension.Meta, thumbnail); } var instance = await loader.LoadAsync(new RuntimeOnlyAwaitCaller()); SetModel(instance); } } else { // gltf using (var loader = new UniGLTF.ImporterContext(data, materialGenerator: GetMaterialDescriptorGenerator(m_useUrpMaterial.isOn))) { var instance = await loader.LoadAsync(new RuntimeOnlyAwaitCaller()); SetModel(instance); } } }