thesis - Computer Graphics Group - Charles University - Univerzita ...
thesis - Computer Graphics Group - Charles University - Univerzita ...
thesis - Computer Graphics Group - Charles University - Univerzita ...
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