diff --git a/Assets/UniGLTF/Runtime/UniGLTF/UniGLTFVersion.cs b/Assets/UniGLTF/Runtime/UniGLTF/UniGLTFVersion.cs index 3b74d8359..9c477b3e9 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/UniGLTFVersion.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/UniGLTFVersion.cs @@ -4,8 +4,8 @@ namespace UniGLTF public static partial class UniGLTFVersion { public const int MAJOR = 2; - public const int MINOR = 31; - public const int PATCH = 1; - public const string VERSION = "2.31.1"; + public const int MINOR = 32; + public const int PATCH = 0; + public const string VERSION = "2.32.0"; } } diff --git a/Assets/UniGLTF/package.json b/Assets/UniGLTF/package.json index 148fcad93..8f48dc250 100644 --- a/Assets/UniGLTF/package.json +++ b/Assets/UniGLTF/package.json @@ -1,6 +1,6 @@ { "name": "com.vrmc.gltf", - "version": "0.95.1", + "version": "0.96.0", "displayName": "UniGLTF", "description": "GLTF importer and exporter", "unity": "2019.4", @@ -11,6 +11,6 @@ "name": "VRM Consortium" }, "dependencies": { - "com.vrmc.vrmshaders": "0.95.1" + "com.vrmc.vrmshaders": "0.96.0" } } \ No newline at end of file diff --git a/Assets/VRM/Runtime/Format/VRMVersion.cs b/Assets/VRM/Runtime/Format/VRMVersion.cs index e03444a47..eb18538dc 100644 --- a/Assets/VRM/Runtime/Format/VRMVersion.cs +++ b/Assets/VRM/Runtime/Format/VRMVersion.cs @@ -4,8 +4,8 @@ namespace VRM public static partial class VRMVersion { public const int MAJOR = 0; - public const int MINOR = 95; - public const int PATCH = 1; - public const string VERSION = "0.95.1"; + public const int MINOR = 96; + public const int PATCH = 0; + public const string VERSION = "0.96.0"; } } diff --git a/Assets/VRM/Samples~/FirstPersonSample/VRMRuntimeLoader.cs b/Assets/VRM/Samples~/FirstPersonSample/VRMRuntimeLoader.cs index ed4c36a07..3e19933bc 100644 --- a/Assets/VRM/Samples~/FirstPersonSample/VRMRuntimeLoader.cs +++ b/Assets/VRM/Samples~/FirstPersonSample/VRMRuntimeLoader.cs @@ -114,7 +114,7 @@ namespace VRM.FirstPersonSample var loaded = default(RuntimeGltfInstance); if (m_loadAsync) { - loaded = await context.LoadAsync(); + loaded = await context.LoadAsync(new VRMShaders.RuntimeOnlyAwaitCaller()); } else { diff --git a/Assets/VRM/package.json b/Assets/VRM/package.json index b79a8aa4e..d18ae467a 100644 --- a/Assets/VRM/package.json +++ b/Assets/VRM/package.json @@ -1,6 +1,6 @@ { "name": "com.vrmc.univrm", - "version": "0.95.1", + "version": "0.96.0", "displayName": "VRM", "description": "VRM importer", "unity": "2019.4", @@ -14,8 +14,8 @@ "name": "VRM Consortium" }, "dependencies": { - "com.vrmc.vrmshaders": "0.95.1", - "com.vrmc.gltf": "0.95.1" + "com.vrmc.vrmshaders": "0.96.0", + "com.vrmc.gltf": "0.96.0" }, "samples": [ { diff --git a/Assets/VRM10/Samples~/VRM10FirstPersonSample/VRM10RuntimeLoader.cs b/Assets/VRM10/Samples~/VRM10FirstPersonSample/VRM10RuntimeLoader.cs index b2c30e826..bcd5fd278 100644 --- a/Assets/VRM10/Samples~/VRM10FirstPersonSample/VRM10RuntimeLoader.cs +++ b/Assets/VRM10/Samples~/VRM10FirstPersonSample/VRM10RuntimeLoader.cs @@ -69,7 +69,7 @@ namespace UniVRM10.FirstPersonSample return; } - var instance = await LoadAsync(path); + var instance = await LoadAsync(path, new VRMShaders.RuntimeOnlyAwaitCaller()); var root = instance.gameObject; root.transform.SetParent(transform, false); @@ -84,12 +84,12 @@ namespace UniVRM10.FirstPersonSample SetupTarget(m_target); } - async Task LoadAsync(string path) + async Task LoadAsync(string path, VRMShaders.IAwaitCaller awaitCaller) { var instance = await Vrm10.LoadPathAsync(path); // VR用 FirstPerson 設定 - await instance.Vrm.FirstPerson.SetupAsync(instance.gameObject); + await instance.Vrm.FirstPerson.SetupAsync(instance.gameObject, awaitCaller); return instance; } diff --git a/Assets/VRM10/Samples~/VRM10Viewer/VRM10Viewer.unity b/Assets/VRM10/Samples~/VRM10Viewer/VRM10Viewer.unity index 558bb7883..6a4f578f3 100644 --- a/Assets/VRM10/Samples~/VRM10Viewer/VRM10Viewer.unity +++ b/Assets/VRM10/Samples~/VRM10Viewer/VRM10Viewer.unity @@ -313,6 +313,81 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &154330167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 154330168} + - component: {fileID: 154330170} + - component: {fileID: 154330169} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &154330168 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154330167} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1270311309} + m_Father: {fileID: 602093298} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &154330169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154330167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &154330170 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154330167} + m_CullTransparentMesh: 0 --- !u!1 &175751362 GameObject: m_ObjectHideFlags: 0 @@ -1020,6 +1095,7 @@ RectTransform: - {fileID: 103723704} - {fileID: 1438613464} - {fileID: 1677931469} + - {fileID: 602093298} m_Father: {fileID: 124675794} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1547,6 +1623,91 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 597950321} m_CullTransparentMesh: 0 +--- !u!1 &602093297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 602093298} + - component: {fileID: 602093299} + m_Layer: 5 + m_Name: UseAsync + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &602093298 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 602093297} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 154330168} + - {fileID: 1954133885} + m_Father: {fileID: 339774397} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 162, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &602093299 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 602093297} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 154330169} + toggleTransition: 1 + graphic: {fileID: 1270311310} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 0 --- !u!1 &634488420 GameObject: m_ObjectHideFlags: 0 @@ -3966,6 +4127,80 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1268276254} m_CullTransparentMesh: 0 +--- !u!1 &1270311308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1270311309} + - component: {fileID: 1270311311} + - component: {fileID: 1270311310} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1270311309 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270311308} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 154330168} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1270311310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270311308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1270311311 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270311308} + m_CullTransparentMesh: 0 --- !u!1 &1289294207 GameObject: m_ObjectHideFlags: 0 @@ -5350,6 +5585,7 @@ MonoBehaviour: m_enableAutoExpression: {fileID: 1767738855} m_useUrpMaterial: {fileID: 1438613465} m_useNormalization: {fileID: 1677931470} + m_useAsync: {fileID: 602093299} m_src: {fileID: 0} m_target: {fileID: 802105000} Root: {fileID: 0} @@ -5843,6 +6079,84 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1922159875} m_CullTransparentMesh: 0 +--- !u!1 &1954133884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1954133885} + - component: {fileID: 1954133887} + - component: {fileID: 1954133886} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1954133885 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954133884} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 602093298} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9, y: -0.5} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1954133886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954133884} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Use Async +--- !u!222 &1954133887 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1954133884} + m_CullTransparentMesh: 0 --- !u!1 &1963417398 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/VRM10/Samples~/VRM10Viewer/VRM10ViewerUI.cs b/Assets/VRM10/Samples~/VRM10Viewer/VRM10ViewerUI.cs index 77f191a0a..8a8ca682a 100644 --- a/Assets/VRM10/Samples~/VRM10Viewer/VRM10ViewerUI.cs +++ b/Assets/VRM10/Samples~/VRM10Viewer/VRM10ViewerUI.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using System.Threading; using UniGLTF; using UniHumanoid; using UnityEngine; @@ -33,6 +34,9 @@ namespace UniVRM10.VRM10Viewer [SerializeField] Toggle m_useNormalization = default; + [SerializeField] + Toggle m_useAsync = default; + [Header("Runtime")] [SerializeField] HumanPoseTransfer m_src = default; @@ -46,6 +50,8 @@ namespace UniVRM10.VRM10Viewer [SerializeField] TextAsset m_motion; + private CancellationTokenSource _cancellationTokenSource; + [Serializable] class TextFields { @@ -328,6 +334,11 @@ namespace UniVRM10.VRM10Viewer m_texts.Start(); } + private void OnDestroy() + { + _cancellationTokenSource?.Dispose(); + } + private void LoadMotion(string source) { var context = new UniHumanoid.BvhImporterContext(); @@ -350,6 +361,14 @@ namespace UniVRM10.VRM10Viewer if (Root != null) Root.SetActive(!Root.activeSelf); } + if (Input.GetKeyDown(KeyCode.Escape)) + { + if (_cancellationTokenSource != null) + { + _cancellationTokenSource.Cancel(); + } + } + m_ui.UpdateToggle(() => m_loaded?.EnableBvh(m_src), () => m_loaded?.EnableTPose(m_pose)); } @@ -414,23 +433,62 @@ namespace UniVRM10.VRM10Viewer return; } - Debug.LogFormat("{0}", path); - var vrm10Instance = await Vrm10.LoadPathAsync(path, - canLoadVrm0X: true, - normalizeTransform: m_useNormalization.isOn, - showMeshes: false, - awaitCaller: new RuntimeOnlyAwaitCaller(), - materialGenerator: GetVrmMaterialDescriptorGenerator(m_useUrpMaterial.isOn), - vrmMetaInformationCallback: m_texts.UpdateMeta); - if (vrm10Instance != null) + _cancellationTokenSource?.Dispose(); + _cancellationTokenSource = new CancellationTokenSource(); + var cancellationToken = _cancellationTokenSource.Token; + + try { - SetModel(vrm10Instance.GetComponent()); + Debug.LogFormat("{0}", path); + var vrm10Instance = await Vrm10.LoadPathAsync(path, + canLoadVrm0X: true, + normalizeTransform: m_useNormalization.isOn, + showMeshes: false, + awaitCaller: m_useAsync.enabled ? (IAwaitCaller)new RuntimeOnlyAwaitCaller() : (IAwaitCaller)new ImmediateCaller(), + materialGenerator: GetVrmMaterialDescriptorGenerator(m_useUrpMaterial.isOn), + vrmMetaInformationCallback: m_texts.UpdateMeta, + ct: cancellationToken); + if (vrm10Instance != null) + { + if (cancellationToken.IsCancellationRequested) + { + UnityObjectDestoyer.DestroyRuntimeOrEditor(vrm10Instance.gameObject); + cancellationToken.ThrowIfCancellationRequested(); + } + + SetModel(vrm10Instance.GetComponent()); + } + else + { + // NOTE: load as glTF model if failed to load as VRM 1.0. + // TODO: Hand over CancellationToken + var gltfModel = await GltfUtility.LoadAsync(path, + awaitCaller: m_useAsync.enabled ? (IAwaitCaller)new RuntimeOnlyAwaitCaller() : (IAwaitCaller)new ImmediateCaller()); + if (gltfModel == null) + { + throw new Exception("Failed to load the file as glTF format."); + } + + if (cancellationToken.IsCancellationRequested) + { + gltfModel.Dispose(); + cancellationToken.ThrowIfCancellationRequested(); + } + + SetModel(gltfModel); + } } - else + catch (Exception ex) { - // fallback to gltf - var instance = await GltfUtility.LoadAsync(path, awaitCaller: new RuntimeOnlyAwaitCaller()); - SetModel(instance); + if (ex is OperationCanceledException) + { + Debug.LogWarning($"Canceled to Load: {path}"); + } + else + { + Debug.LogError($"Failed to Load: {path}"); + Debug.LogException(ex); + } } } diff --git a/Assets/VRM10/package.json b/Assets/VRM10/package.json index 93c492ccf..e302c1fc6 100644 --- a/Assets/VRM10/package.json +++ b/Assets/VRM10/package.json @@ -1,6 +1,6 @@ { "name": "com.vrmc.vrm", - "version": "0.95.1", + "version": "0.96.0", "displayName": "VRM-1.0β", "description": "VRM-1.0β importer", "unity": "2019.4", @@ -14,8 +14,8 @@ "name": "VRM Consortium" }, "dependencies": { - "com.vrmc.vrmshaders": "0.95.1", - "com.vrmc.gltf": "0.95.1" + "com.vrmc.vrmshaders": "0.96.0", + "com.vrmc.gltf": "0.96.0" }, "samples": [ { diff --git a/Assets/VRMShaders/package.json b/Assets/VRMShaders/package.json index 0cab87465..e30ca09b5 100644 --- a/Assets/VRMShaders/package.json +++ b/Assets/VRMShaders/package.json @@ -1,6 +1,6 @@ { "name": "com.vrmc.vrmshaders", - "version": "0.95.1", + "version": "0.96.0", "displayName": "VRM Shaders", "description": "VRM Shaders", "unity": "2019.4",