Ramesh Raskar University of North Carolina at Chapel Hill Ramesh Raskar University of North Carolina at Chapel Hill Image Precision Silhouette Edges Michael Cohen Microsoft Research Michael Cohen Microsoft Research
Silhouette Edges Highlight detailHighlight detail Technical IllustrationsTechnical Illustrations
Silhouette Edges Highlight detailHighlight detail Technical IllustrationsTechnical Illustrations
Silhouette Edges Information with few strokesInformation with few strokes Non-photorealistic renderingNon-photorealistic rendering
Definitions Scene : Collection of oriented polygonsScene : Collection of oriented polygons Silhouette edge : Boundary between adjacent front facing and back facing polygonSilhouette edge : Boundary between adjacent front facing and back facing polygon
Find all silhouette edgesFind all silhouette edges Solve the partial visibility problem to render only non-occluded parts of silhouette edges Rendering Silhouette Edges
Previous Work Hidden line removalHidden line removal Markosian et. al. Siggraph 1997Markosian et. al. Siggraph 1997 – Trace out silhouette curves – Visibility using sweep method in image space Rossignac et. al. Eurographics Hardware 1992Rossignac et. al. Eurographics Hardware 1992 – Polygons and wireframe Gooch I3DG 1999Gooch I3DG 1999 Hidden line removalHidden line removal Markosian et. al. Siggraph 1997Markosian et. al. Siggraph 1997 – Trace out silhouette curves – Visibility using sweep method in image space Rossignac et. al. Eurographics Hardware 1992Rossignac et. al. Eurographics Hardware 1992 – Polygons and wireframe Gooch I3DG 1999Gooch I3DG 1999
Previous Methods Object PrecisionObject Precision Pre-processing or Batch orientedPre-processing or Batch oriented Need connectivity informationNeed connectivity information For static scenesFor static scenes Two primitives, polygons + edgesTwo primitives, polygons + edges Object PrecisionObject Precision Pre-processing or Batch orientedPre-processing or Batch oriented Need connectivity informationNeed connectivity information For static scenesFor static scenes Two primitives, polygons + edgesTwo primitives, polygons + edges
Goal Real-time performance using graphics hardwareReal-time performance using graphics hardware No pre-processing (Dynamic scenes)No pre-processing (Dynamic scenes) No adjacency information (Changing topology)No adjacency information (Changing topology) Single primitive (Polygons)Single primitive (Polygons) Image precisionImage precision Real-time performance using graphics hardwareReal-time performance using graphics hardware No pre-processing (Dynamic scenes)No pre-processing (Dynamic scenes) No adjacency information (Changing topology)No adjacency information (Changing topology) Single primitive (Polygons)Single primitive (Polygons) Image precisionImage precision
Video
Basic Approach First (Visible) Polygon Layer
Basic Approach First (Visible) Polygon Layer Second Polygon Layer
Basic Approach First (Visible) Polygon Layer Second Polygon Layer Intersection = Silhouettes
Basic Approach : Polygonal Surfaces Compute the two nearest layers from cameraCompute the two nearest layers from camera – First layer : subset of front facing polygons – Second layer : subset of back facing polygons Compute intersection in image spaceCompute intersection in image space Compute the two nearest layers from cameraCompute the two nearest layers from camera – First layer : subset of front facing polygons – Second layer : subset of back facing polygons Compute intersection in image spaceCompute intersection in image space
Basic Algorithm Draw white background Set depth function to ‘Less Than’ Render front facing polygons in white Set depth function ‘Equal To’ Draw back-facing polygons in black Repeat for a new viewpoint Draw white background Set depth function to ‘Less Than’ Render front facing polygons in white Set depth function ‘Equal To’ Draw back-facing polygons in black Repeat for a new viewpoint
Basic Algorithm Draw white background Set depth function to ‘Less Than’ Render front facing polygons in white Set depth function ‘Equal To’ Draw back-facing polygons in black Repeat for a new viewpoint Draw white background Set depth function to ‘Less Than’ Render front facing polygons in white Set depth function ‘Equal To’ Draw back-facing polygons in black Repeat for a new viewpoint ! Limited depth buffer precision, single pixel width
Image Precision Techniques 1. Back facing polygons as wireframes 2. Z-scaled translation 3. Fattened back facing polygons 1. Back facing polygons as wireframes 2. Z-scaled translation 3. Fattened back facing polygons
Wireframe Rendering Front facing polygons in whiteFront facing polygons in white Back facing polygons in wireframe in blackBack facing polygons in wireframe in black Front facing polygons in whiteFront facing polygons in white Back facing polygons in wireframe in blackBack facing polygons in wireframe in black FrontFaces BackFaces
Wireframe Rendering üChange wireframe thickness or color üUniform silhouette line width ! Gaps at neighboring polygons ! Two different primitives : line and polygon üChange wireframe thickness or color üUniform silhouette line width ! Gaps at neighboring polygons ! Two different primitives : line and polygon
Z-scaled Translation Camera Front-facing Polygon Back-facing Polygon
Z-scaled Translation Projection width of visible part of back-face depends on translation Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation Projection width of visible part of back-face depends on translation Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation Projection width of visible part of back-face depends on translation Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation Projection width of visible part of back-face depends on translation Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation using Scaling Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation using Scaling Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation using Scaling Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation using Scaling Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation using Scaling Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation using Scaling Camera Front-facing Back-facing Part of back-face visible and seen as silhouette edge
Z-scaled Translation ! Projection width of visible part depends on dihedral angle Translation F Camera F B Part of back-face visible
Fattened Backfacing Polygons Camera Front-facing Polygon Back-facing Polygon
Fattened Backfacing Polygons Camera Front-facing Polygon Back-facing Polygon Part of fattened backface visible
Fattened Backfacing Polygons Camera Front-facing Polygon Back-facing Polygon Part of fattened backface visible
Fattened Backfacing Polygons Camera Front-facing Polygon Back-facing Polygon Part of fattened backface visible
Fattened Backfacing Polygons ü Fattening is dependent only on the orientation of back facing polygon Part of fattened backface visible FB F and B at different orientations Camera
Fattening Process Identify back facing polygon
Fattening Process Identify back facing polygon
Fattening Process Fatten by pushing the edges outwards
Fattening Process Fatten by pushing the edges outwards
Fattening Process Fatten by pushing the edges outwards
Fattening Process Fatten by pushing the edges outwards
Fattening Process Fatten by pushing the edges outwards Create a triangle fan
Fattening Process Fatten by pushing the edges outwards Create a triangle fan
Fattening Process Fatten by pushing the edges outwards Create a triangle fan
Fattening Process Fatten by pushing the edges outwards Create a triangle fan
Fattening Process Fatten by pushing the edges outwards Create a triangle fan
Fattening Process. Fatten by pushing the edges outwards Fattened part appears as silhouette Create a triangle fan
Fattening Process. Fatten by pushing the edges outwards Fattened part appears as silhouette Create a triangle fan
Fattening Process. Fatten by pushing the edges outwards Fattened part appears as silhouette Create a triangle fan
üUniform width silhouette edges Fattening dependent onFattening dependent on – Orientation of the polygon wrt camera – Orientation of the edge – Distance of the edge from camera ! Polygon vertices move as camera moves ! Creates more triangles üUniform width silhouette edges Fattening dependent onFattening dependent on – Orientation of the polygon wrt camera – Orientation of the edge – Distance of the edge from camera ! Polygon vertices move as camera moves ! Creates more triangles Fattened Backfacing Polygons
Charcoal Style Rendering Fatten frontfacing polygons seen almost edge-onFatten frontfacing polygons seen almost edge-on Fattened part appears in front of original polygonsFattened part appears in front of original polygons Simple lighting model for fattened polygonsSimple lighting model for fattened polygons Fatten frontfacing polygons seen almost edge-onFatten frontfacing polygons seen almost edge-on Fattened part appears in front of original polygonsFattened part appears in front of original polygons Simple lighting model for fattened polygonsSimple lighting model for fattened polygons
Demonstration
Advantages No pre-processingNo pre-processing No adjacency informationNo adjacency information Robust and general purposeRobust and general purpose Easy to implement using traditional hardwareEasy to implement using traditional hardware Dynamic scenes, changing topology, LODDynamic scenes, changing topology, LOD Interesting effectsInteresting effects Models in other representationsModels in other representations No pre-processingNo pre-processing No adjacency informationNo adjacency information Robust and general purposeRobust and general purpose Easy to implement using traditional hardwareEasy to implement using traditional hardware Dynamic scenes, changing topology, LODDynamic scenes, changing topology, LOD Interesting effectsInteresting effects Models in other representationsModels in other representations
Modifications Different objects with colored silhouettesDifferent objects with colored silhouettes Texture mapped silhouettesTexture mapped silhouettes Distance from viewer, light effectsDistance from viewer, light effects Shaded or Texture mapped front polygonsShaded or Texture mapped front polygons Intersecting polygonsIntersecting polygons Different objects with colored silhouettesDifferent objects with colored silhouettes Texture mapped silhouettesTexture mapped silhouettes Distance from viewer, light effectsDistance from viewer, light effects Shaded or Texture mapped front polygonsShaded or Texture mapped front polygons Intersecting polygonsIntersecting polygons
Issues Complete scene traversal necessaryComplete scene traversal necessary Density of silhouette edges for distant objectsDensity of silhouette edges for distant objects Inconsistent face normalsInconsistent face normals Complete scene traversal necessaryComplete scene traversal necessary Density of silhouette edges for distant objectsDensity of silhouette edges for distant objects Inconsistent face normalsInconsistent face normals
Performance Rendering cost increased by a factor of twoRendering cost increased by a factor of two Fattening method, six triangles for each backfacing triangleFattening method, six triangles for each backfacing triangle OpenGL with SGI Indigo2 MaxImpact timings:OpenGL with SGI Indigo2 MaxImpact timings: – Venus model, ~6K triangles, 66fps – Wireframe: 40 fps – Z-scaled translation: 50 fps – Fattened backfaces: 11.5 fps Rendering cost increased by a factor of twoRendering cost increased by a factor of two Fattening method, six triangles for each backfacing triangleFattening method, six triangles for each backfacing triangle OpenGL with SGI Indigo2 MaxImpact timings:OpenGL with SGI Indigo2 MaxImpact timings: – Venus model, ~6K triangles, 66fps – Wireframe: 40 fps – Z-scaled translation: 50 fps – Fattened backfaces: 11.5 fps
Acknowledgements NSF STCNSF STC Microsoft Research Graphics groupMicrosoft Research Graphics group Rick Szeliski, John Snyder Link FellowshipLink Fellowship Geometric Models :Geometric Models : Electric Boat Stanford University VideoVideo Matt Cutts, Todd Gaul NSF STCNSF STC Microsoft Research Graphics groupMicrosoft Research Graphics group Rick Szeliski, John Snyder Link FellowshipLink Fellowship Geometric Models :Geometric Models : Electric Boat Stanford University VideoVideo Matt Cutts, Todd Gaul
Summary Real-time silhouette renderingReal-time silhouette rendering – Update depth buffer – translate or fatten backfacing polygons Applicable to dynamic scenes, changing topologyApplicable to dynamic scenes, changing topology Traditional graphics pipelineTraditional graphics pipeline ~ raskar/Sil/ Real-time silhouette renderingReal-time silhouette rendering – Update depth buffer – translate or fatten backfacing polygons Applicable to dynamic scenes, changing topologyApplicable to dynamic scenes, changing topology Traditional graphics pipelineTraditional graphics pipeline ~ raskar/Sil/