3D slicing using Dynamic Paint leaves holes where there shouldnt be any I am using dynamic paint to take slices as an image sequence through a prexisting mesh (also created in blender). For this I create a plane and set that as a canvas which passes through my mesh object outputting a cross section every frame. I have played around with the parameters (dissolve time = 1 etc) and the output is clearly doing something right but leaves me with holes within my mesh. Hopefully the images below will explain this better.
These images are for the first slice (easiest to get images for). Ive circled an example of the issue.
UPDATE: Blend file now included.

Here is the code which assigns dynamic paint parameters Xmax, Ymax and Zmax, specify the location of the canvas.
context = bpy.context
active = context.active_object

print('Setting Up Ballast Brushes')
    

bpy.ops.object.modifier_add(type='DYNAMIC_PAINT')
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].ui_type = 'BRUSH'
bpy.ops.dpaint.type_toggle(type='BRUSH')

print('Setting Up Plane')

bpy.ops.mesh.primitive_plane_add(enter_editmode=False, align='WORLD', location=(0, 0, 0))
bpy.data.objects[&quot;Plane&quot;].scale[0]=Xmax/2
bpy.data.objects[&quot;Plane&quot;].scale[1]=Zmax/2
bpy.data.objects[&quot;Plane&quot;].scale[2]=1
bpy.data.objects[&quot;Plane&quot;].location[0]=Xmax/2
bpy.data.objects[&quot;Plane&quot;].location[1]=0
bpy.data.objects[&quot;Plane&quot;].location[2]=(Zmax/2)
bpy.data.objects[&quot;Plane&quot;].rotation_euler[0] = 1.5708


print('Setting Canvas Parameters')

bpy.ops.object.modifier_add(type='DYNAMIC_PAINT')
bpy.data.objects['Plane'].modifiers[&quot;Dynamic Paint&quot;].ui_type='CANVAS'
bpy.ops.dpaint.type_toggle(type='CANVAS')
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].surface_format = 'IMAGE'
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].image_resolution = 1000
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].use_antialiasing = False
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].frame_end = endframe2
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].use_dissolve = True
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].dissolve_speed = 1
#bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].use_dissolve_log = False
#bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].dry_speed = 1
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].image_output_path = str(path)
bpy.ops.object.editmode_toggle()
bpy.ops.uv.smart_project() #the actual unwrapping operation
bpy.ops.object.editmode_toggle() #exiting edit mode
bpy.context.object.modifiers[&quot;Dynamic Paint&quot;].canvas_settings.canvas_surfaces[&quot;Surface&quot;].uv_layer = &quot;UVMap&quot;
You could simplified file to make it smaller ... just a Plane and one problematic stone, like that you could notice it works. So why it is not working in group? I would say for its overlapping geometry.
I can imagine that hole in place of crossing stones , but it happens just it is crossed somewhere. If you move stone behind it is fine.
You can try Remesh Modifier &gt; Voxel &gt; 0.001 m, before DP, but it would be very intensive calculation, but it worked ...

Or Separate stones by Loose parts set them Rigid Body (create a collision box) and let simulate for a few frames just to solve overlapping. Than merge them back into one object for DP.