Hello @Athrial
I think you’ll find that the missing step here is using ZRemesher to clean the mesh up. For simple shapes like that, ZRemesher should be able to do a really good job of identifying and preserving edges, although this is a skillset in itself, and more complex than I’m going to go into here.
There is no magic auto-retopo solution to create optimized low poly geometry of the quality a human would make. There will need to be manual touch up at times. However, ZRemesher should be able to do most of the heavy lifting, and ZModeler can be used for quick spot touch up, which is generally more efficient than chasing perfect results in ZRemesher with trial and error.
So the basic idea here would be to make sure all your edges are creased, so you can subdivide your shapes and have them keep their hard edges. Then subdivide once or twice. The reason for this is that the extra points give ZRemesher more information to work with, and it tends to produce better results than super low poly geo.
I recommend a polygrouping strategy, since polygroups also make it easier for ZRemesher to identify edges, and they can be used with CreasePG to instantly re-crease all your polygroup borders after Zremeshing. Polygroups are also very useful at all stages of ZBrush work for managing your mesh.
So make sure all your creased edges fall along the borders of different polygroups on each side. In this case, all your planar surfaces should be distinct polygoups. Then Subdivide once to add a few more points. ZRemesh with the “Keep Groups” option active. Other options may also be supplementally useful.
ZRemesh at a fairly high target polycount so ZRemesher has enough polys to capture the form with, then reduce down with the “Half” option, correcting trouble spots as you go, until ZRemesher can no longer maintain the form. Your biggest issue will probably be little random polygroup slivers along the polygroup borders that either don’t belong to either polygroup and impair the ZRemesher results, or places where the the edge is breaking down due to a topological deformity. The Point> Stitch and Polygroup functions in ZModeler can be very useful for touching these areas up.
Dynamic Subdivision is a very useful feature to preview the subdivision smoothing effect non-destructively on a low poly mesh and spot problem areas.
Then once you have some clean results you are happy with, use the Crease PG function to instantly restore all your creasing. You should now have clean, fairly low poly geometry with distinct edges and creasing, and well defined polygroups, great for further detail sculpting, painting, UV unwrap and texture creation.
Good luck!