I find that when doing hard surfaces shapes like this, one of the best ways to get nice clean curved surfaces is to keep your basemesh as low poly as possible to let the subdivision smoothing create the curves for you.
I’d just do the visor’s main shape first, and only as a single plane (no thickness, no holes). Just worry about getting the overall outline and curves defined so that it looks nice and clean when using Dynamic Subdivision with 3-4 levels.
From there you’d have two different approaches:1. Use ZModeler to extract the polygroup, which will give thickness to the plate. Then use Live Booleans to subtract the square holes.
- Subdivide the mesh once or twice, then delete the lower levels. This will give you a base level with more geometry while retaining the nice curves that the subdivision formula had created from the original. With this extra geometry you can use ZModeler to delete the square holes, then use it to add the thickness. Creasing or bevels can be used to help maintain the sharpness of these squares when you subdivide further.