// Lot AP4 (Docs/Migration/20_Chaine_Animations.md, section 4) : controles independants de la formule. // // Calcules image par image sur le clip converti, compares au mouvement source mis a l'echelle : un defaut deja // present dans le clip source n'est pas impute a la conversion. Aucun rendu. // sol : pied ou orteil plus bas que dans la source (cm, au-dela de la source) ; // glissement : pied qui bouge alors que le pied source est pose (cm par image) ; // genou : genou en hyperextension, derriere la ligne hanche-cheville, au-dela de la source (cm) ; // flexion : ecart d'angle de flexion du coude et du genou avec la source (degres) ; // saut : rotation d'un os d'une image a l'autre au-dela de celle de la source (degres) ; // penetration : main, poignet ou coude dans les capsules du tronc de l'actif physique du corps (cm). #pragma once #include "CoreMinimal.h" #include "LPPoseMeasure.h" class USkeletalMesh; struct FLPCheckCapsule { int32 Bone = INDEX_NONE; // Dans l'espace de l'os : centre, axe (unitaire), demi-longueur du segment, rayon. FVector Center = FVector::ZeroVector; FVector Axis = FVector::UpVector; float HalfLength = 0.f; float Radius = 0.f; }; struct FLPClipChecks { FString Clip; int32 Frames = 0; float Floor = 0.f; FString FloorBone; float Slide = 0.f; FString SlideBone; float KneeBack = 0.f; FString KneeBone; float FlexGap = 0.f; FString FlexJoint; float Jump = 0.f; FString JumpBone; float Penetration = 0.f; FString PenetrationBone; FString Error; }; namespace LPAnimChecks { // Capsules du tronc (bassin, colonne, poitrine) de l'actif physique du maillage du corps. TArray TrunkCapsules(const USkeletalMesh* Mesh, const FLPPose& BodyT); // Auto-test du calcul de penetration : l'articulation de l'os porteur de chaque capsule (extremite du segment), // sur le corps en pose T, doit etre a une profondeur egale au rayon. Rend l'ecart maximal (cm) ; -1 sans capsule. float SelfTest(const TArray& Trunk, const FLPPose& BodyT); // Controle un clip converti (BodyPath) contre son clip source (RefPath), a chaque image du clip converti. FLPClipChecks CheckClip(const FString& RefPath, const FString& BodyPath, const FLPPose& RefT, const FLPPose& BodyT, const TArray& Trunk); }