diff --git a/Scripts/Format/Editor/VRMVersionMenu.cs b/Scripts/Format/Editor/VRMVersionMenu.cs index a30112685..e17f843ac 100644 --- a/Scripts/Format/Editor/VRMVersionMenu.cs +++ b/Scripts/Format/Editor/VRMVersionMenu.cs @@ -61,6 +61,41 @@ namespace VRM return ""; } + static void TraverseItem(JsonNode node, JsonFormatter f, UnityPath dir) + { + var title = GetTitle(node); + if (string.IsNullOrEmpty(title)) + { + Traverse(node, f, dir); + } + else + { + // ref + f.BeginMap(); + f.Key("$ref"); + var fileName = string.Format("{0}.schema.json", title); + f.Value(fileName); + f.EndMap(); + + // new formatter + { + var subFormatter = new JsonFormatter(4); + + subFormatter.BeginMap(); + foreach (var _kv in node.ObjectItems) + { + subFormatter.Key(_kv.Key); + Traverse(_kv.Value, subFormatter, dir); + } + subFormatter.EndMap(); + + var subJson = subFormatter.ToString(); + var path = dir.Child(fileName); + File.WriteAllText(path.FullPath, subJson, Encoding.UTF8); + } + } + } + static void Traverse(JsonNode node, JsonFormatter f, UnityPath dir) { switch(node.Value.ValueType) @@ -69,7 +104,7 @@ namespace VRM f.BeginList(); foreach(var x in node.ArrayItems) { - Traverse(x, f, dir); + TraverseItem(x, f, dir); } f.EndList(); break; @@ -81,37 +116,7 @@ namespace VRM foreach (var kv in node.ObjectItems) { f.Key(kv.Key); - var title = GetTitle(kv.Value); - if (string.IsNullOrEmpty(title)) - { - Traverse(kv.Value, f, dir); - } - else - { - // ref - f.BeginMap(); - f.Key("$ref"); - var fileName = string.Format("{0}.schema.json", title); - f.Value(fileName); - f.EndMap(); - - // new formatter - { - var subFormatter = new JsonFormatter(4); - - subFormatter.BeginMap(); - foreach (var _kv in kv.Value.ObjectItems) - { - subFormatter.Key(_kv.Key); - Traverse(_kv.Value, subFormatter, dir); - } - subFormatter.EndMap(); - - var subJson = subFormatter.ToString(); - var path = dir.Child(fileName); - File.WriteAllText(path.FullPath, subJson, Encoding.UTF8); - } - } + TraverseItem(kv.Value, f, dir); } f.EndMap(); } diff --git a/Scripts/Format/VRMFormat.cs b/Scripts/Format/VRMFormat.cs index 294f2b929..078f3c4dc 100644 --- a/Scripts/Format/VRMFormat.cs +++ b/Scripts/Format/VRMFormat.cs @@ -38,7 +38,7 @@ VRM extension is for 3d humanoid avatars (and models) in VR applications. ")] public class glTF_VRM_extensions : JsonSerializableBase { - [JsonSchema(Description = @"Version of exporter that vrm created. UniVRM-0.41")] + [JsonSchema(Description = @"Version of exporter that vrm created. " + VRMVersion.VRM_VERSION)] public string exporterVersion = "UniVRM-" + VRMVersion.VERSION; public glTF_VRM_Meta meta = new glTF_VRM_Meta(); diff --git a/Scripts/Format/glTF_VRM_BlendShape.cs b/Scripts/Format/glTF_VRM_BlendShape.cs index 8d3c5238b..f906ed5d4 100644 --- a/Scripts/Format/glTF_VRM_BlendShape.cs +++ b/Scripts/Format/glTF_VRM_BlendShape.cs @@ -8,6 +8,7 @@ using UniJSON; namespace VRM { [Serializable] + [JsonSchema(Title = "vrm.materialbind")] public class glTF_VRM_MaterialValueBind : UniGLTF.JsonSerializableBase { public string materialName; @@ -23,6 +24,7 @@ namespace VRM } [Serializable] + [JsonSchema(Title = "vrm.blendshapebind")] public class glTF_VRM_BlendShapeBind : UniGLTF.JsonSerializableBase { public int mesh = -1; @@ -83,11 +85,37 @@ namespace VRM } [Serializable] + [JsonSchema(Title = "vrm.blendshapegroup", Description = "BlendShapeClip of UniVRM")] public class glTF_VRM_BlendShapeGroup : UniGLTF.JsonSerializableBase { + [JsonSchema(Description = "Expression name")] public string name; + + [JsonSchema(Description = "Predefined Expression name", EnumValues =new object[] { + "Neutral", + "A", + "I", + "U", + "E", + "O", + "Blink", + "Joy", + "Angry", + "Sorrow", + "Fun", + "LookUp", + "LookDown", + "LookLeft", + "LookRight", + "Blink_L", + "Blink_R", + })] public string presetName; + + [JsonSchema(Description = "Low level blendshape references. ")] public List binds = new List(); + + [JsonSchema(Description = "Material animation references.")] public List materialValues = new List(); protected override void SerializeMembers(GLTFJsonFormatter f) @@ -100,7 +128,7 @@ namespace VRM } [Serializable] - [JsonSchema(Title = "vrm.blendshapemaster")] + [JsonSchema(Title = "vrm.blendshapemaster", Description = "BlendShapeAvatar of UniVRM")] public class glTF_VRM_BlendShapeMaster : UniGLTF.JsonSerializableBase { public List blendShapeGroups = new List(); diff --git a/Scripts/Format/glTF_VRM_FirstPerson.cs b/Scripts/Format/glTF_VRM_FirstPerson.cs index a92e75111..0b6218366 100644 --- a/Scripts/Format/glTF_VRM_FirstPerson.cs +++ b/Scripts/Format/glTF_VRM_FirstPerson.cs @@ -8,11 +8,16 @@ using UniJSON; namespace VRM { [Serializable] + [JsonSchema(Title = "vrm.degreemap")] public class glTF_VRM_DegreeMap : UniGLTF.JsonSerializableBase { - // time, value, inTangent, outTangent + [JsonSchema(Description = "None linear mapping params. time, value, inTangent, outTangent")] public float[] curve; + + [JsonSchema(Description = "Look at input clamp range degree.")] public float xRange = 90.0f; + + [JsonSchema(Description = "Look at map range degree from xRange.")] public float yRange = 10.0f; protected override void SerializeMembers(GLTFJsonFormatter f) @@ -66,13 +71,20 @@ namespace VRM [JsonSchema(Title = "vrm.firstperson")] public class glTF_VRM_Firstperson : UniGLTF.JsonSerializableBase { + [JsonSchema(Description = "Switch to Head bone when model is rendered in first-person view.")] public int firstPersonBone = -1; + [JsonSchema(Description = "The target headset position in first-person view. Assuming the head bone is offset from the headset.")] public Vector3 firstPersonBoneOffset; + [JsonSchema(Description = "Switch on / off mesh for display in first-person view, third-person view, or the others.")] public List meshAnnotations = new List(); // lookat + [JsonSchema(Description = "Eye controller mode.", EnumValues = new object[] { + "Bone", + "BlendShape", + })] public string lookAtTypeName = "Bone"; public LookAtType lookAtType { @@ -82,9 +94,17 @@ namespace VRM } set { lookAtTypeName = value.ToString(); } } + + [JsonSchema(Description = "Eye controller setting.")] public glTF_VRM_DegreeMap lookAtHorizontalInner = new glTF_VRM_DegreeMap(); + + [JsonSchema(Description = "Eye controller setting.")] public glTF_VRM_DegreeMap lookAtHorizontalOuter = new glTF_VRM_DegreeMap(); + + [JsonSchema(Description = "Eye controller setting.")] public glTF_VRM_DegreeMap lookAtVerticalDown = new glTF_VRM_DegreeMap(); + + [JsonSchema(Description = "Eye controller setting.")] public glTF_VRM_DegreeMap lookAtVerticalUp = new glTF_VRM_DegreeMap(); protected override void SerializeMembers(GLTFJsonFormatter f) diff --git a/Scripts/Format/glTF_VRM_Humanoid.cs b/Scripts/Format/glTF_VRM_Humanoid.cs index 8d1d6d83a..2032ad336 100644 --- a/Scripts/Format/glTF_VRM_Humanoid.cs +++ b/Scripts/Format/glTF_VRM_Humanoid.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Linq; using UniGLTF; -using UnityEngine; -using UniHumanoid; using UniJSON; +using UnityEngine; + namespace VRM { @@ -89,8 +89,66 @@ namespace VRM } [Serializable] + [JsonSchema(Title = "vrm.humanoidbone")] public class glTF_VRM_HumanoidBone : JsonSerializableBase { + [JsonSchema(Description = "Human bone name.", EnumValues = new object[] { + "hips", + "leftUpperLeg", + "rightUpperLeg", + "leftLowerLeg", + "rightLowerLeg", + "leftFoot", + "rightFoot", + "spine", + "chest", + "neck", + "head", + "leftShoulder", + "rightShoulder", + "leftUpperArm", + "rightUpperArm", + "leftLowerArm", + "rightLowerArm", + "leftHand", + "rightHand", + "leftToes", + "rightToes", + "leftEye", + "rightEye", + "jaw", + "leftThumbProximal", + "leftThumbIntermediate", + "leftThumbDistal", + "leftIndexProximal", + "leftIndexIntermediate", + "leftIndexDistal", + "leftMiddleProximal", + "leftMiddleIntermediate", + "leftMiddleDistal", + "leftRingProximal", + "leftRingIntermediate", + "leftRingDistal", + "leftLittleProximal", + "leftLittleIntermediate", + "leftLittleDistal", + "rightThumbProximal", + "rightThumbIntermediate", + "rightThumbDistal", + "rightIndexProximal", + "rightIndexIntermediate", + "rightIndexDistal", + "rightMiddleProximal", + "rightMiddleIntermediate", + "rightMiddleDistal", + "rightRingProximal", + "rightRingIntermediate", + "rightRingDistal", + "rightLittleProximal", + "rightLittleIntermediate", + "rightLittleDistal", + "upperChest", + })] public string bone; public VRMBone vrmBone { @@ -103,12 +161,23 @@ namespace VRM return EnumUtil.TryParseOrDefault(bone); } } + + [JsonSchema(Description = "Reference node index")] public int node = -1; + [JsonSchema(Description = "Unity's HumanLimit.useDefaultValues")] public bool useDefaultValues = true; + + [JsonSchema(Description = "Unity's HumanLimit.min")] public Vector3 min; + + [JsonSchema(Description = "Unity's HumanLimit.max")] public Vector3 max; + + [JsonSchema(Description = "Unity's HumanLimit.center")] public Vector3 center; + + [JsonSchema(Description = "Unity's HumanLimit.axisLength")] public float axisLength; protected override void SerializeMembers(GLTFJsonFormatter f) @@ -131,13 +200,29 @@ namespace VRM public class glTF_VRM_Humanoid : JsonSerializableBase { public List humanBones = new List(); + + [JsonSchema(Description = "Unity's HumanDescription.armStretch")] public float armStretch = 0.05f; + + [JsonSchema(Description = "Unity's HumanDescription.legStretch")] public float legStretch = 0.05f; + + [JsonSchema(Description = "Unity's HumanDescription.upperArmTwist")] public float upperArmTwist = 0.5f; + + [JsonSchema(Description = "Unity's HumanDescription.lowerArmTwist")] public float lowerArmTwist = 0.5f; + + [JsonSchema(Description = "Unity's HumanDescription.upperLegTwist")] public float upperLegTwist = 0.5f; + + [JsonSchema(Description = "Unity's HumanDescription.lowerLegTwist")] public float lowerLegTwist = 0.5f; + + [JsonSchema(Description = "Unity's HumanDescription.feetSpacing")] public float feetSpacing = 0; + + [JsonSchema(Description = "Unity's HumanDescription.hasTranslationDoF")] public bool hasTranslationDoF = false; public void SetNodeIndex(HumanBodyBones _key, int node) diff --git a/UniGLTF b/UniGLTF index 4aaf80cad..d5ab49333 160000 --- a/UniGLTF +++ b/UniGLTF @@ -1 +1 @@ -Subproject commit 4aaf80cadb0692f0bc05f15f958b40f7be47309b +Subproject commit d5ab49333e76bf91b347360eae468d81a345e4e7 diff --git a/specification/0.0/schema/vrm.blendshapebind.schema.json b/specification/0.0/schema/vrm.blendshapebind.schema.json new file mode 100644 index 000000000..cd20f9cf4 --- /dev/null +++ b/specification/0.0/schema/vrm.blendshapebind.schema.json @@ -0,0 +1,15 @@ +{ + "title": "vrm.blendshapebind", + "type": "object", + "properties": { + "mesh": { + "type": "integer" + }, + "index": { + "type": "integer" + }, + "weight": { + "type": "number" + } + } +} \ No newline at end of file diff --git a/specification/0.0/schema/vrm.blendshapegroup.schema.json b/specification/0.0/schema/vrm.blendshapegroup.schema.json new file mode 100644 index 000000000..40a41b060 --- /dev/null +++ b/specification/0.0/schema/vrm.blendshapegroup.schema.json @@ -0,0 +1,29 @@ +{ + "title": "vrm.blendshapegroup", + "type": "object", + "properties": { + "name": { + "description": "Expression name", + "type": "string" + }, + "presetName": { + "description": "Predefined Expression name", + "type": "string", + "enum": ["Neutral","A","I","U","E","O","Blink","Joy","Angry","Sorrow","Fun","LookUp","LookDown","LookLeft","LookRight","Blink_L","Blink_R"] + }, + "binds": { + "description": "Low level blendshape references.", + "type": "array", + "items": { + "$ref": "vrm.blendshapebind.schema.json" + } + }, + "materialValues": { + "description": "Material animation references.", + "type": "array", + "items": { + "$ref": "vrm.materialbind.schema.json" + } + } + } +} \ No newline at end of file diff --git a/specification/0.0/schema/vrm.blendshapegroup.schema.json.meta b/specification/0.0/schema/vrm.blendshapegroup.schema.json.meta new file mode 100644 index 000000000..8d1aa98f3 --- /dev/null +++ b/specification/0.0/schema/vrm.blendshapegroup.schema.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da54af2780f620241a8cb8dac933fa15 +timeCreated: 1534861231 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/specification/0.0/schema/vrm.blendshapemaster.schema.json b/specification/0.0/schema/vrm.blendshapemaster.schema.json index 1489993fc..95c08cf62 100644 --- a/specification/0.0/schema/vrm.blendshapemaster.schema.json +++ b/specification/0.0/schema/vrm.blendshapemaster.schema.json @@ -1,9 +1,12 @@ { - "title":"vrm.blendshapemaster", - "type":"object", - "properties":{ - "blendShapeGroups":{ - "type":"array" + "title": "vrm.blendshapemaster", + "type": "object", + "properties": { + "blendShapeGroups": { + "type": "array", + "items": { + "$ref": "vrm.blendshapegroup.schema.json" + } } } } \ No newline at end of file diff --git a/specification/0.0/schema/vrm.degreemap.schema.json b/specification/0.0/schema/vrm.degreemap.schema.json new file mode 100644 index 000000000..2ea0f7167 --- /dev/null +++ b/specification/0.0/schema/vrm.degreemap.schema.json @@ -0,0 +1,22 @@ +{ + "title": "vrm.degreemap", + "description": "Eye controller setting.", + "type": "object", + "properties": { + "curve": { + "description": "None linear mapping params. time, value, inTangent, outTangent", + "type": "array", + "items": { + "type": "number" + } + }, + "xRange": { + "description": "Look at input clamp range degree.", + "type": "number" + }, + "yRange": { + "description": "Look at map range degree from xRange.", + "type": "number" + } + } +} \ No newline at end of file diff --git a/specification/0.0/schema/vrm.degreemap.schema.json.meta b/specification/0.0/schema/vrm.degreemap.schema.json.meta new file mode 100644 index 000000000..53e0ec983 --- /dev/null +++ b/specification/0.0/schema/vrm.degreemap.schema.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7539ff50c232c5d469ec72bb3e0b05e6 +timeCreated: 1534859666 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/specification/0.0/schema/vrm.firstperson.schema.json b/specification/0.0/schema/vrm.firstperson.schema.json index 724348c7a..cb0658055 100644 --- a/specification/0.0/schema/vrm.firstperson.schema.json +++ b/specification/0.0/schema/vrm.firstperson.schema.json @@ -1,74 +1,46 @@ { - "title":"vrm.firstperson", - "type":"object", - "properties":{ - "firstPersonBone":{ - "type":"integer" + "title": "vrm.firstperson", + "type": "object", + "properties": { + "firstPersonBone": { + "description": "Switch to Head bone when model is rendered in first-person view.", + "type": "integer" }, - "firstPersonBoneOffset":{ - "type":"array" + "firstPersonBoneOffset": { + "description": "The target headset position in first-person view. Assuming the head bone is offset from the headset.", + "type": "array" }, - "meshAnnotations":{ - "type":"array" - }, - "lookAtTypeName":{ - "type":"string" - }, - "lookAtHorizontalInner":{ - "type":"object", - "properties":{ - "curve":{ - "type":"array" - }, - "xRange":{ - "type":"number" - }, - "yRange":{ - "type":"number" + "meshAnnotations": { + "description": "Switch on \/ off mesh for display in first-person view, third-person view, or the others.", + "type": "array", + "items": { + "type": "object", + "properties": { + "mesh": { + "type": "integer" + }, + "firstPersonFlag": { + "type": "string" + } } } }, - "lookAtHorizontalOuter":{ - "type":"object", - "properties":{ - "curve":{ - "type":"array" - }, - "xRange":{ - "type":"number" - }, - "yRange":{ - "type":"number" - } - } + "lookAtTypeName": { + "description": "Eye controller mode.", + "type": "string", + "enum": ["Bone","BlendShape"] }, - "lookAtVerticalDown":{ - "type":"object", - "properties":{ - "curve":{ - "type":"array" - }, - "xRange":{ - "type":"number" - }, - "yRange":{ - "type":"number" - } - } + "lookAtHorizontalInner": { + "$ref": "vrm.degreemap.schema.json" }, - "lookAtVerticalUp":{ - "type":"object", - "properties":{ - "curve":{ - "type":"array" - }, - "xRange":{ - "type":"number" - }, - "yRange":{ - "type":"number" - } - } + "lookAtHorizontalOuter": { + "$ref": "vrm.degreemap.schema.json" + }, + "lookAtVerticalDown": { + "$ref": "vrm.degreemap.schema.json" + }, + "lookAtVerticalUp": { + "$ref": "vrm.degreemap.schema.json" } } } \ No newline at end of file diff --git a/specification/0.0/schema/vrm.humanoid.schema.json b/specification/0.0/schema/vrm.humanoid.schema.json index 598750e74..d9dbc8055 100644 --- a/specification/0.0/schema/vrm.humanoid.schema.json +++ b/specification/0.0/schema/vrm.humanoid.schema.json @@ -1,33 +1,44 @@ { - "title":"vrm.humanoid", - "type":"object", - "properties":{ - "humanBones":{ - "type":"array" + "title": "vrm.humanoid", + "type": "object", + "properties": { + "humanBones": { + "type": "array", + "items": { + "$ref": "vrm.humanoidbone.schema.json" + } }, - "armStretch":{ - "type":"number" + "armStretch": { + "description": "Unity's HumanDescription.armStretch", + "type": "number" }, - "legStretch":{ - "type":"number" + "legStretch": { + "description": "Unity's HumanDescription.legStretch", + "type": "number" }, - "upperArmTwist":{ - "type":"number" + "upperArmTwist": { + "description": "Unity's HumanDescription.upperArmTwist", + "type": "number" }, - "lowerArmTwist":{ - "type":"number" + "lowerArmTwist": { + "description": "Unity's HumanDescription.lowerArmTwist", + "type": "number" }, - "upperLegTwist":{ - "type":"number" + "upperLegTwist": { + "description": "Unity's HumanDescription.upperLegTwist", + "type": "number" }, - "lowerLegTwist":{ - "type":"number" + "lowerLegTwist": { + "description": "Unity's HumanDescription.lowerLegTwist", + "type": "number" }, - "feetSpacing":{ - "type":"number" + "feetSpacing": { + "description": "Unity's HumanDescription.feetSpacing", + "type": "number" }, - "hasTranslationDoF":{ - "type":"bool" + "hasTranslationDoF": { + "description": "Unity's HumanDescription.hasTranslationDoF", + "type": "bool" } } } \ No newline at end of file diff --git a/specification/0.0/schema/vrm.humanoidbone.schema.json b/specification/0.0/schema/vrm.humanoidbone.schema.json new file mode 100644 index 000000000..abcdf212c --- /dev/null +++ b/specification/0.0/schema/vrm.humanoidbone.schema.json @@ -0,0 +1,35 @@ +{ + "title": "vrm.humanoidbone", + "type": "object", + "properties": { + "bone": { + "description": "Human bone name.", + "type": "string", + "enum": ["hips","leftUpperLeg","rightUpperLeg","leftLowerLeg","rightLowerLeg","leftFoot","rightFoot","spine","chest","neck","head","leftShoulder","rightShoulder","leftUpperArm","rightUpperArm","leftLowerArm","rightLowerArm","leftHand","rightHand","leftToes","rightToes","leftEye","rightEye","jaw","leftThumbProximal","leftThumbIntermediate","leftThumbDistal","leftIndexProximal","leftIndexIntermediate","leftIndexDistal","leftMiddleProximal","leftMiddleIntermediate","leftMiddleDistal","leftRingProximal","leftRingIntermediate","leftRingDistal","leftLittleProximal","leftLittleIntermediate","leftLittleDistal","rightThumbProximal","rightThumbIntermediate","rightThumbDistal","rightIndexProximal","rightIndexIntermediate","rightIndexDistal","rightMiddleProximal","rightMiddleIntermediate","rightMiddleDistal","rightRingProximal","rightRingIntermediate","rightRingDistal","rightLittleProximal","rightLittleIntermediate","rightLittleDistal","upperChest"] + }, + "node": { + "description": "Reference node index", + "type": "integer" + }, + "useDefaultValues": { + "description": "Unity's HumanLimit.useDefaultValues", + "type": "bool" + }, + "min": { + "description": "Unity's HumanLimit.min", + "type": "array" + }, + "max": { + "description": "Unity's HumanLimit.max", + "type": "array" + }, + "center": { + "description": "Unity's HumanLimit.center", + "type": "array" + }, + "axisLength": { + "description": "Unity's HumanLimit.axisLength", + "type": "number" + } + } +} \ No newline at end of file diff --git a/specification/0.0/schema/vrm.humanoidbone.schema.json.meta b/specification/0.0/schema/vrm.humanoidbone.schema.json.meta new file mode 100644 index 000000000..707fb5d39 --- /dev/null +++ b/specification/0.0/schema/vrm.humanoidbone.schema.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00a1e5901b4fb3a468ea24d05ff77855 +timeCreated: 1534861231 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/specification/0.0/schema/vrm.material.schema.json b/specification/0.0/schema/vrm.material.schema.json new file mode 100644 index 000000000..7ffb5cef3 --- /dev/null +++ b/specification/0.0/schema/vrm.material.schema.json @@ -0,0 +1,30 @@ +{ + "title": "vrm.material", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "shader": { + "type": "string" + }, + "renderQueue": { + "type": "integer" + }, + "floatProperties": { + "type": "object" + }, + "vectorProperties": { + "type": "object" + }, + "textureProperties": { + "type": "object" + }, + "keywordMap": { + "type": "object" + }, + "tagMap": { + "type": "object" + } + } +} \ No newline at end of file diff --git a/specification/0.0/schema/vrm.material.schema.json.meta b/specification/0.0/schema/vrm.material.schema.json.meta new file mode 100644 index 000000000..7100dc763 --- /dev/null +++ b/specification/0.0/schema/vrm.material.schema.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7eecf3c1135646e41a4961f0fcfec056 +timeCreated: 1534861231 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/specification/0.0/schema/vrm.materialbind.schema.json b/specification/0.0/schema/vrm.materialbind.schema.json new file mode 100644 index 000000000..89df7257d --- /dev/null +++ b/specification/0.0/schema/vrm.materialbind.schema.json @@ -0,0 +1,18 @@ +{ + "title": "vrm.materialbind", + "type": "object", + "properties": { + "materialName": { + "type": "string" + }, + "propertyName": { + "type": "string" + }, + "targetValue": { + "type": "array", + "items": { + "type": "number" + } + } + } +} \ No newline at end of file diff --git a/specification/0.0/schema/vrm.meta.schema.json b/specification/0.0/schema/vrm.meta.schema.json index 9dd31ed63..ddb0b0160 100644 --- a/specification/0.0/schema/vrm.meta.schema.json +++ b/specification/0.0/schema/vrm.meta.schema.json @@ -1,63 +1,63 @@ { - "title":"vrm.meta", - "type":"object", - "properties":{ - "title":{ - "description":"Title of VRM model", - "type":"string" + "title": "vrm.meta", + "type": "object", + "properties": { + "title": { + "description": "Title of VRM model", + "type": "string" }, - "version":{ - "description":"Version of VRM model", - "type":"string" + "version": { + "description": "Version of VRM model", + "type": "string" }, - "author":{ - "description":"Author of VRM model", - "type":"string" + "author": { + "description": "Author of VRM model", + "type": "string" }, - "contactInformation":{ - "description":"Contact Information of VRM model author", - "type":"string" + "contactInformation": { + "description": "Contact Information of VRM model author", + "type": "string" }, - "reference":{ - "description":"Reference of VRM model", - "type":"string" + "reference": { + "description": "Reference of VRM model", + "type": "string" }, - "texture":{ - "description":"Thumbnail of VRM model", - "type":"integer" + "texture": { + "description": "Thumbnail of VRM model", + "type": "integer" }, - "allowedUserName":{ - "description":"A person who can perform with this avatar", - "type":"string", - "enum":["OnlyAuthor","ExplicitlyLicensedPerson","Everyone"] + "allowedUserName": { + "description": "A person who can perform with this avatar", + "type": "string", + "enum": ["OnlyAuthor","ExplicitlyLicensedPerson","Everyone"] }, - "violentUssageName":{ - "description":"Permission to perform violent acts with this avatar", - "type":"string", - "enum":["Disallow","Allow"] + "violentUssageName": { + "description": "Permission to perform violent acts with this avatar", + "type": "string", + "enum": ["Disallow","Allow"] }, - "sexualUssageName":{ - "description":"Permission to perform sexual acts with this avatar", - "type":"string", - "enum":["Disallow","Allow"] + "sexualUssageName": { + "description": "Permission to perform sexual acts with this avatar", + "type": "string", + "enum": ["Disallow","Allow"] }, - "commercialUssageName":{ - "description":"For commercial use", - "type":"string", - "enum":["Disallow","Allow"] + "commercialUssageName": { + "description": "For commercial use", + "type": "string", + "enum": ["Disallow","Allow"] }, - "otherPermissionUrl":{ - "description":"If there are any conditions not mentioned above, put the URL link of the license document here.", - "type":"string" + "otherPermissionUrl": { + "description": "If there are any conditions not mentioned above, put the URL link of the license document here.", + "type": "string" }, - "licenseName":{ - "description":"License type", - "type":"string", - "enum":["Redistribution_Prohibited","CC0","CC_BY","CC_BY_NC","CC_BY_SA","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND","Other"] + "licenseName": { + "description": "License type", + "type": "string", + "enum": ["Redistribution_Prohibited","CC0","CC_BY","CC_BY_NC","CC_BY_SA","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND","Other"] }, - "otherLicenseUrl":{ - "description":"If “Other” is selected, put the URL link of the license document here.", - "type":"string" + "otherLicenseUrl": { + "description": "If “Other” is selected, put the URL link of the license document here.", + "type": "string" } } } \ No newline at end of file diff --git a/specification/0.0/schema/vrm.schema.json b/specification/0.0/schema/vrm.schema.json index daf7fb3f9..595bf50e6 100644 --- a/specification/0.0/schema/vrm.schema.json +++ b/specification/0.0/schema/vrm.schema.json @@ -1,29 +1,32 @@ { - "title":"vrm", - "description":"VRM extension is for 3d humanoid avatars (and models) in VR applications.", - "type":"object", - "properties":{ - "exporterVersion":{ - "description":"Version of exporter that vrm created. UniVRM-0.41", - "type":"string" + "title": "vrm", + "description": "VRM extension is for 3d humanoid avatars (and models) in VR applications.", + "type": "object", + "properties": { + "exporterVersion": { + "description": "Version of exporter that vrm created. UniVRM-0.42", + "type": "string" }, - "meta":{ - "$ref":"vrm.meta.schema.json" + "meta": { + "$ref": "vrm.meta.schema.json" }, - "humanoid":{ - "$ref":"vrm.humanoid.schema.json" + "humanoid": { + "$ref": "vrm.humanoid.schema.json" }, - "firstPerson":{ - "$ref":"vrm.firstperson.schema.json" + "firstPerson": { + "$ref": "vrm.firstperson.schema.json" }, - "blendShapeMaster":{ - "$ref":"vrm.blendshapemaster.schema.json" + "blendShapeMaster": { + "$ref": "vrm.blendshapemaster.schema.json" }, - "secondaryAnimation":{ - "$ref":"vrm.secondaryanimation.schema.json" + "secondaryAnimation": { + "$ref": "vrm.secondaryanimation.schema.json" }, - "materialProperties":{ - "type":"array" + "materialProperties": { + "type": "array", + "items": { + "$ref": "vrm.material.schema.json" + } } } } \ No newline at end of file diff --git a/specification/0.0/schema/vrm.secondaryanimation.schema.json b/specification/0.0/schema/vrm.secondaryanimation.schema.json index 0820cba73..af5148781 100644 --- a/specification/0.0/schema/vrm.secondaryanimation.schema.json +++ b/specification/0.0/schema/vrm.secondaryanimation.schema.json @@ -1,12 +1,72 @@ { - "title":"vrm.secondaryanimation", - "type":"object", - "properties":{ - "boneGroups":{ - "type":"array" + "title": "vrm.secondaryanimation", + "type": "object", + "properties": { + "boneGroups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "comment": { + "type": "string" + }, + "stiffiness": { + "type": "number" + }, + "gravityPower": { + "type": "number" + }, + "gravityDir": { + "type": "array" + }, + "dragForce": { + "type": "number" + }, + "center": { + "type": "integer" + }, + "hitRadius": { + "type": "number" + }, + "bones": { + "type": "array", + "items": { + "type": "integer" + } + }, + "colliderGroups": { + "type": "array", + "items": { + "type": "integer" + } + } + } + } }, - "colliderGroups":{ - "type":"array" + "colliderGroups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "node": { + "type": "integer" + }, + "colliders": { + "type": "array", + "items": { + "type": "object", + "properties": { + "offset": { + "type": "array" + }, + "radius": { + "type": "number" + } + } + } + } + } + } } } } \ No newline at end of file