lapped textures emil praun adam finkelstein hugues hoppe emil praun adam finkelstein hugues hoppe...
TRANSCRIPT
Lapped TexturesLapped Textures
Emil PraunEmil Praun
Adam FinkelsteinAdam Finkelstein
Hugues HoppeHugues Hoppe
Emil PraunEmil Praun
Adam FinkelsteinAdam Finkelstein
Hugues HoppeHugues Hoppe
Princeton UniversityPrinceton University
Princeton UniversityPrinceton University
Microsoft ResearchMicrosoft Research
Princeton UniversityPrinceton University
Princeton UniversityPrinceton University
Microsoft ResearchMicrosoft Research
GoalGoal
“example” image“example” image
textured surfacetextured surface
mesh geometrymesh geometry
?
GoalGoal
Little user effortLittle user effort
No apparent seamsNo apparent seams
No obvious periodicityNo obvious periodicity
Low distortionLow distortion
Local texture controlLocal texture control
AnisotropyAnisotropy
Little user effortLittle user effort
No apparent seamsNo apparent seams
No obvious periodicityNo obvious periodicity
Low distortionLow distortion
Local texture controlLocal texture control
AnisotropyAnisotropy
Previous 2D Texture SynthesisPrevious 2D Texture Synthesis
Histogram equalization [Heeger ’96]Histogram equalization [Heeger ’96]
Laplacian block shuffling [de Bonet ’97]Laplacian block shuffling [de Bonet ’97]
Pixel template matching [Efros ’99] [Wei ’00]Pixel template matching [Efros ’99] [Wei ’00]
Histogram equalization [Heeger ’96]Histogram equalization [Heeger ’96]
Laplacian block shuffling [de Bonet ’97]Laplacian block shuffling [de Bonet ’97]
Pixel template matching [Efros ’99] [Wei ’00]Pixel template matching [Efros ’99] [Wei ’00]
Histogram equalization [Heeger ’96]Histogram equalization [Heeger ’96]
Laplacian block shuffling [de Bonet ’97]Laplacian block shuffling [de Bonet ’97]
Pixel template matching [Efros ’99] [Wei Pixel template matching [Efros ’99] [Wei ’00’00]]
Random pasting of image blocks [Xu ’00]Random pasting of image blocks [Xu ’00]
Histogram equalization [Heeger ’96]Histogram equalization [Heeger ’96]
Laplacian block shuffling [de Bonet ’97]Laplacian block shuffling [de Bonet ’97]
Pixel template matching [Efros ’99] [Wei Pixel template matching [Efros ’99] [Wei ’00’00]]
Random pasting of image blocks [Xu ’00]Random pasting of image blocks [Xu ’00]
Previous 2D Texture SynthesisPrevious 2D Texture Synthesis
Previous 3D TexturingPrevious 3D Texturing
Volumetric textures:Volumetric textures:
• Noise functions [Perlin ’85, Worley ’96]Noise functions [Perlin ’85, Worley ’96]
• Solid textures by example [Ghazanfarpour ’96]Solid textures by example [Ghazanfarpour ’96]
Synthesizing texture on a surface:Synthesizing texture on a surface:
• Reaction-diffusion [Turk ’91, Witkin ’91] Reaction-diffusion [Turk ’91, Witkin ’91]
• Cellular textures [Fleischer ’95]Cellular textures [Fleischer ’95]
• Covering surface with triangular tiles [Neyret ’99] Covering surface with triangular tiles [Neyret ’99]
Volumetric textures:Volumetric textures:
• Noise functions [Perlin ’85, Worley ’96]Noise functions [Perlin ’85, Worley ’96]
• Solid textures by example [Ghazanfarpour ’96]Solid textures by example [Ghazanfarpour ’96]
Synthesizing texture on a surface:Synthesizing texture on a surface:
• Reaction-diffusion [Turk ’91, Witkin ’91] Reaction-diffusion [Turk ’91, Witkin ’91]
• Cellular textures [Fleischer ’95]Cellular textures [Fleischer ’95]
• Covering surface with triangular tiles [Neyret ’99] Covering surface with triangular tiles [Neyret ’99]
ApproachApproach
texture patchtexture patch
surfacesurface
Key Idea: Patch PastingKey Idea: Patch Pasting
texture patchtexture patchtexture patchtexture patch
surfacesurfacesurfacesurface““lapped textures”lapped textures”
PROCESSPROCESS
AlgorithmAlgorithm
texture patchtexture patch
surfacesurface
AlgorithmAlgorithm
texture patchtexture patch
surfacesurface
AlgorithmAlgorithm
texture patchtexture patch
surfacesurface
AlgorithmAlgorithm
texture patchtexture patch
surfacesurface
IssuesIssues
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
IssuesIssues
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
Texture Patch CreationTexture Patch Creation
Less Structure SplotchLess Structure Splotch
IssuesIssues
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
Direction Field: User-specifiedDirection Field: User-specified
Direction Field: Local to PatchDirection Field: Local to Patch
IssuesIssues
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
Patch GrowthPatch Growth
Patch GrowthPatch Growth
Patch GrowthPatch Growth
Patch GrowthPatch Growth
Patch GrowthPatch Growth
Patch GrowthPatch Growth
Patch GrowthPatch Growth
IssuesIssues
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
Align Patch to Direction FieldAlign Patch to Direction Field
texture patchtexture patch
surfacesurface
Tangential Vector FieldTangential Vector Field
Optimizing the ParametrizationOptimizing the Parametrization
Least squares best match to unit axesLeast squares best match to unit axesSparse linear system. No explicit fairness functionalSparse linear system. No explicit fairness functional
Least squares best match to unit axesLeast squares best match to unit axesSparse linear system. No explicit fairness functionalSparse linear system. No explicit fairness functional
Result of OptimizationResult of Optimization
IssuesIssues
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
Coverage estimationCoverage estimation
off-screen bufferoff-screen bufferoff-screen bufferoff-screen buffer
Render patch trianglesRender patch triangles
Flag covered trianglesFlag covered triangles
Remember 1 pixel Remember 1 pixel
per uncovered triangle per uncovered triangle
Render patch trianglesRender patch triangles
Flag covered trianglesFlag covered triangles
Remember 1 pixel Remember 1 pixel
per uncovered triangle per uncovered triangle
Coverage estimationCoverage estimation
off-screen bufferoff-screen bufferoff-screen bufferoff-screen buffer
Render patch trianglesRender patch triangles
Flag covered trianglesFlag covered triangles
Remember 1 pixel Remember 1 pixel
per uncovered triangle per uncovered triangle
Render patch trianglesRender patch triangles
Flag covered trianglesFlag covered triangles
Remember 1 pixel Remember 1 pixel
per uncovered triangle per uncovered triangle
Coverage estimationCoverage estimation
off-screen bufferoff-screen bufferoff-screen bufferoff-screen buffer
Render patch trianglesRender patch triangles
Flag covered trianglesFlag covered triangles
Remember 1 pixel Remember 1 pixel
per uncovered triangle per uncovered triangle
Render patch trianglesRender patch triangles
Flag covered trianglesFlag covered triangles
Remember 1 pixel Remember 1 pixel
per uncovered triangle per uncovered triangle
IssuesIssues
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
1.1. Texture patch creationTexture patch creation
2.2. Specifying direction fieldSpecifying direction field
3.3. Surface patch growthSurface patch growth
4.4. Patch parametrizationPatch parametrization
5.5. Face coverage estimationFace coverage estimation
6.6. Texture storage and renderingTexture storage and rendering
Texture Storage and RenderingTexture Storage and Rendering
Method 1: Method 1: Texture AtlasTexture Atlas
• Pre-composite into a global texture map.Pre-composite into a global texture map.
-- OR ---- OR --
Method 2: Method 2: Runtime pastingRuntime pasting
• Composite at run-time using hardwareComposite at run-time using hardware
Method 1: Method 1: Texture AtlasTexture Atlas
• Pre-composite into a global texture map.Pre-composite into a global texture map.
-- OR ---- OR --
Method 2: Method 2: Runtime pastingRuntime pasting
• Composite at run-time using hardwareComposite at run-time using hardware
Method 1: Texture AtlasMethod 1: Texture Atlas
Patches of triangles with similar normalsPatches of triangles with similar normals
2D packing problem for arbitrary polygons2D packing problem for arbitrary polygons
Patches of triangles with similar normalsPatches of triangles with similar normals
2D packing problem for arbitrary polygons2D packing problem for arbitrary polygons
Method 2: Runtime PastingMethod 2: Runtime Pasting
Store vertex coordinates for each patchStore vertex coordinates for each patch
Composite at run-time using hardwareComposite at run-time using hardware
May render triangles several timesMay render triangles several times
Store vertex coordinates for each patchStore vertex coordinates for each patch
Composite at run-time using hardwareComposite at run-time using hardware
May render triangles several timesMay render triangles several times
Atlas vs. Runtime PastingAtlas vs. Runtime Pasting
AtlasAtlas
+ Faster rendering, more portableFaster rendering, more portable
+ Easy to paint unique details (eyes, nose on bunny)Easy to paint unique details (eyes, nose on bunny)
– Sampling artifacts; user effortSampling artifacts; user effort
PastingPasting
– Increases model complexity (Increases model complexity ( 1.6 –3)1.6 –3)
+ Huge effective resolution Huge effective resolution
+ Reuse splotch parameterization for many texturesReuse splotch parameterization for many textures
AtlasAtlas
+ Faster rendering, more portableFaster rendering, more portable
+ Easy to paint unique details (eyes, nose on bunny)Easy to paint unique details (eyes, nose on bunny)
– Sampling artifacts; user effortSampling artifacts; user effort
PastingPasting
– Increases model complexity (Increases model complexity ( 1.6 –3)1.6 –3)
+ Huge effective resolution Huge effective resolution
+ Reuse splotch parameterization for many texturesReuse splotch parameterization for many textures
RESULTSRESULTS
Results: SplotchesResults: Splotches
(completely automatic: no direction field)(completely automatic: no direction field)
Results: AnisotropicResults: Anisotropic
Controlling Direction and ScaleControlling Direction and Scale
25 frames25 framesper sec!per sec!
256 x 256256 x 256texturetexture
(282 times)(282 times)
256 x 256256 x 256texturetexture
(282 times)(282 times)
15,000 faces15,000 faces
LimitationsLimitations
low-frequencylow-frequencycomponentscomponents
boundaryboundarymismatchesmismatches
direction field direction field singularitiessingularities
VideoVideo
Interactive Paint DemoInteractive Paint Demo
TimingsTimings
Texture patch creation: Texture patch creation: 1 min1 min
Specifying direction field: Specifying direction field: 15 min15 min
Surface patch growthSurface patch growth
Patch parameterizationPatch parameterization
Face coverage estimationFace coverage estimation
Rendering: Rendering: 25fps25fps @ 1024 @ 102422
Texture patch creation: Texture patch creation: 1 min1 min
Specifying direction field: Specifying direction field: 15 min15 min
Surface patch growthSurface patch growth
Patch parameterizationPatch parameterization
Face coverage estimationFace coverage estimation
Rendering: Rendering: 25fps25fps @ 1024 @ 102422
Preprocessing:Preprocessing:
20sec – 6 min20sec – 6 min
Preprocessing:Preprocessing:
20sec – 6 min20sec – 6 min
Pentium III 733MHz, GeForce graphicsPentium III 733MHz, GeForce graphicsPentium III 733MHz, GeForce graphicsPentium III 733MHz, GeForce graphics
Human Human efforteffortHuman Human efforteffort
ConclusionsConclusions
Effective texture-by-example through:Effective texture-by-example through:
Overlapping texture patches Overlapping texture patches
Minimal edge blending Minimal edge blending
Aligning to direction field Aligning to direction field fast optimization fast optimization
Runtime pasting Runtime pasting high effective resolution high effective resolution
Effective texture-by-example through:Effective texture-by-example through:
Overlapping texture patches Overlapping texture patches
Minimal edge blending Minimal edge blending
Aligning to direction field Aligning to direction field fast optimization fast optimization
Runtime pasting Runtime pasting high effective resolution high effective resolution
Future WorkFuture Work
Other texture types:Other texture types:
• AnimatedAnimated
• ““Thick” (volumetric) textures Thick” (volumetric) textures fur fur
• NPR renderingNPR rendering
Greater automationGreater automation
Fine-tuning patch placementFine-tuning patch placement
Other texture types:Other texture types:
• AnimatedAnimated
• ““Thick” (volumetric) textures Thick” (volumetric) textures fur fur
• NPR renderingNPR rendering
Greater automationGreater automation
Fine-tuning patch placementFine-tuning patch placement