mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-11 21:38:56 -05:00
Merge branch 'master' into fix/gravitypower_typo
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -28,6 +28,7 @@ namespace UniVRM10
|
||||
public static byte[] ExportAsBuiltInRP(GameObject gameObject)
|
||||
{
|
||||
return Vrm10Exporter.Export(
|
||||
new(),
|
||||
gameObject,
|
||||
materialExporter: new BuiltInVrm10MaterialExporter(),
|
||||
textureSerializer: new EditorTextureSerializer()
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user