From 33db2d372fc52f969e6f474ecff101f661eec738 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 12 Feb 2025 11:48:17 -0500 Subject: [PATCH] Mesh: Optimize vertex to edge attribute domain interpolation Instead of using `DefaultMixer`, use the simpler `mix2` function. This just decreases the overhead of computing each value. In a simple test storing an attribute with the position of each edge, I observed a 1.7x performance improvement: a change from 16 ms to ~9ms for an 8 million edge mesh. Resolves #133196. --- source/blender/blenkernel/intern/mesh_attributes.cc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/source/blender/blenkernel/intern/mesh_attributes.cc b/source/blender/blenkernel/intern/mesh_attributes.cc index 3f0422ba2ef..fb46bf2ee65 100644 --- a/source/blender/blenkernel/intern/mesh_attributes.cc +++ b/source/blender/blenkernel/intern/mesh_attributes.cc @@ -414,13 +414,8 @@ static GVArray adapt_mesh_domain_point_to_edge(const Mesh &mesh, const GVArray & else { new_varray = VArray::ForFunc( edges.size(), [edges, varray = varray.typed()](const int edge_index) { - T return_value; - attribute_math::DefaultMixer mixer({&return_value, 1}); const int2 &edge = edges[edge_index]; - mixer.mix_in(0, varray[edge[0]]); - mixer.mix_in(0, varray[edge[1]]); - mixer.finalize(); - return return_value; + return attribute_math::mix2(0.5f, varray[edge[0]], varray[edge[1]]); }); } }