SlideShare a Scribd company logo
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering
GPU-accelerated Path
     Rendering
  Mark Kilgard & Jeff Bolz
   NVIDIA Corporation
   November 30, 2012
GPUs are good at a lot of stuff
Games




Battlefield 3, EA
Data visualization
Product design




    Catia
Physics simulation




CUDA N-Body [Nyland et al., GPU Gems 3, 2007]
Interactive ray tracing




OptiX [Parker et al., SIGGRAPH 2010]
Game physics




PhysX [Tonge et al., SIGGRAPH 2012]
Molecular modeling




      NCSA
Impressive stuff
What about advancing 2D graphics?
Can GPUs render & improve the immersive web?
Complete Web
               Pages Rendered
               via OpenGL

without Pre-rendered Glyph Bitmaps and all on GPU
No tricks

                             Every glyph is
                             rendered from its
                             outline; no render-to-texture

Not just zoomed & rotated,
also perspective                         Magnify & minify
                                                       with
                                          no transitional
                                              pixelization
                                          or tile popping
                                                  artifacts




                                               synced
                                               to refresh
                                               rate; 60 Hz
                                               updates
Zoomed in
Live demo!




Web page                        Control points of
                                TrueType glyphs
                                visualized




                         Projected
What is path rendering?
A rendering approach
     Resolution-independent two-
     dimensional graphics
     Occlusion & transparency
     depend on rendering order
          So called “Painter’s
          Algorithm”
     Basic primitive is a path to be
     filled or stroked
          Path is a sequence of path
          commands
          Commands are
            – moveto, lineto, curveto,
               arcto, closepath, etc.
Standards
     Content: PostScript, PDF, TrueType
     fonts, Flash, Scalable Vector
     Graphics (SVG), HTML5 Canvas,
     Silverlight, Office drawings
     APIs: Apple Quartz 2D, Khronos
     OpenVG, Microsoft Direct2D, Cairo,
     Skia, Qt::QPainter, Anti-grain
     Graphics
Path Rendering Standards
Document       Resolution-   Immersive       2D Graphics      Office
Printing and   Independent   Web             Programming      Productivity
Exchange       Fonts         Experience      Interfaces       Applications

                                                 Java 2D
                                                 API
               OpenType        Flash
                                                   QtGui
                                                   API

               TrueType
                                 Scalable        Mac OS X
                                 Vector          2D API     Adobe Illustrator
                                 Graphics


Open XML
Paper (XPS)                                                    Inkscape
                             HTML 5         Khronos API      Open Source
Seminal Path Rendering Paper

 John Warnock & Douglas Wyatt, Xerox PARC
     Presented SIGGRAPH 1982
     Warnock founded Adobe months later




                                            John Warnock
                                             Adobe founder
Reasons to
GPU-accelerate Path Rendering
 Increasing screen
                               Multi-touch
 resolutions




 Increasing screen densities   Power wall
                               More functionality with less
                               latency…




 Immersive 2D web content

                               …with less power
Live Demo
Classic PostScript content




                             Complex text
                               rendering




           Flash content                    New York Times rendered from
                                            its resolution-independent form
Live demo!
                                                       Gradients with
                                                       blending




                Dashed stroking         Complex
                                        gradient
                                         content



                                      Maps with text




Dragon, and
zoomed dragon   3D dice, but really
                2D + gradients
Last Year’s SIGGRAPH Results in
Real-time
“Digital Micrography” Ron Maharik, Mikhail Bessmeltsev, Alla
Sheffer, Ariel Shamir, and Nathan Carr
SIGGRAPH 2011

“Girl with Words in
Her Hair” scene
   591 paths
   338,507 commands
   1,244,474 scalar
   coordinates
Our Contributions

 A novel “stencil, then cover” programming interface
 for path rendering, well-suited to acceleration by
 GPUs
    Our NV_path_rendering API
 Our programming interface’s efficient
 implementation within OpenGL to avoid CPU
 bottlenecks
    Productized, shipping in GeForce/Quadro drivers
 Accompanying algorithms to handle
    tessellation-free stenciled stroking of paths
    standard stroking embellishments such as dashing
    clipping paths to arbitrary paths
    mixing 3D and path rendering
Notable Prior Art

 Loop & Blinn 2005: Resolution
 independent curve rendering using
 programmable graphics hardware

 Kokojima, et al. 2006: Resolution
 independent rendering of
 deformable vector objects using
 graphics hardware

 Rueda, et al. 2008: GPU-based
 rendering of curved polygons
 using simplicial coverings
CPU vs. GPU at
  Rendering Tasks over Time
100%                                                                                      100%

90%                                                                                       90%

80%                                                                                       80%

70%                                                                                       70%

60%                                                                                       60%

50%                                                                                 GPU   50%                                                                                 GPU
                                                                                    CPU                                                                                       CPU
40%                                                                                       40%

30%                                                                                       30%

20%                                                                                       20%

10%                                                                                       10%

 0%                                                                                        0%
       1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012                1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012




       Pipelined 3D Interactive Rendering                                                                          Path Rendering


   Goal of our research is to make path rendering a GPU task

   Render all interactive pixels, whether 3D or 2D or web content with the GPU
Our Approach                       Step 1        Step 2:
                                   Stencil        Cover
                                        repeat
 “Stencil, then Cover” (StC)
 Map the path rendering task from a
 sequential algorithm…
 …to a pipelined and massively parallel task
 Break path rendering into two steps
    First, “stencil” the path’s coverage into stencil
    buffer
    Second, conservatively “cover” path
       Test against path coverage determined in the 1st step
       Shade the path
       And reset the stencil value to render next path
Our Implemented System:
NV_path_rendering
 OpenGL extension to GPU-accelerate path rendering
 Uses “stencil, then cover” (StC) approach via OpenGL calls
     Create a path object
     Step 1: “Stencil” the path object into the stencil buffer
         GPU provides fast stenciling of filled or stroked paths
     Step 2: “Cover” the path object and stencil test against its
     coverage stenciled by the prior step
         Application can configure arbitrary shading during the
         step
     More details later
 Supports the union of functionality of all major path rendering
 standards
     Includes all stroking embellishments
     Includes first-class text and font support
     Allows functionality to mix with traditional 3D and programmable
     shading
Pixel pipeline                        Vertex pipeline        Path pipeline

                        Application
                                                           Path specification


Pixel assembly                        Vertex assembly        Transform path
    (unpack)
                                      Vertex operations
                   transform
                    feedback
                                  Primitive assembly

Pixel operations                  Primitive operations    Fill/Stroke
                                                           Covering


  Pixel pack                            Rasterization
   read            Texture
   back                          Fragment operations
                   memory
                                                               Fill/Stroke
  Application                         Raster operations        Stenciling

                                        Framebuffer       Display
Stencil Fill Process Visualized

Visualization
of “invisible”
stencil-only
geometry
generated
during
stencil step

Net result
of stencil
increments
and
decrements
is path’s
winding
number
Cover Fill Geometry Visualized
Stroking Approach

 Stroked line segments are straightforward
     Drawn as rectangles into the stencil buffer
 Curved stroked segments are involved
     Curved segments are broken into stroked quadratic
     segments
     Hulls are formed around each stroked quadratic segment
     An intricate fragment discard shader solves the cubic
     equation for every sample to determine the sample’s
     containment in the quadratic stroke segment
         If contained, the sample’s stencil sample is updated
 Caps & joins are also drawn into the stencil buffer
 Covering geometry is computed as union of
 rectangles, hulls, and cap/join geometry
Quadratic Stroking Hulls Visualized

Simple
quadratic
Bezier
segment,
moving
control points

Drawn
with stroking

Non-convex
hull used
for the
stroking stencil
step is
visualized
Intricate Path’s
Stroking Example
                                               Join
                                               style
                                               geometry




   Zoomed stroking   Same zoom: Stencil hull geometry
Excellent Geometric Fidelity for
Stroking
 Correct stroking is hard
     Lots of CPU
     implementations             GPU-accelerated     OpenVG reference
     approximate stroking
 GPU-accelerated stroking                                        
 avoids such short-cuts
     GPU has FLOPS to
     compute true stroke point
     containment                 Cairo               Qt
                                                                 


                                     Stroking with tight end-point curve
Combined for a Complex Scenes
     With Many Paths
Stencil Fill Geometry   Cover Fill Geometry     Filling-only Result




                                                                       Complete Tiger

                                                                       240 paths
                                                                       2,510 commands
                                                                       12,174 coordinates
Stencil Stroke Geometry Cover Stroke Geometry   Stroking-only Result
Configuration
GPU: GeForce 480 GTX (GF100)
CPU: Core i7 950 @ 3.07 GHz                                                   NV_path_rendering
                                                                            Compared to Alternatives

                                   With Release 300 driver NV_path_rendering                                                                                                          Alternative APIs rendering same content
                        2,000.00                                                                                                                                           2,000.00
                                                                                                                                      16x                                                                                                  Cairo
                        1,800.00                                                                                                                                           1,800.00
                                                                                                                                      8x                                                                                                   Qt
                                                                                                                                                                           1,600.00                                                        Skia Bitmap
                        1,600.00                                                                                                      4x
                                                                                                                                                                                                                                           Skia Ganesh FBO (16x)
                                                                                                                                      2x
                        1,400.00                                                                                                                                           1,400.00                                                        Skia Ganesh Aliased (1x)
                                                                                                                                      1x                                                                                                   Direct2D GPU
                                                                                                                                                                           1,200.00                                                        Direct2D WARP




                                                                                                                                                       Frames per second
    Frames per second




                        1,200.00

                        1,000.00                                                                                                                                           1,000.00
                                                                                                                                                                                                  Alternative approaches
                                                                                                                                                                            800.00
                         800.00                                                                                                                                                                   are all much slower
                                                                                                                                                                            600.00
                         600.00

                                                                                                                                                                            400.00
                         400.00

                                                                                                                                                                            200.00
                         200.00
                                                                                                                                                                                -
                             -
                                                                                                                                                                                        100x100

                                                                                                                                                                                                  200x200

                                                                                                                                                                                                            300x300

                                                                                                                                                                                                                       400x400

                                                                                                                                                                                                                                 500x500

                                                                                                                                                                                                                                           600x600

                                                                                                                                                                                                                                                     700x700

                                                                                                                                                                                                                                                               800x800

                                                                                                                                                                                                                                                                         900x900

                                                                                                                                                                                                                                                                                   1000x1000

                                                                                                                                                                                                                                                                                               1100x1100
                                    100x100

                                              200x200

                                                        300x300

                                                                  400x400

                                                                            500x500

                                                                                      600x600

                                                                                                700x700

                                                                                                          800x800

                                                                                                                    900x900

                                                                                                                              1000x1000

                                                                                                                                           1100x1100




                                                                  Window Resolution in Pixels                                                                                                                         Window Resolution in Pixels
Configuration
GPU: GeForce 480 GTX (GF100)
CPU: Core i7 950 @ 3.07 GHz                                                            Detail on Alternatives

                                                                                                                                             Same results, changed Y Axis
                                  Alternative APIs rendering same content
                                                                                                                250.00
                       2,000.00                                                                                                                                                                 Cairo
                                                            Cairo                                                                                                                               Qt
                       1,800.00                                                                                                                                                                 Skia Bitmap
                                                            Qt
                                                                                                                                                                                                Skia Ganesh FBO (16x)
                       1,600.00                             Skia Bitmap                                         200.00
                                                                                                                                                                                                Skia Ganesh Aliased (1x)
                                                            Skia Ganesh FBO (16x)
                                                                                                                                                                                                Direct2D GPU
                       1,400.00                             Skia Ganesh Aliased (1x)
                                                                                                                                                                                                Direct2D WARP
                                                            Direct2D GPU
                       1,200.00                             Direct2D WARP

                                                                                            Frames per second
                                                                                                                150.00
   Frames per second




                       1,000.00
                                                                                                                                                                                                               Fast, but
                        800.00
                                                                                                                                                                                                             unacceptable
                                                                                                                100.00
                                                                                                                                                                                                                quality
                        600.00

                        400.00

                                                                                                                 50.00
                        200.00

                            -

                                                                                                                   -
                                      100x100
                                      200x200
                                      300x300
                                      400x400
                                      500x500
                                      600x600
                                      700x700
                                      800x800
                                      900x900
                                   1000x1000
                                   1100x1100




                                                                                                                                   200x200




                                                                                                                                                                  500x500




                                                                                                                                                                                                   800x800




                                                                                                                                                                                                                       1000x1000


                                                                                                                                                                                                                                   1100x1100
                                                                                                                         100x100




                                                                                                                                              300x300


                                                                                                                                                        400x400




                                                                                                                                                                            600x600


                                                                                                                                                                                      700x700




                                                                                                                                                                                                             900x900
                                                Window Resolution in Pixels

                                                                                                                                                              Window Resolution in Pixels
1000.00




                                                                                                    10.00
                                                                                                               100.00




                                                                                      0.10
                                                                                             1.00
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                             tiger




                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                             Wels h_dragon




                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                                                      b




                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                                                                   Across an range of scenes…




                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                                      Celtic_round_dogs utterfly




                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                 NVpr16/Cairo




                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                             NVpr16/SkiaBitmap




                                                                                                                                                                                                                       100x100
                                                                                                                                                         NVpr16/SkiaGanesh




                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                   NVpr16/Direct2D GPU




                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                            NVpr16/Direct2D WARP




                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                             s pikesAm erican_Sam oa




                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                                                    cowboy




                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                                   Em




                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                                                                   Release 300 GeForce GTX 480 Speedups over Alternatives




                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                             Buonapartebrace_the_World




                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                                                   Yokozawa




                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                             Cougar




xis is logarithmic—shows how many TIMES faster NV_path_rendering is that competitor




                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                       100x100
                                                                                                                                                                                                                       200x200
                                                                                                                                                                                                                       300x300
                                                                                                                                                                                                                       400x400
                                                                                                                                                                                                                       500x500
                                                                                                                                                                                                                       600x600
                                                                                                                                                                                                                       700x700
                                                                                                                                                                                                                       800x800
                                                                                                                                                                                                                       900x900
                                                                                                                                                                                                                      1000x1000
                                                                                                                                                                                                                      1100x1100
                                                                                                                                                                                                                                 tiger_clipped_by_he
Partial Solutions Not Enough

  Path rendering has 30 years of heritage and
  history
  Can’t do a 90% solution and expect
  Software to change
                                                                 John Warnock
     Trying to “mix” CPU and GPU methods doesn’t work             Adobe founder
     Expensive to move software—needs to be an
     unambiguous win
  Must surpass CPU approaches on all fronts
     Performance
     Quality
     Functionality
     Conformance to standards
     More power efficient
     Enable new applications           Inspiration: Perceptive Pixel
Dashing Content Examples




                                                   Artist made
                                                  windows with
                                Same cake          dashed line
                              missing dashed        segment
                              stroking details
                                                                     Technical diagrams
                                                                      and charts often
Frosting on cake is dashed                                            employ dashing
elliptical arcs with round
end caps for “beaded” look;
flowers are also dashing



   All content shown
   is fully GPU rendered         Dashing character outlines for quilted look
First-class, Resolution-independent
Font Support
 Fonts are a standard, first-class part of all path rendering systems
      Foreign to 3D graphics systems such as OpenGL and Direct3D, but natural
      for path rendering
      Because letter forms in fonts have outlines defined with paths
           TrueType, PostScript, and OpenType fonts all use outlines to specify
           glyphs
 NV_path_rendering makes font support easy
      Can specify a range of path objects with
          A specified font
          Sequence or range of Unicode character points
 No requirement for applications use font API to load glyphs
      You can also load glyphs “manually” from
      your own glyph outlines
Rendering Paths Clipped to
Some Other Arbitrary Path
 Example clipping the PostScript tiger to a heart
 constructed from two cubic Bezier curves




        unclipped tiger   tiger with pink background clipped to heart
Complex Clipping Example




   tiger is 240 paths
                                     cowboy clip is
                                     the union of 1,366 paths




                        result of clipping tiger
                        to the union of all the cowboy paths
NV_path_rendering is more than just
matching CPU vector graphics
 3D and vector graphics mix    Superior quality



                                                    CPU
                              GPU                   Competitors




                               Arbitrary programmable shader on
 2D in perspective is free     paths— bump mapping
Mixing 3D Depth Buffering and
Path Rendering
 PostScript tigers surrounding Utah teapot
    Plus overlaid TrueType font rendering
    No textures involved, no multi-pass
Live demo!

                                          Solid
                                          or
                                          wireframe
                                          teapots




Very fast
Teapots + tigers in same 3D scene


                      Zoom on tigers
                All the detail is there
Handling Uncommon Path Rendering
Functionality: Projection
 Projection “just works”
    Because GPU does everything
    with perspective-correct
    interpolation
Example of Bump Mapping on
Path Rendered Text
 Phrase “Brick wall!” is path rendered and bump
 mapped with a Cg fragment shader

                             light source position
Handling Common Path Rendering
Functionality: Filtering
GPUs are highly efficient at
image filtering                   Qt
   Fast texture mapping
      Mipmapping
      Anisotropic filtering
      Wrap modes
                                    Moiré
CPUs aren't                         artifacts
really



                                  Cairo
          GPU
Anti-aliasing Discussion

 Good anti-aliasing is a big deal for path rendering
     Particularly true for font rendering of small point sizes
     Features of glyphs are often on the scale of a pixel or less
 NV_path_rendering uses multiple stencil samples per pixel for
 reasonable antialiasing
     Otherwise, image quality is poor
     4 samples/pixel bare minimum
     8 or 16 samples/pixel is pretty sufficient
          But 16 requires expensive 2x2 supersampling of 4x
          multisampling
          16x is quite memory intensive
 Alternative: quality vs. performance tradeoff
     Fast enough to render multiple passes to improve quality
     Approaches
         Accumulation buffer
         Alpha accumulation
Real
                                  Flash
                                 Scene
                                same scene, GPU-rendered
                                        without conflation




    conflation
    artifacts abound,
    rendered by Skia

conflation is aliasing &
edge coverage percents
are un-predicable in general;
means conflated pixels
flicker when animated slowly
Improved Color Space:
sRGB Path Rendering
 Modern GPUs have native
                                       Radial color gradient example
 support for perceptually-correct     moving from saturated red to blue
 for
      sRGB framebuffer blending
      sRGB texture filtering
      No reason to tolerate
      uncorrected linear RGB color
      artifacts!
      More intuitive for artists to
                                                         linear RGB
                                                        transition between saturated
      control                                           red and saturated blue has
 Negligible expense for GPU to                          dark purple region

 perform sRGB-correct
 rendering
      However quite expensive for
      software path renderers to
      perform sRGB rendering
          Not done in practice
                                                           sRGB
                                                          perceptually smooth
                                                          transition from saturated
                                                          red to saturated blue
Trying Out
NV_path_rendering
 Operating system support
    2000, XP, Vista, Windows 7, Linux, FreeBSD, and Solaris
    Unfortunately no Mac support
 GPU support
    GeForce 8 and up (easy rule: all CUDA-capable GPUs)
    Most efficient on Fermi and Kepler GPUs
    Current performance can be expected to improve
 Shipping since NVIDIA’s Release 275 drivers
    Available since summer 2011
 New Release 300+ drivers have remarkable
 NV_path_rendering performance
    Try it, you’ll like it

 There’s an SDK freely available with example code!
    https://developer.nvidia.com/nv-path-rendering
Future Work
 Using NV_path_rendering in actual web and 2D
 applications
 Standardizing the programming interface
 Moving these algorithms to mobile devices




          Path rendering test bed on Nexus 7
SIGGRAPH Asia 2012: GPU-accelerated Path Rendering

More Related Content

PPT
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
PPT
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
PPT
GPU accelerated path rendering fastforward
PPT
GTC 2012: GPU-Accelerated Path Rendering
PPT
SIGGRAPH 2012: NVIDIA OpenGL for 2012
PPT
GTC 2012: NVIDIA OpenGL in 2012
PDF
GPU-accelerated Path Rendering
PPT
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...
SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering
SIGGRAPH Asia 2012 Exhibitor Talk: OpenGL 4.3 and Beyond
GPU accelerated path rendering fastforward
GTC 2012: GPU-Accelerated Path Rendering
SIGGRAPH 2012: NVIDIA OpenGL for 2012
GTC 2012: NVIDIA OpenGL in 2012
GPU-accelerated Path Rendering
Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pi...

What's hot (20)

PPTX
Migrating from OpenGL to Vulkan
PDF
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
PDF
NV_path_rendering Frequently Asked Questions
PPT
OpenGL 3.2 and More
PPT
NVIDIA OpenGL in 2016
PDF
Mixing Path Rendering and 3D
PPT
NVIDIA's OpenGL Functionality
PDF
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
PPT
OpenGL for 2015
PPT
CS 354 GPU Architecture
PPT
OpenGL 4 for 2010
PPTX
OpenGL Shading Language
PDF
Realizing OpenGL
PDF
Avoiding 19 Common OpenGL Pitfalls
PPT
CS 354 Introduction
PPT
CS 354 Vector Graphics & Path Rendering
PDF
Modern OpenGL Usage: Using Vertex Buffer Objects Well
PPT
An Introduction to NV_path_rendering
PPT
CS 354 Viewing Stuff
PPT
Virtual Reality Features of NVIDIA GPUs
Migrating from OpenGL to Vulkan
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
NV_path_rendering Frequently Asked Questions
OpenGL 3.2 and More
NVIDIA OpenGL in 2016
Mixing Path Rendering and 3D
NVIDIA's OpenGL Functionality
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
OpenGL for 2015
CS 354 GPU Architecture
OpenGL 4 for 2010
OpenGL Shading Language
Realizing OpenGL
Avoiding 19 Common OpenGL Pitfalls
CS 354 Introduction
CS 354 Vector Graphics & Path Rendering
Modern OpenGL Usage: Using Vertex Buffer Objects Well
An Introduction to NV_path_rendering
CS 354 Viewing Stuff
Virtual Reality Features of NVIDIA GPUs
Ad

Similar to SIGGRAPH Asia 2012: GPU-accelerated Path Rendering (20)

PDF
Hardware Accelerated 2D Rendering for Android
PDF
2D Games to HPC
PDF
3 d to_hpc
PDF
3 d to _hpc
PDF
Modern Graphics Pipeline Overview
PDF
GeForce 8800 OpenGL Extensions
PDF
[03 1][gpu용 개발자 도구 - parallel nsight 및 axe] miller axe
PPT
NVIDIA Graphics, Cg, and Transparency
PDF
Understanding Hardware Acceleration on Mobile Browsers
PDF
Understanding hardware acceleration on mobile browsers presentation
PDF
CPU is in Focus Again! Implementing DOF on CPU.
PDF
Mobile Graphics, The Need for Open Source Drivers
PDF
Understanding Hardware Acceleration on Mobile Browsers
PPTX
The Rendering Pipeline - Challenges & Next Steps
PDF
GPU Virtualization on VMware's Hosted I/O Architecture
PDF
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...
PPT
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
PDF
Nvidia Cuda Apps Jun27 11
PDF
Verification of Graphics ASICs (Part II)
PDF
Yang greenstein part_2
Hardware Accelerated 2D Rendering for Android
2D Games to HPC
3 d to_hpc
3 d to _hpc
Modern Graphics Pipeline Overview
GeForce 8800 OpenGL Extensions
[03 1][gpu용 개발자 도구 - parallel nsight 및 axe] miller axe
NVIDIA Graphics, Cg, and Transparency
Understanding Hardware Acceleration on Mobile Browsers
Understanding hardware acceleration on mobile browsers presentation
CPU is in Focus Again! Implementing DOF on CPU.
Mobile Graphics, The Need for Open Source Drivers
Understanding Hardware Acceleration on Mobile Browsers
The Rendering Pipeline - Challenges & Next Steps
GPU Virtualization on VMware's Hosted I/O Architecture
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Nvidia Cuda Apps Jun27 11
Verification of Graphics ASICs (Part II)
Yang greenstein part_2
Ad

More from Mark Kilgard (15)

PDF
D11: a high-performance, protocol-optional, transport-optional, window system...
PPT
Computers, Graphics, Engineering, Math, and Video Games for High School Students
PPT
NVIDIA OpenGL and Vulkan Support for 2017
PPT
NVIDIA OpenGL 4.6 in 2017
PPT
EXT_window_rectangles
PPT
NV_path rendering Functional Improvements
PPTX
OpenGL 4.5 Update for NVIDIA GPUs
PPT
CS 354 Final Exam Review
PPT
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
PPT
CS 354 Performance Analysis
PPT
CS 354 Acceleration Structures
PPT
CS 354 Global Illumination
PPT
CS 354 Ray Casting & Tracing
PPT
CS 354 Typography
PPT
CS 354 Bezier Curves
D11: a high-performance, protocol-optional, transport-optional, window system...
Computers, Graphics, Engineering, Math, and Video Games for High School Students
NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL 4.6 in 2017
EXT_window_rectangles
NV_path rendering Functional Improvements
OpenGL 4.5 Update for NVIDIA GPUs
CS 354 Final Exam Review
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Performance Analysis
CS 354 Acceleration Structures
CS 354 Global Illumination
CS 354 Ray Casting & Tracing
CS 354 Typography
CS 354 Bezier Curves

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Machine learning based COVID-19 study performance prediction
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PPTX
Big Data Technologies - Introduction.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Electronic commerce courselecture one. Pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
cuic standard and advanced reporting.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Unlocking AI with Model Context Protocol (MCP)
Machine learning based COVID-19 study performance prediction
NewMind AI Monthly Chronicles - July 2025
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Big Data Technologies - Introduction.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
The AUB Centre for AI in Media Proposal.docx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Electronic commerce courselecture one. Pdf
Chapter 3 Spatial Domain Image Processing.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
cuic standard and advanced reporting.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation

SIGGRAPH Asia 2012: GPU-accelerated Path Rendering

  • 2. GPU-accelerated Path Rendering Mark Kilgard & Jeff Bolz NVIDIA Corporation November 30, 2012
  • 3. GPUs are good at a lot of stuff
  • 7. Physics simulation CUDA N-Body [Nyland et al., GPU Gems 3, 2007]
  • 8. Interactive ray tracing OptiX [Parker et al., SIGGRAPH 2010]
  • 9. Game physics PhysX [Tonge et al., SIGGRAPH 2012]
  • 12. What about advancing 2D graphics?
  • 13. Can GPUs render & improve the immersive web?
  • 14. Complete Web Pages Rendered via OpenGL without Pre-rendered Glyph Bitmaps and all on GPU
  • 15. No tricks Every glyph is rendered from its outline; no render-to-texture Not just zoomed & rotated, also perspective Magnify & minify with no transitional pixelization or tile popping artifacts synced to refresh rate; 60 Hz updates
  • 16. Zoomed in Live demo! Web page Control points of TrueType glyphs visualized Projected
  • 17. What is path rendering? A rendering approach Resolution-independent two- dimensional graphics Occlusion & transparency depend on rendering order So called “Painter’s Algorithm” Basic primitive is a path to be filled or stroked Path is a sequence of path commands Commands are – moveto, lineto, curveto, arcto, closepath, etc. Standards Content: PostScript, PDF, TrueType fonts, Flash, Scalable Vector Graphics (SVG), HTML5 Canvas, Silverlight, Office drawings APIs: Apple Quartz 2D, Khronos OpenVG, Microsoft Direct2D, Cairo, Skia, Qt::QPainter, Anti-grain Graphics
  • 18. Path Rendering Standards Document Resolution- Immersive 2D Graphics Office Printing and Independent Web Programming Productivity Exchange Fonts Experience Interfaces Applications Java 2D API OpenType Flash QtGui API TrueType Scalable Mac OS X Vector 2D API Adobe Illustrator Graphics Open XML Paper (XPS) Inkscape HTML 5 Khronos API Open Source
  • 19. Seminal Path Rendering Paper John Warnock & Douglas Wyatt, Xerox PARC Presented SIGGRAPH 1982 Warnock founded Adobe months later John Warnock Adobe founder
  • 20. Reasons to GPU-accelerate Path Rendering Increasing screen Multi-touch resolutions Increasing screen densities Power wall More functionality with less latency… Immersive 2D web content …with less power
  • 21. Live Demo Classic PostScript content Complex text rendering Flash content New York Times rendered from its resolution-independent form
  • 22. Live demo! Gradients with blending Dashed stroking Complex gradient content Maps with text Dragon, and zoomed dragon 3D dice, but really 2D + gradients
  • 23. Last Year’s SIGGRAPH Results in Real-time “Digital Micrography” Ron Maharik, Mikhail Bessmeltsev, Alla Sheffer, Ariel Shamir, and Nathan Carr SIGGRAPH 2011 “Girl with Words in Her Hair” scene 591 paths 338,507 commands 1,244,474 scalar coordinates
  • 24. Our Contributions A novel “stencil, then cover” programming interface for path rendering, well-suited to acceleration by GPUs Our NV_path_rendering API Our programming interface’s efficient implementation within OpenGL to avoid CPU bottlenecks Productized, shipping in GeForce/Quadro drivers Accompanying algorithms to handle tessellation-free stenciled stroking of paths standard stroking embellishments such as dashing clipping paths to arbitrary paths mixing 3D and path rendering
  • 25. Notable Prior Art Loop & Blinn 2005: Resolution independent curve rendering using programmable graphics hardware Kokojima, et al. 2006: Resolution independent rendering of deformable vector objects using graphics hardware Rueda, et al. 2008: GPU-based rendering of curved polygons using simplicial coverings
  • 26. CPU vs. GPU at Rendering Tasks over Time 100% 100% 90% 90% 80% 80% 70% 70% 60% 60% 50% GPU 50% GPU CPU CPU 40% 40% 30% 30% 20% 20% 10% 10% 0% 0% 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 Pipelined 3D Interactive Rendering Path Rendering Goal of our research is to make path rendering a GPU task Render all interactive pixels, whether 3D or 2D or web content with the GPU
  • 27. Our Approach Step 1 Step 2: Stencil Cover repeat “Stencil, then Cover” (StC) Map the path rendering task from a sequential algorithm… …to a pipelined and massively parallel task Break path rendering into two steps First, “stencil” the path’s coverage into stencil buffer Second, conservatively “cover” path Test against path coverage determined in the 1st step Shade the path And reset the stencil value to render next path
  • 28. Our Implemented System: NV_path_rendering OpenGL extension to GPU-accelerate path rendering Uses “stencil, then cover” (StC) approach via OpenGL calls Create a path object Step 1: “Stencil” the path object into the stencil buffer GPU provides fast stenciling of filled or stroked paths Step 2: “Cover” the path object and stencil test against its coverage stenciled by the prior step Application can configure arbitrary shading during the step More details later Supports the union of functionality of all major path rendering standards Includes all stroking embellishments Includes first-class text and font support Allows functionality to mix with traditional 3D and programmable shading
  • 29. Pixel pipeline Vertex pipeline Path pipeline Application Path specification Pixel assembly Vertex assembly Transform path (unpack) Vertex operations transform feedback Primitive assembly Pixel operations Primitive operations Fill/Stroke Covering Pixel pack Rasterization read Texture back Fragment operations memory Fill/Stroke Application Raster operations Stenciling Framebuffer Display
  • 30. Stencil Fill Process Visualized Visualization of “invisible” stencil-only geometry generated during stencil step Net result of stencil increments and decrements is path’s winding number
  • 31. Cover Fill Geometry Visualized
  • 32. Stroking Approach Stroked line segments are straightforward Drawn as rectangles into the stencil buffer Curved stroked segments are involved Curved segments are broken into stroked quadratic segments Hulls are formed around each stroked quadratic segment An intricate fragment discard shader solves the cubic equation for every sample to determine the sample’s containment in the quadratic stroke segment If contained, the sample’s stencil sample is updated Caps & joins are also drawn into the stencil buffer Covering geometry is computed as union of rectangles, hulls, and cap/join geometry
  • 33. Quadratic Stroking Hulls Visualized Simple quadratic Bezier segment, moving control points Drawn with stroking Non-convex hull used for the stroking stencil step is visualized
  • 34. Intricate Path’s Stroking Example Join style geometry Zoomed stroking Same zoom: Stencil hull geometry
  • 35. Excellent Geometric Fidelity for Stroking Correct stroking is hard Lots of CPU implementations GPU-accelerated OpenVG reference approximate stroking GPU-accelerated stroking   avoids such short-cuts GPU has FLOPS to compute true stroke point containment Cairo Qt   Stroking with tight end-point curve
  • 36. Combined for a Complex Scenes With Many Paths Stencil Fill Geometry Cover Fill Geometry Filling-only Result Complete Tiger 240 paths 2,510 commands 12,174 coordinates Stencil Stroke Geometry Cover Stroke Geometry Stroking-only Result
  • 37. Configuration GPU: GeForce 480 GTX (GF100) CPU: Core i7 950 @ 3.07 GHz NV_path_rendering Compared to Alternatives With Release 300 driver NV_path_rendering Alternative APIs rendering same content 2,000.00 2,000.00 16x Cairo 1,800.00 1,800.00 8x Qt 1,600.00 Skia Bitmap 1,600.00 4x Skia Ganesh FBO (16x) 2x 1,400.00 1,400.00 Skia Ganesh Aliased (1x) 1x Direct2D GPU 1,200.00 Direct2D WARP Frames per second Frames per second 1,200.00 1,000.00 1,000.00 Alternative approaches 800.00 800.00 are all much slower 600.00 600.00 400.00 400.00 200.00 200.00 - - 100x100 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 100x100 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 Window Resolution in Pixels Window Resolution in Pixels
  • 38. Configuration GPU: GeForce 480 GTX (GF100) CPU: Core i7 950 @ 3.07 GHz Detail on Alternatives Same results, changed Y Axis Alternative APIs rendering same content 250.00 2,000.00 Cairo Cairo Qt 1,800.00 Skia Bitmap Qt Skia Ganesh FBO (16x) 1,600.00 Skia Bitmap 200.00 Skia Ganesh Aliased (1x) Skia Ganesh FBO (16x) Direct2D GPU 1,400.00 Skia Ganesh Aliased (1x) Direct2D WARP Direct2D GPU 1,200.00 Direct2D WARP Frames per second 150.00 Frames per second 1,000.00 Fast, but 800.00 unacceptable 100.00 quality 600.00 400.00 50.00 200.00 - - 100x100 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 200x200 500x500 800x800 1000x1000 1100x1100 100x100 300x300 400x400 600x600 700x700 900x900 Window Resolution in Pixels Window Resolution in Pixels
  • 39. 1000.00 10.00 100.00 0.10 1.00 100x100 200x200 300x300 400x400 500x500 600x600 700x700 tiger 800x800 900x900 1000x1000 1100x1100 100x100 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 100x100 Wels h_dragon 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 100x100 200x200 300x300 b 400x400 500x500 600x600 Across an range of scenes… 700x700 800x800 900x900 Celtic_round_dogs utterfly 1000x1000 1100x1100 100x100 200x200 300x300 NVpr16/Cairo 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 NVpr16/SkiaBitmap 100x100 NVpr16/SkiaGanesh 200x200 300x300 400x400 NVpr16/Direct2D GPU 500x500 600x600 700x700 NVpr16/Direct2D WARP 800x800 900x900 1000x1000 1100x1100 100x100 200x200 s pikesAm erican_Sam oa 300x300 400x400 500x500 600x600 700x700 800x800 900x900 cowboy 1000x1000 1100x1100 100x100 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 Em 1100x1100 100x100 200x200 300x300 400x400 Release 300 GeForce GTX 480 Speedups over Alternatives 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 100x100 200x200 300x300 Buonapartebrace_the_World 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 Yokozawa 1100x1100 100x100 200x200 300x300 400x400 500x500 600x600 700x700 Cougar xis is logarithmic—shows how many TIMES faster NV_path_rendering is that competitor 800x800 900x900 1000x1000 1100x1100 100x100 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 tiger_clipped_by_he
  • 40. Partial Solutions Not Enough Path rendering has 30 years of heritage and history Can’t do a 90% solution and expect Software to change John Warnock Trying to “mix” CPU and GPU methods doesn’t work Adobe founder Expensive to move software—needs to be an unambiguous win Must surpass CPU approaches on all fronts Performance Quality Functionality Conformance to standards More power efficient Enable new applications Inspiration: Perceptive Pixel
  • 41. Dashing Content Examples Artist made windows with Same cake dashed line missing dashed segment stroking details Technical diagrams and charts often Frosting on cake is dashed employ dashing elliptical arcs with round end caps for “beaded” look; flowers are also dashing All content shown is fully GPU rendered Dashing character outlines for quilted look
  • 42. First-class, Resolution-independent Font Support Fonts are a standard, first-class part of all path rendering systems Foreign to 3D graphics systems such as OpenGL and Direct3D, but natural for path rendering Because letter forms in fonts have outlines defined with paths TrueType, PostScript, and OpenType fonts all use outlines to specify glyphs NV_path_rendering makes font support easy Can specify a range of path objects with A specified font Sequence or range of Unicode character points No requirement for applications use font API to load glyphs You can also load glyphs “manually” from your own glyph outlines
  • 43. Rendering Paths Clipped to Some Other Arbitrary Path Example clipping the PostScript tiger to a heart constructed from two cubic Bezier curves unclipped tiger tiger with pink background clipped to heart
  • 44. Complex Clipping Example tiger is 240 paths cowboy clip is the union of 1,366 paths result of clipping tiger to the union of all the cowboy paths
  • 45. NV_path_rendering is more than just matching CPU vector graphics 3D and vector graphics mix Superior quality   CPU GPU Competitors Arbitrary programmable shader on 2D in perspective is free paths— bump mapping
  • 46. Mixing 3D Depth Buffering and Path Rendering PostScript tigers surrounding Utah teapot Plus overlaid TrueType font rendering No textures involved, no multi-pass
  • 47. Live demo! Solid or wireframe teapots Very fast Teapots + tigers in same 3D scene Zoom on tigers All the detail is there
  • 48. Handling Uncommon Path Rendering Functionality: Projection Projection “just works” Because GPU does everything with perspective-correct interpolation
  • 49. Example of Bump Mapping on Path Rendered Text Phrase “Brick wall!” is path rendered and bump mapped with a Cg fragment shader light source position
  • 50. Handling Common Path Rendering Functionality: Filtering GPUs are highly efficient at image filtering  Qt Fast texture mapping Mipmapping Anisotropic filtering Wrap modes Moiré CPUs aren't artifacts really  Cairo  GPU
  • 51. Anti-aliasing Discussion Good anti-aliasing is a big deal for path rendering Particularly true for font rendering of small point sizes Features of glyphs are often on the scale of a pixel or less NV_path_rendering uses multiple stencil samples per pixel for reasonable antialiasing Otherwise, image quality is poor 4 samples/pixel bare minimum 8 or 16 samples/pixel is pretty sufficient But 16 requires expensive 2x2 supersampling of 4x multisampling 16x is quite memory intensive Alternative: quality vs. performance tradeoff Fast enough to render multiple passes to improve quality Approaches Accumulation buffer Alpha accumulation
  • 52. Real Flash Scene same scene, GPU-rendered without conflation conflation artifacts abound, rendered by Skia conflation is aliasing & edge coverage percents are un-predicable in general; means conflated pixels flicker when animated slowly
  • 53. Improved Color Space: sRGB Path Rendering Modern GPUs have native Radial color gradient example support for perceptually-correct moving from saturated red to blue for sRGB framebuffer blending sRGB texture filtering No reason to tolerate uncorrected linear RGB color artifacts! More intuitive for artists to  linear RGB transition between saturated control red and saturated blue has Negligible expense for GPU to dark purple region perform sRGB-correct rendering However quite expensive for software path renderers to perform sRGB rendering Not done in practice  sRGB perceptually smooth transition from saturated red to saturated blue
  • 54. Trying Out NV_path_rendering Operating system support 2000, XP, Vista, Windows 7, Linux, FreeBSD, and Solaris Unfortunately no Mac support GPU support GeForce 8 and up (easy rule: all CUDA-capable GPUs) Most efficient on Fermi and Kepler GPUs Current performance can be expected to improve Shipping since NVIDIA’s Release 275 drivers Available since summer 2011 New Release 300+ drivers have remarkable NV_path_rendering performance Try it, you’ll like it There’s an SDK freely available with example code! https://developer.nvidia.com/nv-path-rendering
  • 55. Future Work Using NV_path_rendering in actual web and 2D applications Standardizing the programming interface Moving these algorithms to mobile devices Path rendering test bed on Nexus 7

Editor's Notes

  • #30: NV_path_rendering provides a new third pipeline—in addition to the vertex and pixel pipelines—for rendering pixels