以下では物理シミュレーションの内部で用いられているアルゴリズムの詳細な設定項目について説明します.
拘束力計算エンジンは,関節や接触などの拘束を満足するための拘束力の計算を行います. 拘束力計算エンジンのクラスはPHConstraintEngineIfで,これを取得するには以下の関数を用います.
PHConstraintEngineIfのインタフェースを以下に示します.
PHConstraintEngineIf | ||
void |
SetVelCorrectionRate(double) |
関節拘束の誤差修正率を設定 |
double |
GetVelCorrectionRate() |
関節拘束の誤差修正率を取得 |
void |
SetContactCorrectionRate(double) |
接触拘束の誤差修正率を設定 |
double |
GetContactCorrectionRate() |
接触拘束の誤差修正率を取得 |
誤差修正率とは,1ステップで拘束誤差どの程度修正するかを示す比率で,通常の値を設定します. 誤差修正率を
にすると,1ステップで拘束誤差を
にするような拘束力が計算されますが,発振現象などのシミュレーションの不安定化を招く傾向があります. 逆に修正率を小
さ目に設定すればシミュレーションは安定化しますが,定常誤差が増大します.
拘束力計算エンジンは,内部で反復型のアルゴリズムで拘束力を計算します. アルゴリズムの反復回数はPHSceneIf::SetNumIterationで設定します(第7.3節参照)
PHSceneIf::SetContactToleranceで設定可能です.
.PHConstraintEngineIf::SetContactCorrectionRateで設定可能です (第7.10節参照)