A method for rendering a three-dimensional model which includes a plurality of semi-transparent surfaces, the method comprising: rendering the plurality of semi-transparent surfaces of the three-dimensional model by performing the following operations iteratively for two or more of the plurality of semi-transparent surfaces in draw-order, wherein rendering the semi-transparent surfaces in draw-order instead of depth-order avoids the time-consuming process of sorting the geometries for three-dimensional models to establish a depth-ordering: initializing a Z-buffer, wherein said initializing sets all depth values in the Z-buffer to a default depth value that ensures that depth values stored in the Z-buffer are within a known finite range; rendering one of the semi-transparent surfaces according to the draw-order to the Z-buffer, wherein said rendering the one of the semi-transparent surfaces to the Z-buffer stores depth values for the one of the semi-transparent surfaces to the Z-buffer, calculating a cumulative transparency value for each pixel of the semi-transparent surface by multiplying the transparency value for each surface of the three-dimensional model that intersects the pixel and that is in front of the pixel according to the depth value for the pixel in the Z-buffer, attenuating a surface color value for each pixel in the semi-transparent surface by the cumulative transparency value for the respective pixel, adding the attenuated surface color value for each pixel of the semi-transparent surface to a corresponding pixel value in an image buffer, and wherein during each iteration depth values for only the current semi-transparent surface according to the draw-order are stored in the Z-buffer. rendering the plurality of semi-transparent surfaces of the three-dimensional model by performing the following operations iteratively for two or more of the plurality of semi-transparent surfaces in draw-order, wherein rendering the semi-transparent surfaces in draw-order instead of depth-order avoids the time-consuming process of sorting the geometries for three-dimensional models to establish a depth-ordering: initializing a Z-buffer, wherein said initializing sets all depth values in the Z-buffer to a default depth value that ensures that depth values stored in the Z-buffer are within a known finite range; rendering one of the semi-transparent surfaces according to the draw-order to the Z-buffer, wherein said rendering the one of the semi-transparent surfaces to the Z-buffer stores depth values for the one of the semi-transparent surfaces to the Z-buffer, calculating a cumulative transparency value for each pixel of the semi-transparent surface by multiplying the transparency value for each surface of the three-dimensional model that intersects the pixel and that is in front of the pixel according to the depth value for the pixel in the Z-buffer, attenuating a surface color value for each pixel in the semi-transparent surface by the cumulative transparency value for the respective pixel, adding the attenuated surface color value for each pixel of the semi-transparent surface to a corresponding pixel value in an image buffer, and initializing a Z-buffer, wherein said initializing sets all depth values in the Z-buffer to a default depth value that ensures that depth values stored in the Z-buffer are within a known finite range; rendering one of the semi-transparent surfaces according to the draw-order to the Z-buffer, wherein said rendering the one of the semi-transparent surfaces to the Z-buffer stores depth values for the one of the semi-transparent surfaces to the Z-buffer, calculating a cumulative transparency value for each pixel of the semi-transparent surface by multiplying the transparency value for each surface of the three-dimensional model that intersects the pixel and that is in front of the pixel according to the depth value for the pixel in the Z-buffer, attenuating a surface color value for each pixel in the semi-transparent surface by the cumulative transparency value for the respective pixel, adding the attenuated surface color value for each pixel of the semi-transparent surface to a corresponding pixel value in an image buffer, and wherein during each iteration depth values for only the current semi-transparent surface according to the draw-order are stored in the Z-buffer.