public static void SerializeTo(ref UniGLTF.glTFExtension dst, VRMC_node_constraint extension) { if (dst is glTFExtensionImport) { throw new NotImplementedException(); } if (!(dst is glTFExtensionExport extensions)) { extensions = new glTFExtensionExport(); dst = extensions; } var f = new JsonFormatter(); Serialize(f, extension); extensions.Add(VRMC_node_constraint.ExtensionName, f.GetStoreBytes()); }
public static glTFMaterial UnlitToGltf(this UnlitMaterial unlit, List <Texture> textures) { var material = unlit.ToGltf(textures); if (!(material.extensions is glTFExtensionExport extensions)) { extensions = new glTFExtensionExport(); material.extensions = extensions; } extensions.Add( glTF_KHR_materials_unlit.ExtensionName, new ArraySegment <byte>(glTF_KHR_materials_unlit.Raw)); material.pbrMetallicRoughness.roughnessFactor = 0.9f; material.pbrMetallicRoughness.metallicFactor = 0.0f; return(material); }
public static void Migrate(glTF gltf, JsonNode json) { for (int i = 0; i < gltf.materials.Count; ++i) { var vrmMaterial = json["extensions"]["VRM"]["materialProperties"][i]; if (vrmMaterial["shader"].GetString() != "VRM/MToon") { continue; } // VRM-0 MToon の情報 var mtoon = MToonValue.Create(vrmMaterial); // KHR_materials_unlit として fallback した情報が入っている var gltfMaterial = gltf.materials[i]; if (!glTF_KHR_materials_unlit.IsEnable(gltfMaterial)) { // 古いモデルは無い場合がある // throw new Exception($"[{i}]{gltfMaterial.name} has no extensions"); } var extensions = new glTFExtensionExport(); gltfMaterial.extensions = extensions; extensions.Add( glTF_KHR_materials_unlit.ExtensionName, new ArraySegment <byte>(glTF_KHR_materials_unlit.Raw)); // // definition の中身を gltfMaterial と gltfMaterial.extensions.VRMC_materials_mtoon に移し替える // var dst = new VRMC_materials_mtoon(); // Color gltfMaterial.pbrMetallicRoughness.baseColorFactor = mtoon.Definition.Color.LitColor.ToFloat4(); if (mtoon.TextureIndexMap.MainTex.HasValue) { gltfMaterial.pbrMetallicRoughness.baseColorTexture = new glTFMaterialBaseColorTextureInfo { index = mtoon.TextureIndexMap.MainTex.Value }; if (!mtoon.OffsetScale.TryGetValue("_MainTex", out float[] value))