5 |
Legible text using the flexibility of modern GPUs |
Legible text using the flexibility of modern GPUs |
6 |
================================================= |
================================================= |
7 |
|
|
|
Although it has recently become a commodity, 3D hardware has found |
|
|
little use in business applications. Rotated and smoothly scaled text |
|
|
can enable new types of user interfaces. However, mipmapping |
|
|
artifacts reduce readability: trilinear filtering blurs the font edges |
|
|
of rendered text. |
|
|
|
|
8 |
We present two approaches for using the GPU to enhance the appearance |
We present two approaches for using the GPU to enhance the appearance |
9 |
of mipmapped text: sharpening and subpixel rendering on LCDs. We also |
of mipmapped text: sharpening and subpixel rendering on LCDs. We also |
10 |
present a method for efficiently rendering text strings stored in a |
present a method for efficiently rendering text strings stored in a |
11 |
texture (with each texel coding one character). |
texture (with each texel coding one character). |
12 |
|
|
13 |
Text sharpening works by applying a linear sharpening filter to the |
Although most of these methods are well-known, we believe that their |
14 |
image using multiple texture accesses. Unfortunately, the sharpening |
real-time GPU implementation is novel and has several interesting aspects. |
15 |
increases aliasing artifacts with motion, which needs to be dealt |
|
16 |
with. One approach is fading off the sharpening as movement starts. |
1. Sharpening text |
17 |
The sharpening can be implemented with a fragment program or with |
------------------ |
18 |
register combiners and LOD-biasing. |
|
19 |
|
In our research on flexible hypertextual user interfaces, we often |
20 |
|
want to use rotated, scaled, sheared or curving text. Because normal |
21 |
|
windowing systems (such as X) do not provide for this, we have turned to |
22 |
|
OpenGL. However, as is well known to the graphics community, trilinear |
23 |
|
filtering does Horrible Things to text (but bilinear / nearest filtering |
24 |
|
are even worse): the text, especially at small font sizes, is often too |
25 |
|
blurred to read comfortably. |
26 |
|
|
27 |
|
The first approach for sharpening text is to apply a linear sharpening |
28 |
|
filter in image space through performing multiple texture accesses. |
29 |
|
Unfortunately, the sharpening increases aliasing artifacts with motion, |
30 |
|
which needs to be dealt with. One approach is fading off the sharpening |
31 |
|
as movement starts, in a kind of a "motion blur" effect. The sharpening |
32 |
|
can be implemented optimally with a fragment program, and, with less |
33 |
|
quality, with a combination of register combiners and LOD-biasing. |
34 |
|
|
35 |
|
2. Subpixel rendering |
36 |
|
--------------------- |
37 |
|
|
38 |
|
One approach to enhancing text legibility on LCD displays that |
39 |
|
has been gaining popularity in the recent years is subpixel rendering. |
40 |
Subpixel rendering uses the known ordering of the RGB sub-pixels of |
Subpixel rendering uses the known ordering of the RGB sub-pixels of |
41 |
LCD displays for tripling the effective horizontal resolution of |
LCD displays for tripling the effective horizontal resolution of |
42 |
rendered black-and-white text. A fragment program can be used to |
rendered black-and-white text. |
43 |
implement the sub-pixel filtering. It could also be possible to |
|
44 |
obtain an approximation of the sub-pixel filtering on NV2X with three |
We show how a fragment program can be used to implement the sub-pixel |
45 |
texture units, register combiners, and a vertex program for computing |
filtering by using the DDX, DDY and TXD instructions to access the |
46 |
the sub-pixel-shifted texture coordinates, which would provide an |
texture several times, for the ctriangular sampling filter commonly |
47 |
opportunity for discussing homogeneous coordinate transformations. |
used in subpixel rendering. |
48 |
|
|
49 |
|
A lesser-quality approximation can be obtained on NV2X with three |
50 |
|
texture units, register combiners, and a vertex program for computing the |
51 |
|
sub-pixel-shifted texture coordinates, which would provide an opportunity |
52 |
|
for discussing the inverting of the homogeneous coordinate transformations |
53 |
|
in the vertex programs to shift the texture coordinates in screen space. |
54 |
|
|
55 |
|
[ there are also some practical aspects related to rendering of mosaiced |
56 |
|
fonts such as borders &c which we *can* discuss here if you feel like it |
57 |
|
] |
58 |
|
|
59 |
|
3. Fragment-based text |
60 |
|
---------------------- |
61 |
The rendering of text strings from texture uses offset texturing: each |
The rendering of text strings from texture uses offset texturing: each |
62 |
texel in the text texture stores the offset to the correct glyph in a |
texel in the text texture stores the offset to the correct glyph in a |
63 |
font texture. The rendering time depends only on the rendered size of |
font texture. The rendering time depends only on the rendered size of |
64 |
the text fragment and not on the number of individual characters. |
the text fragment and not on the number of individual characters. |
65 |
|
|
|
Although these methods are well-known, we believe that their |
|
|
real-time GPU implementation is novel. |
|
|
|
|
66 |
|
|
67 |
FIGS!!! |
FIGS!!! |
68 |
- sharpening |
- sharpening |