mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-04-24 15:08:02 -05:00
test 追加. VRMMaterialImporterの interface を調整
This commit is contained in:
parent
256f9d781c
commit
52f516d443
|
|
@ -94,7 +94,7 @@ namespace VRM
|
|||
return true;
|
||||
}
|
||||
|
||||
public IEnumerable<(SubAssetKey, TextureImportParam)> EnumerateTexturesForMaterial(GltfParser parser, int i)
|
||||
public MaterialImportParam GetMaterialParam(GltfParser parser, int i)
|
||||
{
|
||||
// mtoon
|
||||
if (!TryCreateParam(parser, i, out MaterialImportParam param))
|
||||
|
|
@ -106,22 +106,12 @@ namespace VRM
|
|||
GltfPBRMaterial.TryCreateParam(parser, i, out param);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var kv in param.TextureSlots)
|
||||
{
|
||||
var key = new SubAssetKey(typeof(Texture2D), kv.Value.UnityObjectName);
|
||||
yield return (key, kv.Value);
|
||||
}
|
||||
return param;
|
||||
}
|
||||
|
||||
public IEnumerable<(SubAssetKey, TextureImportParam)> EnumerateAllTexturesDistinct(GltfParser parser)
|
||||
{
|
||||
var used = new HashSet<SubAssetKey>();
|
||||
Func<(SubAssetKey, TextureImportParam), bool> add = (kv) =>
|
||||
{
|
||||
var (key, textureInfo) = kv;
|
||||
return used.Add(key);
|
||||
};
|
||||
|
||||
for (int i = 0; i < parser.GLTF.materials.Count; ++i)
|
||||
{
|
||||
|
|
@ -129,22 +119,26 @@ namespace VRM
|
|||
if (vrmMaterial.shader == MToon.Utils.ShaderName)
|
||||
{
|
||||
// MToon
|
||||
foreach (var kv in EnumerateTexturesForMaterial(parser, i))
|
||||
if (!TryCreateParam(parser, i, out MaterialImportParam param))
|
||||
{
|
||||
if (add(kv))
|
||||
throw new Exception();
|
||||
}
|
||||
foreach (var (key, value) in param.EnumerateSubAssetKeyValue())
|
||||
{
|
||||
if (used.Add(key))
|
||||
{
|
||||
yield return kv;
|
||||
yield return (key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// PBR or Unlit
|
||||
foreach (var kv in GltfTextureEnumerator.EnumerateTexturesForMaterial(parser, i))
|
||||
foreach (var (key, value) in GltfTextureEnumerator.EnumerateTexturesForMaterial(parser, i))
|
||||
{
|
||||
if (add(kv))
|
||||
if (used.Add(key))
|
||||
{
|
||||
yield return kv;
|
||||
yield return (key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -153,10 +147,10 @@ namespace VRM
|
|||
// thumbnail
|
||||
if (m_vrm.meta != null && m_vrm.meta.texture != -1)
|
||||
{
|
||||
var kv = GltfTextureImporter.CreateSRGB(parser, m_vrm.meta.texture, Vector2.zero, Vector2.one);
|
||||
if (add(kv))
|
||||
var (key, value) = GltfTextureImporter.CreateSRGB(parser, m_vrm.meta.texture, Vector2.zero, Vector2.one);
|
||||
if (used.Add(key))
|
||||
{
|
||||
yield return kv;
|
||||
yield return (key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using UniGLTF;
|
||||
using UnityEngine;
|
||||
|
|
@ -54,5 +56,28 @@ namespace VRM
|
|||
Assert.AreEqual(73, parser.GLTF.materials.Count);
|
||||
Assert.True(materialImporter.TryCreateParam(parser, 0, out MaterialImportParam param));
|
||||
}
|
||||
|
||||
static string AliciaPath
|
||||
{
|
||||
get
|
||||
{
|
||||
return Path.GetFullPath(Application.dataPath + "/../Tests/Models/Alicia_vrm-0.51/AliciaSolid_vrm-0.51.vrm")
|
||||
.Replace("\\", "/");
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void MaterialImporterTest()
|
||||
{
|
||||
var parser = new GltfParser();
|
||||
parser.ParsePath(AliciaPath);
|
||||
var vrmImporter = new VRMImporterContext(parser, null);
|
||||
var materialParam = new VRMMaterialImporter(vrmImporter.VRM).GetMaterialParam(parser, 0);
|
||||
Assert.AreEqual("VRM/MToon", materialParam.ShaderName);
|
||||
Assert.AreEqual("Alicia_body", materialParam.TextureSlots["_MainTex"].UnityObjectName);
|
||||
|
||||
var (key, value) = materialParam.EnumerateSubAssetKeyValue().First();
|
||||
Assert.AreEqual(new SubAssetKey(typeof(Texture2D), "Alicia_body"), key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ namespace UniVRM10
|
|||
return true;
|
||||
}
|
||||
|
||||
public static MaterialImportParam GetMaterialImportParam(GltfParser parser, int i)
|
||||
public static MaterialImportParam GetMaterialParam(GltfParser parser, int i)
|
||||
{
|
||||
// mtoon
|
||||
if (!TryCreateParam(parser, i, out MaterialImportParam param))
|
||||
|
|
@ -248,7 +248,7 @@ namespace UniVRM10
|
|||
var used = new HashSet<SubAssetKey>();
|
||||
for (int i = 0; i < parser.GLTF.materials.Count; ++i)
|
||||
{
|
||||
var param = GetMaterialImportParam(parser, i);
|
||||
var param = GetMaterialParam(parser, i);
|
||||
foreach (var (key, value) in param.EnumerateSubAssetKeyValue())
|
||||
{
|
||||
if (used.Add(key))
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ namespace UniVRM10
|
|||
var parser = new GltfParser();
|
||||
parser.Parse(AliciaPath, migratedBytes);
|
||||
|
||||
var materialParam = Vrm10MaterialImporter.GetMaterialImportParam(parser, 0);
|
||||
var materialParam = Vrm10MaterialImporter.GetMaterialParam(parser, 0);
|
||||
Assert.AreEqual("VRM/MToon", materialParam.ShaderName);
|
||||
Assert.AreEqual("Alicia_body", materialParam.TextureSlots["_MainTex"].UnityObjectName);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user