コード例 #1
0
        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());
        }
コード例 #2
0
ファイル: MaterialAdapter.cs プロジェクト: seibe/UniVRM
        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);
        }
コード例 #3
0
        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))