I actually ran into the same issue you are running into: SurfaceGui’s don’t render in ViewportFrames and welding parts to the Camera causes distortion effects and causes some clipping issues.
The clipping issues can be resolved by enabling the AlwaysOnTop proprty of the SurfaceGui. That only works for the GUI elements though, not the parts they are applied to. I would suggest you make your own texture that mimics the parts you are currently using, so that it can be displayed as a texture.
If you’re trying to make it more 3D than just SurfaceGUI-Welded-To-The-Camera, there currently is no way to achieve this. In order to avoid the distortion effects you’d need to decrease the Field of View significantly, and due to Roblox not supporting multiple cameras rendering on top of each other, the only way to achieve this would be by decreasing FoV of your entire game to an unplayable small value.
This is a good usecase to request the support of SurfaceGui within ViewportFrames though, and you should definitely add your support to the existing feature request(s) that ask for this.