Charge le plugin via AdditionalPluginDirectories, conserve ShowCouple et les commandlets anim côté jeu, et documente les lots S0–S8 (CHG-212 à CHG-220). Co-authored-by: Cursor <cursoragent@cursor.com>
60 lines
2.3 KiB
C++
60 lines
2.3 KiB
C++
// 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<FLPCheckCapsule> 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<FLPCheckCapsule>& 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<FLPCheckCapsule>& Trunk);
|
|
}
|