メインコンテンツまでスキップ

FAnimNode_KawaiiPhysics

KawaiiPhysicsのメインAnimGraphノードのAPIリファレンスです。

ソースを見る

クラス定義

USTRUCT(BlueprintType)
struct KAWAIIPHYSICS_API FAnimNode_KawaiiPhysics : public FAnimNode_SkeletalControlBase

Bones(ボーン設定)

プロパティデフォルト説明
RootBoneFBoneReference-制御対象のルートボーン(子孫ボーンも対象)
ExcludeBonesTArray<FBoneReference>-制御から除外するボーン(指定ボーンとその子孫)
AdditionalRootBonesTArray<FKawaiiPhysicsRootBoneSetting>-追加のルートボーン設定
DummyBoneLengthfloat0.0末端ボーンの回転を改善するための末端ダミーボーン長(0で無効、ClampMin=0)
BoneForwardAxisEBoneForwardAxisX_Positiveボーンの前方向軸(ダミーボーン配置に影響)
ModifyBonesTArray<FKawaiiPhysicsModifyBone>-(ランタイム / Transient)物理制御対象ボーンのキャッシュ

Bones | Bone Subdivision(ボーン分割)

プロパティデフォルト説明
BoneSubdivisionCountint320ボーン間ダミー分割数(ClampMin=0, ClampMax=10、0で無効)
bBoneSubdivisionCollisionOnlybooltrueボーン間ダミーを速度積分から除外しコリジョン/制約専用にする
bBoneSubdivisionDensifyByRadiusboolfalseBoneSubdivisionCount を最小として、ボーン間が半径に対して離れた区間ほどダミーを多く追加配置(1区間最大50本)。有効中に Radius / RadiusCurve を変更した場合はダミー数の再計算に再初期化(ABP再コンパイル等)が必要なことがある
BoneConstraintSubdivisionCountint320横方向BoneConstraintに沿ったコリジョンプロキシダミー数(ClampMin=0, ClampMax=10、0で無効)
BoneConstraintSubdivisionFeedbackScalefloat1.0bridgeダミーのコリジョン変位を端点ボーンへ伝える強度(ClampMin=0.0, ClampMax=2.0)

Physics Settings(物理設定)

プロパティデフォルト説明
PhysicsSettingsFKawaiiPhysicsSettings-物理制御の基本設定(Damping / Stiffness / Radius など)
SimulationSpaceEKawaiiPhysicsSimulationSpaceComponentSpaceシミュレーション空間
SimulationBaseBoneFBoneReference-BaseBoneSpace 選択時の基準ボーン
TargetFramerateint3260物理ステップのターゲットフレームレート(ClampMin=1)
TeleportDistanceThresholdfloat300.0この距離以上の移動でテレポート扱いにする
TeleportRotationThresholdfloat10.0この角度以上の回転でテレポート扱いにする
PlanarConstraintEPlanarConstraintNone各ボーンを平面上に拘束する
SkelCompMoveScaleFVector(1, 1, 1)コンポーネント移動を物理へ反映する際のスケール
WarmUpFramesint320ウォームアップフレーム数(bNeedWarmUp有効時)
bNeedWarmUpboolfalseウォームアップの有効化
bUseWarmUpWhenResetDynamicsbooltrueResetDynamics時にウォームアップを行う
bUpdatePhysicsSettingsInGamebooltrue毎フレーム各ボーンの物理パラメータを更新(AdvancedDisplay、無効化で軽量化)
ResetBoneTransformWhenBoneNotFoundboolfalse制御対象ボーンが見つからない場合にTransformをリセット(AdvancedDisplay)

Physics Settings | Curves(カーブ)

プロパティエディタ表示名説明
DampingCurveDataFRuntimeFloatCurveDamping Rate by Bone Length Rate減衰カーブ
StiffnessCurveDataFRuntimeFloatCurveStiffness Rate by Bone Length Rate剛性カーブ
WorldDampingLocationCurveDataFRuntimeFloatCurveWorld Damping Location Rate by Bone Length Rateワールド位置減衰カーブ
WorldDampingRotationCurveDataFRuntimeFloatCurveWorld Damping Rotation Rate by Bone Length Rateワールド回転減衰カーブ
RadiusCurveDataFRuntimeFloatCurveRadius Rate by Bone Length Rate半径カーブ
LimitAngleCurveDataFRuntimeFloatCurveLimitAngle Rate by Bone Length Rate角度制限カーブ

すべて RootBone からのボーン長比(0.0〜1.0)に応じて各パラメータへ乗算されます(AdvancedDisplay)。

Limits(コリジョン)

プロパティ説明
SphericalLimitsTArray<FSphericalLimit>球体コリジョン
CapsuleLimitsTArray<FCapsuleLimit>カプセルコリジョン
BoxLimitsTArray<FBoxLimit>ボックスコリジョン
PlanarLimitsTArray<FPlanarLimit>平面コリジョン
LimitsDataAssetUKawaiiPhysicsLimitsDataAsset*コリジョンData Asset(共有可能)
PhysicsAssetForLimitsUPhysicsAsset*コリジョンソースとして使うPhysics Asset
注記

SphericalLimitsData / CapsuleLimitsData / BoxLimitsData / PlanarLimitsData は、LimitsDataAssetPhysicsAssetForLimits から取り込んだコリジョンをプレビュー表示する 読み取り専用(Transient / VisibleAnywhere) の配列です。直接編集はできません。

Limits | Shared Collision(共有コリジョン)

プロパティデフォルト説明
bSharedCollisionSourceboolfalseコリジョンを公開する(Source)
bUseSharedCollisionboolfalse共有コリジョンを使用する(Target)
SharedCollisionGroupTagFGameplayTag-共有グループの識別タグ

Limits | Bone Constraint(ボーン制約)

プロパティデフォルト説明
BoneConstraintGlobalComplianceTypeEXPBDComplianceTypeLeather剛性タイプ
BoneConstraintIterationCountBeforeCollisionint321コリジョン前処理回数
BoneConstraintIterationCountAfterCollisionint321コリジョン後処理回数
bAutoAddChildDummyBoneConstraintbooltrueダミーボーン自動追加
BoneConstraintsTArray<FModifyBoneConstraint>-ボーン制約リスト
BoneConstraintsDataAssetUKawaiiPhysicsBoneConstraintsDataAsset*-制約Data Asset

Limits | World Collision(ワールドコリジョン)

プロパティデフォルト説明
bAllowWorldCollisionboolfalseワールドコリジョン有効化(有効にすると物理負荷が大幅に上がる)
bOverrideCollisionParamsboolfalse独自のコリジョン設定を使用する(CollisionChannelSettings のインライントグル)
CollisionChannelSettingsFBodyInstance-独自コリジョン設定(表示名: Override SkelComp Collision Params、bOverrideCollisionParams 有効時のみ)
bIgnoreSelfComponentbooltrue自己コリジョン(PhysicsAsset)を無視(編集条件: bAllowWorldCollision
IgnoreBonesTArray<FBoneReference>-無視ボーンリスト(編集条件: !bIgnoreSelfComponent
IgnoreBoneNamePrefixTArray<FName>-無視ボーン名プリフィックス(編集条件: !bIgnoreSelfComponent

Force(外部力)

プロパティデフォルト説明
GravityFVectorZeroVector重力ベクトル
bUseLegacyGravityboolfalseレガシー重力方式
bUseDefaultGravityZProjectSettingboolfalseプロジェクト設定の重力使用
bUseWorldSpaceGravitybooltrueワールド空間重力
bEnableWindboolfalse風の有効化(WindDirectionalSource の影響を受ける)
WindScalefloat1.0風のスケール(編集条件: bEnableWind
WindDirectionNoiseAnglefloat0.0風方向ノイズ(度、編集条件: bEnableWind

Force | External Force(外力プリセット)

プロパティデフォルト説明
SimpleExternalForceFVectorZeroVector単純な外力
bUseWorldSpaceSimpleExternalForcebooltrueワールド空間外力
ExternalForcesTArray<FInstancedStruct>-外力プリセット(Instanced Struct、C++で拡張可能)
CustomExternalForcesTArray<UKawaiiPhysics_CustomExternalForce*>-BP/C++オブジェクト型の外力プリセット(実験的

Force | Sync Bone(同期ボーン)

プロパティ説明
SyncBonesTArray<FKawaiiPhysicsSyncBone>同期ボーンリスト。詳細は Sync Bone を参照

Tag(タグ)

プロパティ説明
KawaiiPhysicsTagFGameplayTagフィルタリング用タグ

KawaiiPhysics(ランタイム)

プロパティ説明
DeltaTimefloatフレームのデルタタイム(BlueprintReadOnly)

主要メソッド

Initialize_AnyThread

virtual void Initialize_AnyThread(const FAnimationInitializeContext& Context) override;

ノードの初期化処理。ボーンチェーンの構築やパラメータの初期化を行います。

CacheBones_AnyThread

virtual void CacheBones_AnyThread(const FAnimationCacheBonesContext& Context) override;

ボーン参照のキャッシュ処理。

UpdateInternal

virtual void UpdateInternal(const FAnimationUpdateContext& Context) override;

フレームごとの更新処理。

EvaluateSkeletalControl_AnyThread

virtual void EvaluateSkeletalControl_AnyThread(
FComponentSpacePoseContext& Output,
TArray<FBoneTransform>& OutBoneTransforms
) override;

物理シミュレーションの評価とボーン変換の出力。

ResetDynamics

virtual void ResetDynamics(ETeleportType InTeleportType) override;

物理状態のリセット。テレポート時などに使用します。

HasPreUpdate / PreUpdate

virtual bool HasPreUpdate() const override;
virtual void PreUpdate(const UAnimInstance* InAnimInstance) override;

GameThread 上で呼ばれる前処理です。ワーカースレッドから UObject へ安全にアクセスできない処理をここで行います。

  • 共有コリジョンの初期化InitializeSharedCollision): Subsystem への登録は TMap の変更を伴うため、スレッドセーフな GameThread 側で実行されます
  • 警告ログ用の識別名(AnimInstance クラス名・コンポーネント名・オーナー Actor 名)を初回 1 回だけ収集します(AnyThread からの UObject アクセスを回避)
注記

HasPreUpdate()true を返すノードのみ PreUpdate() が呼ばれます。物理シミュレーション本体はワーカースレッド上の EvaluateSkeletalControl_AnyThread で実行され、PreUpdate は GameThread 限定の初期化・キャッシュ収集に徹しています。

IsValidToEvaluate

virtual bool IsValidToEvaluate(
const USkeleton* Skeleton,
const FBoneContainer& RequiredBones
) override;

ノードが評価可能かを判定します。

GatherDebugData

virtual void GatherDebugData(FNodeDebugData& DebugData) override;

デバッグ情報の収集。

NeedsDynamicReset

virtual bool NeedsDynamicReset() const override { return true; }

ResetDynamics(テレポート対応)が呼ばれるよう常に true を返します。

ランタイム再初期化

RequestModifyBonesReinit / RequestSharedCollisionReinit

void RequestModifyBonesReinit();      // 次回Evaluateでボーンチェーンを再構築
void RequestSharedCollisionReinit(); // 次回Evaluateで共有コリジョンを再初期化

ランタイムでトポロジやコリジョン構成に影響する設定を変更した際に、安全な再初期化を予約します(フラグを立て、次回の Evaluate で実行)。UKawaiiPhysicsLibrary の各 Setter から内部的に呼ばれます。

座標変換ヘルパー

GetBoneTransformInSimSpace

FTransform GetBoneTransformInSimSpace(
FComponentSpacePoseContext& Output,
const FCompactPoseBoneIndex& BoneIndex
) const;

ボーンのTransformをシミュレーション空間で取得します。

ConvertSimulationSpaceTransform

FTransform ConvertSimulationSpaceTransform(
FComponentSpacePoseContext& Output,
EKawaiiPhysicsSimulationSpace From,
EKawaiiPhysicsSimulationSpace To,
const FTransform& InTransform
) const;

シミュレーション空間間でTransformを変換します。型ごとに以下のバリエーションがあります。

FVector ConvertSimulationSpaceVector(...) const;     // 方向ベクトルの変換
FVector ConvertSimulationSpaceLocation(...) const; // 位置の変換
FQuat ConvertSimulationSpaceRotation(...) const; // 回転の変換
void ConvertSimulationSpace(FComponentSpacePoseContext& Output,
EKawaiiPhysicsSimulationSpace From, EKawaiiPhysicsSimulationSpace To); // 全ボーンを一括変換

型リファレンス(Enum / Struct)

主要なプロパティが参照する列挙型・構造体の定義です。

FKawaiiPhysicsSettings

物理制御の中心となる設定構造体です(PhysicsSettings プロパティ)。Damping(揺れやすさ)と Stiffness(戻りやすさ)のバランスで全体の柔らかさが決まります。各メンバーはボーン長比に応じてカーブ(DampingCurveData 等)で補正できます。

メンバーデフォルト範囲説明
Dampingfloat0.10以上減衰度。小さいほど加速度が強く反映され、よく揺れる
Stiffnessfloat0.050以上剛性度。大きいほど元のポーズ(アニメーション)を強く維持する
WorldDampingLocationfloat0.80以上コンポーネント移動の反映抑制。0=フル反映(最大に揺れる)/1=追従(揺れなし)。反映率 = 1 - 値
WorldDampingRotationfloat0.80以上コンポーネント回転の反映抑制(上と同様、反映率 = 1 - 値
Radiusfloat3.00以上各ボーンのコリジョン半径(エディタ表示名: Collision Radius)
LimitAnglefloat0.00以上物理挙動による1ステップあたりの回転角度の上限(度)。0で無制限、荒ぶり抑制に有効
注記

WorldDampingLocation / WorldDampingRotation は名前に反して 値が大きいほど揺れは小さく なります(1 でコンポーネントに完全追従=揺れなし)。

各メンバーの詳しい解説と図解は 物理パラメータ を参照してください。

EKawaiiPhysicsSimulationSpace

説明
ComponentSpaceスケルタルメッシュコンポーネント基準(デフォルト)
WorldSpaceワールド基準。ルートボーンの急激な移動による問題を回避
BaseBoneSpace指定した基準ボーン(SimulationBaseBone)基準

EPlanarConstraint

説明
None制約なし(デフォルト)
XX軸平面に拘束
YY軸平面に拘束
ZZ軸平面に拘束

EBoneForwardAxis

X_Positive(デフォルト)/ X_Negative / Y_Positive / Y_Negative / Z_Positive / Z_Negative

EXPBDComplianceType

Bone Constraint の剛性マテリアルタイプ(BoneConstraintGlobalComplianceType)。

Concrete / Wood / Leather(デフォルト)/ Tendon / Rubber / Muscle / Fat

ヒント

コリジョン形状(FSphericalLimit 等)や Sync Bone(FKawaiiPhysicsSyncBone)、Bone Constraint(FModifyBoneConstraint)の各メンバー詳細は、機能別ページを参照してください。

使用例

Animation Blueprintでの基本的な使用方法:

  1. AnimGraphにKawaiiPhysicsノードを追加
  2. RootBoneを設定
  3. PhysicsSettingsでDamping/Stiffnessを調整
  4. 必要に応じてコリジョンを追加
// C++からのアクセス例
FAnimNode_KawaiiPhysics* Node = ...;
Node->PhysicsSettings.Damping = 0.2f;
Node->PhysicsSettings.Stiffness = 0.1f;
Node->Gravity = FVector(0, 0, -980.0f);

関連