miércoles, 17 de septiembre de 2014

Errores en la implementación de la cámara

Ya he explicado como implementé la cámara en Unity para Temet Nosce. Una cámara sobre raíles, montada con trozos de spline. Todo parecía muy bonito, pero el demonio está en los detalles, y aquí hay mucho demonio. Cuando empiezas a usarla en más escenario y salen errores, que puedes evitar que salgan en un vídeo promocional, pues son cosas puntuales, pero no se pueden dejar en el juego. 





1- Adelante no es adelante




Y por lo tanto atrás no es atrás. Es decir que si estamos jugando y queremos ir al fondo de la pantalla, lo más normal es que pulsemos la tecla de arriba (o joystick hacia arriba) y ya está. Pero si hacemos esto es bastante probable que el personaje se desvíe a un lado, tal y como se ve en la primera parte del vídeo. Así que a la hora de jugar es bastante molesto, porque hay que corregir la posición constantemente y da la impresión de estar reconduciendo todo el rato al personaje que tiende a desviarse de donde queremos. ¿Y esto por qué pasa? Pues por la combinación controles según cámara + cámara sobre raíles + apuntar al personaje. Hago un croquis de paint cutre cutre, para que se entienda mejor:





Como se puede ver, la flecha azul indica hacia donde irá el personaje si pulsamos el botón arriba. En el paso 1, va en una dirección, que no es exactamente el fondo del escenario ni la dirección del raíl de la cámara, pero al pasar al punto 2 (suponer que la distancia entre ambos puntos es infinitesimal), la dirección ya no es la misma, sino que ahora adelante significa algo más a la izquierda. Y así es como poco a poco nos vamos torciendo y si queremos ir al fondo tenemos que ir por la línea del raíl o ir corrigiendo la dirección constantemente.



Soluciones:



  • Se puede hacer que la dirección de adelante no se tome como la normal al plano de la pantalla, sino que sea la secante al raíl en cada punto, o la recta que une cada nodo del spline con el siguiente. Así la dirección iría cambiando con el raíl, algo que se hace en tiempo de diseño. Tengo que probarlo, pero creo que el movimiento quedará raro, que no nos será fácil adivinar que esa dirección hacia delante es en función de un raíl invisible para el jugador.
  • Hacer que la cámara no apunte al personaje, sino que apunte como si fuera una vagoneta en una montaña rusa, siempre mirando hacia delante en las vías. Esto soluciona el problema y hace el movimiento más sencillo de controlar. Pero restringe hacia donde mira la cámara. Y hay que hacer los escenarios y probarlos bien de tal forma que no sean tan anchos como para que el personaje desaparezca de pantalla, o buscar solución a esto.


2- Parpadeo entre tomas al cambiar de spline




Es algo raro, de estas cosas que no suelen pasar y que puedes pasar el juego sin verlo, pero si se te ocurre andar más a la izquierda de lo normal, por ejemplo, de repente pasa. La imagen parpadea entre planos, si nos movemos un poco ya deja de hacerlo. Siempre he pensado que era un problema de precisión, que en una parte se volvía loco porque en unos frames la cámara le daba en la posición 0.001 de un spline y en otro frame en la 0.999 del spline anterior. Eso efectivamente haría que parpadease entre los 2 splines y algo cambiase el plano. Pero no sería tan brusco. Porque en esos planos parpadeantes vemos el correcto, pero el otro no tiene nada que ver, la cámara se va a cuenca. Así que seguramente quede en algún estado inestable, una posición negativa del spline o algo así, que hace que el spline se extrapole más allá de los límites permitidos y haga cosas raras.



Soluciones:



  • Aquí no tengo una solución clara, al no saber del todo de donde viene el problema. Así que haré debug de la posición que toma la cámara en el spline para ver por donde se sale y si haciendo algún tipo de comprobación se puede evitar.


3- Distancia al personaje inestable




El primer problema entiendo de donde sale y tengo soluciones, el segundo sospecho por donde pueden ir los tiros y se por donde mirarlo, y este tercero es el que me tiene más perdido. Lo que ocurre como se puede ver en la parte final del vídeo es que al cambiar de un spline al siguiente, en lugar de ser un cambio suave que casi ni se note, da un salto brusco, y de repente la cámara está muchísimo más próxima al personaje que antes. Tanto es así que hay sitios por los que la cámara va a la par del personaje, y vemos al protagonista de perfil. Y esto porque la cámara siempre mira al personaje, si hiciéramos el cambio propuesto como solución al problema 1, podría quedar fuera de plano. Esta distancia al personaje se calcula de forma fija en el trozo de spline, pero en cada trozo según su longitud. Por si fuera culpa de la curvatura he probado con splines casi rectos. También que tengan los nodos equidistantes, ya que la forma de recorrer el spline no es regular sino están igualmente separados. Aún así sigo teniendo ese error.



Así que seguramente tenga que replantearme de forma completa el modo en que calculo la distancia a la que tiene que estar la cámara en la nueva versión. 

No hay comentarios :

Publicar un comentario