Merge pull request #86144 from jsjtxietian/disable-mesh-compression-for-2d

Disable mesh compression if vertex `position.z` is always 0
This commit is contained in:
Rémi Verschelde 2024-04-12 11:16:33 +02:00
commit 42ab525aa2
No known key found for this signature in database
GPG key ID: C3336907360768E1
3 changed files with 36 additions and 2 deletions

View file

@ -3059,7 +3059,17 @@ Error GLTFDocument::_parse_meshes(Ref<GLTFState> p_state) {
array[Mesh::ARRAY_TANGENT] = tangents;
}
if (p_state->force_disable_compression || !a.has("POSITION") || !a.has("NORMAL") || p.has("targets") || (a.has("JOINTS_0") || a.has("JOINTS_1"))) {
// Disable compression if all z equals 0 (the mesh is 2D).
const Vector<Vector3> &vertices = array[Mesh::ARRAY_VERTEX];
bool is_mesh_2d = true;
for (int k = 0; k < vertices.size(); k++) {
if (!Math::is_zero_approx(vertices[k].z)) {
is_mesh_2d = false;
break;
}
}
if (p_state->force_disable_compression || is_mesh_2d || !a.has("POSITION") || !a.has("NORMAL") || p.has("targets") || (a.has("JOINTS_0") || a.has("JOINTS_1"))) {
flags &= ~RS::ARRAY_FLAG_COMPRESS_ATTRIBUTES;
}