Page MenuHome

Regression: Crash when transferring face corner data
Closed, ResolvedPublic

Description

System Information
Operating system: Linux-5.15.23-76051523-generic-x86_64-with-glibc2.34 64 Bits
Graphics card: Quadro RTX 6000/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 510.54

Blender Version
Broken: version: 3.2.0 Alpha, branch: master, commit date: 2022-04-04 05:43, hash: rB5dbd6968a685
Broken: 3.1.0
Worked: 3.0.1

Apparently caused by rB44b0c70919e9: Fix T92288, T96041: instancing of shared mesh objects without modifiers broken

Short description of error
Transferring face corner data using bpy.ops.object.data_transfer() crashes Blender on the Nearest Corner and Best Matching Normal mapping setting.

Exact steps for others to reproduce the error
From default startup scene:

  • Duplicate default cube
  • Select both cubes
  • Run Data Transfer operator (e.g. using Ctrl+L)
  • Select a face corner data layer for transfer (e.g. UV Maps)
  • Select the Nearest Corner and Best Matching Normal for face corner mapping

Event Timeline

Omar Emara (OmarSquircleArt) changed the task status from Needs Triage to Confirmed.Apr 4 2022, 4:34 PM
#0  0x00007ffff7e1e34c in __pthread_kill_implementation () from /usr/lib/libc.so.6
#1  0x00007ffff7dd14b8 in raise () from /usr/lib/libc.so.6
#2  0x00007ffff7dbb534 in abort () from /usr/lib/libc.so.6
#3  0x000000000e588ee9 in _BLI_assert_abort () at /home/omar/projects/blender/blender/source/blender/blenlib/intern/BLI_assert.c:46
#4  0x000000000374b126 in BKE_mesh_remap_calc_loops_from_mesh (mode=67111248, space_transform=0x7fffffffdee0, max_dist=3.40282347e+38, ray_radius=0, mesh_dst=0x7fffda252008, verts_dst=0x7fffcc0bea08, numverts_dst=42, edges_dst=0x7fffcc0fe208, numedges_dst=120, loops_dst=0x7fffcc109808, numloops_dst=240,
    polys_dst=0x7fffcc0c3008, numpolys_dst=80, ldata_dst=0x7fffda252400, use_split_nors_dst=false, split_angle_dst=0.52359879, dirty_nors_dst=true, me_src=0x7fffcd60e808, gen_islands_src=0x362f740 <BKE_mesh_calc_islands_loop_poly_edgeseam>, islands_precision_src=0.100000001, r_map=0x7fffffffdb40)
    at /home/omar/projects/blender/blender/source/blender/blenkernel/intern/mesh_remap.c:1386
#5  0x0000000003704479 in BKE_object_data_transfer_ex (depsgraph=0x7fffdaa3c308, scene=0x7fffd98a8008, ob_src=0x7fffd9b5e808, ob_dst=0x7fffcbd3d608, me_dst=0x7fffda252008, data_types=16777216, use_create=true, map_vert_mode=16777488, map_edge_mode=33554720, map_loop_mode=67111248, map_poly_mode=134218112,
    space_transform=0x7fffffffdee0, auto_transform=false, max_distance=3.40282347e+38, ray_radius=0, islands_handling_precision=0.100000001, fromlayers_select=0x7fffffffdf70, tolayers_select=0x7fffffffdf60, mix_mode=0, mix_factor=1, vgroup_name=0x0, invert_vgroup=false, reports=0x7fffda0d9c78)
    at /home/omar/projects/blender/blender/source/blender/blenkernel/intern/data_transfer.c:1646
#6  0x0000000003705196 in BKE_object_data_transfer_mesh (depsgraph=0x7fffdaa3c308, scene=0x7fffd98a8008, ob_src=0x7fffd9b5e808, ob_dst=0x7fffcbd3d608, data_types=16777216, use_create=true, map_vert_mode=16777488, map_edge_mode=33554720, map_loop_mode=67111248, map_poly_mode=134218112, space_transform=0x7fffffffdee0,
    auto_transform=false, max_distance=3.40282347e+38, ray_radius=0, islands_handling_precision=0.100000001, fromlayers_select=0x7fffffffdf70, tolayers_select=0x7fffffffdf60, mix_mode=0, mix_factor=1, vgroup_name=0x0, invert_vgroup=false, reports=0x7fffda0d9c78)
    at /home/omar/projects/blender/blender/source/blender/blenkernel/intern/data_transfer.c:1831
#7  0x0000000004ad8aab in data_transfer_exec (C=0x7ffff47c0b28, op=0x7fffc5103188) at /home/omar/projects/blender/blender/source/blender/editors/object/object_data_transfer.c:453
#8  0x0000000003770c96 in wm_operator_exec (C=0x7ffff47c0b28, op=0x7fffc5103188, repeat=true, store=true) at /home/omar/projects/blender/blender/source/blender/windowmanager/intern/wm_event_system.c:1102
#9  0x0000000003770f70 in WM_operator_repeat (C=0x7ffff47c0b28, op=0x7fffc5103188) at /home/omar/projects/blender/blender/source/blender/windowmanager/intern/wm_event_system.c:1166
#10 0x0000000004ca2bd1 in ED_undo_operator_repeat (C=0x7ffff47c0b28, op=0x7fffc5103188) at /home/omar/projects/blender/blender/source/blender/editors/undo/ed_undo.c:706
#11 0x0000000004ca2d70 in ED_undo_operator_repeat_cb_evt (C=0x7ffff47c0b28, arg_op=0x7fffc5103188, UNUSED_arg_unused=0) at /home/omar/projects/blender/blender/source/blender/editors/undo/ed_undo.c:740
#12 0x0000000004ccebe3 in ui_apply_but_funcs_after (C=0x7ffff47c0b28) at /home/omar/projects/blender/blender/source/blender/editors/interface/interface_handlers.c:1036
#13 0x0000000004ccd00e in ui_handler_region_menu (C=0x7ffff47c0b28, event=0x7fffda1f7628, UNUSED_userdata=0x7fffcc0bbe88) at /home/omar/projects/blender/blender/source/blender/editors/interface/interface_handlers.c:11396
#14 0x000000000377bfbc in wm_handler_ui_call (C=0x7ffff47c0b28, handler=0x7fffccc0f5e8, event=0x7fffda1f7628, always_pass=0) at /home/omar/projects/blender/blender/source/blender/windowmanager/intern/wm_event_system.c:736
#15 0x000000000377b0fe in wm_handlers_do_intern (C=0x7ffff47c0b28, win=0x7fffeb04ff08, event=0x7fffda1f7628, handlers=0x7fffeb050018) at /home/omar/projects/blender/blender/source/blender/windowmanager/intern/wm_event_system.c:3097
#16 0x0000000003773cd9 in wm_handlers_do (C=0x7ffff47c0b28, event=0x7fffda1f7628, handlers=0x7fffeb050018) at /home/omar/projects/blender/blender/source/blender/windowmanager/intern/wm_event_system.c:3216
#17 0x0000000003772e2c in wm_event_do_handlers (C=0x7ffff47c0b28) at /home/omar/projects/blender/blender/source/blender/windowmanager/intern/wm_event_system.c:3785
#18 0x0000000003768d27 in WM_main (C=0x7ffff47c0b28) at /home/omar/projects/blender/blender/source/blender/windowmanager/intern/wm.c:623
#19 0x0000000002e61e49 in main (argc=1, argv=0x7fffffffe9e8) at /home/omar/projects/blender/blender/source/creator/creator.c:547
Philipp Oeser (lichtwerk) renamed this task from Crash when transferring face corner data to Regression: Crash when transferring face corner data.Apr 4 2022, 4:43 PM
Philipp Oeser (lichtwerk) updated the task description. (Show Details)

The problem is the code in mesh_calc_modifiers that makes instancing of unmodified mesh work. It skips computing final normals when runtime->mesh_eval != NULL, assuming that another instance has already done so.

However in this case, we are re-evaluating the modifier stack for an operator, since the datamask does not match what we had computed for viewport display.

I guess it's a longer term thing, but I'd like to do the same refactor for derived face corner normals that I did for face and vertex normals, i.e. calculate them lazily, which should solve issues like this. So maybe a temporary fix is fine here. (Didn't look into this specific bug deeply).