410 likes | 544 Views
Pixmotor: A Pixel Motion Integrator. Ivan Neulander Rhythm & Hues. What is Pixmotor ?. A 2D motion blur solution at Rhythm & Hues Makes motion-blurred images based on static images generated by 3D renderer. Garfield: A Tail of Two Kitties. Night At The Museum. What is Pixmotor?.
E N D
Pixmotor:A Pixel Motion Integrator Ivan Neulander Rhythm & Hues
What is Pixmotor? A 2D motion blur solution at Rhythm & Hues • Makes motion-blurred images based on static images generated by 3D renderer Garfield: A Tail of Two Kitties Night At The Museum
What is Pixmotor? A 2D motion blur solution at Rhythm & Hues • Makes motion-blurred images based on static images generated by 3D renderer • Not a physically correct but plausible • Incorporates heuristics to minimize artifacts Garfield: A Tail of Two Kitties Night At The Museum
What is Pixmotor? A 2D motion blur solution at Rhythm & Hues • Makes motion-blurred images based on static images generated by 3D renderer • Not a physically correct but plausible • Incorporates heuristics to minimize artifacts • Fits well into our production pipeline • Render objects separately, combine in comp • Zero-centered shutter minimizesinterpolation distance from static frame Garfield: A Tail of Two Kitties Night At The Museum
What is Pixmotor? A 2D motion blur solution at Rhythm & Hues • Makes motion-blurred images based on static images generated by 3D renderer • Not a physically correct but plausible • Incorporates heuristics to minimize artifacts • Fits well into our production pipeline • Render objects separately, combine in comp • Zero-centered shutter minimizesinterpolation distance from static frame Garfield: A Tail of Two Kitties Night At The Museum
Motivation • Processing Speed • Invariant of geometric complexity: Typical 2k element completes in under 1 minute • Many speed/quality controls for interactive testing
Motivation • Processing Speed • Invariant of geometric complexity: Typical 2k element completes in under 1 minute • Many speed/quality controls for interactive testing • Art Direction • Tweak shutter per-frame without rerendering • Vary motion blur within a frame shutter/2 shutter shutter x 2 shutter x 3
Motivation Diffuse Reflection Shader • In-Compositor Shading • For static frames: • Renderer outputs images ofnormals, positions, etc.;compositor does shading Normals Output
Motivation Diffuse Reflection Shader • In-Compositor Shading • For static frames: • Renderer outputs images ofnormals, positions, etc.;compositor does shading • For motion-blurred frames: • Motion blurring data imagesin renderer is incorrect Normals Output Ground truth
Motivation Diffuse Reflection Shader • In-Compositor Shading • For static frames: • Renderer outputs images ofnormals, positions, etc.;compositor does shading • For motion-blurred frames: • Motion blurring data imagesin renderer is incorrect • Using pixmotor allows doingshading on static images Normals Output Pixmotor Ground truth
Pixmotor Data Flow Color Input Motion Input Pixmotor Settings Depth Input
Computing Motion Vectors • When shading a triangle at barycentric point (,,):Compute NDC motion vector asPNDC(,,){ShutterClose} - PNDC(,,){ShutterOpen} Shutter Open Shading Moment Shutter Close
Implementation:Overview • Discretize motion into a set of slices • Each slice = particular moment within shutter span • Total number of slices depends on maximum motion vector • User sets maximum pixel separation between slices • Compute each slice and add it to accumulation buffer
Implementation:Overview • Discretize motion into a set of slices • Each slice = particular moment within shutter span • Total number of slices depends on maximum motion vector • User sets maximum pixel separation between slices • Compute each slice and add it to accumulation buffer 1 slice 3 slices 7 slices 52 slices
Implementation:Main Loop • For each slice: • Copy each pixel from source image to a work buffer, shifting its coordinates based on motion vector
Implementation:Main Loop • For each slice: • Copy each pixel from source image to a work buffer, shifting its coordinates based on motion vector • Resolve occlusion for overlappingpixels using depth info
Implementation:Main Loop • For each slice: • Copy each pixel from source image to a work buffer, shifting its coordinates based on motion vector • Resolve occlusion for overlappingpixels using depth info • Holes form due to divergent motion Use hole-filling heuristics
Implementation:Main Loop • For each slice: • Copy each pixel from source image to a work buffer, shifting its coordinates based on motion vector • Resolve occlusion for overlappingpixels using depth info • Holes form due to divergent motion Use hole-filling heuristics Pixmotor Single-slice interpolation Single-res WBno hole fill Double-res WB,no hole fill Double-res WB,with hole fill Static Image
Implementation:Hole-Filling Heuristics • Before Main Loop: • Blur motion image (optionally) • Filter kernel must ignore empty pixels
Implementation:Hole-Filling Heuristics • Before Main Loop: • Blur motion image (optionally) • Filter kernel must ignore empty pixels • Compute motion image gradient • Force high gradient at image edges
Implementation:Hole-Filling Heuristics • Before Main Loop: • Blur motion image (optionally) • Filter kernel must ignore empty pixels • Compute motion image gradient • Force high gradient at image edges Motion Gradient Result Blur = 0 Blur = 3 pixels Blur = 10 pixels Blur = 60 pixels
Implementation:Hole-Filling Heuristics • During Main Loop: • Identify holes as empty pixels near high-gradient regions • Fill holes with nearby solid neighbors along motion path
Implementation:Hole-Filling Heuristics • During Main Loop: • Identify holes as empty pixels near high-gradient regions • Fill holes with nearby solid neighbors along motion path • Solid pixels at image edges are always presumed holes
Implementation:Hole-Filling Heuristics • During Main Loop: • Identify holes as empty pixels near high-gradient regions • Fill holes with nearby solid neighbors along motion path • Solid pixels at image edges are always presumed holes StaticImage Hole Fill: off [demo] MotionGradient Hole Fill: on
Implementation:Hole-Filling Heuristics • After Main Loop: • Option to fix matte for remaining holes: Unpremultiply partial pixels with solid neighbors(distance along motion vector times user constant) • Helps create a solid matte where needed for compositingBut: can harden some soft edges
Implementation:Hole-Filling Heuristics • After Main Loop: • Option to fix matte for remaining holes: Unpremultiply partial pixels with solid neighbors(distance along motion vector times user constant) • Helps create a solid matte where needed for compositingBut: can harden some soft edges FixMatte: 0.0 FixMatte: 1.0
Results • No overlap or transparency: excellent 3D Motion Blur Pixmotor
Results • No overlap or transparency: excellent • With overlap or transparency: not so good 3D Motion Blur Pixmotor
Motion-Blurred Shadows:Our Approach • Need to store partial occlusion in depth map use matte channel Matte Depth
Motion-Blurred Shadows:Our Approach • Need to store partial occlusion in depth map use matte channel • Process depth, matte channels using Pixmotor Motion Pixmotor Matte Depth
Motion-Blurred Shadows:Our Approach • Need to store partial occlusion in depth map use matte channel • Process depth, matte channels using Pixmotor • Use unpremultiplied values for depth • Depth map camera settings are unmodified Motion Pixmotor Matte Depth Matte Depth
Frustrations & Future Work • Transparency, occlusion artifacts use more fragments per pixelBut: speed will suffer • Nonlinear motion (e.g. propeller) Use acceleration + velocity for motion • Memory-hungry on deep inputs Process channels in batchesBut: counteracts multithreading • Apply to reflections, refractions • Compute motion vectors for these
Demo Video • Real-time capture of interactive Icy session on aquad-CPU Opteron 2200demo
Thank You • Jonathan Robbins • Martin Ryan www.rhythm.com/~ivan/pdfs/sketch2007.pdfwww.rhythm.com/~ivan/pub/sketch2007.ppt