en Tutoriales, UE4

Transiciones de nivel (Parte 3)

En esta parte vamos a utilizar un método alternativo, en vez de usar un clon de nuestro personaje podemos utilizar una segunda cámara ligada al cuerpo del personaje. Esto tiene ventajas y desventajas, y ahora vamos a verlas con más detalle.

Transición con pantalla dividida
Transición con máscara cilíndrica
Máscara del personaje

Lo primero que vamos a hacer es modificar nuestro personaje para eliminar todo lo relacionado con la replicación de movimiento del clon. Podemos eliminar también la variable AI Controller, este personaje nunca va a perder la posesión del jugador.

char_movement
char_movement

Ahora podemos añadir un segundo componente Scene Capture al mismo brazo que el otro Scene Capture que ya tenemos. Ya que estamos podemos desplazar este segundo Scene Capture para que quede dentro de la habitación destino. El vector de translación utilizado para desplazar esta segunda cámara es el que podemos utilizar para realizar el teletransporte del personaje a la habitación destino al finalizar el efecto de transición.

scene_capture_2
two_cameras
rooms_viewport

Esta cámara necesita su propio Render Target 2D. Sus ajustes serán los mismos que el que ya tenemos para el otro Scene Capture.

dynamic_render_target

La inicialización de los componentes del mapa ahora es mucho más simple con un solo personaje.

init_map

Y el material acepta ambos render target del mismo personaje, uno de cada Scene Capture.

material_inputs

Ahora podemos apreciar el primero problema en los límites de la transición. Puesto que no tenemos un personaje en la posición de destino, cuando la transición alcanza ese punto vemos una zona vacía en la posición del personaje.

result_v1

La primera opción para para arreglar este problema es generar una máscara con la forma del personaje. La opción más rápida es asignar un valor Custom Stencil a la malla del cuerpo del personaje y modificar el material para incluir esta forma a la composición final.

custom_stencil


Hemos activado la opción de Render Custom Depth y establecido un valor de 38 (por ejemplo) en el Custom Depth Stencil.

Para ser capaces de ver y utilizar este valor en un material tenemos que activar el buffer cambiando una opción del editor en la sección Rendering. Custom Depth-Stencil Pass la ponemos a Enable with Stencil.

custom_stencil_enable

Este buffer se puede ver en el viewport del editor cambiando el View Mode a Buffer Visualization > Custom Stencil, puede resultar útil para depuración.

custom_stencil_visualization
custom_stencil_visualization

En nuestro material tenemos que añadir un nodo Scene Texture y utilizando el desplegable de la pestaña de Details seleccionar Custom Stencil

custom_stencil_node

Para hacer la máscara se puede utilizar una clausula condición, devolverá un valor de 1 cuando el custom stencil sea 38 y 0 en cualquier otro caso. Podemos extraer el valor de cualquiera de las componentes del Color de Custom Stencil, todas las componente de este color tienen el mismo valor.

stencil_mask_38

Esta máscara tiene que añadirse a la máscara que ya estábamos generando con el cilindro de transición.

material_final_mask

Esta a sido la última modificación necesaria para esta aproximación para no utilizar un personaje clonado. Y ahora ya podemos ver el cuerpo completo del personaje durante todo el tiempo de la transición.

Al final de la transición el personaje puede ser teletransportado a la habitación destino. Pero como podemos ver, ahora tenemos un nuevo problema con la sombra proyectada por el personaje, durante la transición, en la sección de destino.

Estamos consiguiendo la máscara del cuerpo del personaje utilizando el buffer Custom Stencil, pero esta máscara no puede incluir su sombra. No podemos extraer una sombra independiente de la superficie en la que está proyectada. Este problema también lo encontramos con los reflejos, en general todos los efectos que tienen que ser proyectados sobre una superficie.

Durante la transición tenemos el personaje físicamente en la habitación origen por lo que sólo tenemos la sombra proyectada en esta habitación. Al no tener un personaje en la habitación de destino no podemos tener ninguna sombra proyectada en su superficie.

En conclusión, utilizando solo dos Scene Capture podemos llegar a obtener un efecto de transición bastante decente bajo ciertas condiciones, pero utilizando un clon se pueden conseguir un mejor efecto a costa de utilizar unos pocos recursos más para duplicar el personaje y sus movimientos, efectos visuales…

youtube_cylinder_transition

Tutorial files:

github

UE4 Project

Ayudanos con este blog!

El último año he estado dedicando cada vez más tiempo a la creación de tutoriales, en su mayoria sobre desarrollo de videojuegos. Si crees que estos posts te han ayudado de alguna manera o incluso inspirado, por favor considera ayudarnos a mantener este blog con alguna de estas opciones. Gracias por hacerlo posible!


Escribe un comentario

Comentario

diecinueve − 8 =