Eu gostaria de mexer um pouco a câmera durante uma explosão e tentei algumas funções diferentes para balançá-la, e nada parece realmente dar esse 'uau, que estrondo!' tipo de sentimento que estou procurando. Tentei alguns padrões arbitrários de ondas senoidais de frequência relativamente alta com um pouco de atenuação linear, bem como um padrão do tipo onda quadrada. Tentei mover apenas um eixo, dois e todos os três (embora o efeito dolly fosse quase imperceptível nesse caso).
Alguém sabe de um bom padrão de vibração da câmera?
Respostas:
Eu tenho uma trepidação decente da câmera aplicando ruído Perlin na orientação da câmera. Dá-lhe uma grande sacudida decente com agitação de frequência mais alta incorporada e pode parecer realmente bom.
http://mrl.nyu.edu/~perlin/doc/oscar.html possui mais detalhes e código de amostra para gerar ruído.
fonte
Se você está se referindo àquele tremor de tela trêmulo causado por uma explosão, tentei implementar isso no meu jogo de protótipo (é 2D, mas deve se traduzir muito bem em 3D, espero). Dê uma olhada no vídeo do youtube e veja se é isso que você está procurando - a vibração da tela começa cerca de 1:35
De qualquer forma, a maneira como consegui isso foi criar uma janela de visualização para o cenário e armazenar o ponto central (
centre
).Quando uma explosão começa, eu crio um aleatório
radius
de ~ 30px. Em seguida, desloco a janela de visualizaçãocentre
por tantos pixels em uma direção aleatória.Para cada atualização subsequente (entre os desenhos na tela), reduzo
radius
de 10 a 20% e desloco a janela de visualização por muitos pixelscentre
novamente. No entanto, em vez de escolher um ângulo aleatório para esse deslocamento, retiro o ângulo da viewport anteriorcentre
e adicionei 180 +/- 60 graus a ele.Então, basicamente, a cada atualização (ou 10-20ms ou mais), eu compenso a janela de exibição por um número decrescente de pixels da
centre
tela.Aqui estão alguns pseudocódigo:
Normalmente, paro a trepidação da tela quando o raio fica menor que 2,0, quando redefino a janela de exibição
centre
.fonte
randomAngle += (150 + rand()%60)
para se livrar de quaisquer problemas +/-.Fazer uma trepidação da câmera "parecer" correta é menos a direção do movimento e mais as curvas de aceleração.
Os tremores das câmeras estão mergulhando no reino da animação e, portanto, todas as regras de ação / reação se aplicam. Se você estiver se movendo de maneira linear de um ponto a outro, parecerá suave e uniforme e não causará impacto.
Se você balançar a cabeça para frente e para trás, notará que ela se move mais rapidamente no ponto médio entre a mudança de direção e diminui a velocidade de cada lado quando você primeiro desacelera e depois inicia na nova direção.
Aqui está uma lista de várias funções de atenuação a serem aplicadas ao seu movimento. Você pode querer apenas EaseOut o primeiro movimento para torná-lo um pouco mais abrupto e depois EaseInOut o resto para simular o movimento da cabeça / câmera.
fonte
wkerslake está certo, os movimentos da câmera parecem ser mais complexos do que você imagina.
Ao emular uma câmera trêmula, você deve pensar em que tipo de câmera (operador) deseja imitar. O peso da câmera afeta a inércia, por exemplo. câmeras mais pesadas suavizam pequenos movimentos 'aleatórios'. Um operador de câmera em um trilho ou em um carro acrescenta ruído adicional.
Usar o ruído Perlin ou Simplex é definitivamente uma opção, então é tudo sobre encontrar o equilíbrio certo entre diferentes proporções de ruído. Mas descobri que o uso da interpolação entre valores é menos intensivo em termos computacionais e pode ser igualmente eficaz.
Há um tempo atrás, encontrei um script maia que parece acertar muitas coisas. Você pode dar uma olhada nisso .
Além disso, você pode dar uma olhada no Gran Turismo (5) , a equipe deles fez um trabalho impressionante ao fazer vários tipos de trepidação de câmera em tempo real quando você assiste a uma repetição no jogo.
fonte
Se você tem uma física dinâmica de objetos [provavelmente não é a palavra certa, mas é o que eu quero dizer], onde qualquer objeto não corrigido seria "deslumbrado" pela explosão, você poderia ter a câmera afetada como um objeto como esse.
A única diferença seria apenas mudar a rotação / inclinação / guinada / rotação da câmera, e não a posição.
Fora isso, talvez gere uma sequência numérica aleatória e converta-a em rotação de alguma forma? Pense que mapas de altura e escala de cinza podem ser um exemplo; eles não são totalmente diferentes, mas são aleatórios.
fonte