Skip to content

Commit

Permalink
FixTextureNameUnique を整理
Browse files Browse the repository at this point in the history
  • Loading branch information
ousttrue committed Sep 7, 2021
1 parent eafeb23 commit 4d1c45f
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 24 deletions.
48 changes: 36 additions & 12 deletions Assets/UniGLTF/Runtime/UniGLTF/IO/Parser/GlbLowLevelParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Text;
using System.Text.RegularExpressions;
using UniJSON;
using UnityEngine;

namespace UniGLTF
{
Expand Down Expand Up @@ -169,32 +170,55 @@ public static string PrepareUri(string uri)
}

/// <summary>
/// gltfTexture.name を Unity Asset 名として運用する。
/// gltfTexture.name を Unity Asset 名として運用するので
/// ユニークである必要がある。
///
/// gltfTexture.name と gltfImage.name を同じにする。
/// </summary>
private static void FixTextureNameUnique(glTF GLTF)
{
var used = new HashSet<string>();
for (var textureIdx = 0; textureIdx < GLTF.textures.Count; ++textureIdx)
{
var gltfTexture = GLTF.textures[textureIdx];
var gltfImage = GLTF.images[gltfTexture.source];
if (!string.IsNullOrEmpty(gltfImage.uri) && !gltfImage.uri.StartsWith("data:"))
if (gltfTexture.source != textureIdx)
{
// from image uri
gltfTexture.name = Path.GetFileNameWithoutExtension(gltfImage.uri);
// throw new NotImplementedException();
Debug.LogWarning($"texture.source != {textureIdx}");
}
if (string.IsNullOrEmpty(gltfTexture.name))
var gltfImage = GLTF.images[gltfTexture.source];

if (!string.IsNullOrEmpty(gltfImage.uri) && !gltfImage.uri.StartsWith("data:"))
{
// use image name
gltfTexture.name = gltfImage.name;
// use external file
var name = FixNameUnique(used, Path.GetFileNameWithoutExtension(gltfImage.uri));
gltfTexture.name = name;
gltfImage.name = name;
}
if (string.IsNullOrEmpty(gltfTexture.name))
else
{
gltfTexture.name = $"texture_{textureIdx}";
if (!string.IsNullOrEmpty(gltfTexture.name))
{
// use texture name
var name = FixNameUnique(used, gltfTexture.name);
gltfTexture.name = name;
gltfImage.name = name;
}
else if (!string.IsNullOrEmpty(gltfImage.name))
{
// use image name
var name = FixNameUnique(used, gltfImage.name);
gltfTexture.name = name;
gltfImage.name = name;
}
else
{
// use index order name
var name = FixNameUnique(used, $"texture_{textureIdx}");
gltfTexture.name = name;
gltfImage.name = name;
}
}

gltfTexture.name = FixNameUnique(used, gltfTexture.name);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,7 @@ public static bool TryGetMetaThumbnailTextureImportParam(GltfData data, UniGLTF.
var imageIndex = vrm.Meta.ThumbnailImage.Value;
var gltfImage = data.GLTF.images[imageIndex];

var imageName = gltfImage.name;
if (string.IsNullOrEmpty(imageName))
{
imageName = "VRM1_THUMBNAIL";
}

var name = TextureImportName.GetUnityObjectName(TextureImportTypes.sRGB, imageName, gltfImage.uri);
var name = TextureImportName.GetUnityObjectName(TextureImportTypes.sRGB, gltfImage.name, gltfImage.uri);

GetTextureBytesAsync getThumbnailImageBytesAsync = () =>
{
Expand Down
15 changes: 10 additions & 5 deletions Assets/VRM10/Tests/LoadTests.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using NUnit.Framework;

namespace UniVRM10.Test
Expand All @@ -12,12 +13,16 @@ public void EmptyThumbnailName()
var index = vrm.VrmExtension.Meta.ThumbnailImage.Value;

// empty thumbnail name
vrm.Data.GLTF.images[index].name = null;
// 起こらなくなった
// vrm.Data.GLTF.images[index].name = null;

using (var loader = new Vrm10Importer(vrm))
{
loader.LoadAsync(new VRMShaders.ImmediateCaller()).Wait();
}
// using (var loader = new Vrm10Importer(vrm))
// {
// Assert.Throws<ArgumentNullException>(() =>
// {
// loader.LoadAsync(new VRMShaders.ImmediateCaller()).Wait();
// });
// }
}
}
}

0 comments on commit 4d1c45f

Please sign in to comment.