diff --git a/Assets/VRM10/Editor/Vrm10ExportDialog.cs b/Assets/VRM10/Editor/Vrm10ExportDialog.cs
index eb805d358..091662f6f 100644
--- a/Assets/VRM10/Editor/Vrm10ExportDialog.cs
+++ b/Assets/VRM10/Editor/Vrm10ExportDialog.cs
@@ -296,19 +296,19 @@ namespace UniVRM10
using (var backup = new Vrm10GeometryBackup(root))
{
- // Transform の回転とスケールを Mesh に適用します。
- // - BlendShape は現状がbakeされます
- // - 回転とスケールが反映された新しい Mesh が作成されます
- // - Transform の回転とスケールはクリアされます。world position を維持します
- var newMeshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(root, m_settings.FreezeMeshUseCurrentBlendShapeWeight);
+ // Transform の回転とスケールを Mesh に適用します。
+ // - BlendShape は現状がbakeされます
+ // - 回転とスケールが反映された新しい Mesh が作成されます
+ // - Transform の回転とスケールはクリアされます。world position を維持します
+ var newMeshMap = BoneNormalizer.NormalizeHierarchyFreezeMesh(root, m_settings.FreezeMeshUseCurrentBlendShapeWeight);
- // SkinnedMeshRenderer.sharedMesh と MeshFilter.sharedMesh を新しいMeshで置き換える
- BoneNormalizer.Replace(root, newMeshMap, m_settings.FreezeMeshKeepRotation);
- }
- }
+ // SkinnedMeshRenderer.sharedMesh と MeshFilter.sharedMesh を新しいMeshで置き換える
+ BoneNormalizer.Replace(root, newMeshMap, m_settings.FreezeMeshKeepRotation);
+ }
+ }
var converter = new UniVRM10.ModelExporter();
- var model = converter.Export(arrayManager, root);
+ var model = converter.Export(m_settings.MeshExportSettings, arrayManager, root);
// 右手系に変換
m_logLabel += $"convert to right handed coordinate...\n";
diff --git a/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs b/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs
index ea7632a19..971656ec3 100644
--- a/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs
+++ b/Assets/VRM10/Runtime/IO/Model/ModelExporter.cs
@@ -24,11 +24,11 @@ namespace UniVRM10
///
///
///
- public VrmLib.Model Export(INativeArrayManager arrayManager, GameObject root)
+ public VrmLib.Model Export(GltfExportSettings settings, INativeArrayManager arrayManager, GameObject root)
{
Model = new VrmLib.Model(VrmLib.Coordinates.Unity);
- _Export(arrayManager, root);
+ _Export(settings, arrayManager, root);
// humanoid
{
@@ -88,7 +88,7 @@ namespace UniVRM10
return true;
}
- VrmLib.Model _Export(INativeArrayManager arrayManager, GameObject root)
+ VrmLib.Model _Export(GltfExportSettings settings, INativeArrayManager arrayManager, GameObject root)
{
if (Model == null)
{
@@ -135,7 +135,7 @@ namespace UniVRM10
{
if (MeshCanExport(skinnedMeshRenderer.sharedMesh))
{
- var mesh = CreateMesh(arrayManager, skinnedMeshRenderer.sharedMesh, skinnedMeshRenderer, Materials);
+ var mesh = CreateMesh(settings, arrayManager, skinnedMeshRenderer.sharedMesh, skinnedMeshRenderer, Materials);
var skin = CreateSkin(arrayManager, skinnedMeshRenderer, Nodes, root);
if (skin != null)
{
@@ -152,7 +152,7 @@ namespace UniVRM10
{
if (meshRenderer.gameObject.TryGetComponent(out var filter) && MeshCanExport(filter.sharedMesh))
{
- var mesh = CreateMesh(arrayManager, filter.sharedMesh, meshRenderer, Materials);
+ var mesh = CreateMesh(settings, arrayManager, filter.sharedMesh, meshRenderer, Materials);
Model.MeshGroups.Add(mesh);
Nodes[renderer.gameObject].MeshGroup = mesh;
if (!Meshes.ContainsKey(filter.sharedMesh))
@@ -207,7 +207,12 @@ namespace UniVRM10
return null;
}
- private static VrmLib.MeshGroup CreateMesh(INativeArrayManager arrayManager, UnityEngine.Mesh mesh, Renderer renderer, List materials)
+ private static VrmLib.MeshGroup CreateMesh(
+ GltfExportSettings settings,
+ INativeArrayManager arrayManager,
+ Mesh mesh, Renderer renderer,
+ List materials
+ )
{
var meshGroup = new VrmLib.MeshGroup(mesh.name);
var vrmMesh = new VrmLib.Mesh();
@@ -266,8 +271,7 @@ namespace UniVRM10
var usePosition = blendShapeVertices != null && blendShapeVertices.Length > 0;
var blendShapeNormals = mesh.normals;
- var useNormal = usePosition && blendShapeNormals != null && blendShapeNormals.Length == blendShapeVertices.Length;
- // var useNormal = usePosition && blendShapeNormals != null && blendShapeNormals.Length == blendShapeVertices.Length && !exportOnlyBlendShapePosition;
+ var useNormal = usePosition && blendShapeNormals != null && blendShapeNormals.Length == blendShapeVertices.Length && !settings.ExportOnlyBlendShapePosition;
var blendShapeTangents = mesh.tangents.Select(y => (Vector3)y).ToArray();
//var useTangent = usePosition && blendShapeTangents != null && blendShapeTangents.Length == blendShapeVertices.Length;
diff --git a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs
index 6634b8b39..7cc83c11a 100644
--- a/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs
+++ b/Assets/VRM10/Runtime/IO/Vrm10Exporter.cs
@@ -940,6 +940,7 @@ namespace UniVRM10
///
///
public static byte[] Export(
+ GltfExportSettings settings,
GameObject go,
IMaterialExporter materialExporter = null,
ITextureSerializer textureSerializer = null,
@@ -948,14 +949,14 @@ namespace UniVRM10
using (var arrayManager = new NativeArrayManager())
{
// ヒエラルキーからジオメトリーを収集
- var converter = new UniVRM10.ModelExporter();
- var model = converter.Export(arrayManager, go);
+ var converter = new ModelExporter();
+ var model = converter.Export(settings, arrayManager, go);
// 右手系に変換
model.ConvertCoordinate(VrmLib.Coordinates.Vrm1);
// Model と go から VRM-1.0 にExport
- var exporter10 = new Vrm10Exporter(new GltfExportSettings(), materialExporter, textureSerializer);
+ var exporter10 = new Vrm10Exporter(settings, materialExporter, textureSerializer);
var option = new VrmLib.ExportArgs
{
};
diff --git a/Assets/VRM10/Runtime/Scenes/Sample.cs b/Assets/VRM10/Runtime/Scenes/Sample.cs
index 1d52d4629..cf751cae4 100644
--- a/Assets/VRM10/Runtime/Scenes/Sample.cs
+++ b/Assets/VRM10/Runtime/Scenes/Sample.cs
@@ -10,6 +10,9 @@ namespace UniVRM10.Sample
[SerializeField]
string m_vrmPath = "Tests/Models/Alicia_vrm-0.51/AliciaSolid_vrm-0.51.vrm";
+ [SerializeField]
+ UniGLTF.GltfExportSettings m_settings = new();
+
// Start is called before the first frame update
void OnEnable()
{
@@ -21,7 +24,7 @@ namespace UniVRM10.Sample
var src = new FileInfo(m_vrmPath);
var instance = await Vrm10.LoadPathAsync(m_vrmPath, true);
- var exportedBytes = Vrm10Exporter.Export(instance.gameObject);
+ var exportedBytes = Vrm10Exporter.Export(m_settings, instance.gameObject);
// Import 1.0
var vrm10 = await Vrm10.LoadBytesAsync(exportedBytes, false);
diff --git a/Assets/VRM10/Tests/LoadTests.cs b/Assets/VRM10/Tests/LoadTests.cs
index 18caa14f7..34f9a9d4a 100644
--- a/Assets/VRM10/Tests/LoadTests.cs
+++ b/Assets/VRM10/Tests/LoadTests.cs
@@ -95,18 +95,20 @@ namespace UniVRM10.Test
r.sharedMaterials = r.sharedMaterials.Select(x => m).ToArray();
}
+ var settings = new GltfExportSettings();
+
// export as vrm1
using (var arrayManager = new NativeArrayManager())
{
var converter = new UniVRM10.ModelExporter();
- var model = converter.Export(arrayManager, instance.gameObject);
+ var model = converter.Export(settings, arrayManager, instance.gameObject);
// 右手系に変換
Debug.Log($"convert to right handed coordinate...");
model.ConvertCoordinate(VrmLib.Coordinates.Vrm1, ignoreVrm: false);
// export vrm-1.0
- var exporter = new Vrm10Exporter(new GltfExportSettings());
+ var exporter = new Vrm10Exporter(settings);
exporter.Export(instance.gameObject, model, converter, new VrmLib.ExportArgs
{
sparse = false,
diff --git a/Assets/VRM10/Tests/TestVrm10.cs b/Assets/VRM10/Tests/TestVrm10.cs
index 108c6d321..c38b04062 100644
--- a/Assets/VRM10/Tests/TestVrm10.cs
+++ b/Assets/VRM10/Tests/TestVrm10.cs
@@ -28,6 +28,7 @@ namespace UniVRM10
public static byte[] ExportAsBuiltInRP(GameObject gameObject)
{
return Vrm10Exporter.Export(
+ new(),
gameObject,
materialExporter: new BuiltInVrm10MaterialExporter(),
textureSerializer: new EditorTextureSerializer()
diff --git a/Assets/VRM10_Samples/VRM10RuntimeExporterSample/VRM10RuntimeExporter.cs b/Assets/VRM10_Samples/VRM10RuntimeExporterSample/VRM10RuntimeExporter.cs
index f76da8c6b..c1beea3e3 100644
--- a/Assets/VRM10_Samples/VRM10RuntimeExporterSample/VRM10RuntimeExporter.cs
+++ b/Assets/VRM10_Samples/VRM10RuntimeExporterSample/VRM10RuntimeExporter.cs
@@ -9,6 +9,9 @@ namespace UniVRM10.RuntimeExporterSample
[SerializeField]
VRM10ObjectMeta m_meta = new VRM10ObjectMeta();
+ [SerializeField]
+ GltfExportSettings m_settings = new();
+
GameObject m_model;
void OnGUI()
@@ -124,25 +127,25 @@ namespace UniVRM10.RuntimeExporterSample
return;
}
- var bytes = ExportSimple(model, m_meta);
+ var bytes = ExportSimple(m_settings, model, m_meta);
File.WriteAllBytes(path, bytes);
Debug.LogFormat("export to {0}", path);
}
- static byte[] ExportSimple(GameObject root, VRM10ObjectMeta meta)
+ static byte[] ExportSimple(GltfExportSettings settings, GameObject root, VRM10ObjectMeta meta)
{
using (var arrayManager = new NativeArrayManager())
{
var converter = new UniVRM10.ModelExporter();
- var model = converter.Export(arrayManager, root);
+ var model = converter.Export(settings, arrayManager, root);
// 右手系に変換
Debug.Log($"convert to right handed coordinate...");
model.ConvertCoordinate(VrmLib.Coordinates.Vrm1, ignoreVrm: false);
// export vrm-1.0
- var exporter = new Vrm10Exporter(new GltfExportSettings());
+ var exporter = new Vrm10Exporter(settings);
exporter.Export(root, model, converter, new VrmLib.ExportArgs
{
}, meta);
diff --git a/Assets/VRM10_Samples/VRM10Viewer/VRM10VisualPrimitive.cs b/Assets/VRM10_Samples/VRM10Viewer/VRM10VisualPrimitive.cs
index bcbb9f5f2..8d5a01ef3 100644
--- a/Assets/VRM10_Samples/VRM10Viewer/VRM10VisualPrimitive.cs
+++ b/Assets/VRM10_Samples/VRM10Viewer/VRM10VisualPrimitive.cs
@@ -36,7 +36,7 @@ namespace UniVRM10.VRM10Viewer
break;
case PrimitiveType.Plane:
- Gizmos.DrawCube(Vector3.zero, new Vector3(10, 0.001f, 10));
+ Gizmos.DrawWireCube(Vector3.zero, new Vector3(10, 0.001f, 10));
break;
default: