Je voudrais secouer un peu l'appareil photo pendant une explosion, et j'ai essayé différentes fonctions pour le faire bouger, et rien ne semble vraiment donner un tel «waouh, quel bang! tapez le sentiment que je cherche. J'ai essayé des modèles arbitraires d'onde sinusoïdale de fréquence relativement élevée avec un peu d'atténuation linéaire, ainsi qu'un modèle de type d'onde carrée. J'ai essayé de ne déplacer qu'un axe, deux et les trois (bien que l'effet de dolly était à peine perceptible dans ce cas).
Est-ce que quelqu'un connaît un bon modèle de caméra tremblante?
Réponses:
J'ai un tremblement de caméra correct en appliquant du bruit Perlin à l'orientation de la caméra. Il vous donne une grosse secousse décente avec une agitation de fréquence plus élevée intégrée, et peut être vraiment beau.
http://mrl.nyu.edu/~perlin/doc/oscar.html a plus de détails et un exemple de code pour générer du bruit.
la source
Si vous vous référez à ce tremblement d’écran tremblant provoqué par une explosion, j’ai essayé de l’implémenter dans mon prototype de jeu (c’est 2d mais devrait se traduire très bien en 3D, je l’espère). Regardez la vidéo sur youtube et voyez si c'est ce que vous cherchez - le tremblement de l'écran démarre environ à 1:35
Quoi qu’il en soit, j’ai réussi à créer une fenêtre pour l’écran et à stocker le point central (
centre
).Quand une explosion se déclenche, je crée un
radius
échantillon aléatoire de ~ 30 pixels. Je décale ensuite la fenêtre decentre
ce nombre de pixels dans une direction aléatoire.Pour chaque mise à jour ultérieure (entre les tirages à l'écran), je réduis
radius
de 10 à 20% et décale la vue de ce nombre de pixels àcentre
nouveau. Cependant, au lieu de choisir un angle aléatoire pour ce décalage, je prends l'angle précédent dans la fenêtre d'affichagecentre
et lui ajoute 180 +/- 60 degrés.Donc, fondamentalement, chaque mise à jour (ou 10-20ms environ), je décale la fenêtre d'affichage d'un nombre décroissant de pixels à partir
centre
de l'écran.Voici quelques pseudocodes:
J'arrête habituellement le tremblement de l'écran lorsque le rayon est inférieur à 2,0, point auquel je réinitialise à nouveau la fenêtre d'affichage
centre
.la source
randomAngle += (150 + rand()%60)
supprimer tous les problèmes +/-.Faire en sorte que la caméra bouge "se sente" correctement dépend moins de la direction du mouvement que des courbes d'accélération.
Les mouvements de caméra plongent dans le domaine de l'animation et toutes les règles d'action / réaction s'appliquent. Si vous vous déplacez de manière linéaire d'un point à un autre, vous vous sentirez lisse, uniforme et non comme un impact.
Si vous secouez la tête d'avant en arrière, vous remarquerez qu'il se déplace le plus rapidement à mi-chemin entre les changements de direction et ralentit de chaque côté, car vous devez d'abord ralentir puis commencer dans la nouvelle direction.
Voici une liste de diverses fonctions d’atténuation à appliquer à votre motion. Vous voudrez peut-être uniquement EaseOut le premier mouvement pour le rendre un peu plus abrupt, puis EaseInOut le reste pour simuler le mouvement de la tête / de la caméra.
la source
wkerslake a raison, les tremblements de la caméra semblent plus complexes que vous ne le pensez.
Lorsque vous imitez une caméra tremblante, vous devez réfléchir au type de caméra (opérateur) que vous souhaitez imiter. Le poids de la caméra affecte l'inertie, par exemple. Des caméras plus lourdes adoucissent les petits mouvements «aléatoires». Un cameraman sur un rail ou dans une voiture ajoute un bruit supplémentaire.
Utiliser le bruit Perlin ou Simplex est définitivement une option, alors il faut trouver le bon équilibre entre différents rapports de bruit. Mais j’ai découvert que l’utilisation de l’interpolation entre les valeurs demande moins d’informatique et peut être tout aussi efficace.
Il y a quelque temps, j'ai trouvé un script Maya qui semble bien faire les choses. Vous pouvez jeter un oeil à ce que .
Aussi, vous voudrez peut-être jeter un coup d'œil à Gran Turismo (5) , leur équipe a fait un travail impressionnant en faisant divers types de tremblement de caméra en temps réel lorsque vous regardez une rediffusion dans le match.
la source
Si vous avez une physique d'objet dynamique [ce n'est probablement pas le mot qui convient, mais un peu ce que je veux dire], où tous les objets non réparés seraient "soufflés" par l'explosion, la caméra pourrait être affectée comme un objet de ce type.
La seule différence serait simplement de changer la rotation / le pas / le lacet / le roulis de la caméra, et non la position.
Autre que cela, peut-être générer une séquence de nombre aléatoire et convertir ceux-ci en rotation d'une manière ou d'une autre? Pensez que heightmap, les niveaux de gris peuvent être un exemple; ils ne sont pas totalement différents, mais sont aléatoires.
la source