Beyond the pixel : towards infinite resolution textures ( or

We propose a simple yet flexible method to encode and render curved contours in an arbitrary resolution on a 3D surface by using data from a low resolution texture map. Conic sections in implicit form, evaluated by second degree polynomials over the texture coordinates, are used to describe a straight or curved contour through each texel. Rendering of such contour texels can be performed at interactive rates with current mainstream graphics hardware. Introduction and previous work Textures are used everywhere in computer graphics, for realism and detail. Storing texture data as sampled pixel-based images limits their resolution and requires large amounts of data if the surfaces are to be viewed close up. Layered multitexturing with repeating detail textures for close-up views can sometimes mask the problem, but not fix it. Procedural texturing with shader programs can help, but traditional procedural patterns have focused on fairly simple and regular patterns and on random, noiselike functions. In 2D graphics, artwork designs like symbols, text and other patterns with complex, irregular and sharp contours are now almost exclusively created and represented as scalable object contours (“vector graphics”), which may be rendered to an on-screen pixel representation in an arbitrary resolution, even on the fly for 2D animations. In 3D graphics, however, such patterns are still stored as sampled pixel images, even in off-line rendering. It would be helpful to have a procedural, resolution independent description of arbitrary curved contours that could be applied as a texture map to 3D objects, preferably applicable to real time rendering. A method based on pre-rendering and smart region caching of a vector graphics image in Adobe Illustrator format was presented at Siggraph 2001 [Haddon01] and has been developed further into a very useful DSO shadeop for RenderMan [Segal05]. However, that method has a high latency for cache misses, and it requires the CPU to render all the detail, and therefore it is unsuitable for interactive real time rendering. Recent work by several authors [Tumblin04] [Ramanarayanan04] [Sen04] showed the advantages of storing information on discontinuities in textures by making a silhouette map. [Tumblin04] and [Ramanarayanan04] effectively encode edges as a train of straight line segments between points positioned anywhere inside the area of each texel. [Sen04] encodes curved contours, although in a manner unsuitable for hardware rendering. [Loop05] recently demonstrated that the implicit form of a quadratic Béziér spline contour can be evaluated efficiently in a graphics hardware fragment shader, and [Ray05] presented true vector texture maps, although implemented in a fairly complex way that has performance problems on current mainstream graphics hardware. We propose a similar but less complicated method to encode and render curved contours on a surface by using data from a low resolution texture map. Our method constitutes a framework where patterns with curved contours of arbitrary shape and high complexity can be represented compactly and accurately, stored as texture data and rendered at an arbitrary resolution with very good real time performance in programmable graphics hardware. There are significant similarities between the work presented here and [Ray05]. The main part of this work was performed independently, before that paper was published, but this paper does not present any significant and fundamental additional scientific contribution. We still think our approach is different enough to motivate this write-up, though. We also present a runnable demo with full source code, which is unfortunately lacking from [Ray05]. Parametric and implicit curves Parametric curves are a familiar tool for both 2D and 3D graphics professionals. The most common flavor of parametric curves is the polynomial curve: