10.08.2013 Views

thesis - Computer Graphics Group - Charles University - Univerzita ...

thesis - Computer Graphics Group - Charles University - Univerzita ...

thesis - Computer Graphics Group - Charles University - Univerzita ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

110 CHAPTER 9. RESULTS<br />

in the reduction of the total computational cost. Each simulation group’s equations of motion are<br />

integrated using an own ODE solver with a different time step, adapted to the states of bodies<br />

in the simulation group. The simulator ensures that simulation groups are merged whenever<br />

required, ensuring the simulation consistency (bodies that might interact are always simulated<br />

in terms of a common simulation group, individual ODE solvers due to simulation groups are<br />

advanced in a controlled way, making sure that all simulation groups end up at the same time and<br />

allowing to rollback the whole simulation state when a certain ODE solver can not advance to a<br />

desired time or a request to merge simulation groups is detected while advancing the simulation).<br />

As far as we know, this is a unique feature, not implemented in other publicly available (free)<br />

simulators, yet very useful as it allows to “skip” simulation groups consisting of “idle” bodies<br />

when advancing the simulation state.<br />

The other simulator component we value the most is the global constraint solver. Simulator<br />

library user specifies various constraints on rigid bodies that have to be met (geometric constraints<br />

that implement virtual joints, hinges, pins, joint angle limits, velocity constraints, etc)<br />

and the constraint solver computes appropriate constraint forces or impulses ensuring that the<br />

constrained bodies will obey both the constraints and the Newton laws. Apart from explicit<br />

(usually permanent) constraints, the simulator imposes implicit short-lived constraints to enforce<br />

body non-penetration and implement friction at contacts. Constraints are formulated as<br />

position-level, velocity-level or acceleration-level equations, either as equalities or inequalities,<br />

and implemented on the velocity or acceleration levels. The implementation of a Lagrange multiplier<br />

based solver capable of handling highly constrained articulated structures, whose equations<br />

of motion are solved in the linear time, is provided, offering an efficient alternative to reduced<br />

coordinates approaches used to simulate loop-free articulated structures.<br />

Various test scenes exercising certain simulator features and testing the performance capabilities,<br />

precision and robustness of the simulator and its components are implemented. Moreover,<br />

library self-tests are provided to assure that the library works as expected and does not break<br />

during its development. The tests can be run by the user to see how well the simulator performs,<br />

which we find more valuable than presenting the results of stark measurements.<br />

To manifest the performance capabilities and the fitness of the simulator to handle “serious”<br />

problems, the demo application presenting the features of the figure library and serving as a<br />

“front end” to the test library is implemented. Demonstration scenes show how figure motion,<br />

driven by translational or rotational motion capture data, can be adapted to external influences,<br />

edited or retargetted to different characters in terms of rigid body dynamics and how easily<br />

certain classes of problems, that are hard to deal with on the kinematics level, can be solved<br />

using a physical model.<br />

9.1 Tests<br />

The purpose of the test library is to provide appealing demonstration scenes that exhibit certain<br />

simulator features, realize various performance, stability or simulation/integration precision experiments<br />

or simply test the integrity of the simulator components. Depending on the type of the<br />

functionality to be tested and whether the tests are batch or interactive, the tests are separated<br />

to several test categories.<br />

Self-tests (“regression tests”, “unit tests”) are batch tests that invoke simulator services and<br />

verify that the service responses match the expected results. Due to the nature of these tests,<br />

self-tests mostly test various numerical algorithms or those services where the verification of the<br />

response was easy to implement. The most important self-tests (that proved to be extremely

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!