diff --git a/Assets/VRM10/Runtime/Migration/Materials/MigrationLegacyUnlitMaterial.cs b/Assets/VRM10/Runtime/Migration/Materials/MigrationLegacyUnlitMaterial.cs
index 7ad5c057e..a3e16f22d 100644
--- a/Assets/VRM10/Runtime/Migration/Materials/MigrationLegacyUnlitMaterial.cs
+++ b/Assets/VRM10/Runtime/Migration/Materials/MigrationLegacyUnlitMaterial.cs
@@ -6,6 +6,7 @@ namespace UniVRM10
{
///
/// 過去の UniVRM において、KHR_materials_unlit 拡張を使わず、VRM 拡張を用いて Unlit を表現していた Material をマイグレーションする。
+ /// KHR_materials_unlit を用いてマイグレーションする.
///
public static class MigrationLegacyUnlitMaterial
{
@@ -59,6 +60,9 @@ namespace UniVRM10
unlitMaterial.alphaMode = "MASK";
unlitMaterial.alphaCutoff = MigrationMaterialUtil.GetCutoff(vrm0XMaterial);
return unlitMaterial;
+ case "VRM/UnlitTransparentZWrite":
+ // NOTE: ZWrite マテリアルのみ、MToon にマイグレーションするため、別処理.
+ return MigrationUnlitTransparentZWriteMaterial.Migrate(vrm0XMaterial, materialName);
default:
return null;
}
diff --git a/Assets/VRM10/Runtime/Migration/Materials/MigrationUnlitTransparentZWriteMaterial.cs b/Assets/VRM10/Runtime/Migration/Materials/MigrationUnlitTransparentZWriteMaterial.cs
new file mode 100644
index 000000000..b7593d46a
--- /dev/null
+++ b/Assets/VRM10/Runtime/Migration/Materials/MigrationUnlitTransparentZWriteMaterial.cs
@@ -0,0 +1,60 @@
+using System;
+using UniGLTF;
+using UniGLTF.Extensions.VRMC_materials_mtoon;
+using UniJSON;
+
+namespace UniVRM10
+{
+ ///
+ /// 過去の UniVRM の "VRM/UnlitTransparentZWrite" シェーダをマイグレーションする.
+ /// 他の Unlit シェーダと違い、VRMC_materials_mtoon を用いてマイグレーションする.
+ ///
+ public static class MigrationUnlitTransparentZWriteMaterial
+ {
+ private const string MigrationMToon10SpecVersion = "1.0-draft";
+
+ public static glTFMaterial Migrate(JsonNode vrm0XMaterial, string materialName)
+ {
+ var baseColorFactor = MigrationMaterialUtil.GetBaseColorFactor(vrm0XMaterial);
+ var baseColorTexture = MigrationMaterialUtil.GetBaseColorTexture(vrm0XMaterial);
+ var emissiveTexture = new glTFMaterialEmissiveTextureInfo
+ {
+ index = baseColorTexture.index,
+ extensions = baseColorTexture.extensions,
+ };
+
+ var mtoonMaterial = new glTFMaterial
+ {
+ name = materialName,
+ extensions = new glTFExtensionExport().Add(
+ glTF_KHR_materials_unlit.ExtensionName,
+ new ArraySegment(glTF_KHR_materials_unlit.Raw)
+ ),
+ pbrMetallicRoughness = new glTFPbrMetallicRoughness
+ {
+ baseColorFactor = new [] {0f, 0f, 0f, baseColorFactor[3]}, // black + _Color.a
+ baseColorTexture = baseColorTexture, // _MainTex
+ metallicFactor = 0f,
+ roughnessFactor = 1f,
+ },
+ alphaMode = "BLEND",
+ alphaCutoff = 0.5f,
+ doubleSided = false,
+ emissiveFactor = new [] {baseColorFactor[0], baseColorFactor[1], baseColorFactor[2]}, // _Color.rgb
+ emissiveTexture = emissiveTexture,
+ };
+
+ var mtoon10 = new VRMC_materials_mtoon
+ {
+ SpecVersion = MigrationMToon10SpecVersion,
+ TransparentWithZWrite = true, // transparent with zWrite
+ RenderQueueOffsetNumber = 0,
+ ShadeColorFactor = new [] {0f, 0f, 0f}, // black
+ OutlineWidthMode = OutlineWidthMode.none // disable outline
+ };
+ UniGLTF.Extensions.VRMC_materials_mtoon.GltfSerializer.SerializeTo(ref mtoonMaterial.extensions, mtoon10);
+
+ return mtoonMaterial;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/VRM10/Runtime/Migration/Materials/MigrationUnlitTransparentZWriteMaterial.cs.meta b/Assets/VRM10/Runtime/Migration/Materials/MigrationUnlitTransparentZWriteMaterial.cs.meta
new file mode 100644
index 000000000..a2f7a6613
--- /dev/null
+++ b/Assets/VRM10/Runtime/Migration/Materials/MigrationUnlitTransparentZWriteMaterial.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 281c0ecbae8e489db4c86a553636ae44
+timeCreated: 1635426676
\ No newline at end of file