This invention relates generally to computing systems and generating graphical images, and more particularly, to modifying positions of sample positions for selectably oversampling pixels to anti-alias non-geometric portions of computer-generated images, such as texture.
A common problem in forming computer-generated images is aliasing, which is the under-sampling of a signal (or graphic feature) resulting in degraded image quality. For example, geometric aliasing causes a stair-stepping effect (or “jaggies”) to appear on the geometric edges of primitives (or geometries). Non-geometric aliasing is another type of aliasing that is due primarily to under-sampling of texture, for example, or depth. Texture aliasing arises during the sampling of textures when screen coordinates of image pixels can irregularly map to more or fewer texture coordinates of texture pixels (i.e., “texels”). One general anti-aliasing approach is the technique of supersampling an entire frame. While providing higher resolutions with which to reduce aliasing, the conventional technique of supersampling has a drawback of increasing the computational overhead of rendering computer-generated images by a multiplicative amount. For example, a four-times (i.e., “4×”) supersampling technique samples the texture (or shading) of each pixel of a frame four times. Unfortunately, this tends to decrease the frame rate of rendering computer-generated images, especially in shader limited and texture limited situations, to approximately a quarter of the frame rates achieved by other anti-aliasing techniques, such as multisampling. The reduction in frame rate is undesirable for real-time applications. The terms “texture limited” and “shader limited” refer generally to the fastest speed at which a graphics generating system can operate when respectively processing large textures and complicated shading that bottleneck the system.
There are several drawbacks to the jitter-based anti-aliasing technique described in
Multipass rendering is a well-known technique for forming final images by rendering some or all of the objects in the scene multiple times whereby one or more of those objects are modified during each pass. A desirable implementation of multipass rendering is to supersample both coverage and texture for each pixel of a particular object during a first multipass-rendering pass, and then to sequentially add or composite lighting effects from different lighting sources in subsequent multipass-rendering passes. The use of multisampling to incrementally add lighting during subsequent passes is desirable since multisampling consumes less computational resources than does a supersampling technique that samples both shading and coverage at each coverage sample position 302. But a drawback to using multisampling in conjunction with jitter-based supersampling is that different depth values are determined for a geometry being shifted over each sample position during the jitter-based supersampling. As such, subsequent multisampling passes to apply lighting to that geometry requires computation-intensive interpolations to match the different depth values. Consequently, correcting mismatched depth values (or Z values) due to shifting object 410 generally offsets the benefits of using such an approach in graphics pipelines.
In view of the foregoing, it would be desirable to provide a system, an apparatus and a method for minimizing the drawbacks of the above-described conventional anti-aliasing techniques.
A system, apparatus, and method are disclosed for modifying positions of sample locations for selectably oversampling pixels to anti-alias non-geometric portions of computer-generated images, such as texture. Anti-aliasing is effectuated, at least in part, by shifting shading sample positions relative to a frame of reference that includes the geometries of the computer-generated images and coverage sample positions such that there is no relative motion between the geometries and one of the coverage sample position. In one embodiment, an exemplary method for sampling pixel shading of a computer-generated object includes translating a shading sample position from an original shading sample position to a coverage sample position, which is used to determine coverage of a pixel portion of a pixel. Also, the method includes sampling a shading value at the coverage sample position for the pixel portion. The shading sample position translates relative to the pixel and the coverage sample position without, for example, having to shift the object itself relative to sample positions. In some cases, translating the shading sample position forms a translated shading sample position at the coverage sample position. Note that a depth value for a geometric primitive covering the translated shading sample position remains substantially constant, for example, when other shading sample positions for the pixel are being translated. By maintaining constant depth values, computational resources can be preserved. In one instance, the method includes selecting only the pixel and other pixels constituting the computer-generated object rather than a frame, and applying the method to anti-alias texture for the computer-generated object on an object-by-object basis. Accordingly, the computational overhead of a graphics pipeline is reduced compared to supersampling both shading and coverage for each pixel in the frame.
In at least one embodiment, the method continues by further determining for the pixel portion whether the coverage sample position is covered by at least a portion of a geometric primitive, where the pixel is being used to generate the computer-generated object. Next, if the portion of the geometric primitive covers the coverage sample position, then the method translates the shading sample position from the original shading sample position to the coverage sample position. In such a case, the coverage sample position is identified as a covered coverage sample position. In some cases, the coverage sample position is one of a number of coverage sample positions that are used to multisample the pixel. The number of coverage sample positions resides at predefined locations. The original shading sample position can be located at the center of the pixel for sampling texture. In a specific embodiment, the translation of the shading sample position is performed with the locations of the number of coverage sample positions being unknown to a user, thereby simplifying the anti-aliasing of the object. In one embodiment, the translation of the shading sample position includes determining a first centroid for the pixel portion associated with the covered coverage sample position. In some embodiments, the translation of the shading sample position further includes identifying the coverage sample position as an uncovered coverage sample position, if the portion of the geometric primitive does not cover the coverage sample position. Then, the method repositions a default shading sample position to the uncovered coverage sample position, and samples shading at the uncovered coverage sample position. In this case, the repositioning can include determining a second centroid for the uncovered coverage sample position. The second centroid can set the default shading sample position to coincide with the original shading sample position.
An exemplary method can further include applying the above method to four contiguous pixels constituting a quad, the coverage sample position and other coverage sample positions being located at similar positions in said four contiguous pixels. The similarly-located coverage sample positions in the four contiguous pixels are configured to apply a texture having a value representing a level of detail (“LOD”) that is similar to that of an adjacent quad. Consequently, texture is anti-aliased over the quad and the adjacent quad. In another alternative embodiment, the method further includes identifying the coverage sample position as an uncovered coverage sample position if the portion of the geometric primitive does not cover the coverage sample position, and sampling a default shading value at a default shading sample position.
In another embodiment, an exemplary computer readable medium includes executable instructions to shift sampling positions for anti-aliasing computer-generated images. The computer readable medium includes executable instructions to determine that a first number of sample positions are covered by geometries, which share a frame of reference with the first number of sample positions. As such, there is no relative motion or movement between the geometries and the first number of sample positions when anti-aliasing the computer-generated images. Additional executable instructions can shift a second number of sample positions relative to the frame of reference to form multiple shading sample positions for pixels associated with the geometries. The executable instructions can also sample the multiple shading sample positions to anti-alias texture. In some embodiments, the first number of sample positions can be described as covered coverage sample positions and the second number of sample positions can be described as shading sample positions. Note that in some cases, the frame of reference can be expressed in terms of screen coordinates with the geometries being associated with substantially constant screen coordinates during anti-aliasing. In a specific embodiment, the executable instructions to shift the second number of sample positions further includes executable instructions to select a covered sample position in the first number of sample positions and set a shading sample position from the multiple shading sample positions at or near the covered sample position. In some cases, the executable instructions that set the shading sample position further include executable instructions to determine, for example, a centroid with respect to only a single covered sample position. In an alternative embodiment, the executable instructions to shift the second number of sample positions further include executable instructions to select an uncovered sample position in the first number of sample positions and to reposition a default shading sample position of the multiple shading sample positions at or near the uncovered sample position, wherein shading is sampled at the uncovered sample position.
In yet another embodiment, an apparatus for anti-aliasing computer-generated images includes a coverage sample determinator configured to determine a number of covered sample positions. A geometry shares a frame of reference with the number of covered sample positions in a manner that there is no relative motion between the geometry and the number of covered sample positions. A shading sample selector is included to select a covered sample position of the number of covered sample positions to set as a texture sample position. Further, the apparatus includes a shading sample translator configured to translate an original shading sample position to the covered sample position relative to the frame of reference to form a texture sample position for a pixel associated with the geometry. In some embodiments, the shading sample selector is further configured to select additional covered sample positions to set as additional texture sample positions, wherein the texture sample position and the additional texture sample positions are used to anti-alias texture.
The invention is more fully appreciated in connection with the following detailed description taken in conjunction with the accompanying drawings, in which:
Like reference numerals refer to corresponding parts throughout the several views of the drawings.
Advantageously, the subpixel shifting eliminates spatial shifting of geometries with respect to sample positions. Subpixel shifter 710 therefore maintains relatively constant depth values associated with each of the shading sample positions, thereby dispensing with a requirement to reconcile varying depth values (e.g., by determining a value representative of the actual depth of a geometry) that typically arise when shifting geometries of an object rather than translating the sample positions. This can free up computational resources when implementing post-shader rasterization operations, such as alpha-testing and the like, especially during multipass rendering operations. Further, subpixel shifter 710 advantageously translates shading sample positions to coincide with coverage sample positions, which facilitates accurate interpolation between screen coordinates and texture coordinates. This enables non-geometric portions (e.g., edges for texture) of computer-generated images to more closely align with geometric edges (e.g., of geometries) to reduce undesirable level of detail (“LOD”) artifacts, among other things.
In at least one embodiment, subpixel shifter 710 modifies multisampling of pixels to generate multiple sample positions at which to sample shading for each pixel of an object rather than conventionally supersampling both shading and coverage for each subpixel in an entire frame containing the object. This reduces computational overhead associated with, for example, conventional supersampling. By limiting the generation of multiple sample positions to anti-alias only the object (i.e., effectively oversampling only the object), the computational overhead of implementing multipass rendering can be reduced when integrating diffuse, specular, reflection, ambient, shadow and other like computer-generated effects. As used herein, oversampling refers in some embodiments to supersampling pixels of only a computer-generated object or supersampling less than every pixel of a screen. In particular, subpixel shifter 710 can oversample an object initially at the subpixel level, but then can implement multisampling during subsequent passes of a multipass rendering process to render different attributes onto or into the object and/or scene. By using multisampling rather than conventional supersampling during multipass rendering, desirable frame rates can be achieved especially during fill-rate limited situations where many pixels are being drawn to a screen. In another embodiment, subpixel shifter 710 translates shading sample positions to predefined locations at which coverage samples are positioned in a manner that is transparent to a user. As such, a user can formulate a set of executable instructions for an applications program without having to specify the locations of the shading sample positions (or the amount of shifting) as an argument of a program instruction, for example. Different manufacturers of components for graphics processing system 700 typically predefine the coverage sample locations in accordance with their each manufacturer's unique implementation. Advantageously, a user need not be required to either know or manually determine the locations of the coverage sample positions that are necessary to anti-alias an object when using the various embodiments of subpixel shifting. As such, a user can formulate a set of executable instructions for an applications program without having to specify locations, such as in terms of dX and dY from a pixel center.
Subpixel shifter 710 of
In operation, one or more applications programs 701 include executable instructions, such as vertex program instructions or fragment program instructions, that when executed by a processor (not shown) generate geometry data (i.e., data describing elements of a computer-generated image to be rendered). The geometry data typically includes vertex coordinates and shading information for one or more geometries 702 that are used to render a collection of pixels as an object. Geometries 702 are generally referred to as geometric primitives and can take a variety of shapes, such as triangles or any other suitable type of polygon. Graphics processing system 700 also transforms the geometry data into pixel data by segmenting the frame into subpixels, such as subpixels 726a to 726d (“subpixels 726”), which are smaller and more numerous than the actual number of pixels 722. As an example, consider that graphics processing system 700 divides each pixel in a frame (i.e., a full screen or display of pixels) into four subpixels. As shown in
Sample coverage determinator 712 includes a number of sets of coverage sample positions at which any portion of geometry 702 is sampled to determine whether it covers one or more of the coverage sample positions 728a to 728d (“coverage sample positions 728”). These coverage sample positions are typically fixed and are spatially arranged within a grid associated with a pixel to determine geometry coverage coinciding with respective subpixels. For example, subpixels 726a to 726d include coverage sample positions 728a to 728d each of which are positioned at the center of each subpixel. In at least one embodiment of the present invention, locations of coverage sample positions and original shading sample positions are specified by implementing multisampling with the attendant coverage and shading sample positions as set forth in multisampling software or hardware modules, or both. Specialized knowledge, however, is generally required to determine the exact positions of coverage sample positions 728a to 728d when using conventional sampling techniques as they are not generally easily discovered. Knowledge of such positions by a user is not required when implementing various embodiments of the present invention. In some embodiments, coverage and shading sample positions can also be referred to as subsamples. After sample coverage determinator 712 determines the coverage sample positions that geometry 702 covers, it generates coverage information specifying whether a coverage sample position is covered.
Shading sample selector 714 is configured to receive the coverage information and to select which subpixel in a pixel from which shading will be sampled. Shading sample selector 714 first selects which coverage sample position is to be sampled. For example, shading sample selector 714 can individually select coverage sample position zero (“SS0”) 728a in selected subpixel 724a or any other coverage sample position, such as coverage sample position one (“SS1”) 728b in selected subpixel 724b, coverage sample position two (“SS2”) 728c in selected subpixel 724c or coverage sample position three (“SS3”) 728d in selected subpixel 724d. Then, shading sample translator 716 translates or repositions respective shading sample positions 730 in any of selected subpixels 724a to 724d to a corresponding selected coverage sample position 728a to 728d. It is these selected coverage sample positions that will provide a location at which to sample shading and/or texture. Note that the functionalities of sample coverage determinator 712, a shading sample selector 714 and a shading sample translator 716 need not necessarily be performed in the order described above. An example of an alternative flow for practicing a specific embodiment of the present invention is described next.
Shading sample translator 916 determines from results bits 936 that subpixel 928 of pixel 905b is to include a translated sample position. As such, number “1” at bit zero 936 indicates that subpixel 928 of pixel 905b is covered, and therefore, translates the shading sample position from 948 to 946, thereby effectuating subpixel shifting of sample positions by an amount less than a pixel size. The distance between a pixel center to a coverage sample position can define the distance over which a shading sample position is shifted. So rather than shifting geometry 904b relative to the coverage sample point, subpixel shifter 910 shifts the shading sample position 948 of pixel 905b relative to stationary geometry 904b, according to various embodiments of the present invention. As mentioned earlier, this advantageously preserves the depth locations and/or values for geometry 904b during the process of subpixel shifting. Note that pixel 905b is pixel 904a, but after shading sample translator 916 establishes a translated shading position 946.
Next, GPGPU 900 can sample translated shading position 946 and apply the appropriate shading to the geometry. Texture unit 918 is used to, among other things, map texture to the associated subpixel by interpolating between screen and/or depth coordinates and texture coordinates. The shading can be derived from texture maps 950 (or mipmaps), texture atlases, formulaically generated texture (i.e., texture generated according to an equation) or other like sources of texture and/or shading. A texture map is made up of a number of elements (“texels”), each of which has a single color value. Texture unit 918 determines a texture value (i.e., a shading value) for a subpixel by selecting one or more appropriate texels from a texture map. In this example, texture maps 950 include a number of mipmaps 960 each having a different level of detail (“LOD”). For example, the first mipmap labeled LODO can be a base texture map for 512×512 pixels, with each subsequently numbered mipmap being coarser than the preceding mipmap. Texture maps 950 usually end with an LOD as a 1 pixel×1 pixel dot. Note that shading can be sampled on a subpixel-by-subpixel basis, a pixel-by-pixel basis, a quad-by-quad basis or by groupings of any number of pixels. In one embodiment, texture unit 918 samples each of the translated sampling positions in quad 902 to determine an appropriate LOD and mipmap to apply to the associated subpixels, such as subpixel (“s0”) 940 and subpixels (“s1, s2, and s3”) 942. Thereafter, the shaded subpixels can be stored in a buffer for further processing or later display. Or, the shaded subpixels can be processed by, for example, an ROP (“Rasterizing OPeration”) unit to perform alpha-testing or the like.
In various embodiments of the present invention, shading sample translator 916 is configured to execute application instructions to effectuate translation of shading sample positions. Table I below depicts a snippet of pseudo-code that causes shading sample translator 916 to perform translation of shading sample positions by implementing one or more centroid sampling instructions, such as those set forth in nVidia's® “Cg” Language, High Level Shading Language (“HLSL”) in DirectX 9.0® and OpenGL's OpenGL Shading Language (“GLSL”).
Table I shows that the one subpixel shift mask bit that set to 1 in subpixelshiftMask selects a corresponding coverage sample position that is covered, as defined by rasterCoverage (e.g., a corresponding bit set to 1). Then, the centroidOf function determines a centroid for a unitary coverage sample position. In some embodiments, rasterCoverage is a coverage mask. Normally, a conventional centroid instruction computes a centroid as being the center of all the coverage sampling points that are covered by a geometry of interest. This ensures that a shading sample position for an entire pixel will always lie within the geometry being rendered. Among other things, the conventional centroid determination function is over an entire pixel, and thus is not well suited for practicing the present invention. But in accordance with various embodiments of the present invention, the centroid function is modified to determine a centroid of only one subpixel, thereby “snapping” or translating the centroid sampling point to coincide with the single coverage sample identified by a subpixel shift mask bit that is set to 1. The implementation of subpixelshiftMask, among other things, leverages the functionality of one or more executed centroid sampling instructions to effectuate subpixel shifting in accordance with embodiments of the present invention.
Note that the example shown in
Table II below depicts a snippet of pseudo-code instructing shading sample translator 916 to perform translation of shading sample positions using a modified centroid sampling instruction, whereby a default centroid is repositioned to coincide with an uncovered, but selected coverage sample position.
Table II shows that the subpixelshiftMask influences the determination of a centroid in the above examples. Specifically, if a bit in a subpixel shift mask bit is set to 1 for selecting a specific subpixel, and if a corresponding bit in rasterCoverage is set to 0 (i.e., the subpixel is not covered), then the shading sample position that is usually established as the default centroid will be repositioned to the selected coverage sample position. By equating the variable centroidCoverage to the one or more bits of subpixelshiftMask, the subsequent centroidOf function is effectively performed on the mask bits rather than coverage mask bits unlike normal centroid determinations. Examples of how a shading sample point translates to a coverage sample point, regardless whether a subpixel is covered or not covered, are shown described next.
In
Specifically, applications program 1402 can include executable instructions, such as vertex program instructions, fragment program instructions and the like, that generate geometry data to render images as scenes 1404. The geometry data typically includes vertex coordinates and shading information for one or more geometries or polygons that are used to render a collection of pixels as an object. Any of a number of known techniques for generating geometry data can be implemented to generate geometry data for scenes 1404. Geometry processor 1406 receives the geometry data for each scene 1404 and performs various transformations on that data. For example, geometry processor 1406 can transform lighting, coordinates (e.g., viewing space coordinates (x, y) and depth (z) coordinates), and can implement other known transformation techniques. Geometry processor 1406 provides transformed geometry data to rasterizer 1408, which in turns converts that data into pixel and subpixel data. In some embodiments, geometry processor 1406 and rasterizer 1408 constitute a front end unit that can at least compute coverage of geometries over coverage sample positions.
Rasterizer 1408 then passes the pixel data, which can be in the form of fragments (i.e., includes subpixel color values, depth values and the like), to pixel shader/texture unit 1420 to calculate effects on a per-pixel or a per-subpixel basis. In particular, pixel shader/texture unit 1420 is configured to perform texture mapping requiring interpolation of, for example, texture coordinates and other attributes and to determine shading at shading sample positions, which can be set forth in accordance with multisampling techniques. As shown, pixel shader/texture unit 1420 includes a subpixel shifter 1422 and an attribute interpolator 1424. In some embodiments, subpixel shifter 1422 is configured to selectably operate to either perform multisampling or to perform subpixel shifting to anti-alias portions (e.g., non-geometric portions) of a computer-generated object. Note that subpixel shifter 1422 can shift any number of subgroupings of shading sample positions to effectuate any degree of anti-aliasing (e.g., if there are 8 shading sample positions selected, then anti-aliasing is 8×). Note further that subpixel shifter 1422 is configured to maintain substantially constant depth values for geometries at each of shading sample position, thereby dispensing with a requirement to reconcile varying depth values that arise when shifting geometries rather than shading sample positions.
Subpixel shifter 1422 is configured, in this example, to shift shading sample positions relative to a frame of reference that includes geometries and the coverage sample positions such that there is no relative motion or translation between the geometries and the coverage sample positions. That is, the geometries remain fixed with respect to coverage sample positions used to detect coverage. Modification of shading sample positions are therefore relative to the fixed geometries. Again, this maintains relatively constant depth values. Attribute interpolator 1424, among other things, is configured to interpolate attributes, such as color/shading and texture, by interpolating coordinates between view space (i.e., a screen) and texture maps. Note that to pixel shader/texture unit 1420 is configured in some embodiments to determine shading at the coverage sample positions rather than at default sample positions, such as at the centers of pixels (which is the default for multisampling). By sampling texture and/or shading at the coverage sample positions, more accurate interpolation between screen coordinates and texture coordinates is achieved, thereby ensuring consistency of values of level of detail (“LOD”) over adjacent groupings of pixels that constitute a computer-generate object or image. Then, subpixels (or fragments) are passed on to ROP unit 1426 to perform additional operations, such as alpha-testing, depth-testing, downfiltering or “blending,” and the like. Each of the subpixels (“samples”) 1428 exiting graphics pipeline 1400 can be stored in a frame buffer.
In operation, application program 1402 renders the same scene 1404 (or an object therein) a number of times equivalent to the number of shading sample positions at which shading is sampled. Accordingly, scene 1404 is rendered scene 1404 via graphics pipeline 1400 for each subpixel shifting mask 1410 so that each subpixel of a pixel will be selected to shift a shading sample position to a coverage sample position. So each subset of shading sample positions and corresponding subpixels are serially processed by graphics pipeline 1400. For example, if a first mask selects a top left subpixel of each pixel, then graphics pipeline 1400 processes each top left subpixel for the pixels of a computer-generated object. As another example, consider that a computer-generated image is to be rendered to a quad of pixels, such as shown in
At 1514, a first subpixel shifting mask (i.e., mask 0) is determined for selecting a first subset of sample positions (e.g., in top left subpixels). Applications program instruction data, which represents geometry data 1516, is applied to the graphics pipeline, followed by transformation of the geometries constituting the second portion, at 1520, and rasterization of those same geometries at 1522. At 1524, a graphics pipeline performs subpixel shifting to shift shading sample positions selected by the mask at 1514, with shading for those samples being sampled (and associated to subpixels) at 1526. Optionally, raster operations (such as alpha testing and/or blending) occur at 1528 with each subpixel sample being stored in a frame buffer at 1530. So long as other subpixels remain unshaded at 1532, flow 1500 continues to 1518, where a next mask is selected (e.g., a mask number “i” is incremented by one). Thereafter, flow 1500 continues from 1516 to 1532 with the applications program instruction data being applied again to the graphics pipeline. After all subpixels have been sampled, then at least the second portion is anti-aliased.
In operation, application program 1602 renders the scene 1606 (or an object therein) only once for each instance of oversampling. Applications program 1602 can include an executable instruction to reset a flag associated with anti-aliasing mode selector unit 1604 to zero. Anti-aliasing mode selector unit 1604 detects the zero flag and thus configures geometry processor 1608 to bypass generation of copies of scene 1606 and configures subpixel shifter 1622 to perform multisampling. In this mode, subpixel shifter 1622 does not use any of subpixel shifting masks 1610. But consider that applications program 1602 has an executable instruction that sets the flag to one. When anti-aliasing mode selector unit 1604 detects the one flag, it configures geometry processor 1608 to generate multiple copies of the geometries for scene 1606 (or a portion thereof) and configures subpixel shifter 1622 to perform oversampling. In this mode, subpixel shifter 1622 applies each of subpixel shifting masks 1610 against a unique copy of the geometries for scene 1606, either in parallel or in series, or a combination thereof. Subsequent to subpixel shifter 1622 shifting each sample position, the sampled shading values for each subpixel is passed in parallel to ROP 1626 and then stored as subpixel samples 1628 in a frame buffer.
In operation, application program 1804 renders the scene 1802 (or an object therein) only once for each instance of oversampling. Applications program 1804 can include executable instructions to reset or set a flag associated with anti-aliasing mode selector unit 1812 to both operate duplicator unit 1821 and subpixel 1822 either in a multisampling mode (i.e., bypass generation of duplicates of scene 1802) or in oversampling mode. In oversampling mode (i.e., anti-aliasing mode), subpixel shifter 1822 applies each of subpixel shifting masks 1810 against a unique duplicate of the rasterized geometries for scene 1802, either in parallel or in series, or a combination thereof. Subsequent to subpixel shifter 1822 shifting sample positions, the sampled shading values for each subpixel optionally can be passed to ROP unit 1830 and then stored as subpixel samples 1832 in a frame buffer. Advantageously, the generation of duplicate versions of a second portion of scene 1802 is performed in pixel shader/texture unit 1820, thereby preserving computational resources of rasterizer 1808 and ROP unit 1830.
In a specific embodiment, any of graphic pipelines 1400, 1600 and 1800 can perform oversampling to anti-alias a first portion by determining shading during a first multipass-rendering pass for the first object. As an example, consider that the first portion is composed of a relatively high number of tessellated geometries associated with a fine LOD. Then, consider that switching to multisampling is desired to minimize the use of computational resources. In particular, any of graphic pipelines 1400, 1600 and 1800 then can perform multisampling on a second object during a second multipass-rendering pass during which modified shading, such as shadows, composite lighting, and the like, are applied to the second object. Note that during the first multipass-rendering pass and the second multipass-rendering pass the pipelines maintain substantially constant depth values for shading sampled at the shading sample positions, thereby reducing computational overhead otherwise used to reconcile mismatched depth values due to shifting the geometries rather than shading sample positions.
In view of the foregoing, a graphics processing system can implement a subpixel shifter using multisampling to simulate shifting of subpixel for anti-aliasing texture on a per-object basis rather than conventionally supersampling an entire frame, thereby preserving computational resources. Note that in some embodiments, a subpixel shifter can reside in a graphics pipeline and the graphics processing system can be a general purpose graphics processing unit (“GPGPU”). Also note that selection of coverage sample positions and/or subpixels for which texture will be sampled can either in parallel or serial, or a combination thereof (i.e., some in parallel and others in serial).
An embodiment of the present invention relates to a computer storage product with a computer-readable medium having computer code thereon for performing various computer-implemented operations. The media and computer code may be those specially designed and constructed for the purposes of the present invention, or they may be of the kind well known and available to those having skill in the computer software arts. Examples of computer-readable media include, but are not limited to: magnetic media such as hard disks, floppy disks, and magnetic tape; optical media such as CD-ROMs and holographic devices; magneto-optical media such as floptical disks; and hardware devices that are specially configured to store and execute program code, such as application-specific integrated circuits (“ASICs”), programmable logic devices (“PLDs”) and ROM and RAM devices. Examples of computer code include machine code, such as produced by a compiler, and files containing higher-level code that are executed by a computer using an interpreter. For example, an embodiment of the invention may be implemented using Java, C++, or other object-oriented programming language and development tools. Another embodiment of the invention may be implemented in hardwired circuitry in place of, or in combination with, machine-executable software instructions.
The foregoing description, for purposes of explanation, used specific nomenclature to provide a thorough understanding of the invention. However, it will be apparent to one skilled in the art that specific details are not required in order to practice the invention. Thus, the foregoing descriptions of specific embodiments of the invention are presented for purposes of illustration and description. They are not intended to be exhaustive or to limit the invention to the precise forms disclosed; obviously, many modifications and variations are possible in view of the above teachings. The embodiments were chosen and described in order to best explain the principles of the invention and its practical applications, they thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications as are suited to the particular use contemplated. It is intended that the following claims and their equivalents define the scope of the invention.
Number | Name | Date | Kind |
---|---|---|---|
6720975 | Dietrich, Jr. | Apr 2004 | B1 |
6967663 | Bastos et al. | Nov 2005 | B1 |
20030029212 | Im | Feb 2003 | A1 |