/// <summary> /// gltf に texture を足す /// /// * textures /// * samplers /// * images /// * bufferViews /// /// を更新し、textures の index を返す /// /// </summary> /// <param name="gltf"></param> /// <param name="bufferIndex"></param> /// <param name="texture"></param> /// <returns>gltf texture index</returns> public static int PushGltfTexture(this glTF gltf, int bufferIndex, Texture2D texture) { var bytesWithMime = GetBytesWithMime(texture); // add view var view = gltf.buffers[bufferIndex].Append(bytesWithMime.bytes, glBufferTarget.NONE); var viewIndex = gltf.AddBufferView(view); // add image var imageIndex = gltf.images.Count; gltf.images.Add(new glTFImage { name = TextureImportName.RemoveSuffix(texture.name), bufferView = viewIndex, mimeType = bytesWithMime.mine, }); // add sampler var samplerIndex = gltf.samplers.Count; var sampler = TextureSamplerUtil.Export(texture); gltf.samplers.Add(sampler); // add texture var textureIndex = gltf.textures.Count; gltf.textures.Add(new glTFTexture { sampler = samplerIndex, source = imageIndex, }); return(textureIndex); }
/// <summary> /// gltf に texture を足す /// /// * textures /// * samplers /// * images /// * bufferViews /// /// を更新し、textures の index を返す /// /// もっとも根本の Exporter クラスのみが呼び出すべきである。 /// 他の拡張機能などが呼び出すべきではない。 /// /// </summary> /// <returns>gltf texture index</returns> public static int PushGltfTexture(ExportingGltfData data, Texture2D texture, ColorSpace textureColorSpace, ITextureSerializer textureSerializer) { var bytesWithMime = textureSerializer.ExportBytesWithMime(texture, textureColorSpace); // add view var viewIndex = data.ExtendBufferAndGetViewIndex(bytesWithMime.bytes); // add image var imageIndex = data.GLTF.images.Count; data.GLTF.images.Add(new glTFImage { name = TextureImportName.RemoveSuffix(texture.name), bufferView = viewIndex, mimeType = bytesWithMime.mime, }); // add sampler var samplerIndex = data.GLTF.samplers.Count; var sampler = TextureSamplerUtil.Export(texture); data.GLTF.samplers.Add(sampler); // add texture var textureIndex = data.GLTF.textures.Count; data.GLTF.textures.Add(new glTFTexture { sampler = samplerIndex, source = imageIndex, }); return(textureIndex); }
/// <summary> /// glTF の Texture が存在せず Image のみのものを、Texture として扱いたい場合の関数. /// </summary> public static (SubAssetKey, TextureDescriptor) CreateSrgbFromOnlyImage(GltfData data, int imageIndex, string uniqueName, string uri) { var name = TextureImportName.GetUnityObjectName(TextureImportTypes.sRGB, uniqueName, uri); var texDesc = new TextureDescriptor( name, Vector2.zero, Vector2.one,
public static (SubAssetKey, TextureDescriptor) CreateSRGB(GltfData data, int textureIndex, Vector2 offset, Vector2 scale) { var gltfTexture = data.GLTF.textures[textureIndex]; var gltfImage = data.GLTF.images[gltfTexture.source]; var name = TextureImportName.GetUnityObjectName(TextureImportTypes.sRGB, gltfTexture.name, gltfImage.uri); var sampler = TextureSamplerUtil.CreateSampler(data.GLTF, textureIndex); GetTextureBytesAsync getTextureBytesAsync = () => Task.FromResult(ToArray(data.GetImageBytesFromTextureIndex(textureIndex))); var param = new TextureDescriptor(name, gltfImage.GetExt(), gltfImage.uri, offset, scale, sampler, TextureImportTypes.sRGB, default, default, getTextureBytesAsync, default, default, default, default, default);
public static (SubAssetKey, TextureImportParam Param) CreateSRGB(GltfParser parser, int textureIndex, Vector2 offset, Vector2 scale) { var gltfTexture = parser.GLTF.textures[textureIndex]; var gltfImage = parser.GLTF.images[gltfTexture.source]; var name = TextureImportName.GetUnityObjectName(TextureImportTypes.sRGB, gltfTexture.name, gltfImage.uri); var sampler = CreateSampler(parser.GLTF, textureIndex); GetTextureBytesAsync getTextureBytesAsync = () => Task.FromResult(ToArray(parser.GLTF.GetImageBytesFromTextureIndex(parser.Storage, textureIndex))); var key = new SubAssetKey(typeof(Texture2D), name); var param = new TextureImportParam(name, gltfImage.GetExt(), gltfImage.uri, offset, scale, sampler, TextureImportTypes.sRGB, default, default, getTextureBytesAsync, default, default, default, default, default);
/// <summary> /// VRM-1 の thumbnail テクスチャー。gltf.textures ではなく gltf.images の参照であることに注意(sampler等の設定が無い) /// </summary> public static bool TryGetMetaThumbnailTextureImportParam(GltfParser parser, UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm, out (SubAssetKey, TextureImportParam) value) { if (vrm?.Meta?.ThumbnailImage == null) { value = default; return(false); } var imageIndex = vrm.Meta.ThumbnailImage.Value; var gltfImage = parser.GLTF.images[imageIndex]; var name = TextureImportName.GetUnityObjectName(TextureImportTypes.sRGB, gltfImage.name, gltfImage.uri); GetTextureBytesAsync getThumbnailImageBytesAsync = () => { var bytes = parser.GLTF.GetImageBytes(parser.Storage, imageIndex); return(Task.FromResult(GltfTextureImporter.ToArray(bytes))); }; var param = new TextureImportParam(name, gltfImage.GetExt(), gltfImage.uri, Vector2.zero, Vector2.one, default, TextureImportTypes.sRGB, default, default,
/// <summary> /// VRM-1 の thumbnail テクスチャー。gltf.textures ではなく gltf.images の参照であることに注意(sampler等の設定が無い) /// /// MToonとは無関係だがとりあえずここに /// </summary> /// <param name="parser"></param> /// <param name="vrm"></param> /// <param name="value"></param> /// <returns></returns> public static bool TryGetMetaThumbnailTextureImportParam(GltfParser parser, UniGLTF.Extensions.VRMC_vrm.VRMC_vrm vrm, out TextureImportParam value) { if (!vrm.Meta.ThumbnailImage.HasValue) { value = default; return(false); } // thumbnail var imageIndex = vrm.Meta.ThumbnailImage.Value; var gltfImage = parser.GLTF.images[imageIndex]; var name = new TextureImportName(TextureImportTypes.sRGB, gltfImage.name, gltfImage.GetExt(), ""); GetTextureBytesAsync getBytesAsync = () => { var bytes = parser.GLTF.GetImageBytes(parser.Storage, imageIndex); return(Task.FromResult(GltfTextureImporter.ToArray(bytes))); }; value = new TextureImportParam(name, Vector2.zero, Vector2.one, default, TextureImportTypes.sRGB, default, default,