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:
commit
42ab525aa2
@ -996,7 +996,16 @@ Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ImporterMesh> &p
|
||||
surftool->generate_tangents();
|
||||
}
|
||||
|
||||
if (p_mesh->get_blend_shape_count() != 0 || p_skin_controller) {
|
||||
// Disable compression if all z equals 0 (the mesh is 2D).
|
||||
bool is_mesh_2d = true;
|
||||
for (int k = 0; k < vertex_array.size(); k++) {
|
||||
if (!Math::is_zero_approx(vertex_array[k].vertex.z)) {
|
||||
is_mesh_2d = false;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
if (p_mesh->get_blend_shape_count() != 0 || p_skin_controller || is_mesh_2d) {
|
||||
// Can't compress if attributes missing or if using vertex weights.
|
||||
mesh_flags &= ~RS::ARRAY_FLAG_COMPRESS_ATTRIBUTES;
|
||||
}
|
||||
|
@ -384,7 +384,22 @@ static Error _parse_obj(const String &p_path, List<Ref<ImporterMesh>> &r_meshes,
|
||||
|
||||
if (p_disable_compression) {
|
||||
mesh_flags = 0;
|
||||
} else {
|
||||
bool is_mesh_2d = true;
|
||||
|
||||
// Disable compression if all z equals 0 (the mesh is 2D).
|
||||
for (int i = 0; i < vertices.size(); i++) {
|
||||
if (!Math::is_zero_approx(vertices[i].z)) {
|
||||
is_mesh_2d = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_mesh_2d) {
|
||||
mesh_flags = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//groups are too annoying
|
||||
if (surf_tool->get_vertex_array().size()) {
|
||||
//another group going on, commit it
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user