当前位置:网站首页>Ozzanation - système d'action basé sur sse

Ozzanation - système d'action basé sur sse

2022-06-12 02:02:00 Vt Li

Introduction:

ozzanimationEst d'utilisersseC'est - à - dire avecsimdTraitement sous forme d'instruction unique et de données multiplesanimationChangement de mouvement、Convertir les coordonnées etikLa façon dont les choses sont traitées.Peut être plus rapide que la transformation matricielle directe traditionnelle.

sample_additive.ccEst l'exemple le plus simple

 

Initialisation

OnInitializeInitialisation,LoadSkeletonCharger les os,LoadAnimationCharger l'animation,context_.ResizePour déterminer la taille de l'échelle de rotation de la traduction,locals_.resizeDéterminer la taille des données pour l'espace local,models_.resizeDéterminer la taille des données dans l'espace Modèle,blended_locals_.resizeDéterminer la taille du mélange spatial local.

simdMise à jour de la matrice d'action

Le noyauOnUpdateAnimation en,controller_.UpdateDéfinir le rapport des actions de lectureratio,Adoptionozz::animation::SamplingJobPour définir les données d'action et spécifier la sortie verslocals_.Adoptionsampling_job.RunPour effectuer l'échantillonnage des données d'action,UpdateCacheCursor Est l'emplacement du pointeur pour mettre à jour le cache ,Et puisUpdateInterpKeyframes Est d'obtenir une valeur numérique spécifique par l'index de la position du pointeur , Puis PAN et zoom passent par DecompressFloat3Pour obtenirsimdValeur calculée, L'échelle est Quaternion, donc DecompressQuaternion.

Après avoir obtenu les données de la rotation de l'échelle de traduction ,InterpolatesPour interpoler, L'interpolation passe aussi par simdPour l'exécuter..Produit final versoutput.

Tout ce qui précèdeSamplingJob Ce qui est fait dans .

Mélanger:

Ensuite, s'il y a plusieurs niveaux de mélange ozz::animation::BlendingJob::Layer Obtenir les données de la couche ,Et puisozz::animation::BlendingJobPour mélanger,InBlendingJob::Run()Moyenne

 

D'abordBlendLayers, Il a deux façons de se mélanger , Un mélange unidimensionnel ,Exécution directeOZZ_BLEND_1ST_PASS, L'autre est multidimensionnelle OZZ_BLEND_N_PASS.

Et puisBlendRestPose, Ici, si le poids cumulé est inférieur au seuil , Mélanger la pose de repos à la sortie .

Et puisNormalize, Rotation de sortie normalisée . La longueur Quaternion ne peut pas être nulle , Parce que pendant le mélange , La longueur relative du Quaternion est fixée . La traduction et l'échelle ont été normalisées , Parce que les poids ont été pré - multipliés par le rapport normalisé .

Et puisAddLayers, Il s'agit de savoir si chaque couche doit être ajoutée au mélange , Ou supprimer le mélange .

Enfin, il faut l'exécuter ozz::animation::LocalToModelJob Pour convertir en espace Modèle ,

Puis il est affiché dansOnDisplayAdoptiongl Pour montrer un modèle ou un os ,shaderLe Code est écrit directement dans

 

Dans ces classes, .

Les opérations cutanées connexes, etc., sont des méthodes traditionnelles .

Version multithreadée:

sample_multithread.ccMoyenneParallelUpdate Est l'acte d'exécuter un rôle de mise à jour ,grain_size Combien d'objets sont traités en parallèle , Si la quantité est dépassée, passer std::async Choisissez une approche asynchrone std::launch::async, Il va exécuter sur un autre fil .ParallelUpdate.

 

Et puisUpdateCharacterMoyen ou moyensimdMise en œuvreSamplingJobEtLocalToModelJob.

原网站

版权声明
本文为[Vt Li]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/163/202206120157386759.html