Recursive function to merge 3D objects
I don't think you need recursion. The items in your first loop always "eat" the other ahead of them. Loop all items, for each item check if it can merge into an item ahead of it, if yes, merge and remove the item that was ahead.

Now VB does store the "To" part of a for loop in memory, so you'll need to convert your For into Do loop instead.

If you want your main list to be untouched, you could clone it. But don't forget that it seems each instance will be affected in the two list if you do that.

Private Sub SimplifyModel2(ByVal listOri As List(Of Mesh3D))
    Dim indexOut, indexIn As Integer
    Dim currentMeshOutter, currentMeshInner As Mesh3D

    indexOut = 0

    Do While indexOut &lt; istOri.Count
        currentMeshOutter = listOri(indexOut)
        indexIn = indexOut + 1

        Do While indexIn &lt; istOri.Count
            currentMeshInner = listOri(indexIn)

            If Is3DOverlap(currentMeshInner, currentMeshOutter) Then
                currentMeshOutter.CombineMerge(currentMeshInner)
                istOri.Remove(currentMeshInner)
            Else
                indexIn += 1
            End If
        Loop

        indexOut += 1
    Loop

End Sub