The internals are DEFINITELY being rendered as well. Well, sort of -- it depends on the order in which the polygons are rendered, but they'll still be translated into screen-space, and anything else the vertex-shader does will be done.
Basically, the engine just can't know prior to rendering which faces are obscured by other faces. What it does is reject pixels that are behind what has already been rendered. The internals of your gun might get rendered first and then covered up, or they might attempt to get rendered last and rejected, but either way they can't be ignored and still require vertex calculations, and still add overhead.
With your second problem, DirectX cannot differentiate between hard and soft edges. If you want hard edges you need to split them so the faces are not actually connected to each other.
I hope this is helpful!
Jibb
EDIT: Pixel shaders are often relatively expensive, and those pixels that get rejected early do get to skip this stage. I think that the engine deals with faces in the order they were created in the model file, so you can guarantee the internals will be rendered last if you can put them last in the file (perhaps by cutting and pasting them exactly as they were). This is an improvement but still wasteful, though, as far as vertex calculations go, so I would highly recommend having no internals when possible.
Last edited by JulzMighty; 07/24/09 10:44. Reason: But if you really want to...