Sunday, February 26, 2017

Inverse Kinematics

Sorry for the late post! But I was blown up by a bunch of information from the classes introducing IK.

Different Jacobian methods were introduced , together with the advantages and disadvantages for each. I found it interesting that the new expression in the Damped Pseudoinverse Method not only enables the balance between oscillations and convergence rate, but also provides a nullspace approach to prioritize the movements.

There are also CCD and FABRIK methods. I think these two methods look more friendly, because they deals with vector coordinate space directly. They are not only easier to understand and implement, but they are also faster. Although their performance might not be enough in some cases, they should be very useful in game industry where efficiency is more important than absolute quality, and I really appreciate their beauty of simplicity.

Simulation!

I'm so excited that our course has finally moved on to simulations! We used a 1-hour-20-minute class to cover most of the basics of simulation, from the fundamental Euler method for particle simulation to dealing with rigid body and resolving conflicts. For the series of Euler methods, the basic steps are easy to understand: First we know particle's current position x and time step t. Next we take the derivative of x and t to get the velocity. Then we get the force adjusted from environment change to get the acceleration a from the formula f = ma. After that, we can have the changed velocity and then calculate the position at next time step t+1.  The recommended RK4 method (the Runge Kutta Method) is like the advanced version of Euler's Midpoint Method. The difference is that RK4 takes more calculation points and is a forth-order method, so it is more accurate due to less truncation.

For dealing with rigid body, the rotation and angular velocity are added to the matrix. It surprised me again that quaternion can always solve the rotation matrix problem.

Another recommended method is Implicit Euler Method. I didn't quite understand it during the class, but I later understood that it evaluates the velocity function at the end of the time step, so assume the particle as reached the position after the time step, evaluate the function so that the particle can trace back to the original position. This is used to avoid stiff situation, where large k is present, so small h is desired, which might result in unstable solution if we use explicit Euler Method. This was explained clearly in David Baraff's course notes.

I appreciate the pertinent course materials, and I look forward to knowing more details of simulation technology!

Sunday, February 5, 2017

Motion Capture Lab

Last Monday, we visited the Motion Capture Lab of CMU. It was the first time I've seen a real-time demo of motion capture.

It was just amazing to look at the instantly rendered model moving as the researcher moves. I've also looked at the markers closely. They are just spheres made from plastic. Nothing fancy. But there are surprisingly many sizes for them. At first, I was wondering how does the system distinguish markers of different sizes from such a long distance when they are used at the same time. And I found the answer later: the system need not distinguish different markers. As long as it recognizes the marker, it works to capture the motion of that point. On the other hand, for general purposes, larger markers are preferred, because they are easier to be spotted no matter from which direction. The smaller markers are used only in special cases to deal with sophisticated motions, like for hands or facial expressions. In this case, some special preparations and processes might be needed, so it's likely that markers with large size difference are not used at the same time. Well, I might need some citations here to prove my assumption.

I also got some fun facts about motion capture in this trip. I didn't know that static objects can be motion captured too. And it is actually preferred to capture the objects in the scene to determine the positions for the models later. Sometimes, the motion captured is totally different from what we see in the final animation work. For example, the motions of a dog and the motions of infants in the animation are all from motions captured from adult human actors. Also, additional facilitators are used to invigorate the motions. For instance, toggle the ball to an elastic string to enhance its bounciness.

The mocap lab is also cooperating with robotics lab to capture human motions for programming the robot motions. I think while this is a good way to make the movements more natural, ie. more like human, it might not be as effective as expected. Human body movement seems natural because the movements are generated naturally from the body structure. It might hardly seem natural for the robot with different body structure from human. Also, the weight distribution of the robot should be very different from human, so it is challenging to maintain its balance with human motion embedded.

In a nutshell, it was a fun experience to visit the lab. I hope I will get a chance to try it out for my project in the near future.