Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

60
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline Vineet Batra, Harish Kumar Adobe Systems Mark J. Kilgard, Tristan Lorach NVIDIA

Transcript of Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Page 1: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Vineet Batra, Harish KumarAdobe Systems

Mark J. Kilgard, Tristan LorachNVIDIA

Page 2: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

HD (1920 x 1080)

5k (5120 x 2880)(312 x 390) Ultra HD (3840 x 2160)

Vectors are not pixels !

Page 3: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Prior Work

• SIGGRAPH research on fast vector graphics scene renderingGanacim et al. Massively-parallel vector graphics (2014)

Nehab & Hoppe, Random-accessrendering of general vector graphics (2008)

Page 4: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

We build upon…

Kilgard-Bolz, 2012 Loop-Blinn, 2005

Vatti, 1992

Porter-Duff, 1984

Kokojima et al., 2006

Page 5: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Accelerated rendering of Adobe PDF Standard

Contributions

Shading• Gradients• Patterns

Transparency Groups• Isolated• Non-Isolated• Knockout• Blend Modes

Paths, Text & Images

Page 6: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Accelerated rendering of Adobe PDF Standard

Contributions

Smooth rendering of Gradient Meshes

Page 7: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

True CMYK & N-Channel Rendering

Accelerated rendering of Adobe PDF Standard

Contributions

Smooth rendering of Gradient Meshes

Page 8: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Layer based drawing in Adobe Illustrator

Page 9: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Page 10: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Porter-Duff Compositing

αr⋅Cr = αs⋅Cs + 1–αs⋅αb⋅Cb

αr = αs + 1–αs⋅αb

Page 11: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Porter-Duff Compositing

αr⋅Cr = αs⋅Cs + 1–αs⋅αb⋅Cb

αr = αs + 1–αs⋅αb

PDF Compositingαr⋅Cr = 1–αs⋅αb⋅Cb + 1–αb⋅αs⋅Cs + αb⋅αs⋅B(CbCs)

αr = αs + 1–αs⋅αb Blend mode

Page 12: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

αr⋅Cr = αs⋅Cs + 1–αs⋅αb⋅Cb

αr = αs + 1–αs⋅αb

Blend Modes

Page 13: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Porter-Duff Compositing

αr⋅Cr = αs⋅Cs + 1–αs⋅αb⋅Cb

αr = αs + 1–αs⋅αb

PDF Compositingαr⋅Cr = 1–αs⋅αb⋅Cb + 1–αb⋅αs⋅Cs + αb⋅αs⋅B(CbCs)

αr = αs + 1–αs⋅αb Blend mode

For Normal Blend Mode, B(CbCs) = Cs

αr⋅Cr = αs⋅Cs + 1–αs⋅αb⋅CbPorter-Duff

Page 14: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

KnockoutNon Knockout

Knockout Groups

Orange composites “over” Blue

Orange overwrites(Knocks out) Blue

Page 15: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

KnockoutNon Knockout

Knockout Groups

See through text on opaque background

Orange composites “over” Blue

Orange overwrites(Knocks out) Blue

Page 16: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Method•Iterate objects from top to bottom•Accumulate coverage in the stencil buffer•Use stencil test to reject already marked pixels

Compositing Knock Out Groups

Page 17: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Stencil Buffer Color BufferPath Object

Method•Iterate objects from top to bottom•Accumulate coverage in the stencil buffer•Use stencil test to reject already marked pixels

Compositing Knock Out Groups

Page 18: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Stencil Buffer Color BufferPath Object

Method•Iterate objects from top to bottom•Accumulate coverage in the stencil buffer•Use stencil test to reject already marked pixels

Compositing Knock Out Groups

Page 19: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Stencil Buffer Color BufferPath Object

Method•Iterate objects from top to bottom•Accumulate coverage in the stencil buffer•Use stencil test to reject already marked pixels

Compositing Knock Out Groups

Page 20: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Stencil Buffer Color BufferPath Object

Method•Iterate objects from top to bottom•Accumulate coverage in the stencil buffer•Use stencil test to reject already marked pixels

Compositing Knock Out Groups

Page 21: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Stencil Buffer Color BufferPath Object

Method•Iterate objects from top to bottom•Accumulate coverage in the stencil buffer•Use stencil test to reject already marked pixels

Compositing Knock Out Groups

Page 22: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Knockout Non-knockout

Isolated

Non-isolated

Isolated & Non-isolated transparency groups

Page 23: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Compositing Isolated & Non-isolated transparency groups

Details in the paper

Page 24: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

RGB CCMMYYKKR

B GKC

Y M

Page 25: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

RGB CCMMYYKK

Page 26: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Not Entirely BlackAdd KK

RGB CCMMYYKK

Page 27: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

RR = 1.0 – min(1.0, CC + KK)

GG = 1.0 – min(1.0, MM + KK)

BB = 1.0 – min(1.0, YY + KK)RR

BB GG

CC

MM YY

RGB CCMMYYKK

Page 28: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

KK = min(1.0–RR, 1.0–GG, 1.0 – BB)

CC = 1.0 – RR – KK

MM = 1.0 – GG– KK

YY = 1.0 – BB – KKRR

BB GG

CC

MM YY

RGB CCMMYYKK

Page 29: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

KC

Y M

Page 30: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Page 31: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

KC

Y M

R

B G

Page 32: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

KC

Y M

R

B G

Color Burn

Difference

Color Dodge

Hard Light

Overlay

Color Burn

Difference

Color Dodge

Hard Light

Overlay

Page 33: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Spot Colors• Advanced printing processes may have additional “spot

colors”

• Examples• Pantone Colors• Metallic ink• Fluorescent ink• Spot varnish• Custom hand-mixed ink

http://www.pantone.comPantone Colors

Page 34: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Challenges in CCMMYYKK Rendering

No built-in support for 4+ channelsCMYK color + 1 alpha + N Spot colors >= 5 8-bit channels

No support for blend modes in subtractive color spaceGPU blending assumes additive color space

Performance overhead in composition of transparency groups

Page 35: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Framebuffer setup on GPUR

B G

KC

Y M

Color Attachment 0

R G B A …R G B A R G B A

R G B A …R G B A R G B A

R G B A …R G B A R G B A

… … … … … …

Color Attachment 0

a bSpot Colors

… … … … … …

C M Y Aa bK C M Y Aa bK…

C M Y Aa bK C M Y Aa bK…C M Y Aa bK C M Y Aa bK…

C M Y Aa bK C M Y Aa bK…

No hardware support

Page 36: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Framebuffer setup on GPU – Proposed solution for CMYKR

B G

KC

Y M

… … … … … …

…C M Y A C M A C M Y A

…C M Y A C M A C M Y A

…C M Y A C M A C M Y A

Color Attachment 0

… … … … … …

…aK b A K a b A K a b A

K a b A K a b A K a b A

K a b A K a b A K a b A

Color Attachment 1

R G B A …R G B A R G B A

R G B A …R G B A R G B A

R G B A …R G B A R G B A

… … … … … …

Color Attachment 0

a bSpot Colors

Y

Y

Y

Page 37: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

RGB

RGBresult = RGBsource + (1-Asource) * RGBdestination

Aresult = Asource + (1-Asource) * Adestination

Normal Blend mode

Page 38: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

RGB

RGBresult = RGBsource + (1-Asource) * RGBdestination

Aresult = Asource + (1-Asource) * Adestination

Normal Blend mode

CCMMYYKK

CCMMYYKKresult = 1-((1-CCMMYYKKsource) + (1-Asource) * (1-CCMMYYKKdestination))

Aresult = Asource + (1-Asource) * Adestination

Page 39: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

CCMMYYKK

CCMMYYKKresult = 1-((1-CCMMYYKKsource) + (1-Asource) * (1-CCMMYYKKdestination))

RGB

RGBresult = RGBsource + (1-Asource) * RGBdestination

Normal Blend mode

Page 40: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

CCMMYYKK

CCMMYYKKresult = 1-((1-CCMMYYKKsource) + (1-Asource) * (1-CCMMYYKKdestination))

RGB

RGBresult = RGBsource + (1-Asource) * RGBdestination

final compliment

Normal Blend mode

Page 41: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

CCMMYYKK

CCMMYYKKresult = CCMMYYKKsource + (1-Asource) * CCMMYYKKdestination

Aresult = Asource + (1-Asource) * Adestination

CCMMYYKK = (1-CCMMYYKK)

RGB

RGBresult = RGBsource + (1-Asource) * RGBdestination

Aresult = Asource + (1-Asource) * Adestination

Normal Blend mode

Page 42: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

C M Y K A

shader input color

1−C 1−M 1−Y 1−K A

complemented source color

1−x

color componentcomplement

C M Y K Alogical destination color1−x

color componentcomplement

blendmode

1−C 1−M 1−Y 1−K Acomplemented destination color

CMYK Blending on the GPU

Page 43: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

C M Y K A

shader input color

1−C 1−M 1−Y 1−K A

complemented source color

1−x

color componentcomplement

C M Y K Alogical destination color1−x

color componentcomplement

R G B A

display color

multisample resolve + CMYK color space RGB

blendmode

1−C 1−M 1−Y 1−K Acomplemented destination color

CMYK Blending on the GPU

Page 44: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

QualityRGB CMYK

CPU

GPU

Page 45: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Adobe Illustrator CC 2015

System Configuration

Window 764 bit

Quad Core3.4 GHz, 8 GB

GeForce GTX780 Ti, 2GB

Page 46: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance EvaluationFull HD

1920 x 1080

R

B G

* * * *CMYK RGB

Page 47: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance EvaluationFull HD

1920 x 1080

R

B G

* * * *CMYK RGB

Page 48: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance EvaluationFull HD

1920 x 1080

R

B GPaths:132138

Trans. Groups: 66792

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 11214

Trans. Groups: 2105

Gradients: 1973

Paths: 1041

Gradients: 291Paths:84995

Trans. Groups: 25614

Paths:14403

Trans. Groups: 14313

* * * *CMYK RGB

Page 49: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance EvaluationFull HD

1920 x 1080

R

B GPaths:132138

Trans. Groups: 66792

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 11214

Trans. Groups: 2105

Gradients: 1973

Paths: 1041

Gradients: 291Paths:84995

Trans. Groups: 25614

Paths:14403

Trans. Groups: 14313

Gain

Avg. = 6.95xMax. = 18.8x

* * * *CMYK RGB

Page 50: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation R

B G

Ultra HD3840 x 2160

*CMYK RGB* * *

Page 51: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation R

B G

Ultra HD3840 x 2160Gain

Avg. = 9.03xMax. = 22.6x

*CMYK RGB* * *

Page 52: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation KC

Y M

Full HD1920 x 1080

Paths:84995

Trans. Groups:

25614

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 1041

Gradients: 291

Page 53: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation KC

Y M

CPU Rendering (in ms)

GPU Rendering (in ms)

Full HD1920 x 1080

Paths:84995

Trans. Groups:

25614

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 1041

Gradients: 291

Page 54: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation KC

Y M

CPU Rendering (in ms)

GPU Rendering (in ms)

Gain

Avg. = 3.3xMax. = 7.76x

Full HD1920 x 1080

Paths:84995

Trans. Groups:

25614

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 1041

Gradients: 291

Page 55: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation C

Y M3840 x 2160 KC

Y M

Ultra HD3840 x 2160

Paths:84995

Trans. Groups:

25614

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 1041

Gradients: 291

Page 56: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation C

Y M3840 x 2160 KC

Y M

CPU Rendering

GPU Rendering

Ultra HD3840 x 2160

Paths:84995

Trans. Groups:

25614

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 1041

Gradients: 291

Page 57: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Performance Evaluation C

Y M3840 x 2160 KC

Y M

CPU Rendering

GPU Rendering

Gain

Avg. = 5.68xMax. = 9.29x

Ultra HD3840 x 2160

Paths:84995

Trans. Groups:

25614

Paths: 9428

Trans. Groups:1457

Gradients: 1096

Paths: 1041

Gradients: 291

Page 58: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Demo

Page 59: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Future Work

• Achieve high quality anti-aliasing of text without using bitmaps generated on the CPU

• Improve the quality of sub-pixel anti aliasing• Improve CMYK rendering performance by reducing memory overhead• Extend the vector graphics rendering pipeline to support style effects such as

shadows and blurs

Page 60: Slides: Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline

Thank you!