Spoiler
J'ai fait une petite découverte, qui a peut-être, probablement déjà été faite quelque part par quelqu'un, mais je n'en ai vu nulle trace au cours de mes petites recherches, sur wiwiland ou le forum officiel.
Il s'agit de pouvoir modifier ou bricoler les objets Havok dans Nifskope. En attendant de pouvoir importer/exporter ces objets-là avec votre modélisateur préféré, voilà semble-t-il un moyen de gérer ces choses-ci un peu comme on veut sans trop de peine et moyennant de plonger ses mains dans Nifskope (on en saisit vite le principe, ne vous en faites pas).
Mais commençons tout de suite par le début et vérifions si vous avez bien coché "Draw Havok" dans le menu Render de Nifskope. C'est bon ?
(Au passage je signale, pour répondre à une question de Finish, que si vous possédez la version 0.8.7 et que vous cliquez sur About Nifskope, celui-ci nous annonce qu'il est en version 0.8.6, ce n'est pas grave, c'est un oubli des développeurs.)
Bien, maintenant, heu, va pour une démonstration par l'exemple !
- Ouvrez donc le nif d'une épée ou dague, de préférence que vous avez non loin dans le jeu, comme ça vous pourrez faire des tests. Vous devriez voir votre arme dans son fourreau, enrobée de deux capsules oranges en affichage filaire, ce sont les objets de collision.
- Cliquez sur un "fil" (arête) d'une des capsule. Cela développe la hiérarchie de la block list et met en surbrillance l'objet concerné, en l'occurence bhkCapsule. Vous pouvez voir qu'il y a deux de ces objets parentés à bhkListShape, noeud qui permet d'en rajouter à l'envie. On y revient de suite après.
http://img132.imageshack.us/img132/6557/nifsk011df.th.jpg
- Une fois votre capsule sélectionnée, portez vos yeux sur les block details. Il y a trois valeurs qui nous intéressent : le "radius" définit le rayon de la partie central de la capsule ; le "first point" et le "second point" définissent les coordonnées des extrémités de la capsule.
- Modifiez donc ces valeurs ! Aidez-vous de l'axe local de la capsule, qui est petit et risque malheureusement d'être en partie chaché par l'épée (axe rouge : X ; vert : Y ; bleu : Z). Zoomez à l'intérieur de l'épée si besoin.
http://img132.imageshack.us/img132/8477/nifsk027lk.th.jpg
- Voilà un bon début non ? On n'a plus besoin de faire des modèles d'épées de la même dimension qu'un des modèles originaux puisqu'on peut facilement changer la dimension des collision objects. Pour vérifier si cela marche, multipliez par 10 le rayon d'une des capsules, enregistrez votre nif dans votre dossier data puis tentez de lâcher votre épée dans le jeu.
Maintenant, imaginons que vous avez fait un objet plus complexe et qu'il vous faudrait plus de deux capsules pour l'emballer.
- Faites clic droit-->Block-->Copy sur une bhkCapsuleShape, puis clic droit-->Block-->Paste ou vous voulez. Cela crée une nouvelle capsule shape sous ou à la racine de la hiérarchie, de même dimension que celle que vous avez copiée bien sûr, ce qui explique que vous n'en voyez toujours que deux dans la vue 3D.
- Retournez au coeur de la hiérarchie et sélectionnez bhkListShape ;
- Dans les block Details, augmentez de 1 le Num Sub Shapes.
- En-dessous, "Sub Shapes", faites clic-droit-->Array-->Update, pour mettre à jour l'affichage. Développez Sub Shapes en positionnant votre curseur au-dessus du signe "+" et en pressant le bouton gauche de votre souris ; (désolé )
http://img146.imageshack.us/img146/4568/nifsk036ug.th.jpg
- La troisième "Sub Shapes" s'appelle None, changez ça par le numéro de la capsule que vous avez créée (à gauche du nom dans la block list). Après quoi, celle-ci devrait se trouver déplacée dans la hiérarchie sous bhkListShape.
- Ma foi, il ne vous reste plus qu'à modifier les paramètres de votre nouvelle capsule !
http://img127.imageshack.us/img127/2122/nifsk043th.th.jpg
Quel pied !
Remarques complémentaire :
- Il existe plusieurs espèces d'objets havok, dont la boîte et la capsule sont les seules à être facilement modifiables dans Nifskope. Ouvrez une hache et vous aurez ces deux espèces réunies.
- Les CollisionObjects des armes sont bien pratiques à utiliser car ils sont rangés dans ce noeud bhkListShape qui permet d'en rajouter facilement.
- Après, tout n'est que question de copiage et collage de branches hiérarchiques (clic droit-->Block-->Copy Branch). Et n'oubliez pas que pour copier des noeuds ou des branches d'un nif à l'autre, il faut ouvrir le premier nif puis faire File-->New Window et ouvrir le deuxième nif dans cette fenêtre. Ouvrir deux Nifskope en passant par l'executable ne permet pas la copie entre nif.
- Les objets de collision des créatures skinnées se trouvent dans le nif nommé "skeleton". Vous noterez qu'il est moins facile ici de rajouter des capsules parce qu'elles sont doublement parentées dans la hiérarchie. Mais ça doit être possible. Si quelqu'un s'y essaie, un petit compte-rendu sera apprécié.
Tenez, vous vous souvenez maintenant de la dernière fois où vous avez essayé de faire un assemblage artistiquement discutable de cadavres de bandits et de crabes des vases ? Vous rappelez-vous la frustration ressentie lorsque vous tentiez d'attraper un de ces corps inertes en cliquant en plein milieu et qu'une fois sur deux votre main ne saississait que du vide ? Ouvrez donc le skeleton du MudCrab dans les creatures. Vous voyez tous ces espaces vides autour de la minable petite capsule sensée emballer la carapace ? Ce sont eux !! Vite, bouchez-moi tout ça ! (Et pestez en vous disant que Bethesda a fait les choses un peu trop vite ici aussi. Puis régalez-vous à l'idée que vous allez pouvoir remedier à tout ça avec vos mimines. )
http://img99.imageshack.us/img99/4859/skelcrab16hf.th.jpg Bouh ! http://img77.imageshack.us/img77/7530/skelcrab23nk.th.jpg Ahh, mieux !
Amusez vous bien et faites-nous part de vos découvertes !
Il s'agit de pouvoir modifier ou bricoler les objets Havok dans Nifskope. En attendant de pouvoir importer/exporter ces objets-là avec votre modélisateur préféré, voilà semble-t-il un moyen de gérer ces choses-ci un peu comme on veut sans trop de peine et moyennant de plonger ses mains dans Nifskope (on en saisit vite le principe, ne vous en faites pas).
Mais commençons tout de suite par le début et vérifions si vous avez bien coché "Draw Havok" dans le menu Render de Nifskope. C'est bon ?
(Au passage je signale, pour répondre à une question de Finish, que si vous possédez la version 0.8.7 et que vous cliquez sur About Nifskope, celui-ci nous annonce qu'il est en version 0.8.6, ce n'est pas grave, c'est un oubli des développeurs.)
Bien, maintenant, heu, va pour une démonstration par l'exemple !
- Ouvrez donc le nif d'une épée ou dague, de préférence que vous avez non loin dans le jeu, comme ça vous pourrez faire des tests. Vous devriez voir votre arme dans son fourreau, enrobée de deux capsules oranges en affichage filaire, ce sont les objets de collision.
- Cliquez sur un "fil" (arête) d'une des capsule. Cela développe la hiérarchie de la block list et met en surbrillance l'objet concerné, en l'occurence bhkCapsule. Vous pouvez voir qu'il y a deux de ces objets parentés à bhkListShape, noeud qui permet d'en rajouter à l'envie. On y revient de suite après.
http://img132.imageshack.us/img132/6557/nifsk011df.th.jpg
- Une fois votre capsule sélectionnée, portez vos yeux sur les block details. Il y a trois valeurs qui nous intéressent : le "radius" définit le rayon de la partie central de la capsule ; le "first point" et le "second point" définissent les coordonnées des extrémités de la capsule.
- Modifiez donc ces valeurs ! Aidez-vous de l'axe local de la capsule, qui est petit et risque malheureusement d'être en partie chaché par l'épée (axe rouge : X ; vert : Y ; bleu : Z). Zoomez à l'intérieur de l'épée si besoin.
http://img132.imageshack.us/img132/8477/nifsk027lk.th.jpg
- Voilà un bon début non ? On n'a plus besoin de faire des modèles d'épées de la même dimension qu'un des modèles originaux puisqu'on peut facilement changer la dimension des collision objects. Pour vérifier si cela marche, multipliez par 10 le rayon d'une des capsules, enregistrez votre nif dans votre dossier data puis tentez de lâcher votre épée dans le jeu.
Maintenant, imaginons que vous avez fait un objet plus complexe et qu'il vous faudrait plus de deux capsules pour l'emballer.
- Faites clic droit-->Block-->Copy sur une bhkCapsuleShape, puis clic droit-->Block-->Paste ou vous voulez. Cela crée une nouvelle capsule shape sous ou à la racine de la hiérarchie, de même dimension que celle que vous avez copiée bien sûr, ce qui explique que vous n'en voyez toujours que deux dans la vue 3D.
- Retournez au coeur de la hiérarchie et sélectionnez bhkListShape ;
- Dans les block Details, augmentez de 1 le Num Sub Shapes.
- En-dessous, "Sub Shapes", faites clic-droit-->Array-->Update, pour mettre à jour l'affichage. Développez Sub Shapes en positionnant votre curseur au-dessus du signe "+" et en pressant le bouton gauche de votre souris ; (désolé )
http://img146.imageshack.us/img146/4568/nifsk036ug.th.jpg
- La troisième "Sub Shapes" s'appelle None, changez ça par le numéro de la capsule que vous avez créée (à gauche du nom dans la block list). Après quoi, celle-ci devrait se trouver déplacée dans la hiérarchie sous bhkListShape.
- Ma foi, il ne vous reste plus qu'à modifier les paramètres de votre nouvelle capsule !
http://img127.imageshack.us/img127/2122/nifsk043th.th.jpg
Quel pied !
Remarques complémentaire :
- Il existe plusieurs espèces d'objets havok, dont la boîte et la capsule sont les seules à être facilement modifiables dans Nifskope. Ouvrez une hache et vous aurez ces deux espèces réunies.
- Les CollisionObjects des armes sont bien pratiques à utiliser car ils sont rangés dans ce noeud bhkListShape qui permet d'en rajouter facilement.
- Après, tout n'est que question de copiage et collage de branches hiérarchiques (clic droit-->Block-->Copy Branch). Et n'oubliez pas que pour copier des noeuds ou des branches d'un nif à l'autre, il faut ouvrir le premier nif puis faire File-->New Window et ouvrir le deuxième nif dans cette fenêtre. Ouvrir deux Nifskope en passant par l'executable ne permet pas la copie entre nif.
- Les objets de collision des créatures skinnées se trouvent dans le nif nommé "skeleton". Vous noterez qu'il est moins facile ici de rajouter des capsules parce qu'elles sont doublement parentées dans la hiérarchie. Mais ça doit être possible. Si quelqu'un s'y essaie, un petit compte-rendu sera apprécié.
Tenez, vous vous souvenez maintenant de la dernière fois où vous avez essayé de faire un assemblage artistiquement discutable de cadavres de bandits et de crabes des vases ? Vous rappelez-vous la frustration ressentie lorsque vous tentiez d'attraper un de ces corps inertes en cliquant en plein milieu et qu'une fois sur deux votre main ne saississait que du vide ? Ouvrez donc le skeleton du MudCrab dans les creatures. Vous voyez tous ces espaces vides autour de la minable petite capsule sensée emballer la carapace ? Ce sont eux !! Vite, bouchez-moi tout ça ! (Et pestez en vous disant que Bethesda a fait les choses un peu trop vite ici aussi. Puis régalez-vous à l'idée que vous allez pouvoir remedier à tout ça avec vos mimines. )
http://img99.imageshack.us/img99/4859/skelcrab16hf.th.jpg Bouh ! http://img77.imageshack.us/img77/7530/skelcrab23nk.th.jpg Ahh, mieux !
Amusez vous bien et faites-nous part de vos découvertes !
Ce deuxième spoiler contient ma traduction du tutorial de Darknel posté sur le wiki des forums officiels.
En me disant que ça éviterait la confusion avec Nifskope sous les yeux, j'ai laissé les termes propres à Nifskope dans leur versant anglais, ce qui rend le texte assez barbare. Je ne sais pas si finalement c'était une bonne idée...
Darknel compte améliorer son tuto dans le temps futur, je mettrai à jour... en principe.
Spoiler
Ainsi donc, vous avez modélisé, texturé l'objet don't vous rêviez et l'avez implémenté dans le jeu ? Bonne nouvelle. Des tas de modeurs ne sont pas allés aussi loin dans cet effort. Mais avant de retirer votre casquette de modélisateur, il vous reste encore une tâche à accomplir : l'intégration du comportement physique de votre modèle. Pour les armes, le mauvais placement des boîtes de collision provoquera la disparition inopportune de votre objet à travers le sol, ou bien des rebonds peu naturels et d'autres problèmes mineurs. Pour les modèles fixes, un mauvais placement des meshes de collision donne des résultats carrément désastreux.
En l'absence d'un exporteur officiel de fichiers .nif, gérer la physique et les collisions n'est pas si simple. Comme toutes les méthodes actuelles d'édition de modèles, la technique qui suit est assez artisanale et en conséquence, imparfaite. Et comme pour tout ce qui concerne la modélisation pour Oblivion, un grand remerciement revient à l'équipe des Niftools, sans qui aucun de nos projets ne serait réalisable.
Les Blocks principaux
Avant de discuter de comment ajouter des Blocks Havok, ça peut être utile de décrire un peu ce qu'ils sont et ce qu'ils font. En jetant un oeil à n'importe quel .nif vous devriez pouvoir deviner tout ça par vous même relativement facilement, mais juste pour vous simplifier la tâche :
bhkCollisionObject
C'est la base du collision object (de l'objet de collision) dans un nif. Chaque NiNode peut contenir un, et un seul, bhkCollisionObject. Mais bien sûr, un nif peut contenir plusieurs NiNodes et donc plusieurs collision objects. (Ce qui sera utilisé plus loin dans ce tutorial).
bhkRigidBody
Tout comme le NiNode se réfère à un collision object, le collision object se réfère à un rigid body. C'est le premier des blocks qu'il est important de configurer correctement (dans les Block Details) :
Shape : Indique l'objet filaire en lui-même qui définit la forme du collision object. On y revient de suite.
Layer : Détermine la couleur des boîtes de collision dans le Construction Set.
Translation / Rotation : Gère la position des shapes (formes) dans l'espace.
Center : Le centre de gravité.
Mass : La masse. Se comporte globalement comme on s'y attend, excepté le fait qu'elle n'affecte pas la vitesse de chute des corps. Ceci étant contrôlé par l'attribut suivant :
Linear / Angular Damping : Une force appliquée dans le sens opposé à la direction du mouvement de l'objet. La puissance de cette force est spécifiée par un nombre entier de maximum 100. En modifiant cette valeur sur le squelette des personnages, il a été possible de changer la vitesse à laquelle le corps chute.
Friction & Restitution : Ces propriétés affectent la vitesse de la… perte de vitesse des objets lorsqu'ils entrent en contact ou glissent contre un autre objet (l).
Motion System & Quality Type : Ce qu'il y a de plus important à connaître à propos de ces propriétés, ce sont ces deux combinaisons : MS - 7; QT - 1 : donnera un objet statique (ex : architecture) ; MS-3; QT- 4 : donnera un objet déplaçable (ex : armes, vêtements, etc).
Shapes
Comme indiqué ci-dessus, le block bhkRigidBody sera parent d'une shape. Beaucoup des modèles originaux la shape bhkConvexVerticesShape, qui enveloppe précisément la géométrie du modèle (le Trishape). Pour nous elles sont inutilisables, pour plusieurs raisons que je ne détaille pas. Nous avons besoin de formes plus génériques. Les deux plus polyvalentes et pratiques à utiliser sont la bhkBoxShape et la bhkCapsuleShape.
Les Shapes ont une propriété Material (matériau) qui définit entre autres le son produit par un choc de l'objet. Une liste complète des matériaux et de leur numéro correspondant peut être trouvée ici : là
bhkConvexTransformShape
C'est un des blocks en relation avec le Havok les plus utiles, comme le montre le tutorial ci-dessous. Son attribut de contrôle Transform de type Matrix 44 permet de modifier la rotation et translation des bhkBoxShape qu'il contrôle.
Par contre, N'UTILISEZ PAS la fonction scale (redimensionner) de ce block. Changer la taille des shapes par ce moyen donnera le résultat attendu pour la boîte de collision normale, mais n'affectera pas la taille des ces boîtes telle que détectée par les flèches ! Pour le redimensionnement, il faut alors utiliser les paramètres de type Vector3 des blocks de shapes.
Bâtir un modèle de collision
Etape 1
- Créez un fichier .nif de votre modèle personnalisé. Peu importe comment vous faites cela (en exportant un nif ou en important un obj dans un nif préexistant). Il vous faut maintenant assembler vos blocks Havok. Si vous avez importé un obj, vous devriez déjà avoir le block bhkCollisionObject et sa structure associée ; laissez tout ça en place mais supprimez les blocks de shape. Si vous avez exporté votre nif depuis Blender ou 3dsmax, vous pouvez faire un copy/paste du bhkCollisionObject d'un nif officiel.
- Regardez votre maillage et évaluez la quantité de boîtes et capsules dont vous avez besoin. Vous pouvez récupérer ces deux shapes dans les nifs d'armes du jeu : les épées contiennent des capsules et les haches contiennent les deux types. Copiez/collez-en autant qu'il vous en faut dans votre nif.
- Pour chaque box shape, vous aurez aussi besoin d'un block bhkConvexTransformShape. Celui-ci peut aussi être copié depuis un nif de hache et d'ailleurs vous pouvez copier toute la branche (incluant donc la shape), ce qui vous évite de devoir refaire les liens de parents/enfants ultérieurement.
- Enfin, vous aurez besoin du block bhkListShape. Celui-ci aussi peut être trouvé dans un nif d'arme. Et là aussi, vous pouvez en fait copier/coller toute la branche.
Etape 2
Maintenant vous devez connecter tous ces block.
- Assignez le bhkListShape à l'attribut Shape du bhkRigidBody.
- Dans l'attribut Num Sub Shapes du bhkListShape, indiquez le nombre de shapes que vous avez créées au début
- Updatez l'Array de l'attribut Sub Shapes.
- Entrez les numéros de vos shapes dans les nouveaux emplacements de sub shapes. (Pour les bhkBoxShape qui utilisent un bhkConvexTransformShape, c'est ce dernier que vous devez référencer dans les sub shapes)
Ensuite vient la partie fatigante de ce processus. Havok requiert une séquence des blocks (leur numérotation) bien précise pour le collision object.
- Fermez les Block Details et Ouvrez la Block List. Celle-ci affiche tous les block dans l'ordre de leur numérotation.
- En faisant clic-droit-->Block-->Move up/Move Down sur un block, vous pouvez changer sa position dans l'ordre des blocks. La séquence doit être ainsi (ndt : vous pouvez aussi regarder un nif de bethesda pendant que moi je me fatigue à traduire ça ) :
0: NiNode ;
1: (Plus éventuellement 2 et 3) Sera le block BSX, UPB et/ou PM, selon le type de nif que vous créez ;
2: Vient ensuite la première de vos bhk shapes. Si c'est une box shape avec un bhkConvexTransformShape, la box shape vient d'abord et son ConvexTrucMachin en-dessous. Puis vient la shape suivant, etc.
n: Après avoir listé toutes vos shapes, vient la bhkListshape ;
n+1: Puis le bhkRigidBody;
n+2: Le bhkCollisionObject;
n+3: Et enfin les blocks trishape/strips. (ndt : Peu importe l'ordre ici je crois.)
En testant votre mod, si le jeu plante avant même d'avoir fini le chargement, c'est probablement à cause d'une erreur dans cette séquence.
(Ndt : C'est vrai que c'est épuisant tout ça. J'espère que c'est bien nécessaire. En tout cas on peut faire en sorte de s'épargner une partie de ce travail en important son modèle dans un nif tout bien ordonné et en rajoutant des boîtes et des capsules dans la bhkListShape. Il faudra cependant suivre le processus de réorganisation ci-dessus pour ces ajouts.)
Etape 3
Vous avez maintenant un nif fonctionnel contenant plusieurs meshes de collision. Il vous reste à arranger ces boîtes et capsules comme vous le voulez.
(Ndt : La manipulation des capsules est décrite dans mon tutorial.)
Pour manipuler les box shapes, utilisez leur ConvexTransformShape pour la rotation et la translation (faites clic-droit-->Edit Matrix sur l'attribut Transform). Pour les redimensionner, modifiez l'attribut Dimensions du bloc bhkBoxShape.
Voilà pour les bases. J'ajouterai des détails plus tard...
In the interim I have provided more detailed information on this topic here If you post any additional questions you have about any of this on that thread, I or someone else will try to answer them. (Ndt : en anglais donc… )
Lien vers le texte original : HereAinsi donc, vous avez modélisé, texturé l'objet don't vous rêviez et l'avez implémenté dans le jeu ? Bonne nouvelle. Des tas de modeurs ne sont pas allés aussi loin dans cet effort. Mais avant de retirer votre casquette de modélisateur, il vous reste encore une tâche à accomplir : l'intégration du comportement physique de votre modèle. Pour les armes, le mauvais placement des boîtes de collision provoquera la disparition inopportune de votre objet à travers le sol, ou bien des rebonds peu naturels et d'autres problèmes mineurs. Pour les modèles fixes, un mauvais placement des meshes de collision donne des résultats carrément désastreux.
En l'absence d'un exporteur officiel de fichiers .nif, gérer la physique et les collisions n'est pas si simple. Comme toutes les méthodes actuelles d'édition de modèles, la technique qui suit est assez artisanale et en conséquence, imparfaite. Et comme pour tout ce qui concerne la modélisation pour Oblivion, un grand remerciement revient à l'équipe des Niftools, sans qui aucun de nos projets ne serait réalisable.
Les Blocks principaux
Avant de discuter de comment ajouter des Blocks Havok, ça peut être utile de décrire un peu ce qu'ils sont et ce qu'ils font. En jetant un oeil à n'importe quel .nif vous devriez pouvoir deviner tout ça par vous même relativement facilement, mais juste pour vous simplifier la tâche :
bhkCollisionObject
C'est la base du collision object (de l'objet de collision) dans un nif. Chaque NiNode peut contenir un, et un seul, bhkCollisionObject. Mais bien sûr, un nif peut contenir plusieurs NiNodes et donc plusieurs collision objects. (Ce qui sera utilisé plus loin dans ce tutorial).
bhkRigidBody
Tout comme le NiNode se réfère à un collision object, le collision object se réfère à un rigid body. C'est le premier des blocks qu'il est important de configurer correctement (dans les Block Details) :
Shape : Indique l'objet filaire en lui-même qui définit la forme du collision object. On y revient de suite.
Layer : Détermine la couleur des boîtes de collision dans le Construction Set.
Translation / Rotation : Gère la position des shapes (formes) dans l'espace.
Center : Le centre de gravité.
Mass : La masse. Se comporte globalement comme on s'y attend, excepté le fait qu'elle n'affecte pas la vitesse de chute des corps. Ceci étant contrôlé par l'attribut suivant :
Linear / Angular Damping : Une force appliquée dans le sens opposé à la direction du mouvement de l'objet. La puissance de cette force est spécifiée par un nombre entier de maximum 100. En modifiant cette valeur sur le squelette des personnages, il a été possible de changer la vitesse à laquelle le corps chute.
Friction & Restitution : Ces propriétés affectent la vitesse de la… perte de vitesse des objets lorsqu'ils entrent en contact ou glissent contre un autre objet (l).
Motion System & Quality Type : Ce qu'il y a de plus important à connaître à propos de ces propriétés, ce sont ces deux combinaisons : MS - 7; QT - 1 : donnera un objet statique (ex : architecture) ; MS-3; QT- 4 : donnera un objet déplaçable (ex : armes, vêtements, etc).
Shapes
Comme indiqué ci-dessus, le block bhkRigidBody sera parent d'une shape. Beaucoup des modèles originaux la shape bhkConvexVerticesShape, qui enveloppe précisément la géométrie du modèle (le Trishape). Pour nous elles sont inutilisables, pour plusieurs raisons que je ne détaille pas. Nous avons besoin de formes plus génériques. Les deux plus polyvalentes et pratiques à utiliser sont la bhkBoxShape et la bhkCapsuleShape.
Les Shapes ont une propriété Material (matériau) qui définit entre autres le son produit par un choc de l'objet. Une liste complète des matériaux et de leur numéro correspondant peut être trouvée ici : là
bhkConvexTransformShape
C'est un des blocks en relation avec le Havok les plus utiles, comme le montre le tutorial ci-dessous. Son attribut de contrôle Transform de type Matrix 44 permet de modifier la rotation et translation des bhkBoxShape qu'il contrôle.
Par contre, N'UTILISEZ PAS la fonction scale (redimensionner) de ce block. Changer la taille des shapes par ce moyen donnera le résultat attendu pour la boîte de collision normale, mais n'affectera pas la taille des ces boîtes telle que détectée par les flèches ! Pour le redimensionnement, il faut alors utiliser les paramètres de type Vector3 des blocks de shapes.
Bâtir un modèle de collision
Etape 1
- Créez un fichier .nif de votre modèle personnalisé. Peu importe comment vous faites cela (en exportant un nif ou en important un obj dans un nif préexistant). Il vous faut maintenant assembler vos blocks Havok. Si vous avez importé un obj, vous devriez déjà avoir le block bhkCollisionObject et sa structure associée ; laissez tout ça en place mais supprimez les blocks de shape. Si vous avez exporté votre nif depuis Blender ou 3dsmax, vous pouvez faire un copy/paste du bhkCollisionObject d'un nif officiel.
- Regardez votre maillage et évaluez la quantité de boîtes et capsules dont vous avez besoin. Vous pouvez récupérer ces deux shapes dans les nifs d'armes du jeu : les épées contiennent des capsules et les haches contiennent les deux types. Copiez/collez-en autant qu'il vous en faut dans votre nif.
- Pour chaque box shape, vous aurez aussi besoin d'un block bhkConvexTransformShape. Celui-ci peut aussi être copié depuis un nif de hache et d'ailleurs vous pouvez copier toute la branche (incluant donc la shape), ce qui vous évite de devoir refaire les liens de parents/enfants ultérieurement.
- Enfin, vous aurez besoin du block bhkListShape. Celui-ci aussi peut être trouvé dans un nif d'arme. Et là aussi, vous pouvez en fait copier/coller toute la branche.
Etape 2
Maintenant vous devez connecter tous ces block.
- Assignez le bhkListShape à l'attribut Shape du bhkRigidBody.
- Dans l'attribut Num Sub Shapes du bhkListShape, indiquez le nombre de shapes que vous avez créées au début
- Updatez l'Array de l'attribut Sub Shapes.
- Entrez les numéros de vos shapes dans les nouveaux emplacements de sub shapes. (Pour les bhkBoxShape qui utilisent un bhkConvexTransformShape, c'est ce dernier que vous devez référencer dans les sub shapes)
Ensuite vient la partie fatigante de ce processus. Havok requiert une séquence des blocks (leur numérotation) bien précise pour le collision object.
- Fermez les Block Details et Ouvrez la Block List. Celle-ci affiche tous les block dans l'ordre de leur numérotation.
- En faisant clic-droit-->Block-->Move up/Move Down sur un block, vous pouvez changer sa position dans l'ordre des blocks. La séquence doit être ainsi (ndt : vous pouvez aussi regarder un nif de bethesda pendant que moi je me fatigue à traduire ça ) :
0: NiNode ;
1: (Plus éventuellement 2 et 3) Sera le block BSX, UPB et/ou PM, selon le type de nif que vous créez ;
2: Vient ensuite la première de vos bhk shapes. Si c'est une box shape avec un bhkConvexTransformShape, la box shape vient d'abord et son ConvexTrucMachin en-dessous. Puis vient la shape suivant, etc.
n: Après avoir listé toutes vos shapes, vient la bhkListshape ;
n+1: Puis le bhkRigidBody;
n+2: Le bhkCollisionObject;
n+3: Et enfin les blocks trishape/strips. (ndt : Peu importe l'ordre ici je crois.)
En testant votre mod, si le jeu plante avant même d'avoir fini le chargement, c'est probablement à cause d'une erreur dans cette séquence.
(Ndt : C'est vrai que c'est épuisant tout ça. J'espère que c'est bien nécessaire. En tout cas on peut faire en sorte de s'épargner une partie de ce travail en important son modèle dans un nif tout bien ordonné et en rajoutant des boîtes et des capsules dans la bhkListShape. Il faudra cependant suivre le processus de réorganisation ci-dessus pour ces ajouts.)
Etape 3
Vous avez maintenant un nif fonctionnel contenant plusieurs meshes de collision. Il vous reste à arranger ces boîtes et capsules comme vous le voulez.
(Ndt : La manipulation des capsules est décrite dans mon tutorial.)
Pour manipuler les box shapes, utilisez leur ConvexTransformShape pour la rotation et la translation (faites clic-droit-->Edit Matrix sur l'attribut Transform). Pour les redimensionner, modifiez l'attribut Dimensions du bloc bhkBoxShape.
Voilà pour les bases. J'ajouterai des détails plus tard...
In the interim I have provided more detailed information on this topic here If you post any additional questions you have about any of this on that thread, I or someone else will try to answer them. (Ndt : en anglais donc… )
Les commentaires, critiques, propositions et mots doux sont les bienvenus ! (Mp, si ça n'intéresse pas tout le monde.)
Modifié par Ovocean, 21 juin 2006 - 17:08.