Merge branch 'master' into fix/gravitypower_typo

This commit is contained in:
ousttrue
2024-11-11 14:37:33 +09:00
committed by GitHub
8 changed files with 43 additions and 29 deletions

View File

@@ -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";

View File

@@ -24,11 +24,11 @@ namespace UniVRM10
/// </summary>
/// <param name="root"></param>
/// <returns></returns>
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<MeshFilter>(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<UnityEngine.Material> materials)
private static VrmLib.MeshGroup CreateMesh(
GltfExportSettings settings,
INativeArrayManager arrayManager,
Mesh mesh, Renderer renderer,
List<Material> 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;

View File

@@ -940,6 +940,7 @@ namespace UniVRM10
/// <param name="getTextureBytes"></param>
/// <returns></returns>
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
{
};

View File

@@ -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);

View File

@@ -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,

View File

@@ -28,6 +28,7 @@ namespace UniVRM10
public static byte[] ExportAsBuiltInRP(GameObject gameObject)
{
return Vrm10Exporter.Export(
new(),
gameObject,
materialExporter: new BuiltInVrm10MaterialExporter(),
textureSerializer: new EditorTextureSerializer()

View File

@@ -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);

View File

@@ -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: