Title: OrderIndependent Texture Synthesis
1Order-Independent Texture Synthesis
Gcafe 1/30/2003
2Previous Work
- Statistical Synthesis
- general, requires only a sample
- cannot be evaluated randomly on the fly
- Procedural Synthesis
- evaluation on the fly (e.g. Perlin noise)
- efficient
- less general, hard to set parameters
3Goal
- Combine Advantages from both Camps
- general as statistical methods
- generate new textures from a given example
- flexible as procedural methods
- evaluate texels on demand
- result always identical regardless of evaluation
order
4New Algorithm
- Key Ideas
- multiple generations
- neighborhood contains only old values
- lower generations, lower resolutions
- pyramidal cache
- Details
- see the paper (4 pages only)?
5Example
Generation 2
Generation 1
Generation 0
6Example
7Single Polygon
19 requested 23 computed
Rendering
Mipmap Texture
8Quake
Texture 64 ? 64 Unnatural repetition
Texture 512 ? 512 Less repetition
9Ray Casting
Scene
Texture
10Simulation Result
11Future Work
- Implementation as fragment shader?
12End
13(No Transcript)
14Overview
- Procedurally Statistical Texture Synthesis
- algorithm
- architecture
- Applications
- procedural shader
- interactive tools
- texture mapping hardware
15Texture Mapping
- Bottleneck in graphics pipeline
- computation
- texture memory access
- Solutions
- caching
- pre-fetching
- compression VQ
texture
image
16Texture Synthesis
Texture Synthesis
Input
Result
17How It Works
noise
18Goal
- Combine advantages from both camps
- general
- independent texel evaluation
19Order-Independent Texture Synthesis
- Simple modifications of our old algorithm
- evaluate pixel in any order
- consistent result (given the same initial value)
- time complexity depends only on neighborhood size
(not on output texture size) - interface much like procedural synthesis
- greater flexibility
- more computation
20Problem with Old Algorithm
dependency graph
level row col 0 -1 0 0 1 0
0 0 -1 0 0 1 -1
0 0
cycles in the dependency graph!
21New Algorithm
dependency graph
Keep multiple generations Acyclic dependency graph
level row col generation 0 -1 0 -1
0 1 0 -1 0 0 -1 -1 0
0 1 -1 -1 0 0 newest
22Implementation Cache
- no full pyramid required, use cache instead
- output determined solely by lowest resolution
23Algorithm
evaluate (levelL, row x, col y, generation
g)
1. If in cache, return it
2. Collect neighborhood
level row col generation L x-1 y
g-1 L x1 y g-1 L x y-1
g-1 L x y1 g-1 L-1 x y g
Cached?
evaluate (L, x-1, y, g-1)
3. Find best match
24Cache Footprint Single Pixel
25Cache Footprint S
26Cache Footprint Sphere
27Cache Footprint Random
28Cache Footprint Single Pixel
1148 pixels!
29Cache FootprintPoisson Points
30Cache FootprintCircular Pattern
31Cache Usage Statistics
random
sphere
Percentage of cache used
ideal (linear)
Percentage of input requested
32Cache Coherence
33Quality Comparison
old
new
34Quake
44 requested 48 computed
Input
Texture 64 ? 64
Texture 512 ? 512
35QuickTime VR
invisible
Input
Original
Result
36Simulation Result
37Architecture Design
38Pitfalls
- not feasible for current hardware
- can only be applied to repeating patterns
39Finished Work
- Verification using an infinite cache
40Ongoing Work
- Measuring and understanding various parameters
- cache size, associativity, replacement policy
- evaluation order for missing pixels (register
allocation) - benchmarking
- Combination with patch-based texture synthesis
- patch boundaries?
- complicate caching behavior
41(No Transcript)
42Motivation
- Texture mapping is important
- Texture mapping can be a bottleneck
- Solution Texture Mapping by Synthesis
43Hardware Trend
- ? Computation gtgt ? Memory Speed
- Transform memory access into computation