Créer ma propre kill cam

15

J'ai l'intention de créer mon propre système kill cam pour un ensemble d'outils sandbox. Cependant, après avoir réfléchi aux mécanismes de la kill cam, je suis assez perdu. J'essaie de recréer ceux que l'on voit couramment dans les jeux Call of Duty qui montrent, du point de vue du tueur, la scène de mise à mort réelle.

Mes pensées:

-Je ne peux pas simplement garder en mémoire quand les gens en tuent d'autres parce que je ne saurais pas quand commencer le «processus d'enregistrement». Il y a un moyen pour moi de déterminer avec précision quand quelqu'un est sur le point de tuer quelqu'un.

-Ma seule vraie idée jusqu'à présent est d'avoir un double complet de tout ce qui est chargé sur le côté en copiant tous les mouvements du monde d'origine mais avec un retard de 10 secondes. De cette façon, toutes les caméras de mise à mort dureraient 10 secondes et la caméra des personnes serait simplement déplacée dans le deuxième monde de leur tueur.

Mes questions:

Existe-t-il déjà un moyen accepté de le faire? Quelqu'un at-il de bonnes idées pour quelque chose comme ça? Merci si tu peux!

Freesnöw
la source

Réponses:

10

Stockez les dernières secondes de données de mouvement des objets dynamiques pertinents .

Ces données doivent être suffisamment complètes pour pouvoir être utilisées pour reconstruire une scène killcam si nécessaire, mais suffisamment incomplètes pour que vous puissiez vous permettre de les récupérer et de les stocker à des intervalles suffisamment courts.

Exemples de choses que vous voudrez peut-être suivre:

  • De quelle façon un joueur visible se déplace / regarde
  • Si le tueur est zoomé sur la portée de l'arme

Choses que vous souhaitez probablement optimiser:

  • Données sur les joueurs que le tueur ne peut pas voir
  • Sortie d'écran réelle de n'importe qui
Anko
la source
Il y a un gros problème dans votre réponse, normalement vous ne pouvez pas prédire la mort de qui que ce soit, et vous ne pouvez pas non plus prédire qui va être tué. Ainsi, avec l'optimisation des données sur certains joueurs, vous risquez de perdre la possibilité de rejouer certains éliminations.
Ali1S232
2
@Gajet Je pense que dans ce cas, il veut supprimer tous les objets pertinents et ne stocker que les données pour ceux-ci par la suite. En d'autres termes, vous voudriez déjà avoir une sorte de mécanisme de stockage / mise à jour pour garder une trace des positions de tout et de leurs entités, mais pour une durée limitée. Dites, vous voulez juste les 10 dernières secondes pour une kill cam. Vous auriez juste besoin d'une structure de données suffisamment grande pour stocker les 10 dernières secondes et tout ce qui est plus ancien que celui-ci est remplacé à la fin, comme dans une file d'attente à double extrémité.
ChrisC
Je confirme simplement que la réponse de Ricer est ce que je voulais dire. En effet: lorsque vous ne pouvez pas prédire l'avenir, préparez-vous à la place. :)
Anko
1
Il est important de mentionner que les jeux en ligne en temps réel ne montrent jamais aux joueurs ce qui s'est réellement passé; le jeu fait toujours des suppositions sur ce que pourrait être la vérité, mais en raison des latences et d'autres problèmes de réseau, les jeux ne découvriront pas ce que la "vérité objective" était que beaucoup plus tard - voire pas du tout. Donc, si vous n'avez pas de données "kill cam" disponibles pour pouvoir recréer le point de vue de quelqu'un d'autre, vous ne devriez pas vous sentir mal pour avoir créé des données de kill cam plausibles dans les situations où vous en avez besoin.
Trevor Powell,
0

Aucune idée de la façon dont cela est normalement implémenté, mais vous pouvez faire en sorte que chaque balle enregistre un clip à partir du moment où il est tiré, jusqu'au moment où il atteint une cible. Si la prise de vue se fait uniquement avec un hit-scan, vous pouvez calculer si vous souhaitez générer ou non le métrage kill cam dans le même cycle lorsque vous effectuez le hit-scan.

RavensKrag
la source
0

Vous pouvez enregistrer la transformation d'un objet toutes les deux secondes environ. Effectuez cette opération pour tous les objets dynamiques applicables. Étalez l'enregistrement de sorte que chaque image que vous enregistrez ne soit que quelques matrices. économisez aussi loin que vous le souhaitez.

Pendant la relecture, vous utilisez réellement ces transformations dans un moteur de rendu pour animer une scène, en interpolant entre les transformations en fonction du temps pour chaque image si nécessaire.

Ce n'est pas un duplicata exact mais très proche et cela vous permet de donner au joueur la possibilité de contrôler la caméra pendant la relecture afin qu'il puisse choisir d'où regarder la scène.

Steve H
la source
il y a un problème à ne stocker que des matrices de transformation, à ne rien enregistrer d'autre! Par exemple, si vous enregistrez uniquement des matrices de transformation pour les joueurs, les animations peuvent mal tourner, vous ne pourrez pas voir combien de dégâts l'ennemi a pris avant de vous tuer et quand a-t-il tiré son arme. il y a une longue liste de détails qui vous manquent en utilisant votre méthode que vous pouvez facilement penser à eux.
Ali1S232
Veuillez relire, vous enregistrez les transformations pour tous les objets dynamiques appropriés, pas seulement les matrices pour les joueurs. Il est également assez facile de sauvegarder des données de santé ou de points de vie et d'autres éléments également. Le fait est qu'économiser trop de données consomme des ressources de temps de jeu (mauvais). Vous économisez aussi peu que possible et vous laissez votre moteur de rendu effectuer autant de tâches lourdes par interpolation pendant la relecture que possible. C'est un compromis, mais qu'est-ce qui ne l'est pas?
Steve H
0

vous pouvez implémenter une fonction de relecture dans votre jeu. en utilisant la fonction de relecture, killcam est juste une relecture jouée à partir d'un certain temps de jeu spécifique et du point de vue d'un joueur. plus tard, vous pouvez enregistrer des replays et laisser les autres réviser les jeux une fois qu'ils sont terminés.

aussi votre idée de lancer un même jeu avec des entrées avec un délai de 10 secondes est une bonne approche si votre jeu ne consomme pas une puissance de calcul élevée.

Ali1S232
la source
0

Que dis-tu de ça...

Enregistrez uniquement lorsqu'il y a possibilité de tuer.

Pensez-y du point de vue de l'AIM-BOT. Il ne visera / tirera que lorsque tuer est une possibilité. Par conséquent, vous ne devez enregistrer que lorsqu'un ennemi est à portée tuable / visible.

Waterwizard11
la source
Qu'en est-il des situations impliquant de tirer à travers un objet? Ray casting autant sera sûrement plus gourmand en CPU que certaines des autres idées énoncées. Bonne idée cependant, je pourrais considérer cela comme faisant partie d'une solution.
Freesnöw
0

Définissez un rayon autour du joueur et si un autre joueur entre dans le rayon, il démarre l'enregistrement d'écran pour les deux personnes. Vous attendez ensuite de voir si quelqu'un est tué. Si c'est le cas, vous trouvez le tueur et prenez son enregistrement et rembobinez le temps écoulé depuis le kill plus la durée que vous voulez que la vidéo soit et rembobinez et jouez-la pour celui qui a été tué. Si personne n'est tué et que personne d'autre n'est dans le rayon autour du personnage, supprimez ou arrêtez l'enregistrement. Si le tueur est zoomé sur une lunette, lancez un rayon à l'endroit où il vise et créez un autre rayon de déclenchement. Si quelqu'un est dedans, il enregistre l'écran de celui qui est dans le rayon où le personnage qui vise et celui qui vise. Si quelqu'un meurt par le personnage visé, vous prenez le temps écoulé depuis le kill plus la longueur que vous souhaitez que la came de kill soit et vous rembobinez et jouez ceci pour celui qui a été tué. S'ils font un zoom arrière, arrêtez l'enregistrement. C'est un concept, donc je ne l'ai pas essayé.

Ethan Smith
la source