-
Notifications
You must be signed in to change notification settings - Fork 522
Description
Describe the bug 💬
How to disable vertex re-ordering on import?
similar to on fbx import settings:
Why?
I tried to bake additional vertices information (for a cloth simulation, a float weight 0 - 1 ) inside another uv-map (channel 2) for my model.
I exported out of blender for unity. Once as .fbx and once as .glb
When I imported my model and ran my script to extract the value per vertex, both models were simulating wrong.
using UnityEngine;
[RequireComponent(typeof(Cloth))]
[RequireComponent(typeof(SkinnedMeshRenderer))]
public class CreateClothFromUVData : MonoBehaviour
{
public float maxDistDynamic = 0.1f;
public void Start()
{
var cloth = GetComponent<Cloth>();
var smr = GetComponent<SkinnedMeshRenderer>();
var mesh = smr.sharedMesh;
if (!mesh.isReadable)
{
Debug.LogError("Mesh is not readable.");
return;
}
Vector3[] renderVertices = mesh.vertices;
Vector2[] uv3 = mesh.uv3;
ClothSkinningCoefficient[] coefficients = cloth.coefficients;
if (uv3.Length == 0)
{
uv3 = mesh.uv2;
}
if (uv3 == null || uv3.Length != renderVertices.Length)
{
Debug.LogError("UV3 channel missing or length mismatch with vertices.");
return;
}
for (int i = 0; i < coefficients.Length; i++)
{
float weight = uv3[i].x;
coefficients[i].maxDistance = maxDistDynamic * weight;
}
cloth.coefficients = coefficients;
}
}
I took a deeper look and saw, that unity (or the import plugins) reordered the vertices (for better performance I guess) on import.
But then my custom created uv channel did not correctly map to vertex indices anymore (textures do btw, I don't know why my channels did not get remapped like normal map too..)
So I disabled "Vertex Order" on fbx import settings and it behaved correctly for the fbx model.
UnityGLTF is missing this option, so it still behaves wrong.
Fixes:
Is there any chance you will add this Option? - Or at least:
Could anyone show me the spot to where to patch it or how to get the right post-import index-mapping-dictionary - or something else?
I took a look inside the source but could not find the script where it reorders the vertices.
Thanks in advance!
Steps to reproduce 🔢
- Create a new Unity 6.0 Project, Install UnityGLTF and DracoMesh Compression as package:
{
"dependencies": {
...
"com.unity.cloud.draco": "5.1.8",
"org.khronos.unitygltf": "https://github.com/KhronosGroup/UnityGLTF.git"
...
}
}
- Download the unity package: unitygltfissue.zip
- Import the Package
- Open Scene, see for yourself
Optionally you can import the meshes (.glb/.fbx) yourself
Files to reproduce the issue ♻
No response
Editor Version 🎲
6000.0
Render Pipeline and version
URP/HDR/SRP
UnityGLTF Version
2.17
Operating System 👩💻
Windows
When does this problem happen?
- Editor Import
- Runtime Import
- Editor Export
- Runtime Export
Additional Info 📜
No response
Validations 🩹
- I have searched existing issues: no issue already exist that reports the same problem.
- I follow the Code of Conduct
- I provided a minimal reproducible example, including files when necessary.