Gone in 50 Seconds - Effect Pipeline
1. Capture Footage
Film the same scene from multiple cameras (at least two). Be sure to include an indicator that is visible in both cameras so that you can line up the frames (we often used a hand-clap). Once footage is captured and lined up, extract the images between which you will perform your morph (see below).These images had their foregrounds rotoscoped out to make the morphs a little more crisp, however this step is not necessary.
A zipped file of the two .BMP images for testing purposes can be downloaded here:
images.zip
2. Pick Correspondence Points
Use our Point Picking Utility (using this updated main.cpp belonging to the Viper Toolkit) to pick your correspondence points between the two images. This utility will ask you to open a .CPJ file which will be of the form:
[Project]
NumberOfPicturePairs=1
ProjectType=DublePoints
[Pair1]
Image1=left_image.bmp
Image2=right_image.bmp
NumberOfPoints=20
[Points1]
LX0=16
LY0=98
RX0=217
RY0=142
...
Where the first point clicked on the left image, left_image.bmp, is (16, 98) and the corresponding point on the right image, right_image.bmp, is (217, 142). We've included a sample .CPJ file sample.cpj to use in conjunction with the two images in step 1. This program will create two files, specLeft.txt and specRight.txt, which will be the individual points picked for the respective images. You will need to take these points and then add them to the .CPJ file.
3. Create Virtual Images
Once the correspondence points have been picked, you need to use our VirtualCam utility to generate the virtual cameras between the two physical cameras. A zipped file of the Microsoft Visual C++ workspace can be found here: VirtualCamCode.zip. VirtualCam takes in a file similar to the .CPJ files, but the extension is .MORPH and they take the following form:
[Project]
NumberOfFiles=2
[Files]
File1=ABSOLUTE_PATH\sample.cpj
File2=ABSOLUTE_PATH\sample.cpj
For each .CPJ file listed (see above for the format of these files), VirtualCam will perform a morph on the images and correspondence points listed within these files. It will also evenly separate the virtual cameras, so that the sweep is fluid. Therefore, if you wanted a virtual camera sweep that was static (when a person reaches the peak of a jump, etc.), you would include the same .CPJ file for each file listed (like the above example). If you wanted the action moving while the morph took place, you would need a separate .CPJ file for each set of frame pairs, which would include a unique set of correspondence points for each. You would then list these .CPJ files in the .MORPH file in the proper order. A sample file, sample.morph, can be used for testing purposes.
VirtualCam will generate, for each "File" line listed in the .MORPH file, a virtual camera image sequentially named "VirtualCamera_1.bmp," "VirtualCamera_2.bmp," etc. The first resulting image from the sample.morph file looks like so:
You can see there are some hand touch-ups necessary.
4. Final Editing
Once the virtual camera shots are made, you then must order them, along with the real shots, to give the effect of a camera sweep. You can do this using your favorite editor (Premiere, After Effects, Final Cut Pro, etc.). In our case, we then did an image morph using WinMorph of the background plates and composited the foreground view morph to give the final effect. For each pair of real camera shots (of which we had 20), we generated 2 artificial shots in between, yielding 58 frames, or roughly 2 seconds.An mpeg of our final production will soon be made available here.
Link to this Page
- DVFX2003: Groups last edited on 1 May 2003 at 4:53 pm by davinci.cc.gatech.edu