Me gustaría sacudir un poco la cámara durante una explosión, y he probado algunas funciones diferentes para balancearla, y nada parece realmente dar ese '¡guau, qué explosión!' tipo de sentimiento que estoy buscando. He intentado algunos patrones arbitrarios de onda sinusoidal de frecuencia relativamente alta con un poco de atenuación lineal, así como un patrón de onda cuadrada. Intenté mover solo un eje, dos y los tres (aunque el efecto dolly apenas se notó en ese caso).
¿Alguien sabe de un buen patrón de movimiento de la cámara?
Respuestas:
Tengo un movimiento de cámara decente al aplicar el ruido Perlin a la orientación de la cámara. Te da una gran sacudida decente con una sacudida de frecuencia más alta incorporada, y puede verse realmente bien.
http://mrl.nyu.edu/~perlin/doc/oscar.html tiene más detalles y código de muestra para generar ruido.
fuente
Si te refieres a ese tembloroso temblor de pantalla debido a una explosión, he intentado implementar esto en mi prototipo de juego (es 2d, pero debería traducirse a 3d bastante bien, supongo). Eche un vistazo al video de YouTube y vea si eso es lo que está buscando: el movimiento de la pantalla comienza aproximadamente a las 1:35
De todos modos, la forma en que lo logré fue crear una ventana gráfica para la pantalla y almacenar el punto central (
centre
).Cuando se inicia una explosión, creo un azar
radius
de ~ 30px. Luego compensé la ventana gráficacentre
por esta cantidad de píxeles en una dirección aleatoria.Para cada actualización posterior (entre los sorteos en la pantalla), reduzco
radius
en un 10-20% y compenso la ventana gráfica con esta cantidad de píxeles decentre
nuevo. Sin embargo, en lugar de elegir un ángulo aleatorio para este desplazamiento, tomo el ángulo de vista anteriorcentre
y le agrego 180 +/- 60 grados.Básicamente, en cada actualización (o 10-20 ms o menos), compensé la ventana gráfica con un número decreciente de píxeles desde
centre
la pantalla.Aquí hay un pseudocódigo:
Por lo general, detengo el movimiento de la pantalla cuando el radio es inferior a 2.0, momento en el que restablezco la ventana gráfica nuevamente
centre
.fuente
randomAngle += (150 + rand()%60)
para deshacerse de cualquier problema +/-.Hacer que una cámara se mueva "se sienta" correctamente es menos sobre la dirección del movimiento y más sobre las curvas de aceleración.
Las sacudidas de la cámara se están sumergiendo en el ámbito de la animación, por lo que se aplican todas las reglas de acción / reacción. Si se mueve de manera lineal de un punto a otro, se sentirá suave y uniforme y no como un impacto.
Si sacude la cabeza de un lado a otro, notará que se mueve más rápido en el punto medio entre el cambio de dirección y disminuye la velocidad en cada lado, ya que primero tiene que desacelerar y luego comenzar en la nueva dirección.
Aquí hay una lista de varias funciones de aceleración para aplicar a su movimiento. Es posible que solo desee EaseOut el primer movimiento para que se sienta un poco más abrupto, y luego EaseInOut el resto para simular el movimiento de la cabeza / cámara.
fuente
wkerslake tiene razón, las sacudidas de la cámara parecen ser más complejas de lo que piensas.
Al emular una cámara temblorosa, debe pensar qué tipo de cámara (operador) desea imitar. El peso de la cámara afecta la inercia, p. Ej. Las cámaras más pesadas suavizan los pequeños movimientos 'aleatorios'. Un operador de cámara en un riel o en un automóvil agrega ruido adicional.
Usar el ruido Perlin o Simplex es definitivamente una opción, entonces se trata de encontrar el equilibrio correcto entre diferentes relaciones de ruido. Pero descubrí que usar la interpolación entre valores es menos computacionalmente intensivo y puede ser igual de efectivo.
Hace un tiempo, encontré un script maya que parece hacer muchas cosas bien. Podrías echarle un vistazo a eso .
Además, es posible que desee echar un vistazo a Gran Turismo (5) , su equipo hizo un trabajo impresionante al hacer varios tipos de sacudidas de la cámara en tiempo real cuando ve una repetición en el juego.
fuente
Si tienes física de objetos dinámicos [probablemente no sea la palabra correcta, pero más o menos a lo que me refiero], donde cualquier objeto que no esté fijo sería 'volado' por la explosión, podrías hacer que la cámara se vea afectada como un objeto como ese.
La única diferencia sería simplemente cambiar la rotación / inclinación / guiñada / balanceo de la cámara, y no la posición.
Aparte de eso, ¿tal vez generar una secuencia de números aleatorios y convertirlos en rotación de alguna manera? Piense que el mapa de altura, las cosas en escala de grises pueden ser un ejemplo; No son totalmente diferentes, pero son al azar.
fuente