Hello @AlexxCentral,
First off, all low poly edges will be softened if you subdivde them with SMT ( next to the divide button). This smooths the mesh while subdividing. If you disable this button, no smoothing will occur, and the mesh will retain its faceted appearance even though the polycount increases. This can be suitable for simple planar geometry like a cube. For most other situations with a mix of smooth, curved surfaces and planar surfaces, you would need to use creasing to establish which edges you would like to stay crisp when subdividing.
So the trick is to to have ZRemesher draw the edges you will need to crease as accurately as possible where you will need to crease them. For simpler geometry with very clear and distinct edges, the “detect edges” feature can work. For more complicated meshes, polygroups will be important.
I find that polygroup management is crucial to get the the most out of ZRemesher for hard surface. Please note that no auto-retopology solution can draw the kind of hyper-optimized, accurate low poly topology a human can. There is no magic button for this. It’s a skill and a process.
If you make sure that all of the sections on your mesh that you want to be separated by a hard edge are their own distinct polygroup , and then ZRemesh with the “Keep Groups” function enabled, ZRemesher will draw the edges between the polygroups. They can then all be creased with a single button (Tool> Geometry> Crease> CreasePG).
I find it works best to first ZRemesh with Keep Groups active at a high target polycount, so that ZRemesher can work out the form with plenty of polygons to spare so it doesn’t have to sacrifice form. Then, use subsequent ZRemesh operations set to “Half” to simplify the topology as far as you can before ZRemesher can no longer maintain the form. Some touch up work here and there will probably be necessary on more complicated meshes, so don’t chase perfection with ZRemesher. Get as close as you can, then touch up problem areas with ZModeler.
Good luck!