System and method for reducing the rendering load for high depth complexity scenes on a computer graphics display
First Claim
1. A computer graphics rendering system for efficiently rendering three-dimensional scenes of high depth complexity with a graphics display unit, comprising:
- (a) means for bypassing rendering operations for frame buffer regions in which the pixels are completely covered by primitives, (b) means for accumulating coverage of frame buffer regions by both individual primitives and groups of primitives, (c) a full buffer having memory locations arranged for recording frame buffer regions which are completely covered, and (d) a partial buffer coupled to the full buffer to enable multiple primitives to combine to fill frame buffer regions.
4 Assignments
0 Petitions
Accused Products
Abstract
This invention relates generally to the field of computer graphics display, and more particularly to reducing the amount of time needed to render complex virtual scenes on a computer graphics display. This invention combines the advantages of the prior art methods of list priority and depth buffering (e.g. Z-buffering) with new simplified and enhanced full buffer processes. In one embodiment, a simplified full buffer arrangement enables the elimination of rendering primitives prior to pixel shading for regions of the screen which have previously been covered by closer primitives. Another embodiment provides for an enhanced full buffer that combines the coverage of a previously rendered primitive in a partial buffer and associates it with a current primitive to cover pixel arrays. This enhanced full buffer technique enables the use of higher order model primitives such as strips, fans and meshes, to increase the effectiveness of the full buffer by allowing more than one primitive to combine to fill a scanned pixel region on the screen.
65 Citations
41 Claims
-
1. A computer graphics rendering system for efficiently rendering three-dimensional scenes of high depth complexity with a graphics display unit, comprising:
-
(a) means for bypassing rendering operations for frame buffer regions in which the pixels are completely covered by primitives, (b) means for accumulating coverage of frame buffer regions by both individual primitives and groups of primitives, (c) a full buffer having memory locations arranged for recording frame buffer regions which are completely covered, and (d) a partial buffer coupled to the full buffer to enable multiple primitives to combine to fill frame buffer regions. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9)
(a) a plurality of pixel count values in the partial buffer wherein each corresponds to a pixel array in the partial buffer to thereby store the number of pixels covered in the pixel array by the previously scanned primitive for the pixel array, (b) a plurality of opacity flags in the partial buffer wherein each opacity flag corresponds to a pixel array in the partial buffer which indicates if all the pixels counted by the current pixel count accumulator were opaque; and
(c) a plurality of farthest depth values in the partial buffer wherein each depth storage location corresponds to a pixel array in the partial buffer to thereby store the farthest depth value of the most recently processed primitive within the pixel array.
-
-
5. The graphics rendering system as in claim 4 where the means for copying further includes a means for copying the accumulated values from the partial buffer further comprises a means for copying the pixel count value from the partial buffer to the combined pixel count accumulator, and the opacity flags from the partial buffer to the combined opacity flag accumulator, and the farthest depth value to the combined farthest depth value.
-
6. The graphics rendering system as in claim 5 where the means for determining when a next connected primitive has combined with results in the partial buffer to fill pixel arrays further comprises:
-
(a) a plurality of valid flag pairs in the partial buffer wherein each pair of valid flags is a current and previous flag and corresponds to a pixel array in the partial buffer such that partial buffer appears double buffered even though there is only one memory location per pixel array which stores pixel values, (b) a means for determining whether the data in the partial buffer is valid such that the next step of combining the partial buffer coverage information is skipped if the partial buffer data is not valid.
-
-
7. The graphics rendering system as in claim 6 further comprising a plurality of coincident full flags in the fill buffer wherein each coincident full flag corresponds to a pixel array in the full buffer to thereby indicate that a pixel array has been filled by one or more coincident primitives and the pixel array calculations to determine pixel values may be skipped if other coincident primitives within the same coincident group are encountered.
-
8. The graphics rendering system as in claim 5 further comprising a combined pixel count accumulator coupled to the partial buffer and the current primitive, to thereby determine the total number of pixels in the pixel array filled by both the previous connected primitive recorded in the partial buffer and the current connected primitive.
-
9. The graphics rendering system as in claim 5 further comprising a combined opacity flag accumulator coupled to the partial buffer and the current primitive, wherein each opacity flag corresponds to a partial buffer and a full buffer pixel array and stores a true value if all pixel values in the corresponding pixel arrays are opaque and a false value if any pixel value is transparent.
-
10. A computer graphics rendering process for efficiently rendering three-dimensional scenes of high depth complexity with a graphics display unit, comprising:
-
(a) bypassing rendering operations for frame buffer regions which are completely covered, (b) accumulating coverage of frame buffer regions by both individual primitives and groups of primitives, (c) recording frame buffer regions which are completely covered using a full buffer having memory locations, and (d) combining multiple primitives to fill frame buffer regions using a partial buffer coupled to the full buffer. - View Dependent Claims (11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21)
(a) incrementing to the combined pixel count accumulator and the current pixel count accumulator;
(b) marking combined opacity flag and the current opacity flag to thereby store a value which shows whether all the pixels in the pixel array are opaque; and
(c) analyzing the combined pixel accumulator and combined opaque flags to determine if the pixel array is completely filled with pixel values.
-
-
17. The method for rendering graphics as in claim 16 which further comprises the step of storing the farthest depth in the full buffer if the pixel array is completely filled.
-
18. The method for rendering graphics as in claim 13 where the steps of retrieving the information and combining the partial buffer and the current primitive are skipped if the primitives are not connected and further comprising the steps of:
-
(a) overwriting the combined pixel count accumulator with data from the current pixel count accumulator;
(b) overwriting the combined opacity flag with the current opacity flag to thereby store a value which shows whether all the pixels in the pixel array are opaque relative to only the current primitive; and
(c) overwriting the combined farthest depth value with the current primitive'"'"'s farthest depth.
-
-
19. A method for rendering graphics as in claim 18 where the next steps comprise:
-
(a) testing to decide if the pixel array is filled;
(b) storing the farthest depth of the currently scanned primitive in the full buffer if the pixel array is filled;
(c) selecting a new primitive to be scanned; and
(d) repeating all the above steps until all the primitives have been scanned for all the pixel arrays.
-
-
20. A method for rendering graphics as in claim 12 wherein it is determined that the current primitive and next primitive to be scanned are not connected, further comprising the steps of:
-
(a) skipping over the partial buffer operations;
(b) resetting the pixel count accumulator;
(c) selecting the current primitives furthest depth;
(d) accumulating the pixel count and the opacity flag;
(e) testing to decide if the pixel array is filled;
(f) storing the farthest depth of the primitive in the full buffer if the pixel array is filled;
(g) selecting a new primitive to be scanned by the graphics systems and repeating the steps above.
-
-
21. A method for rendering graphics as in claim 12 wherein it is determined that the current primitive and next primitive to be scanned are connected, further comprising the steps of:
-
(a) determining that the partial buffer data is valid;
(b) retrieving the sub-pixel count, opacity flag and farthest depth from the partial buffer;
(c) selecting between current and partial farthest depth;
(d) accumulating the pixel count and the opacity flag;
(e) testing to decide if the pixel array is filled;
(f) storing the farthest depth of the primitive in the full buffer if the pixel array is filled;
(g) selecting a new primitive to be scanned by the graphics systems and repeating the steps above.
-
-
22. A method for increasing a rate of rendering a synthetic image on a computer graphics display, wherein the synthetic image is generated from a database of a plurality of primitives, said method comprising the steps of:
-
(a) determining which pixels require processing for each of the plurality of primitives;
(b) comparing the depth values of the primitives requiring processing against depth values in a full buffer to thereby determine whether the pixels in a region require further processing; and
(c) skipping shading value calculations for pixels not requiring further processing. - View Dependent Claims (23, 24, 25, 26, 27, 28, 29, 30)
(a) determining a closest vertex relative to an observer of each of the primitives being rendered; and
(b) determining a closest value for the primitive within a given pixel array.
-
-
25. The method as defined in claim 24 wherein the step of determining a closest vertex relative to the observer of each of the primitives being rendered further comprises the step of comparing depth values at each vertex of the primitive to thereby locate a closest depth value.
-
26. The method as defined in claim 24 wherein the step of determining a closest value for the primitive within a given pixel array further comprises the steps of:
-
(a) determining whether a closest point within the pixel array has a further depth value than the closest vertex of a primitive; and
(b) utilizing the depth value of the closest array corner for the full buffer test if the closest array comer is further than the closest vertex of the primitive; and
(c) utilizing the depth value of the closest vertex of the primitive if the closest array comer is not further than the closest vertex of the primitive.
-
-
27. The method as defined in claim 26 wherein the step of determining whether the closest value for the primitive within a given pixel array has a further depth value than a closest vertex further comprises the step of utilizing a depth slope comparison.
-
28. The method as defined in claim 27 wherein the method further comprises the step of making a sign bit comparison to determine at which comer the depth value is to be calculated.
-
29. The method as defined in claim 28 wherein the method further comprises the steps of:
-
(a) comparing the closest depth value with a depth value already stored in the full buffer for each pixel array requiring processing for the primitive;
(b) bypassing the array if the depth value is further than the recorded depth in the full buffer; and
(c) processing the pixel array to determine a shading value for each pixel and executing z-buffer testing, if the depth value is closer than the recorded depth in the full buffer.
-
-
30. The method as defined in claim 29 wherein the method further comprises the steps of:
-
(a) monitoring a rendering process to determine whether the primitives which are being recorded in the frame buffer completely fill any pixel arrays of the full buffer being processed;
(b) loading a maximum depth value of a primitive into the full buffer if the pixel array is completely filled; and
(c) overwriting an old full buffer depth value if the primitive completely fills the array, and the maximum depth value is closer than the depth value already in the buffer.
-
-
31. A method for increasing a rate of rendering a synthetic image on a computer graphics display, wherein the synthetic image is generated from a database of a plurality of primitives, said method comprising the steps of:
-
(a) determining which pixels of the plurality of pixels require processing for each of the plurality of primitives;
(b) serially accumulating a full status of a plurality of pixels stored in at least one pixel array as the plurality of pixels are processed; and
(c) marking the pixel array as full if the plurality of pixels in the pixel array are determined to be completely covered. - View Dependent Claims (32, 33, 34, 35, 36, 37, 38)
-
-
39. A system for increasing a rate of rendering a synthetic image on a computer graphics display, where the synthetic image is generated from a database of a plurality of primitives, comprising:
-
(a) means for determining which pixels require processing for each of the plurality of primitives;
(b) means for comparing the depth values of the primitives requiring processing against depth values in a full buffer to thereby determine whether the pixels in a region require further processing; and
(c) means for skipping shading value calculations for pixels not requiring further processing. - View Dependent Claims (40, 41)
-
Specification