In 2D Gerber viewer you load gerbers and maybe also drills, in any order. They will have assigned arbitrary colors, to distinguish them. Possibly you can also rotate the z-order, bringing to front the layer you are interested in, at the moment.
To construct a 3D model, the viewer needs to know much more. As the abstract thought and knowledge of a CAM operator is hard to program, the user have to add or correct the missing information:
ZofzPCB tries to retrieve or guess this information, sometimes incorrectly. Therefore, it is always possible to correct the "Auto" loaded data, before rendering. It is a good practice to save the configuration in the .camset file. It will be easier to load the files, next time, after editing.
We are using a game engine to display the image. Drawn/painted layer contains many overlapped objects. Often a part of the image is cleared, and some other elements are drawn in the resulting hole, example: like track in a plane. All this higher level construct must be converted to optimal positive mesh. The result is that even a complicated PCB can be displayed by moderate GPU, usually at 60fps.
Drawback of the flattening and triangulation is the time it takes, before passing the mesh to the GPU.