VIDEOJUEGOS 2

Control de la cámara

V2

Control de la cámara

Cinematografía
• La situación y manejo de cámaras es de gran importancia
• Implicación en la narrativa
• Mejora de la jugabilidad

¿Dónde
está Sonic?

• Una mala cámara puede arruinar un juego
• Implicación en el control

• Existe multitud de técnicas para el control de cámaras
• Encontramos técnicas de muy distinta naturaleza

• Se busca proporcionar una experiencia cinematográfica
• Trabajo del diseñador
Videojuegos II

© 2015-2016 Depto. Ciencia de la Computación e IA

Cámara

2

V2

Control de la cámara

Tipos de cámaras
• Distinguimos dos tipos fundamentales de cámaras
Primera persona



La cámara es nuestro personaje
El jugador tiene pleno control de la cámara
La estrategia de control es sencilla
Podemos introducir aditivos para mejorar la inmersión
Titanfall

Tercera persona




Vemos a nuestro personaje desde fuera
La cámara deberá seguirlo
Multitud de estrategias para seguir al personaje
Importante trabajo del diseñador
Podemos encontrar conflictos con el escenario

Videojuegos II

© 2015-2016 Depto. Ciencia de la Computación e IA

God of War 3

Cámara

3

V2

Control de la cámara

Cámara en primera persona
• Montamos la cámara sobre un character controller
Se encarga de gestionar la gravedad y la
detección y resolución de colisiones

• Deberemos mover la cámara (personaje) según la entrada
• Dependerá del tipo de videojuego

• Tipos de videojuegos con cámara en primera persona

First Person Shooters (FPS)
Videojuegos II

Conducción
© 2015-2016 Depto. Ciencia de la Computación e IA

Simuladores de vuelo
Cámara

4

V2

Control de la cámara

Movimiento de la cámara en un FPS (I)
• Movimiento de giro

Pitch

• Se modifican los ángulos pitch y yaw de
la cámara
• Normalmente al mover el ratón o stick
analógico derecho

Yaw

Pitch: Giro alrededor del eje x
Yaw: Giro alrededor del eje y
• Para el control sólo nos interesa el ángulo
yaw de la cámara
• El pitch sólo tiene efecto en la
visualización, pero no en el avance

z
cos(yaw)
sin(yaw)
Yaw
x

Videojuegos II

© 2015-2016 Depto. Ciencia de la Computación e IA

Cámara

5

pos.V2 Control de la cámara Movimiento de la cámara en un FPS (II) • Movimiento de avance o retroceso dv = Entrada eje vertical [-1. Definimos la velocidad de strafe VEL_STRAFE Videojuegos II © 2015-2016 Depto.x = VEL_STRAFE * dt * dh * cos(yaw+PI/2). Ciencia de la Computación e IA Cámara 6 . 1] pos.x = VEL * dt * dv * cos(yaw).z = VEL * dt * dv * sin(yaw). 1] pos.z = VEL_STRAFE * dt * dh * sin(yaw+PI/2). Definimos la velocidad de avance VEL • Strafe (movimiento lateral) dh = Entrada eje horizontal [-1. pos.

z = vel * dt * dv * sin(yaw).V2 Control de la cámara Inercia de la cámara • Para dar más realismo se puede añadir inercia a la cámara • Lo implementamos mediante aceleración y damping dv = Entrada eje vertical [-1. 1] vel += ACELERACION * dt * dv. Ciencia de la Computación e IA Cámara 7 . irá if(dv == 0) frenando gradualmente vel *= FACTOR_DAMPING. • El mismo esquema puede ser aplicado a strafe y giro Videojuegos II © 2015-2016 Depto. if(vel < -VEL_MAXIMA) vel = -VEL_MAXIMA. if(vel > VEL_MAXIMA) vel = VEL_MAXIMA. Si no se recibe entrada.x = vel * dt * dv * cos(yaw). pos. pos.

gluLookAt(pos. lootat. glMatrixMode(GL_MODELVIEW).y. lookat. • Con pos y lookat podemos configurar la cámara en OpenGL glMatrixMode(GL_PROJECTION).y. glLoadIdentity().z. far). aspect. pos. gluPerspective(fovy. lookat. near. glLoadIdentity().x + cos(yaw) * cos(pitch). Videojuegos II © 2015-2016 Depto.y = pos. pos. 0).z. lookat.x.x = pos.x.z = pos. 1.y + sin(pitch). Ciencia de la Computación e IA Cámara 8 . 0.V2 Control de la cámara Render de la cámara • Debemos indicar la dirección a la que mira la cámara lookat.z + sin(yaw) * cos(pitch). lookat.

yaw.V2 Control de la cámara Simuladores de vuelo • Tenemos seis grados de libertad ¡Gimbal lock! • Esto es problemático con ángulos de Euler (pitch. Ciencia de la Computación e IA Cámara 9 . roll) • Se necesita el uso de quaternions • Representamos la orientación mediante un quaternion • Lo obtenemos a partir de ángulos de Euler si es necesario • Aplicamos giros cada fotograma a un quaternion auxiliar • Mediante post-multiplicación de quaternions • Convertimos el quaternion a una matriz de transformación • Aplicamos la matriz al objeto Videojuegos II © 2015-2016 Depto.

Ciencia de la Computación e IA Cámara 10 .V2 Control de la cámara Cámaras en tercera persona (I) • Seguimiento • • • • Sigue a nuestro personaje a cierta distancia Habitual en juegos de plataformas y shooter en tercera persona Requiere detección de colisiones y lógica de evitación de obstáculos Se recomienda permitir también control del usuario • Cámara animadas • El movimiento de la cámara está predefinido Se definen mediante un script • Cámara de depuración • Permite libertad total por el mundo Videojuegos II Recomendable poder activarla al entrar en pausa para depurar © 2015-2016 Depto.

Normalmente sólo controlamos el desplazamiento horizontal Videojuegos II © 2015-2016 Depto. segmentos o splines Camara RTS (Real-time strategy): Flota sobre el terreno mirando hacia abajo con cierto ángulo.V2 Control de la cámara Cámaras en tercera persona (II) • Posicionamiento automático • La posición de la cámara se determina de forma automática • Debemos definir una heurística para buscar el mejor punto de vista • Fijas • Pueden rotar alrededor de un punto • Puede modificarse el campo visual También es importante determinar qué nos interesa ver • Railes • Se mueven a lo largo de un rail predefinido • Podemos utilizar planos. Ciencia de la Computación e IA Cámara 11 .

y plookat.z = pplayer.d * cos(yaw) * cos(pitch) pcam.x = plookat.x . Ciencia de la Computación e IA Cámara 12 .z + d * sin(yaw) * cos(pitch) © 2015-2016 Depto.V2 Control de la cámara Cámara de seguimiento (posición) • La cámara debe seguir al personaje • La cámara se sitúa tras él a una determinada distancia y elevación • La cámara no debe mirar al personaje directamente • Es más importante centrarse en lo que el personaje ve • Apuntamos a un punto delante de él pcam pitch plookat.x = pplayer.y = pplayer.z + df * sin(yaw) d df pplayer Videojuegos II plookat pcam.y + d * sin(pitch) pcam.y = plookat.z = plookat.x + df * cos(yaw) plookat.

Ciencia de la Computación e IA Cámara 13 . la cámara se moverá demasiado rápido al girar. describiendo grandes arcos • La ecuaciones deben utilizarse sólo como indicadores de hacia donde debemos mover la cámara Cámara inercial • El movimiento lo haremos de forma suave hasta la posición destino Videojuegos II © 2015-2016 Depto.V2 Control de la cámara Camara de seguimiento (movimiento) • Las ecuaciones anteriores nos dan la posición y orientación • Se dan respecto a la posición del personaje • Si actualizamos conforme se mueve el personaje.

q1. Ciencia de la Computación e IA q1 Cámara 14 .q1.t) = q0 (1-t) + q1 t q0 Quaternion origen q1 Quaternion destino • Obtenemos un mejor efecto con interpolación esférica (SLERP) SLERP(q0.t) = (q0 sin((1-t)θ) + q1 sin(tθ)) / sin(θ) Proporciona velocidad angular constante • Describe una geodésica q0 θ • En el límite θ ⟶ 0 equivale a interpolación lineal (LERP) Videojuegos II © 2015-2016 Depto.V2 Control de la cámara Camara con movimiento inercial • Interpolamos desde la posición actual a la posición objetivo • Debemos utilizar quaternions LERP(q0.

Ciencia de la Computación e IA Cámara 15 .cosθ > Δ) θ = acos(cosθ) s0 = sin((1-t) * θ) / sin(θ) s1 = sin(t * θ) / sin(θ) Intepolación esférica Si no Salida s0 = 1-t • Quaternion resultante qr s1 = t Aproxima con intepolación lineal Fin si qr = q0 s0 + q1 s1 Videojuegos II © 2015-2016 Depto.V2 Control de la cámara Interpolación esférica (SLERP) cosθ = q0 · q1 Entrada Si (cosθ < 0) • Quaternion origen q0 • Quaternion destino q1 • Tiempo t cosθ = -cosθ q1 = -q1 Fin si Si el ángulo es pequeño aproximamos con interpolación lineal Si (1 .

camara. posicionObjetivo. DAMPING * dt). Ciencia de la Computación e IA Cámara 16 .posicion = personaje. DAMPING * dt). camara.posicion + orientacion * desplazamiento.V2 Control de la cámara Actualización de la posición • El seguimiento debe hacerse de forma suave • Rotación suave orientacion = SLERP(camara.posicion = LERP(camara.posicion. camara. camara.posicion + personaje.orientacion.rotacion * desplazamiento.posicion.lookat = personaje. personaje. • También puede ser modelado mediante resortes Videojuegos II © 2015-2016 Depto.lookat = personaje. • Desplazamiento suave Rotación del desplazamiento local de la cámara mediante multiplicación con quaternion posicionObjetivo = personaje.posicion.orientacion.

2 t la ecuaci´ Podemos dividir m toda e + ke t = o0n entre e . Tenemosque la lo Para evitar la oscilaci´ n deberemos poner una fuerza • La fuerza ejercida por el resorte es proporcional a la posición p ecuaci´ on: itarsiguiente la frene: oscilaci´ o n deberemos unay fuerza de damping que lo dv k respecto al punto deponer reposo a lafconstante de elasticidad = ma = kp resorte mp00 = kp ma = kp (37)(42) ffresorte = = ma = kp dv resorte Tenemos por lo tanto la mp siguiente ecuaci´ o n 00 0 diferencial que p = derivada kp (42) dp de la posici´on.3 Mass Spring Damper Resortes (I)Para evitar la oscilaci´ onkdeberemos poner una fuerza de dam =0 (41) m 2+ 2 frene: + k = o0un (41)de damping m Sin la existencia de damping resorte oscilar´ a continuamente. con lo que tenem (40) de 5kN la cámara ser´a de a a la gravedad. comprobar • Podemos .2 con + k = 0 s dividir toda la ecuaci´on entre e t . mala=aceleraci´ kp dv fresorte =que Considerando o n es la segunda solver: • Podemos expresar lo anterior00como tenemos: mp = kp dp0 (43) 00 00 0 00 00 0 mp + dp + kp mpmp = =kp kpdp (38) =(43) 0= 0 mp + kp 00 0 t = 0 0 t 00 mp + dp + kp (44) s por lo tanto la siguiente ecuaci´ on diferencial que podemos re. de forma que p = e y p = Podemos sustituir p = e 16 00 0 • Ecuación diferencial solución es f (t) =tenemos: a cos t (44) + b sin t mp + dp + kp = sustituimos encuya la 0ecuaci´ onp = anterior El resorte oscila p = f (t) = a cos t + b sin t (45) indefinidamente 00 0m 2 e t + ke t(39) + kp = 0 mp p = a sin t + (45) b= cos0 t p = f (t) = a cos t + b sin t 0 t 00 2 t t 0 es de forma dividir que p = e y p = e . oscilaci´ onla Computación de17dam Cámara Videojuegos II Ciencia m de edIA e poner e + + ke = 0 p00 = Para a cosevitar t© 2015-2016 b sin t (47) t . con lo que tenemos: 4. quedando as´ı en equilibrio. Si s sustituir p = e t . con lo que tenem Podemos toda la ecuaci´ o n entre e que la solución correcta derivando p = a sin t + b cos t (46) en la ecuaci´on anterior p00 = a cos t (46) b sin t p0 = a tenemos: sin t + b cos t 2 +k =0 m 00 p0 = a cos t b sin t (47) 2 t t m e + ke = (40) 2deberemos t t tuna fuerza la Depto. V2aguaControl 2que t compensar´ t e +toda ke = (40) lo que tenemos: Podemosmdividir la 0ecuaci´on entre m e t .

2 t t t m e + ke = 0 . con 2 + ko= 0 m Para evitar la oscilaci´ n deberemos poner una fuerza (41) de dam Resortes (II) 2 Para evitarfrene: la m oscilaci´ poner una fuerza de damping que lo + kon=deberemos 0 (41) frene: vitar la• oscilaci´ on deberemos poner continua una fuerzadebemos de 2damping Para evitar la oscilación + 2!0introducir ⇠ que + !02lo=damping 0 fresorte =2 ma = kp 2 dv + 2!0 ⇠ + !0 = 0 (42) fresorte = ma = kp2 dv 2 + 2!0 ⇠ +d!0 = 0 0 fresorte = ma = kp dv mp00 =⇠ =kpp (42) dp d 2 mk 00 0 • Se puede expresar como mp = kp dp (43) ⇠ =d p 2 mk p ⇠ = 00 0 00 = (A 0 + Bt)e !0 t p mp = kp dp mp t+ dp2 +mk kp(43) =0 !0 t 2 200 + dp0 + kp = 0 mp (44) p = (A + Bt)e + 2!0 ⇠ + !0 = 0 (51) t !0 t p = (A + Bt)e • Buscamos una solución con el mínimo damping que evite t =p mp00 + dp0 + kp = 0 (44) p = f (t) = aAcos t 0+ b sin t totalmente la oscilación d f (t) = a cos t + b sin t A = p p= (45) 0(52) ⇠= p Critical damping A = p0 2 mk 0 p = f (t) = a cos t + b sin t Ba= vt0 + + b!(45) p = sin cos 0 p0t p0 = !0at sin t + b cos t B = v + ! p (46) 0 0 0 pt = (A + Bt)e (53) r B = v0 + !0kp0 0 00 p = a sin t + b cos t (46) p = a cos t b sin t r 00 p =velocidad a cos t b sin t !0 =r m (47) Podemos derivar para obtener k A = p0 (54) t = ! 0 k 2 t t t m p00 = a cos t 2 b sin t (47) t = ! m e + d e + ke =0 0 t t t m Cámara 4.4 Restricciones r´ıgidas Videojuegos II © 2015-2016 18 m e Depto. + dCiencia e de+la Computación ke =e 0IA (48) . con lo que (40) tenemos: Podemos dividir toda la ecuaci´ o n entre e Control de la cámara V2 2 +k =0 m lo que tenemos: os dividir toda la ecuaci´on entre e t .

private var omega : float.position = posicion + posicionDestino.deltaTime) * (-omega) + B) * Mathf. Videojuegos II © 2015-2016 Depto.0.zero.LookAt(target. velocidad = Vector3.Exp(-omega * Time. var posicionDestino : Vector3 = target. var B : Vector3 = velocidad + omega * posicion. velocidad = ((A + B * Time. var posicion : Vector3 = transform.zero.Exp(-omega * Time. function Start () { omega = Mathf. springConstant : float = 2. posicion = (A + B * Time.posicionDestino.0.deltaTime). transform. mass : float = 1. anchor : Vector3 = Vector3.position . target. private var velocidad : Vector3.up). } function Update () { var transform : Transform = GetComponent(Transform).rotation * anchor.deltaTime) * Mathf. var A : Vector3 = posicion.position + target.Sqrt(springConstant/mass). } transform.deltaTime).V2 Control de la cámara Resortes (III) • Implementación en Unity var var var var target : Transform. Ciencia de la Computación e IA Cámara 19 .

Ciencia de la Computación e IA Cámara 20 .V2 Control de la cámara Control de cámara en Unity • Import Package > Cameras • Cámaras • • • • Importante ajustar ángulos máximos Fija (CCTV): Look At Target Camara de mano: Hand Held Cam Seguimiento: Auto Cam Giro libre y seguimiento: Free Look Cam • Aditivos • Target Field Of View: Ajusta también FOV (combinable con CCTV) • Protect Camera From Wall Clip: Evita oclusiones • Creados por la comunidad • http://wiki.com/index.php/Scripts/Controllers Videojuegos II © 2015-2016 Depto.unity3d.

Ciencia de la Computación e IA Cámara 21 .V2 Control de la cámara Cámara de seguimiento en Uncharted 3 Videojuegos II © 2015-2016 Depto.

Ciencia de la Computación e IA Cámara 22 .V2 Control de la cámara Seguimiento en combate en Uncharted 3 Videojuegos II © 2015-2016 Depto.

Ciencia de la Computación e IA Cámara 23 .V2 Control de la cámara Movimiento manual de la cámara • Es recomendable permitir mover la cámara manualmente • El jugador puede querer explorar el escenario • Debemos llevar cuidado con el ángulo de la cámara • La rotación horizontal (yaw) se hace moviendo el ratón o stick derecho en horizontal • El movimiento vertical del control puede corresponder a zoom o a rotación vertical (pitch) • En algunos casos se realiza a lo largo de un spline Controla de forma intuitiva pitch y zoom al mismo tiempo Videojuegos II © 2015-2016 Depto.

V2 Control de la cámara Control manual de cámara en Uncharted 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 24 .

pero dar transparencia a los obstáculos • Sólo para casos muy concretos • Juegos en los que se justifique no mover la cámara (por ejemplo perspectiva isométrica) Videojuegos II Buscar posiciones alternativas para la cámara • Recomendable en la mayoría de casos • No es trivial encontrar una posición adecuada © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 25 .V2 Control de la cámara Colisiones de la cámara • La cámara puede colisionar con la geometría • No debemos permitir que tape a nuestro personaje • Opciones Permitir colisión.

Ciencia de la Computación e IA Cámara 26 .V2 Control de la cámara Detección de la colisión • Se debe evitar que la cámara penetre en la geometría • Podemos envolverla con un sensor de colisiones • Se suele utilizar una esfera como forma de colisión • Debe abarcar el plano cercado de la cámara • Se puede crear un anillo de esferas de colisión • Estudiar si la cámara puede volver a su posición deseada • Se traza un rayo desde cada esfera al jugador • La cámara se mueve hacia la zona más libre Videojuegos II © 2015-2016 Depto.

V2 Control de la cámara Resolver la colisión Recomendado No recomendado • Uno de los enfoques más sencillos es mediante zoom • Si es necesario el zoom se puede hacer a primera persona • Modificar el ángulo horizontal suele ser mala idea • Confunde al jugador • Puede ser útil si ayuda a encaminar al jugador • Se puede también cambiar el ángulo vertical • Debemos evitar que se pierda el horizonte • La cámara podría moverse en forma de arco (spline) • Cuando un usuario está apuntando no deberíamos girar la cámara • En general es recomendable girar lo menos posible Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 27 .

Control de la cámara V2 Colisión con la cámara en Uncharted 3 • Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 28 .

i++) { if(ViewingPosCheck(checkPoints[i])) Nos quedamos con la más break.com/learn/tutorials/projects/stealth/camera-movement Videojuegos II © 2015-2016 Depto.Length.25f). var checkPoints : Vector3[] = new Vector3[5].5f).Lerp(standardPos. standardPos checkPoints[2] = Vector3.Lerp(standardPos. abovePos.75f). 0. checkPoints[3] = Vector3. Ciencia de la Computación e IA Cámara 29 . abovePos. i < checkPoints.Lerp(standardPos. var abovePos : Vector3 = player.position + Vector3. checkPoints[1] = Vector3.V2 Control de la cámara Ejemplo de resolución de colisiones con Unity var standardPos : Vector3 = player.up * relCameraPosMag. 0. for(var i = 0. abovePos. abovePos checkPoints[0] = standardPos. } cercana a la estándar que • Fuente Comprueba visibilidad lanzando un rayo hacia el personaje no produzca oclusión • https://unity3d.position + relCameraPos. 0. checkPoints[4] = abovePos.

Ciencia de la Computación e IA Cámara 30 .V2 Control de la cámara Animaciones aditivas • Se pueden añadir animaciones sobre la cámara • Efecto de andar • Efecto “sacudida” • Se pueden definir en tiempo de diseño • Se suman al movimiento de seguimiento • Útil para pequeños movimientos • Grandes movimientos podrían confundir al jugador Videojuegos II © 2015-2016 Depto.

Ciencia de la Computación e IA Cámara 31 .V2 Control de la cámara Animaciones aditivas en Uncharted 3 Videojuegos II © 2015-2016 Depto.

V2 Control de la cámara Cámara animada en Uncharted 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 32 .

Ciencia de la Computación e IA Cámara 33 .V2 Control de la cámara Cámara de depuración en Uncharted 3 Videojuegos II © 2015-2016 Depto.

Ciencia de la Computación e IA Cámara 34 .V2 Control de la cámara Cámara automática • Su posición y orientación se determinan de forma automática • Necesitamos una heurística para buscar el mejor punto de vista • Debemos mover la cámara lo mínimo posible • Un algoritmo de posicionamiento de cámara debe cumplir • Se debe mostrar todo lo relevante • Se deben evitar oclusiones • Debe apuntar a un lugar de interés • Se debe determinar • Conjunto de objetos relevantes • Ángulo con el que mirar a estos objetos • Distancia con la que mirar a los objetos Videojuegos II © 2015-2016 Depto.

Ciencia de la Computación e IA Cámara 35 .V2 Control de la cámara Detección de los objetos relevantes (I) • La solución más sencilla es centrarla en el jugador • Si hay enemigos hacia un lado podría ser conveniente verlos • Apuntamos a un punto intermedio entre el jugador y los enemigos • El jugador debe quedar siempre dentro de la pantalla • La cámara se centrará en los objetos que sean más relevantes • Personaje • Otros personajes cercanos • Objetos con los que podamos interactuar • Ejemplo: cámara para combates • Los contrincantes deben aparecer separados en la horizontal Videojuegos II © 2015-2016 Depto.

la orientaremos hacia allí Videojuegos II © 2015-2016 Depto. deberemos calcular el camera frustum adecuado • Ángulo con el que mirar a los objetos • Distancia a la que mirarlos • Consideramos el bounding box de los objetos relevantes • Se juntan todos los objetos cercanos en un único bounding box • El centro de atención puede ser el centro del bounding box • Si la cámara está fija en un punto. Ciencia de la Computación e IA Cámara 36 .V2 Control de la cámara Detección de los objetos relevantes (II) • Una vez determinados los objetos que consideramos relevantes.

Ciencia de la Computación e IA Cámara 37 . mide la divergencia angular de los rayos que emanan de dicho punto hacia cada objeto relevante • Cuanto mayor sea. menor solapamiento entre los objetos existirá Videojuegos II © 2015-2016 Depto.V2 Control de la cámara Ángulo de la cámara (I) • Debemos buscar un ángulo que • Evite oclusiones • Mantenga la proporción de los objetos Máximo AAS • Normalmente la vista vertical produce menos oclusiones • Debemos penalizarla para buscar una horizontal • Determinar la posición con menos oclusiones Average Angular Separations (AASs) • Dado un punto.

Para cada rayo Selecciona el rayo más cercano a él (menor ángulo) aas = aas + angulo_con_el_rayo_seleccionado Fin para aas = aas / numero_de_rayos • Calculamos el AAS para varios puntos candidatos • Puntos de vista verticales tienen mayor AAS • Para que sean comparables debemos coger puntos a una misma altura • Podemos penalizar las vistas verticales según el pitch Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 38 .V2 Control de la cámara Ángulo de la cámara (II) • Algoritmo para el cálculo de AAS aas = 0.

de forma que se vea todo el BB © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 39 .V2 Control de la cámara Distancia a la cámara (I) • Hemos determinado BB Bounding box de los objetos de interés v Dirección con la que mirar a los objetos p Punto de interes de los objetos f Campo visual de la cámara p f • Queremos calcular c BB v Posición de la cámara Línea l Videojuegos II Buscamos c en esta línea.

Ciencia de la Computación e IA f v c Cámara 40 .V2 Control de la cámara Distancia a la cámara (II) • Seleccionamos un punto q arbitrario en l • Calculamos el vector desde q a cada esquina del BB • Nos quedamos con la esquina r del BB que produzca mayor ángulo respecto a v BB p r u v • Buscamos un punto en l que produzca que u tenga un ángulo f respecto a v cx = px .vzt v·u = vxux + vxux + vxux = acos(f) Resolver el sistema de ecuaciones Videojuegos II q BB p Conviene dejar margen con el borde (considerar un f mayor que el real) © 2015-2016 Depto. cy. t) cz = pz .vxt 4 ecuaciones cy = py . cz.vyt 4 incógnitas (cx.

Ciencia de la Computación e IA Cámara 41 .V2 Control de la cámara Enfoque basado en reglas • Podemos utilizar IA basada en reglas para la selección de cámara Si salimos por primera vez al exterior Ejecutar script de vista panorámica del escenario Si hay un enemigo cerca posicion = sobre el personaje lookat = enemigo Por defecto posicion = sobre el personaje lookat = punto delante del personaje Videojuegos II © 2015-2016 Depto.

V2 Control de la cámara Cámara de combate en Uncharted 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 42 .

V2 Control de la cámara Cámara fija • Se encuentran fijas en una determinada posición • No encontramos problemas de colisión con la geometría • Pueden cambiar la orientación o zoom • Deberemos determinar qué zona interesa mostrar • Útil en estancias pequeñas • Muestra toda la habitación desde una esquina y evita colisiones • Muy utilizadas en el género del survival horror • Permite al diseñador controlar exactamente lo que mostrar Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 43 .

Ciencia de la Computación e IA Cámara 44 .V2 Control de la cámara Cámara de combate fija en Uncharted 3 Videojuegos II © 2015-2016 Depto.

V2 Control de la cámara Cámara fija en Resident Evil 5 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 45 .

Ciencia de la Computación e IA Cámara 46 .V2 Control de la cámara Cámara fija con ángulo variable en Silent Hill 2 Videojuegos II © 2015-2016 Depto.

V2 Control de la cámara Cámara fija en Uncharted 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 47 .

Ciencia de la Computación e IA Cámara 48 .V2 Control de la cámara Cámara sobre railes • Cámaras que se mueven a lo largo de una guía establecida • Añade a la cámara fija la posibilidad de desplazarse sobre un rail • El rail puede tomar cualquier forma • La trayectoria del rail debe ser diseñada con cuidado • Debemos evitar colisiones y oclusiones • Podemos diseñar la trayectoria como una spline • Generar spline a partir de puntos de control • Obtenemos curva discretizada en segmentos • La cámara se moverá sobre los segmentos Videojuegos II © 2015-2016 Depto.

Ciencia de la Computación e IA Cámara 49 .V2 Control de la cámara Cámara sobre railes en God of War 3 Videojuegos II © 2015-2016 Depto.

V2 Control de la cámara Cámara spline en Uncharted 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 50 .

V2 Control de la cámara Múltiples cámaras • Podemos combinar distintos tipos de cámaras en el juego • El diseñador hará el papel de “director de cine” • Necesitamos seleccionar la cámara apropiada en cada momento • Debemos definir una heurística para ello • Podemos utilizar la distancia al personaje y definir prioridades • Podemos tener en cuenta la situación del personaje Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 51 .

V2 Control de la cámara Cámaras en God of War 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 52 .

virtual float distancia(Punto *p). return rail->distancia(p). } } class CamaraRail : public Camara { Segmento *rail. Ciencia de la Computación e IA Cámara 53 . } Videojuegos II © 2015-2016 Depto.V2 Control de la cámara Sistema de cámaras • Abstracción de las cámaras del juego • Podemos seleccionar la cámara en función de la distancia o zona • Podemos mezclar varias cámaras class Camara { float CamaraFija::distancia(Punto *p) { public: return posicion->distancia(p). } } float CamaraRail::distancia(Punto *p) { class CamaraFija : public Camara { Punto *posicion.

V2 Control de la cámara Diseño de cámaras Cámaras sobre railes Cámaras fijas Selección de cámara • Distancia al personaje • Zonas predefinidas Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 54 .

Ciencia de la Computación e IA Cámara 55 . if(distancia < distanciaMin) { distanciaMin = distancia. private var camaras : Camera[].V2 Control de la cámara Gestor de cámaras en Unity • Selecciona la cámara más cercana var target : Transform.Distance(camara. camaraCercana = camara.GetComponent(Transform).MaxValue. } } camaraCercana. Videojuegos II © 2015-2016 Depto.position. target.current.enabled = false. } camara. var distanciaMin : float = float. for(var camara : Camera in camaras) { var distancia : float = Vector3.enabled = true. } function Update () { var camaraActual : Camera = Camera.position).allCameras. function Start () { camaras = Camera. var camaraCercana : Camera = null.

V2 Control de la cámara Mezcla de cámaras en Uncharted 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 56 .

V2 Control de la cámara Sistema de cámaras en Uncharted 3 Videojuegos II © 2015-2016 Depto. Ciencia de la Computación e IA Cámara 57 .

youtube.net/articles/the-making-of-god-of-war-iii • Creating an Emotionally Engaging Camera in Tomb Raider • http://tombraider. 14 • Daniel Sánchez-Crespo Dalmau.eurogamer.3 • Marc DeLoura • The Cameras of Uncharted 3: Drake’s Deception • http://www.com/coursemat. Cap. Cap.html • God of War 3 Camera Design • https://www. New Riders • Game Programming Gems.com/watch?v=grAiRpLYMW0 • The Making of God of War III • http://www.tumblr.V2 Control de la cámara Referencias • Core Techniques and Algorithms in Game Programming.com/post/49443068007/gdc-recap-creatingan-emotionally-engaging Videojuegos II © 2015-2016 Depto. 4.gameenginebook. Ciencia de la Computación e IA Cámara 58 .

.? Videojuegos II © 2015-2016 Depto.V2 Control de la cámara ¿Preguntas.. Ciencia de la Computación e IA Cámara 59 .

Sign up to vote on this title
UsefulNot useful