public static void SetTextureArray(this JContainer jsonNode, string key, Texture2DArrayData value)
        {
            var assetData = SerializeObject.SerializeAsset(value);
            var uri       = ExportSetting.instance.GetExportPath(assetData.uri);

            jsonNode.Add(new JProperty(key, uri));
        }
        public override void CollectUniformValues()
        {
            base.CollectUniformValues();
            var source = this.source;
            var values = this.data.values;

            var frontTex = source.GetTexture("_FrontTex") as Texture2D;
            var backTex  = source.GetTexture("_BackTex") as Texture2D;
            var leftTex  = source.GetTexture("_LeftTex") as Texture2D;
            var rightTex = source.GetTexture("_RightTex") as Texture2D;
            var upTex    = source.GetTexture("_UpTex") as Texture2D;
            var downTex  = source.GetTexture("_DownTex") as Texture2D;

            /**
             * XxYyZz
             */
            var textureArr = new Texture2DArrayData();

            textureArr.textures     = new Texture2D[6];
            textureArr.textures[0]  = leftTex;
            textureArr.textures[1]  = rightTex;
            textureArr.textures[2]  = upTex;
            textureArr.textures[3]  = downTex;
            textureArr.textures[4]  = frontTex;
            textureArr.textures[5]  = backTex;
            textureArr.materialName = source.name;

            Debug.Log("materialName:" + textureArr.materialName);

            this.data.values.SetTextureArray("tCube", textureArr);
        }
        public static string GetTextureDescPath(Texture2DArrayData tex)
        {
            //Texture2DArray 以第一个图片为目录,  以材质名称为名称
            var path = GetTexturePath(tex.textures[0]);

            // //相对路径
            path = path.Substring(0, path.LastIndexOf("/") + 1) + tex.materialName + ".image.json";
            path = PathHelper.CheckFileName(path);
            return(path);
        }
        protected override void Serialize(UnityEngine.Object sourceAsset)
        {
            this.textureArray = sourceAsset as Texture2DArrayData;
            var firstTexture = this.textureArray.textures[0];

            //先把原始图片导出来
            this.ExportTexture();

            var mipmap = firstTexture.mipmapCount > 1;
            //
            {
                var image = new Image();
                image.Uris = new List <string>();
                foreach (var tex in this.textureArray.textures)
                {
                    image.Uris.Add(ExportSetting.instance.GetExportPath(PathHelper.GetTexturePath(tex)));
                }
                this._root.Images.Add(image);
            }
            //
            {
                var filterMode = firstTexture.filterMode;
                var wrapMode   = firstTexture.wrapMode;

                var sampler = new Sampler();
                this._root.Samplers.Add(sampler);
                if (wrapMode == TextureWrapMode.Repeat)
                {
                    sampler.WrapS = GLTF.Schema.WrapMode.Repeat;
                    sampler.WrapT = GLTF.Schema.WrapMode.Repeat;
                }
                else
                {
                    sampler.WrapS = GLTF.Schema.WrapMode.ClampToEdge;
                    sampler.WrapT = GLTF.Schema.WrapMode.ClampToEdge;
                }
                sampler.MagFilter = filterMode == FilterMode.Point ? MagFilterMode.Nearest : MagFilterMode.Linear;
                if (!mipmap)
                {
                    sampler.MagFilter = filterMode == FilterMode.Point ? MagFilterMode.Nearest : MagFilterMode.Linear;
                }
                else if (filterMode == FilterMode.Point)
                {
                    sampler.MinFilter = MinFilterMode.NearestMipmapNearest;
                }
                else if (filterMode == FilterMode.Bilinear)
                {
                    sampler.MinFilter = MinFilterMode.LinearMipmapNearest;
                }
                else if (filterMode == FilterMode.Trilinear)
                {
                    sampler.MinFilter = MinFilterMode.LinearMipmapLinear;
                }
            }
            //
            {
                var gltfTexture = new GLTF.Schema.Texture();
                this._root.Textures.Add(gltfTexture);

                gltfTexture.Sampler    = new SamplerId();
                gltfTexture.Source     = new ImageId();
                gltfTexture.Extensions = new Dictionary <string, IExtension>()
                {
                    {
                        TextureExtension.EXTENSION_NAME,
                        new TextureExtension()
                        {
                            width      = firstTexture.width,
                            height     = firstTexture.height,
                            format     = GetTextureFormat(),
                            levels     = mipmap ? 0 : 1,
                            encoding   = 2,
                            faces      = 6,
                            mapping    = 1,
                            anisotropy = firstTexture.anisoLevel,
                        }
                    }
                };
            }
        }