2010-05-28 14 views
2

Je travaille avec physx (en essayant d'ajouter ik à ragdoll) pour le moment. Pour une raison quelconque, toutes les articulations ragdoll sont sans frottement, et par conséquent, ragdoll ont tendance à "osciller", surtout quand il est suspendu dans l'air et est connecté à plusieurs acteurs cinématiques en mouvement.PhysX: Joint de friction/joints "rigides"

Je voudrais ajouter de la friction aux joints et les rendre «rigides». Imaginez une porte (avec charnière extrêmement rouillée) qui doit être frappée plusieurs fois pour être ouverte - c'est-à-dire qu'elle tourne autour de la charnière, mais pas beaucoup, s'arrête rapidement, et une grande force est nécessaire pour la faire tourner. Ou pensez à des mannequins d'art (voir les images de Google pour les photos) - leurs membres se déplacent, mais ils ne se balancent pas librement.

Malheureusement, je ne trouve rien qui soit lié à la friction des joints dans physx. J'ai vérifié la documentation, google et les en-têtes, et je n'ai rien trouvé d'utile. Alors, comment puis-je mettre en place des joints rigides/friction de joint avec physx? (Je pense) J'ai vu des jeux physx sans ce problème, donc apparemment il devrait y avoir un moyen de le faire.

P.S. Je ne parle pas de l'instabilité des joints/solveurs ici. Ragdoll est stable (plus ou moins), et les articulations respectent les degrés de liberté (limites des articulations), mais les articulations n'ont pas de friction, et je voudrais leur ajouter de la friction.

Répondre

1

J'ai posé une question sur les forums nvidia récemment qui pourraient être liés à ceci: link

Malheureusement je n'ai pas une vraie réponse à mes questions, mais ont réussi à faire ce que je veux faire, en utilisant un ressort dans le joint pourrait vous aider si vous ajoutez seulement une constante d'amortissement sans constante de ressort. Cela fonctionne dans mon cas, mais je ne peux pas expliquer pourquoi, alors que je suis heureux de l'utiliser, je ne suis pas totalement sûr de le recommander. Je ne sais pas si vous pouvez également ajouter un amortissement angulaire à toutes les parties du ragdoll, ce qui les ferait ralentir plus rapidement après qu'ils ont commencé à se déplacer, mais il pourrait ne pas sembler correct. Probablement l'une de ces choses que vous devrez expérimenter.

+0

Eh bien, l'amortissement a fonctionné. Le réglage de la force du ressort d'amortissement élevé sur les limites et les joints fonctionne bien sur les joints de révolution/d6, moins bien sur les joints sphériques. J'ai finalement eu un ragdoll rigide. Ce n'est certainement pas un frottement dans le sens traditionnel, mais il fournit le même effet. Cela ressemble à une "fonctionnalité non documentée", mais je doute sérieusement qu'elle soit jamais cassée - un ressort avec un fort amortissement et une force nulle est censé se comporter de cette façon. – SigTerm

+0

@SigTerm: C'est rassurant, mon souci était qu'il pourrait être cassé avec une future mise à jour.Heureux que ce soit de l'aide si ce n'est pas exactement ce que vous voulez. – identitycrisisuk

0

J'ai trouvé this forum thread sur les articulations bancales dans Physx, ne sais pas si vous l'avez vu mais j'espère que cela aide.

+0

Non, ce n'est pas le cas - ragdoll est stable, mais je dois le rendre plus "rigide". J'ai mis à jour la question. – SigTerm

0

Pourquoi ne vous essayez pas:

d6Desc.swingDrive.driveType.raiseFlagMask (NX_D6JOINT_DRIVE_VELOCITY); d6Desc.swingDrive.forceLimit = 0.1f; d6Desc.twistDrive.driveType.raiseFlagMask (NX_D6JOINT_DRIVE_VELOCITY); d6Desc.twistDrive.forceLimit = 0.1f; d6Desc.driveAngularVelocity.x = 0; d6Desc.driveAngularVelocity.y = 0; d6Desc.driveAngularVelocity.z = 0;

Vous conduisez la vitesse à 0 avec une petite force, de cette façon le mouvement sera réduit et vos objets arrêteront de bouger sur le sol. Ce n'est pas exactement comme le frottement mais proche.