Rendu des personnages, avec des membres coupés (modèles Blender en Java / OpenGL)

10

Quels aspects dois-je prendre en compte pour créer des animations de personnages et des classes de rendu si je veux avoir des membres détachables? J'ai développé un système corporel détaillé qui peut tout définir jusqu'au système nerveux. Je vise quelque chose de similaire au niveau de détail des dégâts trouvé dans Dwarf Fortress. Par exemple, lorsqu'un personnage subit des dommages à l'avant-bras, il existe un risque de lésions nerveuses qui peuvent désactiver l'ensemble du bras. Ou ils pourraient perdre complètement le bras.

J'ai un système écrit pour gérer la partie données de cela. Chaque personnage a un tronc, qui a des appendices et des parties internes. Chaque appendice peut également avoir des appendices enfants et des parties internes. Les appendices enfants sont désactivés / supprimés si un appendice parent est désactivé / supprimé. Si l'un des appendices ou parties internes désactivés / supprimés est requis pour la vie, le personnage mourra bientôt.

Ce sur quoi je travaille maintenant, c'est la partie dessin / animation de ceci. Comment définir des animations pour savoir lesquelles sont autorisées compte tenu de l'état actuel du corps (bras / jambes manquants, etc.)? Comment configurer le système de dessin pour ne pas dessiner les membres manquants? Est-ce que chaque membre / appendice doit être son propre modèle (je voudrais dessiner des appendices coupés au sol)?

Le système simple dont je fais la transition (je viens de l'écrire pour le tester) importe toutes les images clés d'une animation en tant que modèles complets dans un VBO (avec le nombre de vertex pour le début / l'arrêt des images clés). Il n'importe pas ou n'utilise pas les os définis dans Blender, et il n'interpole pas entre les images.

C'est probablement une question assez importante, donc je recherche également des ressources qui peuvent m'amener là où je dois aller.

ÉDITER

Je pose des questions sur l'animation en sachant quels membres elle anime parce que j'aimerais qu'elle soit configurée pour effectuer une animation alternative si un membre requis manque. Après avoir réfléchi à cela, j'imagine que je ferais ce contrôle avant d'activer une animation, et d'activer l'animation appropriée à ce moment-là.

MichaelHouse
la source

Réponses:

7

Je travaille actuellement sur un système similaire. Animation procédurale + démembrement etc.

Comment définir des animations pour savoir lesquelles sont autorisées donner l'état actuel du corps (bras / jambes manquants, etc.)?

Je ne suis pas tout à fait en train de suivre ce morceau, si les membres ne sont pas là, alors peu importe que ce soit animé ou non, car il ne peut pas être vu.

Est-ce que chaque membre / appendice doit être son propre modèle (je voudrais dessiner des appendices coupés au sol)?

Je les construis dynamiquement à partir des poids des os des sommets. La qualité est probablement légèrement inférieure à celle de chaque membre à la main, mais c'est moins d'effort une fois que je l'ai fait une fois, car je peux ensuite l'appliquer à chaque modèle.

Avec l'approche saine de la section suivante, oui, chaque membre aurait son propre modèle.

J'aurais probablement un modèle complet sous la main de l'entité entière, et chacun des membres serait coupé.

Comment configurer le système de dessin pour ne pas dessiner les membres manquants?

2 choix principaux, la manière la plus simple est de simplement dessiner les membres séparément, et où les membres se rejoignent ont des visages supplémentaires qui sont normalement cachés avec des textures de "chair crue" qui seront visibles lorsque les membres seront retirés.

Le deuxième choix est de le faire dynamiquement à la volée, cela ne fonctionnera qu'avec des modèles relativement simples. L'approche consiste à prendre le modèle de base et à trouver les sommets pondérés par le membre que vous souhaitez démembrer. Supprimez ces sommets, en notant à quoi ils se connectent de telle sorte que vous connaissez la section ouverte. Vous vous fermez ensuite dynamiquement sur la section ouverte avec des triangles avec une texture "chair crue". Du point de vue d'un développeur de logiciels sensé, cette approche n'est pas une bonne (déformation du modèle d'exécution) et des caractéristiques de performances moins "plates", mais j'aime un peu ça.

Bien que la première méthode génère beaucoup plus d'appels de tirage, elle est également un peu plus accessible.

Je vais personnellement avec le second, avec un succès relatif, mais tous mes modèles sont très bas poly, donc découper dynamiquement un modèle et re-télécharger le VBO dans le cadre est faisable pour l'instant.

Il n'importe pas ou n'utilise pas les os définis dans Blender, et il n'interpole pas entre les images.

Cela rend très difficile le démembrement de manière procédurale, car comment savoir quels sommets appartiennent à quelle articulation? Le poids des os des sommets et le démembrement vont de pair, je vous suggère donc de repenser ce morceau.

Je vous suggère également d'investir dans l'interpolation. Sans cela, vous ne pouvez pas accélérer / ralentir vos animations, et vous êtes couplé avec le framerate. Cela signifie que vous pourrez profiter moins de vos animations. par exemple, vous ne pouvez pas ralentir l'animation de la marche lorsque quelqu'un s'arrête, etc.

Michael
la source
Merci @Michael. J'ai évoqué l'interpolation et l'importation d'os parce que je sais que j'en aurai éventuellement besoin, mais je ne les ai pas encore. D'après ce que vous avez dit, il semble que je saurai quoi faire une fois que j'aurai atteint ce point. Il est probable que j'associerais simplement un appendice ou un groupe d'appendices à un os. Je vais poser une question distincte sur l'importation d'os.
MichaelHouse
puisque vous travaillez sur quelque chose de similaire, peut-être avez-vous plus d'informations sur cette question connexe? gamedev.stackexchange.com/q/20931/7191
MichaelHouse
5

Votre meilleure option est de couper les membres et d'utiliser plusieurs sous-modèles en fonction de l'état actuel des blessures. Votre approche de l'utilisation d'un VBO par image clé est tout simplement excessive; utiliser un système d'animation squelettique et jouer différentes animations en fonction des dégâts reçus (boiter avec une jambe, ramper sans les deux jambes, etc.).

Valve a publié un bon ensemble de diapositives sur les blessures et le démembrement dans L4D2. J'aime beaucoup l'approche consistant à utiliser un modèle pour les organes et les os, et à découper le modèle "skin" en fonction des projections de texture des coupures, des coups de feu, etc.

r2d2rigo
la source
Intéressant. Ces diapositives semblent bonnes. Il semble que cela fonctionnerait pour les dommages qui n'ont pas affecté un appendice entier.
MichaelHouse