From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Blender Rigid Body Constraints Project Proposal

December 2011

Project Manager: Kesten Broughton

Proposed Reviewers: Benoit Bolsee, Moguri

About Rigid Body Constraints:

Rigid-Body Constraints are used to model various types of joints between bones in an armature or blocks in a linked rigid-body. Some constraint types available include hinges, slide-rails, point-to-point, cone-twist and 6 degree-of-freedom (translation/rotation) springs. Higher level systems like Inverse Kinematics can be used in combination with specific parameters (limits, stiffness) for various rigid-body constraints to create realistic motion while controlling only the end-point target.

Proposed Changes to Blender 2.6
Core:
  1. ConeTwistJoints
    1. Expand Bullet features for ConeTwist parameters (softness, biasFactor, relaxationFactor)
    2. Possibly impliment ConeTwist motor functionality, currently latent in Bullet
    3. Change ConeTwist GUI to correct parameters (currently same as 6DOF; change x,y,z to twistSpan, swingSpan1,2)

  2. General RigidBodyConstraints Enhancements
    1. Gather feedback on proposal from #blendercoders, #blenderpython and email lists
    2. Create a Blender Projects page for on-going enhancements to RigidBodyConstraints
    3. Advertise on blenderartists.org to submit all potential bug reports and wishlist for RBconstraints
    4. Expose Debug info that shows constraints in Blender as in Bullet ConstraintsDemo
    5. Investigate possible bugs (below) and patch where needed
    6. Expose more bullet parameters in the Blender Python API (ERP, CFM, motorized springs)
    7. Create c++ unitTests to eplore behaviour on boundary cases, performance profiles etc
    8. Map out reasonable parameters for various constraint types and use cases
    9. Provide support for BRIK project which auto-generates IK on armatures

  3. Documentation and Dissemination
    1. Maintain project diary pages documenting progress
    2. Create .blend test files for two use-cases (character and physical-wire) showing diffs between constraint types
    3. Search on existing sources for blender constraints docs/videos; encourage them to update their work
    4. Update wiki pages (PyAPI, manual, reference) to 2.6, + recommended parameter settings
    5. Create a video series on RigidBodyConstraints, published to Hostile Studios BGE training site
Extra:
  1. Polish API and GUI for other RigidBodyConstraint types
  2. Integrate new work with other modules such as Inverse Kinematics
  3. Create on-line Maple tutorial to explain the math behind the constraint. Explore, compare, improve
  4. Propose to bf-educators that the new learning resources be used in BGE training modules
  5. Test-drive various constraintSolver options within and beyond Bullet's existing ones
  6. Add/verify library, load and export capabilities for joints and joint constraints
  7. Add backwards-compatibility handling if any relevant RBconstraint info is stored in .blend files
  8. Explore use of soft-body for 1d applications (stiff wire...); see how it compares to chained constraints
  9. Create handler for geometry with units/bones not linked along x-axis. (ConeTwist assumes x-axis)

Possible Bugs:

A patch was added that wrapped the rigid body joint constraint limits in RNA and allowed them to be set through Python, however the converter that translates Blender data to Blender Game Engine data appears to not function where rigid body joint constraints are concerned. by FunkyWyrm

While experimenting, I found that the stiffness has no effect because of the limit settings: as soon as the joint is beyond the limit value, the stiffness code is replaced by a limit code that seems broken. The result is no stiffness and no limit at all. You can see the effect of stiffness and spring damping if you put large angle limit (e.g. 2 radiant) so that they don't come in effect. Not too high stiffness seems to produce a decent stiffness effect. Spring damping seems ineffective, high damping just produces spurious vibration. by Benoit Bolsee


Primary Files to be changed:
in Bullet
btConeTwistConstraint.cpp
in Blender
/source/gameengine/Converter/BL_BlenderDataConversion.cpp
CcdPhysicsEnvironment.cpp