Project 2 Summary ========================================== The goal of my second project was to implement a motion graph structure into the existing MotionProcessing library. Although I haven't done a full implementation of the Motion Graph paper, here is a summary of the pieces I've completed: 1. Find candidate transition points between two motions. Two motions are selected by the user and a function determines the "distance" between each frame of the two motions. The result is an NxM listing (N frames in motion 1, M frames in motion 2) where (i, j) is the minimal weighted sum of least squares between frame i of motion 1 and frame j of motion 2. The full list of values is outputted to a text file. To test for correctness, I used a control of finding distances between two motions that were identical. Predictably, (m, n)=0 where m=n. 2. Selecting local minima from candidate transition points. Two methods were used to try finding a subset of actual transition points from the full set of candidates. The first was to set a threshold value and select all points below that threshold. However, since this would select too many adjacent points, a graph walk was performed to isolate the local minimas. The method I used tended to work well at finding the local minima when clusters of points that were all below the set threshold value were disjoint. However, the method was not so good at handling cases where multiple dips tended to run together under the threshold line. In these cases, my traversal would always converge on the first local minima it found and never see any of the succeeding ones. The solution to this problem, of course, was to lower the threshold value until these run-togethers didn't happen. The second method I used was a more bottom-up approach, which was to merely select a static number of the lowest-distance transition points. For this, I simply loop through all candidate transition points and select the k smallest values, regardless of position in the graph. It isn't clear to me if either of these methods are good for selecting transition points. Clearly, tuning the threshold value and determining how to select actual transition points from the subset falling under the threshold is a problem that needs further consideration. 3. Visualization of a motion transition. As a "visual" test of how well the transition points were being determined, I outputted a new motion in BVH format that does a cut transition between motion 1 and motion 2 at one of the transition points. The selection of the transition point was done manually based on numerical value and the actual original motions I was using. I spent a great deal of time trying to debug what I believed to be anomolies in some of the transition points I selected. For instance, some transition points would produce new motions that were "rougher" than their numerical distance value would seem to predict. At the moment, I am in the process of implementing a better blend transition between motions, which might help clear up these visual "rough edges."