Curso de Unreal para Aximmetry. Sesión 6 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Insertar vídeos en la escena y crear Blueprints
Las dudas también que podéis tener por ahí.
00:00:01
Vale, acuérdate de la resolución de pantalla, que creo que está bien, ¿no? La veo bien.
00:00:04
Sí, Hernandota, tenemos esto. Tengo la lupa aquí preparada.
00:00:07
Hola.
00:00:12
Hola, hola.
00:00:13
Y tengo el web.
00:00:15
Se me ha salido.
00:00:16
Hola, hola.
00:00:18
Sí, sí, es que se me ha cerrado la versión de Moe, de repente.
00:00:20
¿Ah?
00:00:23
No sé si está... Vale, pues se está grabando.
00:00:24
Hola, hola, hola.
00:00:31
Ok.
00:00:33
Vale. Pues por ahí ya va encendiendo, ¿no? Una mesita.
00:00:38
Ya cuando queráis, ¿eh?
00:00:48
¿Sí? ¿Arrancamos?
00:00:50
Sí.
00:00:52
Vale.
00:00:52
Venga, perfecto. Pues nada, venga, dudas que tengáis por ahí antes de meternos en faena.
00:00:53
Me ha comentado un compañero que tenía curiosidad por ver cómo se renderizaba en ACES dentro de Unreal.
00:01:01
Entonces, es un proceso mecánico, pero es un poquito largo.
00:01:07
como íbamos un poquito a pillar de tiempo
00:01:10
le he comentado eso, que hay un tutorial
00:01:12
de William Fosher
00:01:14
que cuenta cómo hacerlo paso a paso
00:01:16
muy sencillito
00:01:19
se llama Unreal to DaVinci Resolve
00:01:20
Workflow
00:01:22
Haces a un Standard RGB, te explica las dos
00:01:23
maneras, en los dos
00:01:26
espacios de color
00:01:28
por si
00:01:29
os interesa
00:01:32
luego, Álvaro
00:01:34
tú tenías algo por ahí que comentar también, puede ser
00:01:36
Álvaro está afuera ahora
00:01:38
Acaba de salir.
00:01:40
Ah, acaba de salir.
00:01:41
Vale, pues estamos grabando.
00:01:42
Bueno, pues venga, yo voy avanzando y ahora cuando vuelva que me pregunte.
00:01:44
¿El resto tenéis algo que comentar?
00:01:48
¿Alguna dudilla?
00:01:50
No, no.
00:01:54
En principio no, ¿no?
00:01:55
Vale.
00:01:56
Venga, pues vamos a quitarnos las dos cosas que nos faltaban de la parte visual de Unreal
00:01:57
y nos metemos con Blueprints, que es la parte de programación gráfica.
00:02:02
¿Vale?
00:02:06
Que Dios os bendiga.
00:02:06
entonces, a ver
00:02:07
¿cómo metemos
00:02:11
un vídeo
00:02:13
en una geometría?
00:02:15
¿cuál es la forma para meter, por ejemplo
00:02:17
en la parte de abajo de la mesa
00:02:19
de nuestro set virtual
00:02:20
necesitamos meter un vídeo
00:02:23
entonces, para meter un vídeo
00:02:25
hay que
00:02:27
trabajar con una serie de assets
00:02:29
que todavía no habíamos trabajado
00:02:31
me voy a hacer una carpetita nueva
00:02:33
dentro de set virtual
00:02:35
botón derecho
00:02:36
new folder
00:02:39
07 barra baja
00:02:41
vídeos.
00:02:43
¿Vale?
00:02:45
Entonces la forma
00:02:47
para acceder a un vídeo externo
00:02:48
dentro de Unreal
00:02:50
y poder reproducirlo
00:02:52
es la siguiente.
00:02:53
Primero necesitamos
00:02:55
un
00:02:57
file media source
00:02:58
que se llama.
00:03:00
Es un asset que accede
00:03:01
a un vídeo
00:03:02
o a una secuencia de imágenes.
00:03:04
¿Vale? Existen esas dos tipologías. Bueno, existe alguna más, pero las más comunes son esas dos.
00:03:06
Entonces, si damos botón derecho en el Content Browser, tenemos un grupo de assets que se llama Media.
00:03:12
¿Vale? Dentro de Media está todo lo que necesitamos.
00:03:18
Entonces, el File Media Source permite reproducir archivos que son un solo archivo,
00:03:21
pues un AVI, un MP4, un MOV, por ejemplo, y el Image Media Source permite reproducir secuencias.
00:03:26
secuencias. Si son secuencias de PNG, secuencias de JPG, de BMP, lo que sea. Entonces vamos a probar los dos. El image, el file media source. El primero lo vamos a
00:03:33
llamar fms-video01. Entonces, ¿cómo funciona este asset? Estos assets hacen referencia a archivos externos. Esto funciona un poco diferente de como
00:03:47
funcionaba el resto de assets, porque si os acordáis yo os decía que cuando importábamos
00:04:03
un FBX, él traducía ese FBX a un archivo propio de Unreal, sin embargo aquí no, aquí
00:04:08
tiene que estar leyendo un archivo externo, entonces para que nosotros podamos tener esos
00:04:15
vídeos dentro del proyecto, tenemos que hacer una carpeta dentro del proyecto donde
00:04:19
arrastremos esos archivos, tanto las secuencias como los archivos normales, como los archivos
00:04:26
únicos vale entonces eso lo vamos a hacer ahora os acordáis que para saber dónde está mi carpeta
00:04:32
content dentro de windows aquí yo puedo hacer botón derecho show in explorer vale y esto me
00:04:38
abre windows en esa ubicación es esta entonces nos tenemos que venir una carpeta hacia atrás y
00:04:49
tenemos que crear una carpeta nueva en el proyecto que se llame movies vale botón derecho nuevo
00:04:55
carpeta. Y tiene que ser movies, la primera en mayúscula
00:05:01
y el resto en minúsculas. Y es aquí donde tengo
00:05:05
que meter los vídeos o las secuencias de imágenes que necesito. Esto
00:05:09
no es porque no lo pueda leer en otra ubicación, es porque luego
00:05:13
como vamos a empaquetar el proyecto para llevárnoslo a Ximetry
00:05:16
al empaquetarlo, si los vídeos que hemos metido no están dentro del proyecto
00:05:20
no los encuentra. Si estuviese en otra ubicación
00:05:25
Ahora lo podríamos leer, pero cuando nos lo llevemos a Ximetry, al empaquetarlo no se lo va a llevar, ¿vale? No lo va a coger. Entonces, por eso es preferible que lo metamos aquí, ¿vale? Entonces, me voy a meter aquí un vídeo. No sé. A ver qué vídeos tenemos por aquí. Voy a buscar alguno de los que tengo del set virtual.
00:05:29
A ver, podría valer cualquier vídeo, ¿vale? Aquí tenía algunos de estos de noticias, un mod de noticias, tenía el del ticker también. Voy a traerme estos dos de momento, me los copio y los meto en la ubicación del proyecto.
00:05:50
A ver, aquí en la parte de Garci, en el proyecto Garci en Movies, me copio aquí estos dos vídeos, ¿vale?
00:06:15
Tenemos estos dos, uno es un MOV y otro es un MP4, ¿vale?
00:06:29
Entonces, una vez que los tenemos aquí, esto no va a aparecer como tal dentro del proyecto, ¿vale?
00:06:34
Pero yo tengo que darle esa ubicación.
00:06:43
¿Cómo le doy esa ubicación? Pues muy sencillo.
00:06:46
en la parte de vídeos en el file media source que me acabo de crear tengo que abrirlo, lo abrimos y nos aparece esta ventanita, esta ventanita realmente no sirve para mucho,
00:06:49
simplemente sirve para darle la ubicación, entonces en estos tres puntitos aquí a la derecha le decimos que lo que quiere abrir este file media source es por ejemplo el vídeo este de news,
00:06:59
vale perfecto salvamos vale y entonces ahora una vez que tenemos la referencia al vídeo cómo hacemos que se reproduzca aquí pues tenemos que crear otro asset que es un media player va a ser el que reproduzca el vídeo por así decir entonces venimos botón derecho media media player y fijaros cuando voy a crear el media player aquí me dice
00:07:20
Additional Asset to Create and Link to the Media Player.
00:07:53
Video Output Media Texture Assets.
00:07:57
Esta es la clave.
00:08:00
Lo que vamos a crear es un reproductor que tiene asociado una textura que proyecta ese vídeo.
00:08:01
Y si creamos una textura que proyecta ese vídeo ya lo podemos meter en un material y asignárselo a una geometría.
00:08:07
¿No? Entonces le decimos que si queremos crear ese Media Texture Asset y lo llamamos Media Player barra baja video 01 y automáticamente se me crea también la textura que va a reproducir ese video ¿Vale?
00:08:14
Con lo cual, doble clic y fijaros, ahora ya en el media player, que es este que acabo de abrir, me aparece referenciado el file media source que he creado anteriormente, ¿vale? Entonces, si hacemos doble clic, nos reproduce el vídeo, ¿vale? ¿Bien? ¿Hasta ahora, más o menos, se entiende?
00:08:33
¿Vale? Perfecto. Perfecto. Pues entonces, una vez que tenemos eso, lo que tenemos que hacer es un material sencillito que nos permita reproducir esa textura, sin más. ¿Vale? Entonces, botón derecho, material, y lo llamo m barra baja, video.
00:08:51
este va a ser
00:09:13
mi material master
00:09:15
luego me iré creando
00:09:16
instancias
00:09:17
para diferentes vídeos
00:09:17
¿vale?
00:09:18
entonces
00:09:22
¿qué es lo que necesito
00:09:23
controlar?
00:09:24
pues necesito controlar
00:09:25
el tileado
00:09:26
de esa textura
00:09:27
por si no se adapta bien
00:09:28
al formato
00:09:29
para que lo pueda mover
00:09:30
y la intensidad
00:09:31
del emisivo
00:09:34
porque normalmente
00:09:35
las pantallas
00:09:35
emiten un poco de luz
00:09:36
¿no?
00:09:37
entonces
00:09:39
me traigo esta textura
00:09:39
la textura
00:09:41
esta media texture
00:09:42
que se acaba de crear
00:09:43
con el media player, me la traigo
00:09:44
por acá, vale
00:09:46
ahí está, ya lo tengo, fijaros yo ya tengo
00:09:47
el vídeo dentro del material
00:09:50
entonces que es lo que tengo que hacer
00:09:51
ahora tengo que conectar el RGB
00:09:54
al base color
00:09:56
y me tengo que crear con un
00:09:57
multiply, M
00:10:00
y clic izquierdo
00:10:02
un controlador del canal emisivo
00:10:03
vale
00:10:06
aquí le metemos
00:10:07
un parámetro
00:10:10
numérico, S y clic izquierdo
00:10:11
y le llamamos Emissive Int, de intensidad.
00:10:14
De primeras lo pongo en cero, ¿vale?
00:10:19
De primeras lo ponemos en cero, luego ya veremos qué intensidad le damos,
00:10:22
porque depende de la iluminación de la escena.
00:10:25
Aplicamos y me tengo que crear también un controlador de tileado, ¿vale?
00:10:30
Como normalmente las pantallas muchas veces no tienen el formato del vídeo,
00:10:35
lo ideal es que le demos un control en X y en Y de manera independiente, ¿vale?
00:10:39
Si os acordáis que eso lo teníamos hecho en nuestro material.
00:10:44
Entonces me lo voy a copiar de nuestro material y me lo voy a traer para acá.
00:10:48
Si vengo aquí a materiales, nosotros teníamos un material que se llama ATES,
00:10:52
que fue el que estuvimos haciendo y todo este controlador de tileado ya estaba hecho.
00:10:57
Por lo cual el de rotación, bueno, me lo voy a traer todo, venga.
00:11:04
Selecciono todo, control C, me vengo al otro material, control V.
00:11:07
Aquí tengo mi controlador de tileado con los mismos nombres y con todo. Lo conecto a la texturita y ya estaría. Este es mi material para reproducir vídeos. Entonces aplico y me creo una instancia de ese material que lo voy a llamar Video Table, por ejemplo, que va a ser el vídeo que va a estar colocado aquí en la mesa.
00:11:13
perdona Diego
00:11:45
una preguntita rápida
00:11:47
al copiar y pegar
00:11:49
desde un material a otro, desde los nodos a otro
00:11:51
entiendo que los parámetros
00:11:53
parametrizados, era el nombre
00:11:55
se mantienen, es decir que no hay que volverlos
00:11:57
a parametrizar
00:11:59
no, de hecho fijaros
00:12:00
si yo ahora me hago una instancia
00:12:03
de este que acabo de crear
00:12:05
createMaterialInstance y lo llamo
00:12:06
mi
00:12:09
videotable por ejemplo
00:12:09
o videodesk
00:12:13
Bueno, da igual. Y lo aplico aquí, ¿vale? Ahí tenemos el vídeo. Y si lo abro, aquí están todos los parámetros, ¿vale?
00:12:15
Tenemos el Emissive Intensity, que es el único que hemos creado, y luego el Offset en U y en V, el Scale en U y en V, y la Rotación. Están todos tal cual.
00:12:25
El cortar y pegar dentro de Unreal sirve para todo. Incluso sirve para lo que vamos a ver hoy, que son los Blueprints.
00:12:35
También tú te puedes hacer una red de nodos de programación y copiarlos de un sitio a otro simplemente con control-c, control-v, ¿vale? Entonces, ya tenemos esto. Fijaros, si yo ahora abro el media player y le doy doble clic al vídeo, el vídeo se reproduce, ¿vale? ¿Bien?
00:12:42
Pero claro, ¿qué pasa? Que el mapeado de esta pieza no coincide con el formato del vídeo, con lo cual tengo que escalarlo dentro del material para que se vea como yo quiero que se vea, que es así, ¿vale? Que la bola se vea redonda por lo menos.
00:13:04
Bueno, entonces, pues nada, hay que tocar la escala en V, 0,5, 0,2, 0,3, y una vez que la hemos escalado la tengo que subir.
00:13:19
Entonces tengo que darle un offset en V, ¿vale? Más o menos así podría valer, aproximadamente, ¿vale?
00:13:33
Y ahora que le doy intensidad al emisivo, si le damos un 1, un 5, tengo que subirlo bastante porque estábamos en unidades reales de iluminación, si os acordáis, 500, 1000, una cosa así.
00:13:42
Eso podría empezar a valer. Entonces ahora cuando le damos al media player se mueve. Pero es un rollo esto de tener que estar dándole al media player para que se vean los vídeos.
00:13:59
¿Yo cómo lo voy a hacer mejor? Con un sequencer. Yo quiero controlar el vídeo con una secuencia. Una secuencia de Unreal.
00:14:12
Entonces, para no tener que andar dándole al media player y dejando esto minimizado, lo que voy a hacer es crearme una secuencia, botón derecho, cinematics level sequence y lo llamo lsdeskvideo.
00:14:20
¿vale? os acordáis que
00:14:37
luego nosotros podríamos anidar secuencias
00:14:39
dentro de otras, entonces
00:14:41
si yo tengo una secuencia que reproduce este
00:14:43
vídeo, yo podría tener una secuencia general
00:14:45
en la que tuviera anidados todos los
00:14:47
vídeos y que se reprodujeran
00:14:49
todos a la vez ¿vale?
00:14:51
entonces ¿cómo hacemos para
00:14:56
controlar este vídeo desde un sequencer?
00:14:57
pues tenemos que venir a track
00:15:00
media track, ¿esto qué es lo que va a hacer?
00:15:01
va a crear un media player
00:15:04
parecido al que hemos hecho antes, bueno
00:15:05
parecido no, igual
00:15:07
vale, metemos un track
00:15:09
de media track y aquí
00:15:11
le tenemos que decir primero
00:15:13
en el más que queremos
00:15:15
meter el file media source
00:15:18
o sea la referencia al vídeo
00:15:19
que acabamos de crear
00:15:21
eso es lo primero, pero con esto no es
00:15:23
suficiente, vale
00:15:25
con esto no es suficiente, también tenemos que venir aquí
00:15:27
a la línea de tiempo, seleccionar el track
00:15:29
botón derecho
00:15:32
y en la parte de propiedades
00:15:33
le tengo que asignar la textura
00:15:36
que reproduce el vídeo, el Media Texture, ¿vale?
00:15:37
Entonces le damos aquí y aquí lo tengo, ¿vale?
00:15:42
Bien, más o menos, vale.
00:15:49
Entonces, ahora una vez que está asignado,
00:15:55
simplemente cuando reproducimos nuestro Sequencer
00:15:58
ya se reproduce el vídeo, ¿vale?
00:16:02
Es así.
00:16:06
Claro, el vídeo tiene mucha más duración
00:16:07
que lo que tenía nuestra secuencia en un primer momento,
00:16:09
entonces lo podríamos hacer un poquito más grande, ¿vale? Le damos y ahí tenemos la volada del mundo girando. ¿Bien? ¿Sigos? ¿Más o menos?
00:16:11
Ok, sí. Perfecto. Entonces, esto lo tendríamos que hacer, pero además lo que necesitamos es parametrizar la textura, ¿vale? Porque es esa textura a la que vamos a acceder luego desde Aximetry para poder poner cualquier vídeo, ¿vale?
00:16:22
Entonces vuelvo al material y le digo que esta textura va a ser un parámetro, botón derecho convert to parameter y lo llamo video output, video barra baja output, ¿vale?
00:16:41
Y este parámetro es al que yo voy a tener que acceder desde Blueprints para que Aximetry pueda cambiar cualquier video en esa ubicación, ¿vale?
00:17:03
¿Vale? Perfecto. Esto lo tendríamos que hacer también con el ticker, lo tendríamos que hacer con la pantalla y lo tendríamos que hacer con el zote. ¿Vale? Entonces, como ya tenemos nuestro material preparado, y os acordáis que el otro día habíamos hecho una serie de secuencias para ir lanzando, por ejemplo, la pantalla, ¿no?
00:17:11
aquí teníamos la pantalla
00:17:36
pues vamos a crearle un material para la pantalla
00:17:40
vale, entonces
00:17:42
para la pantalla voy a lanzar una secuencia
00:17:46
entonces dentro de movies
00:17:48
dentro de mi proyecto
00:17:52
en movies, vamos a traernos
00:17:54
una secuencia de imágenes
00:17:56
para que veáis que se puede meter también
00:17:57
entonces
00:18:02
pues no sé, aquí en el tablao
00:18:04
creo que tenía alguna
00:18:08
creo que tenía aquí
00:18:09
alguna
00:18:12
algún vídeo
00:18:12
este
00:18:15
es tan chulo
00:18:17
esto es una secuencia
00:18:18
de imágenes
00:18:18
¿vale?
00:18:19
entonces nada
00:18:21
me traigo esta carpetita
00:18:22
me la copio
00:18:23
y la meto
00:18:24
en la ubicación
00:18:26
del proyecto
00:18:26
del Garci
00:18:27
que está aquí
00:18:28
aquí
00:18:29
dentro de movies
00:18:35
control V
00:18:38
¿vale?
00:18:41
1,6 gigas
00:18:42
a lo mejor
00:18:43
este
00:18:44
esta es un poquito
00:18:44
pesada
00:18:45
de más
00:18:46
y esto puede hacer
00:18:47
que el proyecto
00:18:48
se ralentice también
00:18:48
¿vale?
00:18:49
porque tiene que cargar
00:18:50
un montón de imágenes. A lo mejor lo que hago es quitarle
00:18:51
la mitad
00:18:53
de los frames. Le voy a
00:18:55
dejar... Tiene
00:19:00
muchísimos frames. Entonces
00:19:02
le voy a quitar
00:19:04
desde aquí
00:19:06
hasta aquí.
00:19:08
Estos me los cargo, ¿vale?
00:19:11
Para que no pese tanto. Vale.
00:19:12
Ya tenemos eso.
00:19:16
Entonces, me voy a coger
00:19:19
esta ubicación, CTRL-C
00:19:20
y me vuelvo a mi proyecto.
00:19:22
Y le digo, ¿vale?
00:19:25
En mi carpeta de vídeos, ahora en lugar de un file media source, lo que necesito es un media image media source, ¿vale?
00:19:26
Image media source, barra baja, bueno, lo voy a poner en mayúsculas, image media source, barra baja, vídeo 02, ahí está.
00:19:40
Doble clic y esto es lo mismo.
00:19:50
Aquí lo que me pide solamente es la ruta, ¿vale?
00:19:53
Entonces le damos a los tres puntitos, selecciono la primera imagen y lo abro, ¿vale? Salvo.
00:19:55
Entonces, ¿qué pasa? Que necesito otro Media Player diferente.
00:20:06
Vamos a crear, botón derecho, Media, Media Player.
00:20:11
Y me dice lo mismo, ¿quieres que crea una textura asociada a ese vídeo? Sí.
00:20:16
Vale, entonces le llamamos Media Player, barra baja, vídeo 02.
00:20:20
y me ha creado una textura
00:20:25
ya asociada a eso, entonces dentro de este
00:20:27
media player yo tengo que elegir
00:20:29
el otro
00:20:31
el image media source
00:20:32
el de la secuencia, normalmente
00:20:36
en real se comen mejor secuencias de imágenes
00:20:37
que vídeos
00:20:39
que archivos de vídeo
00:20:41
suele costarle
00:20:43
menos comérselo, pero ya os digo
00:20:45
que el que realmente se come
00:20:48
bien los vídeos es
00:20:49
Aximetric, porque está pensado
00:20:51
específicamente para ese tipo de cosas, para que le entren señales de vídeo, salidas de vídeo, para que le entren archivos, ¿vale?
00:20:53
Unreal no funciona muy bien con vídeos, pero bueno, de cualquier manera. Vamos a crear una instancia de este material, lo llamo
00:21:00
OMI Video Screen, doble clic y lo que tengo que hacer simplemente es sustituir esta textura, ¿vale? Ahora le tengo que meter la textura que está reproduciendo el otro vídeo, que sería esta, ¿vale? Perfecto, entonces ahora ese material lo podríamos poner aquí, ¿vale?
00:21:16
Y ahora lo mismo, tengo que hacerme una secuencia para no depender del media player, de tener que estar haciendo play en el media player, me tengo que hacer una secuencia que se va a llamar ls screen video, botón derecho cinematics, level sequence, screen video, doble clic, nos sacamos en tracks el media track,
00:21:41
que es una réplica del media player
00:22:11
que hemos utilizado antes
00:22:14
le damos al más
00:22:15
le decimos que ahora lo que queremos reproducir
00:22:18
es un image media source
00:22:20
¿vale?
00:22:22
y le asignamos la textura
00:22:23
si no le asignamos la textura no va a funcionar
00:22:25
¿vale?
00:22:28
botón derecho
00:22:28
properties
00:22:29
y en la parte de media texture
00:22:30
veis que siempre de primeras está vacío
00:22:32
pues nada
00:22:34
se lo asigno
00:22:35
¿vale?
00:22:37
con eso debería ser suficiente
00:22:37
¿vale?
00:22:40
Entonces, ¿qué pasa?
00:22:42
Que como esto es un level sequence independiente del level sequence que me anima la pantalla,
00:22:44
la pantalla está aquí abajo, si os acordáis.
00:22:52
Entonces, cuando yo le doy al play, esto se reproduce.
00:22:55
¿Vale?
00:22:59
Si yo quisiese que se reprodujera a la vez que se anima,
00:23:01
pues tendría que venir a la secuencia de la pantalla,
00:23:06
que es esta, que lo que hacía era básicamente esta animación, meterle aquí un Subsequence Track
00:23:13
y dentro de este Subsequence decirle que el que quiero que me reproduzca a la vez es el Screen Video.
00:23:22
¿Vale? ¿Vale? Entonces cuando yo le doy al Play, se mueve.
00:23:30
Pero claro, esta animación es muy cortita, la longitud del vídeo es mucho más larga, ¿vale?
00:23:37
No tiene tanto sentido. Tendríamos que tener como una secuencia por encima que cogiera tanto la animación de la pantalla como el vídeo y que tuviese más longitud, ¿vale?
00:23:41
Esto no es muy relevante porque ya os digo que los vídeos los vais a meter directamente con Aximet, ¿vale? Esto simplemente para que sepáis cómo se hace y cómo se deja preparado, ¿vale?
00:23:50
me cargo la subsecuencia esta, ¿vale? Pero bueno, ya se ve un poquito como funciona todo esto, ¿no?
00:23:59
Muy bien, pues nada, aquí simplemente en función del vídeo que tengamos, si tiene más blancos o menos blancos,
00:24:07
pues tendríamos que ajustar la intensidad del emisivo, ¿vale?
00:24:14
si le damos un 500
00:24:18
o un 1000
00:24:23
o un
00:24:25
1000
00:24:28
un 2000 en este caso
00:24:30
porque es una imagen oscurita
00:24:32
ahí ya se empieza a ver un poquito
00:24:33
perfecto
00:24:35
Diego una pregunta
00:24:38
aumentar la emisión
00:24:39
no consume muchos recursos del procesador
00:24:43
porque es luz en tiempo real
00:24:46
y además cogiendo los colores del vídeo
00:24:47
en este caso no
00:24:49
porque estábamos en
00:24:51
el sistema de iluminación baqueada
00:24:53
aquí lo que está pasando es que el brillo de la pantalla
00:24:54
no está rebotando por la escena
00:24:57
vale
00:24:58
es simplemente un efecto visual
00:25:01
o sea, lo que brilla es esta geometría
00:25:02
pero la geometría que tiene alrededor no están recogiendo
00:25:05
esos rebotes de luz
00:25:07
vale, vale, vale
00:25:09
ok
00:25:10
vale
00:25:11
esto es todo trampa
00:25:11
entonces
00:25:14
vale, se entiende más o menos
00:25:17
cómo funciona esto
00:25:20
de los vídeos
00:25:21
dentro de Unreal
00:25:21
¿sí?
00:25:22
sí, sí
00:25:24
ok
00:25:25
perfecto
00:25:25
pues entonces
00:25:27
vamos con la parte de render
00:25:27
perdona
00:25:29
sí
00:25:30
una duda sería
00:25:31
cómo podrías meter
00:25:32
señal de vídeo
00:25:34
en tiempo real
00:25:35
quiero decir
00:25:36
conexiones en directo
00:25:36
con
00:25:37
con otras cosas
00:25:38
o sea
00:25:39
acá señal de una cámara
00:25:40
por ejemplo
00:25:41
una conexión en directo
00:25:41
vale
00:25:43
eso lo vamos a hacer
00:25:44
dentro de Axymetry
00:25:45
aquí también se puede hacer
00:25:46
es un poco más lioso
00:25:47
si queréis
00:25:49
os lo enseño
00:25:49
si queréis os lo enseño, venga
00:25:50
esto no estaba previsto
00:25:53
creo que tengo que
00:25:54
si es que es una pérdida de tiempo y que lo vamos a hacer directamente en
00:25:56
axiometría
00:25:59
no pasa nada
00:26:00
a ver, lo que pasa es que
00:26:03
voy a meter mi webcam dentro de la pantalla
00:26:05
¿vale?
00:26:07
pero me tengo que
00:26:09
apagar la webcam en TeamViewer
00:26:10
que eso no sé cómo se hace
00:26:13
así se hace, vale
00:26:16
entonces, fijaros
00:26:17
Yo lo que podría hacer es sacar la pantalla y decirle que lo que quiero que se reproduzca aquí es, me tendría que hacer un, a ver, si yo le doy aquí al media player, si le doy play, ¿se reproduce?
00:26:19
No, porque lo tengo ya con el otro Media Player.
00:26:43
Voy a quitarle un momento esto, ¿vale?
00:26:47
En el Screen Video voy a quitarle esto para que lo veáis.
00:26:53
A ver, saco la...
00:27:01
Esta es la animación de la pantalla, ¿vale?
00:27:07
Y ahora mismo lo que estamos reproduciendo aquí debería ser este vídeo que no se está reproduciendo. ¿Por qué no se está reproduciendo? A ver, una cosita, un momento.
00:27:10
Es que, fijaros, la forma de meter una señal aquí en Unreal es en el Media Player, en la parte de arriba de la izquierda, tenemos un desplegable que me permite meter señales de audio o de vídeo en tiempo real.
00:27:30
Entonces, si yo le digo que me coja ahora la cámara, yo estoy aquí, ¿vale? Entonces, esto es lo que tendría que reproducir ese AI, ¿vale? Con lo cual, vamos a ver si consigo hacerlo. Siempre me pasa igual con esto.
00:27:47
A ver, tenemos este material que es el video screen, se lo aplico y este material debería de tener este video input que es este de aquí, esto está.
00:28:06
creo que cuando lo he metido en el Sequencer se ha quedado bloqueado
00:28:27
entonces voy a hacer uno nuevo y se lo aplico
00:28:32
me voy a hacer un nuevo Media Player
00:28:35
aquí le digo que me crea una textura
00:28:40
lo llamo Media Player barra baja Webcam
00:28:43
me creo un nuevo material
00:28:48
a partir del Master
00:28:54
una instancia que se llame MI barra baja Webcam
00:28:56
y este es el que aplico aquí, ¿vale?
00:29:00
Ahora aquí le tengo que meter la textura que esté reproduciendo el nuevo Media Player, ¿vale?
00:29:07
El que acabo de crear, que de momento está vacía, ¿vale?
00:29:13
Ahí está.
00:29:18
Entonces, si yo me vengo aquí abajo y le digo que lo que quiero reproducir es,
00:29:20
en lugar de un Find Media Source o un Image Media Source, lo que quiero es una señal en directo,
00:29:27
me tengo que venir aquí y decirle que coja
00:29:32
mi cámara web
00:29:34
¿vale? y aquí estoy
00:29:36
¿bien? pero esto
00:29:37
es mucho más sencillo
00:29:42
en Aximetri, mucho más
00:29:44
¿vale?
00:29:45
está preparado para estar
00:29:47
he visto que recoge también fuentes NDI
00:29:49
¿no? por lo que he visto
00:29:52
si las tienes instaladas, si, yo es que tengo instaladas las
00:29:53
NDI tools
00:29:56
y todo esto son señales NDI
00:29:56
esto es vídeo IP
00:30:00
tú puedes emitir vídeo por
00:30:01
por la wifi, vamos
00:30:03
y también me está cogiendo mi tarjeta
00:30:04
capturadora, que es la Blackmagic
00:30:08
¿vale? y bueno, y un
00:30:10
plugin que tenía para la Canon de fotos
00:30:14
que también transformaba la Canon en una webcam
00:30:16
te pilla todo lo que tengas instalado
00:30:18
¿vale? ¿bien?
00:30:20
entonces, vamos a ver como renderizamos
00:30:26
vídeo, la parte de vídeo
00:30:29
es mecánica
00:30:30
también
00:30:33
la parte de vídeo es mecánica, para renderizar
00:30:34
tenemos que tener
00:30:37
activado un plugin que se llama Movie Render Cube. Tenemos que venir a Edit, Plugins y escribimos aquí Movie Render. Tenemos que tener activados estos dos, ¿vale?
00:30:38
Tanto el Movie Render Cube, que al final, como su propio nombre indica, es una cola de render, me va a permitir meter una serie de planos en una cola y cuando acabe uno
00:30:54
empieza a renderizarse otro y luego
00:31:04
tenemos que activar también este de aquí que son
00:31:06
los passes, los additional render
00:31:08
passes, esto me va a dar
00:31:10
passes de render que luego me puedan servir para
00:31:11
postproducción, vale
00:31:14
ahora vemos los que son pero hay que
00:31:15
activarlo y reiniciar
00:31:18
no os preocupéis
00:31:20
que luego cuando acabe la clase os subo este
00:31:29
proyecto ya para que lo tengáis preparado para la parte
00:31:31
de asimetria, no hace
00:31:33
falta que lo vayáis haciendo
00:31:35
entonces, como hacemos
00:31:36
nosotros para renderizar
00:31:41
cualquier plano
00:31:44
fijaros
00:31:45
teníamos por ejemplo
00:31:46
el shot 1
00:31:48
que era el plano general este larguísimo que hicimos el otro día
00:31:50
que venía por aquí
00:31:54
y se metía dentro
00:31:57
de la
00:32:01
este no, este es demasiado largo
00:32:01
vamos a probar con el otro, con el 2
00:32:04
que era este que salía aquí
00:32:07
el bicho bailando
00:32:09
teníamos el plano de vértigo y teníamos el objeto
00:32:10
este dando vueltas
00:32:13
vale
00:32:14
voy a poner esto aquí para que no se quede parado
00:32:17
el muñeco
00:32:22
vale, tenemos esto
00:32:23
¿cómo renderizo yo esto?
00:32:26
de una forma profesional
00:32:28
para luego poder meterle un poco de postproducción
00:32:30
pues muy fácil
00:32:32
tengo que venir aquí a la clapeta
00:32:34
en los tres puntitos y elegir
00:32:36
Movie Render Queue
00:32:38
y luego le doy al botón
00:32:39
el antiguo, el Movie Scene Capture
00:32:41
se suele utilizar para
00:32:44
hacer previsualizaciones ¿vale? ¿por qué? porque el resultado de render
00:32:46
que te da es bastante pobre ¿vale? sin embargo MovieRenderQ
00:32:50
nos permite acceder a los parámetros que nos permiten subir
00:32:54
la calidad del render a costa de tiempo de render, lógicamente
00:32:58
¿no? entonces le damos a la clapeta y nos aparece esta ventana
00:33:02
esta es la ventana de MovieRenderQ y esta es la cola
00:33:06
donde yo puedo ir apilando planos para que
00:33:10
pueda darle a render e irme a tomar cañas.
00:33:14
¿Vale? Porque si no
00:33:17
tengo que estar esperando a que acabe uno para lanzar
00:33:18
otro. Entonces
00:33:20
¿Cómo se configura esto?
00:33:22
Pues muy fácil.
00:33:24
Venimos aquí al botoncito que pone
00:33:26
settings and save
00:33:28
config y se nos abre otra
00:33:30
ventana. Esta ventana es la que
00:33:32
nos va a permitir configurar el render.
00:33:34
Es aquí donde tenemos que hacerlo de
00:33:36
laces, lo que me has preguntado antes.
00:33:37
¿Vale? En esta ventanita es donde trabaja
00:33:40
el William Foucher este para
00:33:42
para todo el proceso este
00:33:43
del espacio de color
00:33:46
pero bueno, más allá de eso
00:33:48
lo que tenemos que definir
00:33:50
aquí es lo siguiente
00:33:52
primero, en la parte
00:33:54
de output vamos a definir la resolución
00:33:56
en la que vamos a renderizar
00:33:59
nuestro vídeo, vale
00:34:00
si el formato
00:34:02
si la relación de aspecto ancho
00:34:04
y alto no corresponde con la relación
00:34:06
de aspecto que yo he puesto en mi cámara
00:34:08
lo que me va a crear son bandas negras
00:34:10
Se entiende, ¿no?
00:34:14
O sea, si quiero que me renderice el 100% de lo que tengo en la cámara,
00:34:16
la relación de aspecto al menos tiene que ser igual.
00:34:19
Porque si no, él me va a poner bandas negras.
00:34:22
Arriba, o sea, arriba y abajo, o a izquierda o derecha,
00:34:24
dependiendo de cuál sea la relación de aspecto.
00:34:28
Entonces, yo aquí, por ejemplo, le podría poner un 2K para probar.
00:34:30
¿Cuánto es 2K en píxeles?
00:34:37
2K resolution, esto es, a ver, 2560 x 1440, ¿no?
00:34:39
O vamos a ponérselo, 2560 x 1440, ¿vale?
00:34:51
Esto es un 2K.
00:35:00
Luego aquí yo puedo elegir mantener el frame rate que haya puesto en mi sequencer o sobreescribirlo, lo que yo quiera, ¿vale?
00:35:01
En principio, si no tocamos nada, 24 frames por segundo, ¿vale?
00:35:10
Luego, ¿qué tenemos que decidir también?
00:35:15
El directorio donde lo guardo.
00:35:18
El primero de todos de arriba es el directorio.
00:35:20
Entonces, le damos a los tres puntitos y le digo que me voy a hacer una carpetita que se llame renders.
00:35:23
Y aquí lo vamos a ir guardando, ¿vale?
00:35:36
Perfecto.
00:35:38
Este es mi output directory.
00:35:39
Luego aquí te dice el file format. Aquí en función de si estoy renderizando una secuencia o estoy renderizando un archivo de vídeo, se pondrá de una forma o se pondrá de otra. En principio, fijaros, el formato del nombre que le va a dar a los archivos de la secuencia es el nombre de la secuencia, punto, y el frame number, ¿vale?
00:35:41
Entonces, si mi secuencia en este caso se llama ls barra baja shot 02, pues aquí me va a poner ls barra baja shot 02 punto 00000, porque siempre empieza por el 0, ¿vale?
00:36:07
Y luego 1, 2, 3, en función del número de frames que tenga mi secuencia, ¿vale?
00:36:21
¿Se entiende, chicos?
00:36:27
Voy a encender la cámara.
00:36:29
¿Me dejará?
00:36:32
No, no me va a dejar porque la tengo seleccionada.
00:36:34
Así sí me deja.
00:36:36
Vale.
00:36:37
Entonces, esto es lo primero que hay que configurar.
00:36:39
¿Vale?
00:36:42
Lo siguiente.
00:36:43
¿Qué tipo de archivo necesito yo?
00:36:45
Ahora por defecto me viene una secuencia JPG.
00:36:47
Yo nunca suelo utilizar la secuencia JPG.
00:36:50
¿Vale?
00:36:52
Entonces me la cargo.
00:36:53
Y le doy al botoncito de Settings.
00:36:55
¿Aquí qué tenemos que meter?
00:36:57
Tenemos que meter la secuencia que nosotros queramos.
00:36:58
¿Vale?
00:37:03
Si lo que queremos es hacer postproducción, yo recomiendo que rendericéis en XR, ¿vale? Es un formato que tiene 32 bits y que te permite almacenar pases de render, ¿vale? Dentro del archivo. Esto tiene sus cosas buenas y sus cosas malas.
00:37:03
Tiene la ventaja de que tenemos toda la información de iluminación disponible en cada frame y tiene el contra de que pesan mucho, ¿vale?
00:37:21
Son archivos que suelen pesar mucho, entonces tenemos que tener discos duros de gran capacidad y muy rápidos para que esto funcione bien, ¿vale?
00:37:32
Entonces, vamos a poner EXR.
00:37:41
Una vez que ponemos EXR, veis que aquí a la derecha me salen algunas cosas que se pueden configurar.
00:37:43
primero, si le voy a meter pases de render
00:37:49
tengo que activarle el multilayer
00:37:52
sí o sí
00:37:53
y después hay aquí una serie de algoritmos de compresión
00:37:55
si le digo que no me lo comprima
00:37:58
probablemente cada frame
00:38:00
me pese
00:38:02
entre 300 y 800 megas
00:38:03
según la resolución
00:38:06
entonces imaginaros
00:38:08
lo que puede llegar a pesar
00:38:09
un proyecto completo renderizado
00:38:10
es una burrada
00:38:13
bueno, yo lo dejo
00:38:14
a vuestro criterio, ¿vale?
00:38:17
Yo normalmente suelo sacar el frame comprimido
00:38:20
en algoritmo PIZ, que bueno, te quita algo de calidad,
00:38:27
pero hace que pese bastante menos, ¿vale?
00:38:32
Eso ya cada uno que lo haga como considere.
00:38:34
Según lo que estéis acostumbrados también.
00:38:39
Cuando veáis el tutorial de William,
00:38:40
pues él le quita la compresión porque le gusta trabajar a tope
00:38:44
a todo lo que da la máquina
00:38:46
bueno, luego
00:38:48
settings, que más settings hay que meter
00:38:50
tenemos que meter un setting que se llama
00:38:52
Game Overrides
00:38:54
el Game Overrides que va a hacer
00:38:58
va a deshabilitar
00:39:00
todos los mecanismos de optimización
00:39:03
que tiene el visor, os acordáis
00:39:05
que decíamos que el visor
00:39:06
hacía lots, iba cambiando
00:39:08
la geometría en función de la distancia
00:39:10
a cámara, eso lo deshabilita, siempre
00:39:12
con esto, siempre me va a mostrar
00:39:14
la malla que más pesa
00:39:16
en todos los casos. También
00:39:17
hacían bitmapping. Iba haciendo una compresión
00:39:20
de resolución de texturas en función
00:39:22
de la distancia cámara. Lo deshabilita.
00:39:24
Me muestra siempre las
00:39:27
texturas a tope de calidad.
00:39:28
¿Qué más cosas hace?
00:39:31
Las sombras tienen un
00:39:32
umbral a partir del cual, según la
00:39:34
distancia, desaparecen. Bueno, pues con
00:39:36
esto siempre se ven las sombras
00:39:38
a toda la distancia. El
00:39:40
foliage, que es la herramienta que
00:39:42
se utiliza para hacer scatter, para repartir
00:39:44
piedras y para repartir césped y cosas
00:39:46
así, igual tiene un mecanismo de
00:39:48
optimización que es que a partir de cierta distancia
00:39:50
que se llama
00:39:52
cool distance, esa distancia
00:39:54
elimina todos los elementos
00:39:56
que estén a partir
00:39:58
de esa distancia, pues
00:40:00
con esto deshabilitamos eso también
00:40:02
todo lo que rendericemos con el
00:40:04
game overrides se va a ver hasta el infinito
00:40:06
esto que hace, pues que le cueste
00:40:08
más renderizarlo, al final
00:40:10
lo que va a pasar es que los render van a tratar
00:40:12
más en renderizarse, pero es una manera de
00:40:14
resetear los sistemas
00:40:16
de optimización que trae Unreal
00:40:18
configurados por defecto.
00:40:20
¿Vale? ¿Bien? ¿Más o menos?
00:40:22
¿Se entiende?
00:40:25
¿Hasta aquí?
00:40:27
Sí.
00:40:29
Perfecto. Más cosas
00:40:32
que tenemos que meter para
00:40:34
tener el render a tope de calidad.
00:40:35
Le tenemos que meter
00:40:38
el anti-aliasing. Claro, el
00:40:40
anti-aliasing es otro sistema
00:40:42
de optimización
00:40:43
de imagen que utiliza Unreal en tiempo
00:40:46
real, entonces
00:40:48
el anti-aliasing lo tenemos
00:40:48
que sobreescribir, veis que aquí pone
00:40:52
override anti-aliasing
00:40:53
tenemos que sobreescribirlo y decirle que no
00:40:55
utilice ningún
00:40:58
algoritmo de anti-aliasing
00:40:59
ninguno, vale, vamos a ir a full
00:41:01
esto va a hacer que las
00:41:03
las líneas diagonales
00:41:07
de nuestras imágenes no se
00:41:10
no tengan prácticamente diente de sierra
00:41:11
vale
00:41:14
pero va a hacer que le cueste más renderizar cada frame, evidentemente, ¿vale?
00:41:14
Y luego aquí tenemos dos parámetros que son muy importantes, estos dos.
00:41:20
Uno, el primero se llama Spatial Sample Count y el segundo se llama Temporal Sample Count.
00:41:26
¿Estos dos qué hacen?
00:41:32
Estos dos lo que van a hacer es dividir el espacio entre frame y frame en subframes.
00:41:34
Entonces, toda la información que tenga de subframes entre frame y frame, va a ser información que él va a utilizar para que el frame final, tanto el primero como el segundo, tengan más calidad.
00:41:41
Es un mecanismo que tiene el motor de render para tener información extra que le permita dar un render, dar un frame de mayor calidad visual.
00:41:53
Entonces, ¿para qué sirve el spatial sample count?
00:42:02
Para cuando tenemos planos que tengan desenfoque de profundidad de campo.
00:42:06
si nosotros queremos mejorar
00:42:10
la calidad del desenfoque de profundidad
00:42:12
de campo tenemos que subir este parámetro
00:42:15
luego
00:42:17
por el contrario si tenemos planos
00:42:18
que tienen motion blur, tienen elementos
00:42:20
moviéndose en la imagen y queremos
00:42:22
que el desenfoque de movimiento
00:42:25
se vea más definido y se vea
00:42:26
con más calidad el que tenemos
00:42:29
que subir es el temporal sample count
00:42:31
lo malo que tienen estos
00:42:33
es que uno multiplica al otro
00:42:35
con lo cual si yo tengo
00:42:36
por ejemplo
00:42:39
un poco de desenfoque
00:42:39
y bastante motion blur
00:42:42
yo podría poner 4 en
00:42:44
spatial y 8 en temporal
00:42:47
y esto que va a hacer
00:42:49
que el motor de render, aparte de renderizar
00:42:50
los frames que yo
00:42:53
tenía previstos, me renderice
00:42:55
entre medias de cada frame
00:42:57
32 subframes, 4 por 8
00:42:58
¿se entiende?
00:43:01
chicos, ¿se entiende esto?
00:43:03
entonces claro
00:43:08
cuanto más suba esto
00:43:12
más voy a tardar en renderizar
00:43:14
la secuencia
00:43:16
porque esto va a hacer
00:43:17
que yo vaya renderizando
00:43:19
más subframes
00:43:20
entre frame y frame
00:43:21
ahora lo vemos
00:43:22
¿vale?
00:43:23
entonces ¿qué es lo ideal?
00:43:25
que en función de cómo sea el plano
00:43:26
yo adapte estos parámetros
00:43:28
cuando yo quiero sacar
00:43:29
planos a mucha resolución
00:43:30
con mucha calidad
00:43:33
puedo llegar a subir esto
00:43:34
hasta pues no sé
00:43:36
32 por 64
00:43:38
pero claro, 32 por 64
00:43:41
¿cuántos subframes son?
00:43:43
un montón, ¿no?
00:43:44
dependiendo de cómo sea nuestra máquina de rápida
00:43:48
también me lo puedo llegar a permitir
00:43:50
32 por 64
00:43:51
son 2048 subframes
00:43:54
entre frames, son un montón
00:43:56
¿vale? entonces
00:43:58
cuidadito con esto
00:44:00
yo normalmente
00:44:02
suelo hacer pruebas en función de
00:44:04
de cómo sea el plano
00:44:06
pues suelo jugar con 4 y 8 en los primeros renders para hacer una prueba
00:44:07
y luego dependiendo de cómo sea el plano, subo como mucho a 16, ¿vale?
00:44:12
4 por 16 ya son un montón de subframes, ¿vale?
00:44:18
Pero tenerlo en cuenta.
00:44:21
Hacer pruebecitas con 4 y 4, con 4 y 8,
00:44:23
y luego ya cuando se vea lo que queréis que se vea,
00:44:27
le subís o el del motion blur o el del depth of field,
00:44:30
según cómo sea el plano, ¿vale?
00:44:33
Perfecto.
00:44:38
¿Qué más cosas tengo que añadir aquí a este preset de renderizado? Le tengo que meter también variables de consola. Las variables de consola son comandos que yo puedo meter en el motor que no están sujetos a ningún botón del editor.
00:44:38
O sea, con esto estoy hackeando un poco el sistema. O sea, estoy haciendo que el editor o que el motor funcione de una forma que no suele funcionar. ¿Para qué? Para conseguir más calidad, básicamente.
00:44:57
Entonces, ¿cuáles son las variables de consola que yo tengo que meter aquí para que mi imagen final se vea lo mejor posible? Pues para eso hay que ir a la documentación de Unreal.
00:45:10
Si yo pongo aquí, MovieRenderCube, ConsolVariables, y me meto aquí, esto es la documentación. Entonces, voy bajando, voy bajando, voy bajando.
00:45:20
Bueno, aquí os cuenta todo lo que os he contado yo, que tenéis que activar el plugin, que tenéis una serie de pases, que ahora vemos, ¿vale?
00:45:40
Bajamos, bajamos, bajamos, bajamos y llega un momento que tenemos una serie de variables de consola que mejoran la imagen.
00:45:49
No, esto es lo de los sample counts, ¿veis? Esto es lo mismo que os he contado yo.
00:45:59
Y luego aquí en la parte de variables de consola, aquí tenemos una serie de variables de consola.
00:46:05
todas estas son las que tendríamos que utilizar
00:46:10
si estuviéramos renderizando con Ray Tracing
00:46:13
pero como no estamos renderizando con Ray Tracing
00:46:15
en nuestro caso solamente vamos a coger
00:46:17
estas de aquí
00:46:19
estas son las que
00:46:20
tenemos que utilizar
00:46:23
vamos a subir
00:46:24
la calidad del
00:46:27
Motion Blur, vamos a subir la calidad del
00:46:29
Desktop Fill, vamos a subir la calidad
00:46:31
del Bloom y vamos a subir la calidad
00:46:33
del Tone Mapping, o sea de la curva
00:46:35
de compresión de rango dinámico
00:46:37
¿Vale? Entonces, ¿qué es lo que tengo que hacer? Pues básicamente cogerme este texto, control c, me voy al proyecto de Unreal y fijaros, en la parte de variables de consola yo tengo aquí un grupo que se llama console variables y tenemos un más.
00:46:39
Esto es un array que se llama. Es una lista. Entonces yo tengo que ir añadiendolas. 1, 2, 3, 4, 5 y 6. Son 6 las que vamos a meter. Entonces la primera es esta. Motion Blur Quality.
00:46:59
Y el valor que tiene preestablecido es 4, ¿vale? Pues lo pongo aquí, 4. El siguiente, ¿cuál es? Motion Blur separable. Me lo copio, CTRL-C y lo pego.
00:47:13
veis que me lo filtra
00:47:35
cuando yo lo escribo bien me aparece aquí abajo
00:47:37
y el valor es 1
00:47:39
pues 1
00:47:42
estos son los valores máximos
00:47:44
el siguiente cual es
00:47:45
desktop field quality
00:47:50
me lo copio
00:47:54
y me lo pego
00:47:56
y cual es el valor que viene
00:47:58
por defecto 4
00:48:02
pues 4
00:48:03
siguiente bloom quality
00:48:04
5 me lo copio
00:48:08
me lo pego
00:48:12
y le pongo un 5
00:48:13
perfecto
00:48:15
siguiente
00:48:17
tone mapper quality
00:48:19
me lo copio
00:48:20
me lo pego
00:48:22
y el valor es 1
00:48:24
y hay una última
00:48:26
variable de consola que no viene en la documentación
00:48:28
que a mi me gusta utilizarla
00:48:31
que es el screen percentage
00:48:33
de eso os he hablado en algún momento
00:48:34
suena lo del screen percentage
00:48:37
yo creo que no
00:48:38
no
00:48:40
Screen Percentage
00:48:41
este es, el Screen Percentage
00:48:44
que es, es un supersampleado
00:48:46
o subsampleado de imagen
00:48:48
que es lo que hace este valor
00:48:50
hace que si yo tengo por ejemplo
00:48:51
el
00:48:54
el output de mi render
00:48:56
a 1920x1080
00:48:58
si le pongo
00:49:01
1,25
00:49:03
lo que va a hacer es renderizarlo
00:49:04
un 25% más grande
00:49:06
para tener más información de píxeles
00:49:07
y luego me lo vuelve a reducir a mi tamaño, ¿vale?
00:49:10
Eso lo que hace es mejorar todo, mejorar los difuminados de las sombras,
00:49:14
mejorar los reflejos, mejorar un montón de cosas.
00:49:19
¿Pero qué pasa? Que le cuesta un 25% más renderizarlo, ¿vale?
00:49:22
Entonces yo normalmente esto lo suelo meter cuando tengo renders bajitos,
00:49:27
de 1920x1080, por ejemplo.
00:49:32
Si yo ya estoy renderizando en 2K o en 4K, no tiene tanto sentido.
00:49:35
que utilice este comando de consola
00:49:39
entonces yo este lo dejo aquí puesto
00:49:41
y le doy un 100 para que por lo menos
00:49:43
me renderice
00:49:45
el 100% de la resolución que estoy utilizando
00:49:47
y cuando
00:49:50
tengo que renderizar resoluciones
00:49:51
bajitas, le subo esto para que
00:49:53
el resultado final sea mejor
00:49:55
¿vale? veis que son un montón de capas
00:49:57
de calidad que le vamos
00:49:59
metiendo al render final para que al final el resultado
00:50:01
sea mejor que lo que tenemos en el
00:50:03
visor de Unreal ¿vale?
00:50:05
entonces
00:50:08
estas variables de consola
00:50:09
una vez que las hemos metido
00:50:10
las podemos activar
00:50:11
o desactivar
00:50:12
¿vale?
00:50:13
si queremos
00:50:15
vale
00:50:15
por último
00:50:17
y no menos
00:50:19
importante
00:50:21
yo me puedo sacar
00:50:22
un criptomate
00:50:25
¿sabéis lo que es un criptomate?
00:50:26
¿no?
00:50:29
es un pase de render
00:50:30
que me permite meter
00:50:32
en After Effects
00:50:33
o en Nuke
00:50:35
o en cualquier programa
00:50:35
de edición de vídeo
00:50:37
y hacer máscaras dinámicas
00:50:38
de cualquier objeto, ¿vale?
00:50:40
Me hace un mate de cualquier objeto.
00:50:42
Eso es interesante.
00:50:46
Eso se hace con el pase de object ID,
00:50:48
que está aquí, object ID, ¿vale?
00:50:54
Y este pase de object ID le tenemos que decir
00:50:56
que nos incluya los elementos traslúcidos de la escena.
00:51:00
Y esto me permite hacer máscaras de todo.
00:51:03
Me permite hacer una máscara por material, por actor,
00:51:06
por actor con jerarquía, por carpetas del World Outliner o por capas, ¿vale?
00:51:09
Yo normalmente lo dejo siempre en full.
00:51:15
Vamos a renderizar unos cuantos frames y vemos qué es lo que nos da, ¿vale?
00:51:17
Luego, si quisiéramos más pases de render, nosotros dentro del track de deferred rendering
00:51:23
tenemos aquí la posibilidad de sacar más pases de render.
00:51:29
En esos pases de render, si yo estoy sacando una secuencia EXR, les puedo decir que sean 32 bits también, ¿vale? Que es lo suyo. Entonces, si yo despliego additional post-process materials de primeras, yo tengo dos pases de render.
00:51:36
Uno es el World Depth, o sea, un pase de profundidad con el que yo puedo hacer diferentes cosas. En postproducción yo puedo hacer un desenfoque propio. Puedo aplicar una capa de ajuste a lo que está al fondo de la escena y que no afecte a lo que está en primer plano, cosas así.
00:51:52
¿vale? entonces para que funcionen
00:52:10
estos pases de render tenemos que habilitarlo
00:52:13
tenemos que decir enable
00:52:15
el siguiente que tenemos aquí es el motion vectors
00:52:16
esto es un pase de velocity
00:52:19
y me sirve para generar
00:52:21
motion blur en postproducción
00:52:23
¿vale?
00:52:25
¿qué más pases tenemos disponibles?
00:52:27
veis que esto es una lista ¿no?
00:52:29
entonces si yo quiero sacar
00:52:31
más pases de render le tengo que dar al más
00:52:33
me saco otro
00:52:35
y busco, claro ¿cuáles son
00:52:37
los pases de render que tengo disponibles?
00:52:39
Pues tengo que filtrarlos por nombre.
00:52:41
Si yo escribo aquí movie,
00:52:43
render,
00:52:45
todos los que ponen movie, render,
00:52:49
son pases de render. Tengo
00:52:51
el ambient occlusion,
00:52:53
el motion vector y el world depth, que ya los
00:52:55
tengo. El world normals,
00:52:57
me puedo sacar el pase
00:52:59
de normales de la escena entera,
00:53:01
si quisiera. El world
00:53:03
position, que esto lo que me da es una nube de
00:53:06
puntos de la escena que yo puedo utilizar
00:53:08
para colocar plates a diferentes
00:53:10
profundidades o a diferentes posiciones
00:53:13
dentro de la escena, esto se suele utilizar
00:53:15
con new, cuando hay que hacer mate
00:53:17
painting dinámico
00:53:18
el pase de posición y el pase de normales
00:53:19
es importante, ¿para qué? para saber
00:53:23
dónde está cada vértice
00:53:25
y hacia dónde mira su normal
00:53:27
¿se entiende?
00:53:28
bueno, yo no lo suelo
00:53:31
utilizar mucho porque intento
00:53:33
que la mayor parte de la postproducción se haga
00:53:35
en Unreal, pero hay gente que se saca
00:53:37
el render pelao y se hace
00:53:38
toda la postproducción en Unreal.
00:53:41
Entonces, esto es necesario para poder hacer
00:53:42
todo eso, ¿vale?
00:53:44
Yo normalmente, como mucho, mucho, mucho,
00:53:46
mucho, me saco
00:53:49
el pase de profundidad,
00:53:50
que es el World Depth,
00:53:53
y el pase de Ambient Occlusion.
00:53:54
Movie, Render
00:54:01
Queue,
00:54:02
Ambient Occlusion, ¿vale?
00:54:04
Y lo habilito, ¿vale? Me voy a sacar estos
00:54:06
tres, nada más. Todo esto,
00:54:08
al estar renderizando en un
00:54:11
formato xr se va a almacenar como una capa dentro de cada de cada frame vale bien más o menos se
00:54:12
entiende lo que os he contado vamos a probarlo de todas maneras vamos a ver cómo hacemos esto
00:54:21
entonces ahora una vez que tenemos todo esto ya configurado lo vamos a salvar le damos aquí
00:54:28
arriba en unsafe config y le decimos safe as preset y esto como lo como lo nombramos pues yo lo
00:54:33
nombraría como 2K
00:54:40
que es la resolución
00:54:42
barra baja
00:54:44
EXR
00:54:45
barra baja
00:54:46
multipass
00:54:47
¿qué es lo que se suele hacer?
00:54:50
lo ideal es que os creéis
00:54:52
varios presets
00:54:53
para los diferentes formatos
00:54:54
de exportación que necesitáis
00:54:57
yo me haría uno de XR
00:54:58
otro de Apple ProRes
00:54:59
otro de PNG
00:55:02
con diferentes resoluciones
00:55:04
para que no tengamos que estar
00:55:07
configurándolo todo el rato
00:55:08
¿Se entiende?
00:55:10
Vale.
00:55:11
Pues le damos a salvar.
00:55:12
Entonces.
00:55:15
Entonces.
00:55:18
Una vez que lo tenemos, aceptamos.
00:55:20
Y ya lo tenemos aquí.
00:55:23
¿Qué es lo que voy a hacer yo?
00:55:24
Para que no tarde mucho, voy a renderizar solo 4 frames.
00:55:25
¿Vale?
00:55:28
Venimos aquí.
00:55:30
Y le decimos que lo que queremos es...
00:55:31
Fijaros, me voy al principio de la animación.
00:55:38
y le digo 1, 2, 3 y 4 frames y le digo que esto sea el final de la animación, 4 frames solamente, le doy a la claqueta, veis que se queda guardado el último preset de render que yo tenga
00:55:40
y ya tengo aquí guardado también la ruta, con lo cual simplemente le doy al botón de render local y se lanza, fijaros esta es la pantalla de Movie Render Cube
00:56:00
¿Qué es lo que me está renderizando? 32 frames entre cada frame, ¿vale? Veis que aquí pone subsample, ¿vale? Pues me está renderizando frames de 2K y entre medias de cada frame me está renderizando 32 subframes, ¿vale? Para poder depurar la imagen.
00:56:12
ya está, ya hemos terminado
00:56:32
entonces
00:56:37
¿qué es lo que tenemos ahora?
00:56:39
pues tenemos 4 frames
00:56:41
que cada uno de ellos pesa 77
00:56:45
megas, ¿por qué? porque está comprimido
00:56:48
si lo hubiera dicho
00:56:50
que no quiero compresión probablemente
00:56:51
estos frames hubieran pesado 200 megas o por ahí
00:56:53
¿vale?
00:56:55
entonces
00:57:00
si me voy a
00:57:01
After Effects
00:57:04
y me traigo esta secuencia
00:57:06
Mientras se va abriendo pregunta,
00:57:16
me ha dado la sensación de que ha tardado bastante poco, ¿no?
00:57:18
Ha tardado muy poco.
00:57:21
Sí, sí.
00:57:23
A ver, depende también.
00:57:23
Si lo renderizas en 4K, tarda más.
00:57:26
Pero sí, suele tardar muy poquito.
00:57:29
Yo me he renderizado proyectos enteros en un día.
00:57:32
Y lo de los subframes,
00:57:38
¿puede llegar un momento en el que merezca la pena sobremuestrear,
00:57:40
es decir, renderizar a 48 fotogramas por segundo?
00:57:43
porque los subframes obviamente
00:57:45
él los usa para calcular, pero no quedan
00:57:47
registrados.
00:57:49
Sí, hay veces que yo
00:57:52
me lo renderizo a 60 frames
00:57:54
y luego ya lo adapto.
00:57:55
O si quieres hacer un slow motion
00:57:58
o cosas así, pues te lo puedes renderizar
00:58:00
a un frame rate mayor.
00:58:01
Entonces, voy a importarme
00:58:05
estos
00:58:07
cuatro frames.
00:58:12
Le digo que es una secuencia
00:58:16
OpenXR y me la importo.
00:58:18
Aquí la tengo. Ahora, en 32 bits, creo una composición. Aquí la tenemos. Entonces, esto se supone que tiene, si yo me saco aquí una capa de ajuste, Adjustment Layer, y le metemos aquí un efecto de exposición 32 bits,
00:58:20
exposición 32 bits
00:58:49
que es este
00:58:51
se supone que nosotros aquí tenemos
00:58:52
todo el rango dinámico de la imagen disponible
00:58:56
¿vale?
00:58:59
está sin clampear
00:59:01
y aparte de eso
00:59:03
si yo me duplico esta capa
00:59:04
control c, control v
00:59:07
y le aplico
00:59:08
el xr
00:59:11
extractor
00:59:13
se llama
00:59:16
este me permite acceder
00:59:16
a las capas
00:59:19
que tenga almacenadas, ¿vale?
00:59:21
Tenemos el Ambient Occlusion, el Motion Vectors
00:59:23
y el World Depth, ¿vale?
00:59:26
Perfecto.
00:59:30
El Ambient Occlusion, ¿veis?
00:59:32
Es la información de Ambient Occlusion.
00:59:34
Esto lo podríamos meter multiplicado
00:59:36
por encima de la imagen final
00:59:38
para darle un poquito más de fuerza
00:59:40
a las sombras de contacto, si quisiéramos.
00:59:41
Tenemos también el World Depth.
00:59:45
Y el World Depth, básicamente, lo que tiene es...
00:59:48
es una capa que me da
00:59:52
en escala de grises la profundidad de la escena
00:59:57
yo con esto puedo aplicar efectos a determinada
01:00:00
profundidad según la cámara
01:00:07
le puedo decir, vale, quiero que solo la parte
01:00:10
del muro esté más expuesta, pues esto lo utilizo como máscara
01:00:15
para otro efecto, vale, bien, se entiende
01:00:18
chicos? Sí, sí. Vale, pues esto es una de las cosas, pero otra de las cosas interesantes es lo que os decía antes del
01:00:23
criptomate. Yo aquí tengo un efecto, bueno, esto lo suele tener todos los programas. El criptomate, si yo lo aplico, fijaros lo que
01:00:31
pasa. De repente tengo una máscara dinámica de cada parte de la escena. Entonces, si yo hago control botón, no, botón derecho, esto es una
01:00:41
máscara de este objeto
01:00:51
o si hago así, esto es una máscara
01:00:53
de ese objeto y veis que coge toda la información
01:00:55
de motion blur y todo
01:00:58
en la máscara, entonces
01:00:59
con botón derecho yo puedo crear
01:01:01
máscaras dinámicas de cada parte
01:01:03
de la
01:01:06
escena y una vez que
01:01:07
lo tengo seleccionado, le puedo
01:01:09
decir que me muestre el matte
01:01:12
only y esto lo meto como
01:01:13
como máscara
01:01:15
de luminancia
01:01:17
¿vale? ¿se entiende?
01:01:18
Esto me permite también seleccionar solo esa parte. Si yo apago esto, podría tener una máscara perfecta solo de ese elemento. Y si le doy a colores, con el botón derecho voy seleccionando partes diferenciadas de mi composición.
01:01:21
bajo mi punto de vista
01:01:48
el CryptoMatter es lo que mejor funciona
01:01:51
a nivel de pases, dentro del render
01:01:53
de Unreal
01:01:55
porque me permite luego hacer selecciones complejas
01:01:56
con muy poco esfuerzo
01:01:59
¿vale?
01:02:00
¿bien?
01:02:02
¿estás seleccionando con el botón derecho?
01:02:05
¿y puedes seleccionar varias capas
01:02:07
a la vez?
01:02:09
con shift
01:02:11
y botón derecho
01:02:14
puedes seleccionar varias capas
01:02:15
esto está brutal
01:02:16
¿vale?
01:02:19
bien, pues
01:02:21
esto es
01:02:22
esto es lo que se puede hacer
01:02:24
¿vale?
01:02:26
realmente no es perfecto
01:02:28
pero está bastante bien
01:02:30
para ser un motor de render en tiempo real
01:02:31
está bastante bien
01:02:33
¿vale?
01:02:34
entonces
01:02:41
llegados a este punto
01:02:42
ya os he contado todo lo que se puede hacer con Unreal
01:02:45
a nivel visual
01:02:48
vámonos a la parte de Blueprints
01:02:49
esto si que es gracioso
01:02:51
esta parte si que es cachonda
01:02:53
entonces
01:02:56
claro
01:02:58
yo ahora que tengo que hacer
01:03:00
tengo que coger las animaciones que tenía hechas
01:03:01
de las pantallas, de los totems, del ticker
01:03:04
y lo tengo que preparar
01:03:06
para que yo lo pueda lanzar desde axymetry
01:03:08
¿no?
01:03:10
esa es un poco la idea
01:03:11
para que yo en axymetry pueda crear un botón
01:03:12
en el cual yo le de
01:03:16
y la pantalla aparezca
01:03:18
O que yo le dé y aparezca el ticker, o que yo le dé y aparezca el tótem, ¿vale? Entonces, para hacer eso necesitamos programar, ¿vale? Pero yo no soy programador. Entonces, Unreal tiene una herramienta que se llama Blueprints, que es de programación gráfica mediante nodos, que nos permite realizar todas esas operaciones, ¿vale?
01:03:20
entonces voy a haceros
01:03:37
una pequeña introducción teórica
01:03:40
a los blueprints, o sea, intentaros
01:03:42
contar blueprints
01:03:44
en lo que me queda de clase es un esfuerzo
01:03:45
de abstracción, porque es una parte
01:03:49
de Unreal muy grande, ¿vale?
01:03:50
pero voy a intentar por lo menos contaros lo que os puede
01:03:52
hacer falta para la parte de
01:03:54
Aximetry, no sé si alguno de los que estamos aquí
01:03:56
sabemos programar, a lo mejor Álvaro
01:03:58
sí que tiene más ideas, o a lo mejor
01:04:00
Álvaro no está, que eso puede pasar
01:04:04
también
01:04:06
estoy por aquí, por aquí
01:04:07
pero vamos, tenemos a Seymour que también ha trasteado
01:04:09
vale, perfecto, pues muchos de los
01:04:11
conceptos que os voy a contar seguro que os suenan
01:04:13
vale, entonces
01:04:15
saco un momento el whiteboard
01:04:17
y os cuento
01:04:19
un poco de que va
01:04:21
esto de los blueprints, vale
01:04:23
que tiene Swahel
01:04:25
¿qué son los blueprints?
01:04:26
blueprints
01:04:37
los blueprints realmente
01:04:38
son elementos que contienen programación propia, ¿vale?
01:04:41
Programación propia, ¿vale?
01:04:50
Pero esto por detrás lo que tiene es código, ¿vale?
01:04:56
Pero nosotros lo vamos a ver en formato gráfico,
01:04:59
gráfico en forma de nodos, ¿vale?
01:05:06
Es un sistema nodal, es muy parecido
01:05:09
a lo que hemos visto en la parte de materiales, ¿vale?
01:05:11
¿Vale? Entonces, existen muchísimas tipologías de blueprints. Algunos ya están creados, ¿vale? Están bien en el motor de manera nativa y otros los tenemos que crear nosotros.
01:05:15
Entonces, como los tenemos que crear nosotros, los posibles blueprints que pueda haber son infinitos, ¿vale? Pero la clasificación principal de estas tipologías de blueprints es la siguiente.
01:05:31
tipos de Blueprint, tipos de BP, BP es la abreviatura de Blueprint, por un lado vamos a tener el Level Blueprint, el Level Blueprint es un Blueprint,
01:05:42
o sea, un elemento que tiene programación propia que está asociado al nivel, con lo cual no es un Asset, como tal, se almacena dentro del Asset del nivel,
01:05:58
Está asociado al nivel. Y como tal, sirve para crear interactividades o automatizaciones con actores. Porque si os acordáis, el nivel no es nada más que un contenedor de actores.
01:06:07
¿vale?
01:06:28
sirve para trastear a nivel de programación
01:06:30
con los actores de ese nivel
01:06:32
o sea, el level blueprint de mi nivel
01:06:34
actual no puede hacer nada
01:06:36
con los actores que estén en otro nivel
01:06:38
¿vale?
01:06:40
esa es la
01:06:43
esa es la
01:06:44
realidad
01:06:45
entonces está guay porque me permite hacer
01:06:46
muchas cosas con todos los actores del
01:06:50
nivel pero no es muy flexible porque si
01:06:52
yo me programo algo y me lo quiero
01:06:54
llevar a otro nivel, me lo tengo que
01:06:56
copiar y pegar, o si me lo quiero llevar
01:06:58
a otro proyecto, me tengo que emigrar el nivel
01:07:00
completo. ¿No?
01:07:02
¿Se entiende esto?
01:07:04
Bueno, no sé si se entiende, pero
01:07:06
es así.
01:07:08
Y luego, existe otra tipología
01:07:10
de Blueprints, que son los Blueprint Class,
01:07:12
las clases. Estos
01:07:14
son Assets del
01:07:18
Content Browser, ¿vale?
01:07:20
Entonces, yo puedo arrastrar
01:07:24
un Blueprint Class al nivel,
01:07:26
pero como la programación ya no está dentro
01:07:28
del level blueprint, sino que está dentro del asset, esto me lo puedo llevar a cualquier proyecto o a cualquier nivel sin necesidad de tener que copiarme
01:07:30
todo el árbol de nodos, ¿vale? Es más flexible, porque como es un asset, como os digo, me lo podría llevar a cualquier proyecto y la programación se mantiene
01:07:39
dentro de ese asset, ¿vale?
01:07:52
Bien, más o menos.
01:07:55
Dos tipologías.
01:07:58
Nosotros ya hemos visto algún blueprint.
01:08:00
Hemos visto el camera shake, ¿verdad?
01:08:01
Para hacer vibraciones en la cámara.
01:08:04
Eso es un blueprint class que viene ya determinado
01:08:07
dentro de Unreal, ¿vale?
01:08:10
Entonces nosotros ahora de primeras para aprender
01:08:12
lo que vamos a hacer es trastear con actores
01:08:15
dentro del level blueprint,
01:08:17
pero todo lo que os cuente del level blueprint
01:08:18
luego se puede aplicar a Blueprint Class
01:08:20
¿vale? entonces
01:08:23
¿qué es? ¿cuál va a ser
01:08:25
el funcionamiento principal?
01:08:27
de los
01:08:29
Blueprints, nosotros vamos a establecer siempre
01:08:31
siempre un sistema
01:08:33
causa-efecto ¿vale?
01:08:35
sistema
01:08:39
causa
01:08:39
efecto
01:08:41
entonces
01:08:44
a efectos
01:08:48
de programación la causa
01:08:50
lo vamos a llamar evento
01:08:52
evento
01:08:56
cuando pasa algo
01:08:57
cuando algo cambia
01:08:58
sucede algo
01:09:01
¿vale?
01:09:03
entonces
01:09:05
lo primero que tenemos que entender
01:09:06
es que dentro de Unreal
01:09:08
hay un montón de tipologías de eventos
01:09:09
diferentes
01:09:11
pensad que esto es un videojuego
01:09:12
lo que estamos
01:09:15
lo que estamos creando
01:09:16
en cierta manera
01:09:18
entonces
01:09:19
¿Qué tipologías de evento tenemos dentro de Unreal? Pues un montón, por ejemplo, las teclas, cada una de las teclas del teclado puede ser un evento, que yo pulse la W y se encienda una luz, ¿no? Eso es una tipología de evento, las teclas.
01:09:21
Entonces, el ratón tiene el botón izquierdo, el botón derecho, el botón central, la rueda cuando rueda, cuando desplazo el ratón de izquierda a derecha o de arriba a abajo, ¿no? Las teclas, el ratón, eso es otra tipología de eventos que yo puedo utilizar para desencadenar cosas, ¿no?
01:09:36
¿Qué más cosas tenemos? Nosotros podemos establecer eventos que estén sujetos a colisiones, o sea, que cuando yo entre dentro de un volumen pase algo y que cuando yo salga de ese volumen pase otra cosa, ¿vale?
01:09:58
Muchas veces eso se utiliza para abrir puertas o para encender luces. Cuando yo me acerco al ascensor, se enciende una luz y se abre una puerta. Pues eso no está sujeto a un botón, está sujeto a un elemento espacial, ¿vale?
01:10:15
esto se llaman triggers
01:10:30
trigger volume
01:10:32
de hecho, triggers
01:10:34
trigger volume
01:10:36
¿qué otras tipologías
01:10:38
de evento podemos llegar
01:10:40
a tener?
01:10:42
pues por ejemplo que algo pase
01:10:44
cuando yo arranco el juego, cuando le doy al
01:10:46
play, ¿no? ¿para qué sirve
01:10:48
el, esto se llama event
01:10:50
begin play
01:10:52
esto para que
01:10:53
esto para qué sirve
01:10:56
pues normalmente
01:11:00
sirve para
01:11:01
establecer estados iniciales
01:11:03
si yo quiero que cuando arranque el juego todas las luces
01:11:06
estén apagadas
01:11:08
pues lo asocio al event begin play
01:11:09
¿vale?
01:11:12
begin play
01:11:15
y luego hay otro que se llama
01:11:16
event tick
01:11:19
que lo que hace es
01:11:21
hacer comprobaciones cada vez
01:11:24
que renderizamos un frame, claro
01:11:26
Si cada vez que renderizo un frame estoy comprobando cosas, ¿eso para qué me sirve? Para evaluar estados, para evaluar algo que pueda cambiar en cualquier momento. Entonces, yo lo estoy comprobando todo el rato y si cambia, puedo hacer ese cambio en tiempo real. ¿Se entiende? Vale, pues vamos a ver cómo utilizamos todo esto.
01:11:27
vamos a ver como utilizamos
01:11:48
todo esto, para eso
01:11:50
nos vamos a abrir un proyecto nuevo
01:11:52
¿vale? porque el que tenemos
01:11:54
tiene
01:11:56
bueno, antes de abrir
01:11:58
un proyecto nuevo, vamos a dejar
01:12:00
preparada la programación
01:12:02
de lo que necesitamos operar dentro de Aximetry
01:12:03
que básicamente son los movimientos
01:12:06
de las pantallas ¿vale?
01:12:08
vamos a dejar eso preparado y luego nos abrimos
01:12:10
otro proyecto más sencillito
01:12:12
con el que vamos a hacer alguna prueba de todo esto
01:12:14
que os acabo de contar
01:12:16
Entonces, fijaros, me salgo del Cinematic Viewport, que ahora mismo ya no me hace falta, y me voy al Level Blueprint.
01:12:20
¿Dónde está el Level Blueprint? Aquí, en este botoncito que veis aquí, lo abro y pongo Open Level Blueprint.
01:12:31
Perfecto. Esto que veis aquí es el Interface del Level Blueprint.
01:12:38
¿Qué es lo que tenemos aquí? Pues tenemos, por un lado, el panel de MyBlueprint, que lo que me va a dar es una especie de resumen de los nodos que yo estoy utilizando aquí y de las variables que yo vaya creando, que todavía no sabemos lo que son, ¿vale?
01:12:44
Y de las macros y de las funciones y de otra serie de cosas. ¿Vale? Entonces veis que de primeras, cuando yo hablo del Level Blueprint, tengo ya el Begin Play y el Event Tick. ¿Por qué? Porque suelen ser nodos que se utilizan muy a menudo. ¿Vale?
01:13:02
¿Vale? Entonces, ¿qué es lo que tengo que dejar yo preparado? Pues tengo que dejar preparado el movimiento de las pantallas. Como os decía antes, el Level Blueprint solo puede interactuar con actores de nivel.
01:13:17
Entonces, para que yo pueda acceder a un Sequencer, yo tengo que crear una referencia de ese Sequencer dentro del nivel, ¿vale? Con lo cual, yo me tengo que sacar una referencia del Level Sequence Screen, del Level Sequence Sticker y del Level Sequence Totem a la escena.
01:13:35
Lo arrastro, 1, 2 y 3. Estas son las tres referencias a las tres secuencias que yo quiero controlar de manera interactiva desde el Level Sequence.
01:13:53
¿Vale? Entonces, fijaros, ¿cómo lo hacemos? Muy fácil, con cualquiera de estas secuencias seleccionadas, botón derecho y veis que aquí me pone create a reference to ls barra baja totem, pues esta burbujita de aquí contiene la información de ese actor y ese actor apunta a la secuencia, ¿vale?
01:14:07
Entonces me tengo que sacar referencia de estos tres, selecciono otra, botón derecho, create reference to ls picker y selecciono la otra, botón derecho, reference to ls screen.
01:14:39
Vale, perfecto. Yo ya tengo la referencia de cada una de estas tres secuencias, ¿vale? Entonces, ¿ahora qué es lo que necesito hacer? Necesito tener la posibilidad de hacer play o de hacer play reverse. ¿Para qué? Para que aparezca la pantalla y desaparezca.
01:14:55
entonces, en este caso
01:15:16
si tiro, vamos a ver
01:15:19
cómo funcionan los nodos
01:15:21
cómo funcionan estos nodos
01:15:23
este nodo es un nodo de información
01:15:25
y estos nodos son
01:15:27
nodos de eventos, ¿cómo funciona
01:15:29
todo esto? pues muy fácil
01:15:31
si veis que algo no está
01:15:33
claro, me podéis interrumpir
01:15:37
que yo entiendo que esta parte
01:15:39
es un poco más abstracta
01:15:42
¿cómo funcionan los nodos?
01:15:44
pues los nodos hay de tres tipologías
01:15:49
básicamente. Tienen todo en forma de caja o de burbujita y tienen dos tipos de pines.
01:15:51
Tenemos nodos que son de principio de la cadena, que suelen ser así. Tenemos nodos que son
01:16:01
intermedios, que suelen ser así. Y tenemos nodos que son del final de la cadena, que
01:16:09
solo son capaces de recibir información, ¿vale? Que suelen ser así. Solemos tener
01:16:18
dos tipologías de pin. Tenemos un pin
01:16:24
que es el pin de ejecución, que son los triangulitos estos
01:16:28
y pines de información. La información hay de muchos
01:16:31
tipos. Hay información
01:16:39
de texto, hay información de tipo vector
01:16:41
si yo quiero dar por ejemplo unas coordenadas
01:16:47
hay información de tipo float, que es simplemente un número con decimales
01:16:49
Hay información booleana que simplemente establece una condición de sí o no o de verdadero o falso. Hay muchos tipos y cada uno de esos tipos tiene un color diferente, ¿vale? Entonces nosotros, según la tipología de nodo que saquemos, pues vamos a tener nodos iniciales, finales o intermedios, ¿vale?
01:16:54
intermedios
01:17:19
y
01:17:22
lo que va a pasar es que nosotros siempre vamos a
01:17:24
ejecutar la secuencia
01:17:27
en un sentido
01:17:29
de izquierda a derecha, o sea
01:17:31
cuando yo pinche en el triangulito
01:17:32
y conecte este con este
01:17:35
el sentido de ejecución va a ser
01:17:37
que se ejecuta primero este
01:17:39
y luego este, y cuando yo conecte
01:17:41
este con este, pues el siguiente
01:17:43
que se va a ejecutar va a ser esto
01:17:45
a efectos prácticos va a parecer que se está ejecutando
01:17:46
todo al mismo tiempo porque la ejecución
01:17:49
son milisegundos
01:17:51
¿vale? pero realmente
01:17:52
el orden en el que se ejecutan las cosas
01:17:55
es importante ¿vale?
01:17:57
esto a nivel de ejecución y luego a nivel de información
01:17:59
cada nodo me va
01:18:01
a recibir información
01:18:03
y a sacar información
01:18:04
¿vale?
01:18:06
acordaros de que los
01:18:09
pinners de información son redonditos
01:18:10
y los pinners de ejecución son triangulares
01:18:12
¿vale?
01:18:15
bien, más o menos, ¿se entiende esto chicos?
01:18:17
más o menos
01:18:19
vamos a ver cómo funciona
01:18:22
entonces
01:18:24
yo tengo con vosotros hoy hasta las 2
01:18:27
vale, perfecto
01:18:33
entonces lo que os decía
01:18:35
como estoy en el level blueprint
01:18:36
en el level blueprint yo solo puedo trabajar con actores
01:18:38
con referencias a actores
01:18:41
yo estas secuencias que necesito controlar
01:18:42
me las he sacado al nivel
01:18:45
y voy a empezar a
01:18:47
operar con ellas
01:18:49
entonces yo que es lo que tengo que hacer
01:18:50
el sistema que tiene
01:18:53
Unreal para encontrar los nodos
01:18:54
es muy intuitivo ¿por qué? porque se llama
01:18:56
context
01:18:58
sensitive o sea
01:18:59
cuando yo tiro de una bolita
01:19:02
en este caso es una bolita de información
01:19:04
de color azul
01:19:06
yo tiro y suelto
01:19:07
me va a filtrar solo los nodos
01:19:10
que yo pueda utilizar con ese
01:19:12
tipo de información y con ese tipo
01:19:14
de nodo ¿vale? o sea no me va a mostrar
01:19:16
todas las posibilidades si yo quisiera ver todos los nodos posibles tendría que quitarle el context sensitive vale pero yo normalmente esto nunca lo quito porque yo no quiero
01:19:19
los nodos que no puedo utilizar vale entonces yo aquí que es lo que voy a buscar un play vale yo lo que quiero hacer es un play sequence player vale y fijaros que
01:19:29
cuando yo creo el Play Sequence Player, además del actor, se me ha creado otra burbujita que se llama componente. Esto es un componente. ¿Qué son los componentes
01:19:44
dentro de Blueprints? Pues son los parámetros que no forman parte exclusivamente del actor. ¿Os acordáis al principio de los principios que os decía que los actores
01:19:56
son contenedores vacíos que hacen referencia a cosas vale pues un actor como punto de partida
01:20:06
los únicos parámetros que tiene son las transformaciones y un parámetro que se llama
01:20:14
hidden in game para que se vea o no se vea cuando nosotros le demos al play que es lo mismo que pasa
01:20:19
que cuando le damos a la g en el editor que desaparecen los helpers vale entonces todos
01:20:24
los parámetros que no son de actor o sea todo lo que no es transformaciones o hidden in game son
01:20:30
parámetros específicos de ese tipo de actor vale pues esos parámetros específicos están dentro del
01:20:37
componente de hecho si yo selecciono cualquiera de estas secuencias fijaros que encima de sus
01:20:42
detalles yo tengo el actor que es la instancia y luego justo debajo un root component vale pues
01:20:49
Entonces todos los parámetros que no sean ni transformación ni hidden in game están dentro del componente. Por eso yo cuando quiero buscar el play de la secuencia, claro el play de la secuencia es un parámetro específico de la secuencia y eso está dentro del componente.
01:20:56
Por eso se me crea automáticamente esta otra burbuja. ¿Vale? Entonces, ¿yo qué es lo que quiero hacer con esta secuencia? Quiero reproducirla al derecho y Play Reverse. ¿Vale? Play Reverse. Vale, perfecto.
01:21:11
Perfecto. Entonces, esto es lo que yo voy a tener que ejecutar con un botón cuando esté en Aximetry. ¿Vale? ¿Bien? Entonces, ¿eso cómo se hace? Pues dentro de Aximetry, claro, como esto es el Unreal de Aximetry, aquí tenemos una serie de nodos que son específicos de Aximetry.
01:21:29
¿Vale? Entonces si yo doy botón derecho y busco
01:21:50
AximetryFigure
01:21:54
¿Vale?
01:21:57
Este nodo es el que va a servir
01:22:01
para que yo pueda ejecutar el play o el play reverse
01:22:03
Entonces toda esta parte os la va a contar Rafa
01:22:07
¿Vale? Por eso yo no quiero emplear mucho tiempo en esto
01:22:09
porque esto os lo va a contar Rafa, pero nosotros ya vamos a dejar preparadas
01:22:12
estas burbujitas para que Rafa las pueda conectar
01:22:16
y las podáis usar en Aximetry ¿Vale?
01:22:18
Entonces, voy a hacer lo mismo con estas dos, si yo tiro de aquí y busco play, tengo el play sequence player, perfecto, pues voy a poder hacer play y si tiro de aquí otra vez voy a poder hacer play reverse, ¿vale?
01:22:20
Ya está. Y con este, lo mismo, tiro de él, pongo play, así, tiro otra vez de la bolita, si escribo reverse, play reverse, ¿vale? Ahí está.
01:22:38
Entonces, de momento, lo dejamos así, no tocamos nada, ¿vale? Cuando llegue Rafa, terminará de conectar estos nodos para que los podáis utilizar en la parte de Aximetri, ¿vale?
01:23:04
compilamos, veis que cada vez que hago
01:23:14
un cambio en el editor
01:23:16
tengo que darle a compilar para ver
01:23:18
si hay algún error, vale, si no luego
01:23:20
no va a funcionar
01:23:22
el botoncito de aquí arriba de la izquierda compile
01:23:23
tiene que estar en verde para que funcione todo, vale
01:23:26
salvamos
01:23:28
de momento esto lo dejamos
01:23:30
así, nos vamos
01:23:32
a abrir otro proyecto, un proyecto más sencillito
01:23:34
este lo vamos a abrir de Unreal
01:23:36
nativo, no lo vamos a abrir de Unreal
01:23:38
de Aximetry, porque lo que os quiero contar son cosas
01:23:40
básicas de Blueprints, vale
01:23:42
entonces abrimos el
01:23:44
el Epic Games Launcher
01:23:47
abrimos el Epic Games Launcher
01:23:50
y en la parte de Library
01:24:01
en la versión 5.3 nativa de Unreal
01:24:05
le damos a Launch
01:24:09
vamos a lanzar esta versión de Unreal
01:24:10
esta la voy a salvar y la voy a cerrar de momento
01:24:13
esta es la que luego subiré para que la tengáis
01:24:19
entonces cuando nosotros lanzamos una versión de Unreal
01:24:21
Aquí tenemos una serie de templates, ¿vale? Entonces le damos al template de juegos y nos vamos a hacer un template de third person character, ¿vale? ¿Por qué? Porque este ya viene con una serie de cosas configuradas que me ayudan a contaros la parte de Blueprint, ¿vale?
01:24:30
Entonces, Games, Third Person, le damos una ubicación, en mi caso va a ser las clases del Garci, ¿vale? Y lo voy a llamar MyFirstBlueprint y lo creo. Ahí estamos.
01:24:47
Entonces, esto que nos va a abrir, nos va a abrir un proyecto base template de Unreal, ¿vale? Este proyecto base template de Unreal, fijaros, es muy sencillito, tiene una serie de colisionadores creados, ¿veis? Estas son las colisiones que tiene la escena, player collision.
01:25:14
Y lo que pasa es que cuando yo le doy al play, que es el modo juego, me aparece un personaje, que es el third person character, que me permite moverlo. Si le doy al espacio salto, se ve. Este es el modo juego, el modo play. Es el modo play cuando yo veo lo que está pasando con los blueprints.
01:25:42
¿Por qué? Porque hasta ahora hemos estado trabajando en el editor. Esto ya es el modo juego. Esto es lo que yo vería cuando empaquete el juego y se lo mande a mi cliente. Entonces, cuando nosotros trabajamos en Aximetry, estamos trabajando todo el rato en modo runtime, en modo juego. Por eso, lo que se tiene que ver bien es lo que pasa cuando le doy al play, no lo que veo cuando estoy en el editor.
01:26:08
que debería de ser lo mismo, pero a veces no es lo mismo, ¿vale?
01:26:32
Entonces, lo que os decía, vamos a ver, por ejemplo, por ejemplo, por ejemplo,
01:26:36
si yo arrastro una esfera, una esfera al nivel, yo tengo esta esfera aquí,
01:26:45
la escalo un poquito, la voy a escalar en los tres ejes para verla bien
01:26:57
Y me voy a Level Blueprint y me traigo una referencia. La referencia me la puedo traer o seleccionando el actor y dando botón derecho, Create a Reference o directamente pinchando y arrastrando.
01:27:03
vale
01:27:21
entonces
01:27:22
si yo por ejemplo
01:27:25
quisiera
01:27:28
hacer que esta esfera
01:27:29
fuese invisible
01:27:32
¿cómo lo haríamos en el editor?
01:27:33
¿a quién se le ocurre?
01:27:35
si yo quisiera invisibilizar esto
01:27:38
¿cómo lo haríamos?
01:27:40
¿alguien?
01:27:47
¿sí? ¿no?
01:27:49
bueno
01:27:50
normalmente lo hacemos con el ojito
01:27:51
¿no?
01:27:53
pero hay un parámetro
01:27:55
dentro de este actor
01:27:57
Si yo pongo visible aquí en el buscador, visible, hay un parámetro de visibility, ¿vale? Es lo mismo. Hace exactamente lo mismo. Entonces, si yo quisiera hacer esto a nivel de blueprints, tendría que venir a mi referencia, tirar y buscar visible.
01:27:58
Y resulta que hay uno de los nodos que se llama setVisibility. Como el setVisibility es un parámetro que no es específico del actor, sino que es específico de la malla estática, que es lo que es una esfera, tengo que sacar el componente.
01:28:22
Entonces, fijaros, veis que este nodo tiene set visibility, un pin de ejecución, un target, que es la geometría a la que está haciendo referencia, y luego un new visibility.
01:28:40
Claro, new visibility veis que tiene un color rojo. El color rojo de información es la información booleana. ¿Por qué? Porque la visibilidad solo puede estar o visible o no visible. ¿Vale? Solo puede ser o verdadero o falso.
01:28:56
Entonces, fijaros, ¿yo qué es lo que quiero?
01:29:10
Yo quiero que cuando arranque la experiencia y yo le dé al play, que es este botoncito aquí, la esfera esté invisible, no se vea, ¿vale?
01:29:14
Con lo cual me saco el bearing play, event bearing play, y lo conecto aquí, ¿vale?
01:29:23
Esto, cada vez que yo le dé al play, se va a ejecutar este nodo, y este nodo hace referencia a este actor, ¿vale?
01:29:32
¿Y qué es lo que va a establecer? Que el parámetro visibility esté apagado. Si le diera este check, estaría encendido. ¿Se entiende esto? Vale, pero yo quiero que cuando arranque la experiencia esto esté apagado.
01:29:39
Y ahora, si cojo este nodo y hago control D, le voy a decir que esté encendido. Le tengo que decir que haga referencia al mismo target. Pero ¿cuándo quiero que se encienda? Cuando yo quiera. Cuando le dé, por ejemplo, a la tecla T.
01:29:53
¿Vale? Entonces, ¿cómo me saco yo un evento que desencadene que este nodo se ejecute? Pues muy fácil, botón derecho y escribo T espacio keyboard, ¿vale? Y aquí tenemos la letra T. ¿Veis que tengo todos los comandos del teclado disponibles en Blueprint? Pues me saco la T.
01:30:15
Y la T, ¿qué tiene? Tiene la posibilidad de ejecutarse cuando presiono la tecla o cuando la suelto. ¿Vale? Press o Release. ¿Vale? Press o Release.
01:30:39
entonces fijaros
01:30:54
yo podría decirle que cuando presione
01:30:57
la tecla se encienda
01:30:59
y que cuando la suelte
01:31:00
se vuelva a apagar
01:31:02
¿vale?
01:31:04
hago esto, compilo
01:31:06
y fijaros lo que pasa
01:31:08
si yo ahora le doy al play
01:31:10
de primeras la esfera no está
01:31:13
¿no?
01:31:15
la esfera no está, pero bueno yo cuando me acerco
01:31:16
por aquí, veis que me choco
01:31:19
me estoy chocando contra algo
01:31:21
porque no la estoy viendo pero el colisionador está, ¿vale?
01:31:22
Entonces, si yo le doy a la T, la veo.
01:31:26
Y si suelto la T, desaparece, ¿vale?
01:31:30
Se ve, ¿no?
01:31:34
Si yo quisiera tener una referencia visual de lo que está pasando,
01:31:36
yo podría venirme al level blueprint y decirle, vale,
01:31:39
hay un nodo que se llama print string.
01:31:45
Estos nodos sirven para hacer debug de la escena.
01:31:49
O sea, para saber lo que está pasando.
01:31:52
Entonces, si yo, cuando se ejecuta este nodo, escribo aquí, esfera invisible, control D.
01:31:55
Y cuando se ejecuta este nodo, escribo aquí, esfera visible.
01:32:07
Fijaros lo que pasa.
01:32:18
Compilo, le doy al play.
01:32:19
Y aquí arriba me pone esfera invisible.
01:32:22
Pero cuando yo le doy a la T, esfera visible, invisible, visible, invisible, visible, invisible, cada vez que yo voy pulsando o soltando la T, ¿vale? La tecla T, en este caso.
01:32:24
Pero esto es un poco rollo, ¿no? O sea, yo lo que quiero es que cuando lo pulso una vez pase una cosa y cuando pulso otra vez pase otra cosa, ¿vale?
01:32:40
Entonces, ¿cómo lo hacemos?
01:32:48
Pues vengo al Level Blueprint.
01:32:57
Vengo al Level Blueprint y lo que voy a hacer es utilizar otro nodo.
01:33:00
Un nodo que se llama Flip Flop.
01:33:04
¿Qué es un Flip Flop?
01:33:07
Un conmutador, básicamente.
01:33:09
Entonces, ¿cómo utilizo este conmutador?
01:33:12
Voy a eliminar estas dos ligaduras con Alt y Click.
01:33:14
Igual que en el editor de materiales, ¿vale?
01:33:18
Y lo que hago es conectar la tecla presionada al flip-flop. ¿Qué va a pasar? Que cuando haga el primer clic, él va a ejecutar la A y cuando haga el segundo clic, él va a ejecutar la B. ¿Vale? ¿Se entiende, chicos?
01:33:20
fijaros, yo puedo hacer también
01:33:38
debug de los nodos
01:33:43
si yo vengo aquí arriba a la derecha y le digo que me hago
01:33:44
un debug de este
01:33:47
nivel, del third person map
01:33:49
y me lo dejo
01:33:50
por aquí, fijaros lo que
01:33:53
está pasando, cuando yo le doy al play
01:33:56
veis que
01:33:58
lo primero que se ha ejecutado es esto
01:34:00
porque está conectado al begin play
01:34:02
¿vale?
01:34:04
ahora, si yo hago click
01:34:07
en el visor, puedo jugar
01:34:08
¿vale? y cuando yo juego
01:34:10
si le doy a la T
01:34:12
veis lo que está pasando ¿no? cada vez que le doy a la T
01:34:14
se ejecuta una parte
01:34:21
o la otra de la cadena
01:34:23
de la secuencia
01:34:25
¿por qué? porque lo tengo conectado
01:34:27
a un flip flop ¿vale?
01:34:29
¿se va entendiendo chicos?
01:34:34
esto es un poco abstracto pero luego
01:34:35
es súper útil y súper intuitivo
01:34:36
¿vale?
01:34:38
esfera visible, esfera invisible
01:34:42
perfecto
01:34:43
Vale. Entonces, ¿qué más cosas podemos hacer? Se pueden hacer muchas cosas con esto. Un montón de cosas. ¿Qué más cosas se pueden hacer? Podemos hacer, por ejemplo, que una luz se encienda.
01:34:46
primero necesito tener una luz en la escena
01:35:06
me saco por ejemplo un spotlight
01:35:10
me saco un spotlight
01:35:13
lo giro un poquito para que apunte a la esfera
01:35:18
le doy un poquito de caña a la intensidad
01:35:22
así, ¿vale?
01:35:25
yo tengo esto, perfecto
01:35:31
entonces, yo necesito tener
01:35:36
una referencia de esta luz en mi level blueprint
01:35:39
¿no? con lo cual
01:35:42
A ver, disculpad un segundito que tengo que mandar un mini mensaje.
01:35:47
A ver.
01:36:02
Vale, perfecto.
01:36:04
Entonces, yo necesito tener una referencia de esta luz dentro de mi Level Blueprint.
01:36:07
Con lo cual, vuelvo a mi Level Blueprint.
01:36:13
Están aquí todos mis nodos y me traigo esta luz, ¿vale?
01:36:18
Esta es mi luz.
01:36:23
Entonces, ¿yo qué es lo que quiero hacer aquí?
01:36:25
Pues quiero, por ejemplo, apagarla. Entonces lo mismo, tiro y busco Visibility, Set Visibility.
01:36:27
Veis que en este caso la visibilidad de la luz está dentro de un componente, pero el componente es diferente.
01:36:41
¿Por qué? Porque esto es una luz y esto es una malla. Aquí pone Static Mesh Component y aquí pone Light Component.
01:36:49
¿Por qué? Porque aparte de la visibilidad, yo aquí voy a tener intensidad, color, radio de atenuación, todos los parámetros que hemos visto de las luces. Sin embargo, la malla lo que va a tener es el slot de la malla, el slot del material, ¿vale? Todo lo relativo a la static mesh, ¿vale?
01:36:54
Se entiende que el actor tiene una serie de parámetros que son la transformación y el hidden in game y el resto de parámetros están asociados al componente, ¿vale?
01:37:14
Entonces, si yo quiero encender o apagar una luz, yo lo que podría hacer es lo siguiente, lo podría supeditar a un evento tipo teclado, pero yo no quiero eso.
01:37:26
Yo lo que quiero ahora es, fijaros, esto se complica un poco. Saco el Place Actors y busco mi Trigger Volume. Este Trigger Volume, ¿qué es lo que va a determinar?
01:37:40
veis que esto es un volumen parecido al volumen de postproducción
01:37:56
o al volumen de light mask que habíamos visto
01:38:00
vale, pues fijaros
01:38:03
si yo pongo este volumen más o menos en la zona
01:38:05
de la luz
01:38:09
y lo hago un poquito más grande
01:38:12
con la escala, una cosa así
01:38:14
voy a mover el player start que es donde arranca
01:38:22
el jugador, lo voy a poner por aquí
01:38:26
fijaros, con este elemento
01:38:29
seleccionado
01:38:32
yo puedo crear un evento
01:38:33
específico, ¿vale?
01:38:35
con ese elemento seleccionado
01:38:38
si yo doy botón derecho
01:38:39
aquí arriba pone
01:38:41
Add Event for Trigger Volume
01:38:42
si yo lo despliego, tengo
01:38:45
eventos de colisión
01:38:47
entonces los dos principales eventos de colisión
01:38:49
que tenemos son el Begin Overlap
01:38:51
y el End Overlap, o sea
01:38:53
que pase algo
01:38:55
cuando yo entre en el volumen
01:38:57
o que pase algo cuando yo salga del volumen, ¿vale?
01:38:59
Entonces voy a sacarme el Beguin Overlap
01:39:03
y me voy a sacar también el End Overlap, estos dos.
01:39:04
Entonces, ¿yo qué es lo que quiero?
01:39:13
Que de primeras, cuando arranque el juego,
01:39:15
la visibilidad de la luz sea apagado.
01:39:18
Eso significa que lo tengo que conectar a la cadena del Beguin Play, ¿vale?
01:39:21
Entonces, cuando yo dé a Play, se ejecuta esto.
01:39:24
significa que la luz de primeras se apaga
01:39:26
¿vale? y ahora tiro de aquí
01:39:30
y me saco otro set visibility
01:39:33
y aquí le digo que la luz esté encendida
01:39:35
¿vale? new visibility true
01:39:40
activado, entonces yo lo que quiero es que
01:39:43
de primeras se apaga
01:39:46
cuando yo entro se enciende
01:39:49
y cuando yo salgo se apaga
01:39:52
¿se entiende lo que acabo de hacer?
01:39:54
Es un comportamiento sencillo.
01:39:58
Vamos a ver cómo funciona.
01:40:01
Compilo, le doy al play y fijaros, cuando yo me acerco a ti se enciende la luz y cuando salgo se apaga.
01:40:03
¿Vale?
01:40:13
Se enciende y si encima le doy a la T aparece mi luz.
01:40:15
¿Vale?
01:40:22
Se enciende, se apaga.
01:40:22
Se enciende, se apaga.
01:40:24
¿Vale?
01:40:26
¿Bien?
01:40:27
¿Todo bien hasta aquí chicos?
01:40:30
¿Más o menos?
01:40:31
¿Se va entendiendo lo que pasa?
01:40:32
Diego, te iba a preguntar
01:40:33
se pueden dejar también comentarios
01:40:36
tipo, no sé si lo le escribo
01:40:37
sí, sí, sí, igual
01:40:40
si yo vengo aquí, por ejemplo
01:40:42
y si me quiero ordenar esto un poco
01:40:44
pues puedo decirle
01:40:46
estos nodos con la C
01:40:47
son las luces
01:40:49
o esto de aquí son
01:40:51
la esfera
01:40:54
por ejemplo, ¿vale?
01:40:56
eso lo podríamos hacer
01:40:58
y también podríamos venir a un nodo
01:40:59
y cuando le damos botón derecho aquí pone Note Comment, podríamos decir, este me enciende la luz, la luz, por ejemplo,
01:41:01
y se queda como un bocadillo encima del nodo con una aclaración, ¿vale? Perfecto.
01:41:15
Entonces, ¿qué más cosas se pueden hacer? Por ejemplo, si yo quisiera cambiar el color de la luz,
01:41:26
podría tirar de aquí
01:41:32
y buscar un set color
01:41:35
¿vale? set light color
01:41:38
¿cómo quiero yo cambiar el color?
01:41:41
pues por ejemplo
01:41:46
veis que esto es muy parecido, tiene un new light color
01:41:47
pero veis que el color de información es diferente, es azul
01:41:50
¿por qué? porque los colores
01:41:53
es un tipo diferente a las booleanas
01:41:56
¿Vale? Las booleanas son rojas, solo puedo hacer sí o no, pero los colores cuando yo hago clic aquí pues tengo la rueda cromática. ¿Vale? Entonces vamos a decirle que de primeras cuando haga play se ponga en blanco la luz. ¿Vale? Cuando haga play.
01:42:00
que después
01:42:18
control D
01:42:21
cuando pase algo
01:42:23
se ponga verde
01:42:26
la luz
01:42:27
y que después
01:42:28
cuando pase algo
01:42:30
se ponga morada
01:42:32
¿vale?
01:42:34
¿qué pasa?
01:42:36
que ahora ya tengo tres opciones
01:42:37
ya no puedo trabajar
01:42:39
con un flip flop
01:42:40
¿no?
01:42:41
porque un flip flop
01:42:42
solo me hace A o B
01:42:43
A o B
01:42:45
todo el rato
01:42:46
entonces
01:42:46
Cuando tenemos más de dos opciones, necesito tirar de otro nodo que se llama multigate. ¿El multigate qué me permite hacer? Pues me permite añadir pines de ejecución por aquí.
01:42:47
entonces si yo le doy al más
01:43:06
aquí ya tendría el 0, el 1
01:43:07
y el 2, vale
01:43:10
entonces
01:43:11
para que cuando yo empiece a operar con esto
01:43:13
esto parezca un loop
01:43:16
¿cuál es el comportamiento que yo necesito?
01:43:18
pues si se pone blanco
01:43:21
al hacer Benin Play
01:43:23
yo quiero que la primera vez que le dé
01:43:24
se ponga verde
01:43:26
que la segunda vez que le dé se ponga
01:43:28
morado y que la tercera
01:43:30
se vuelva a poner blanco
01:43:32
¿vale?
01:43:34
¿entendéis la lógica, chicos?
01:43:36
Sí.
01:43:40
Vale.
01:43:43
Entonces, esto lo tenemos que
01:43:44
conectar a un evento
01:43:46
de otro tipo. Bueno,
01:43:50
podríamos darle otra tecla, por ejemplo,
01:43:52
la Y.
01:43:54
Y, Y,
01:43:54
espacio keyboard.
01:43:56
¿Vale? Entonces, esto debería
01:43:58
de estar por aquí.
01:44:02
A ver.
01:44:04
La Y,
01:44:06
Y a ver dónde está. Aquí está. Vale. La saco y yo quiero que cada vez que le dé a la Y, él me haga 0, 1 y 2. Pero además quiero que esté en loop. ¿Ves que me da la opción de que luego empiece otra vez por el primero? Vale. Vamos a probarlo.
01:44:07
compilo y me está dando un error
01:44:24
¿por qué me da un error?
01:44:27
fijaros, me está diciendo
01:44:29
que no tengo conectado
01:44:31
el target, no sabe a qué actor
01:44:33
tiene que apuntar, con lo cual
01:44:36
tengo que enchufar el componente al target
01:44:37
y el componente
01:44:40
al target
01:44:41
lo bueno de dar a compilar es que me dice
01:44:42
si está todo bien conectado
01:44:45
o si me falta alguna conexión
01:44:47
¿vale?
01:44:49
salvamos
01:44:52
Entonces, vamos a probarlo. Le doy al play, yo estoy aquí fuera, si le doy a la T, aparece la esfera, o desaparece, ¿vale?
01:44:53
Si me meto dentro del volumen, se enciende la luz, ¿vale? Y la T sigue funcionando, ¿vale?
01:45:05
Si yo entro o salgo, se enciende, y una vez que está encendido, si le doy a la Y, verde, morado y blanco, ¿vale?
01:45:11
¿Vale? ¿Bien? ¿Se entiende, no? Es bastante intuitivo. Perfecto. Muy bien. Entonces, ahora, vamos a traernos el plugin de materiales a este proyecto.
01:45:21
El plugin de materiales os acordáis que lo teníamos que poner al mismo nivel que la carpeta content, ¿vale? Entonces, botón derecho, show in explorer, ¿vale? Lo tengo que poner aquí a este nivel.
01:45:45
entonces me vengo al otro proyecto
01:45:58
que tiene los plugins, control c
01:46:01
y
01:46:02
control v
01:46:04
vale, para que esto me lo reconozca
01:46:07
tengo que apagar y encender el proyecto
01:46:09
salvo
01:46:10
tengo que tener activado el show engine
01:46:13
content, cierro
01:46:16
y lo vuelvo a abrir
01:46:18
a ver
01:46:20
voy a cerrar el after effects que ya no me hace
01:46:29
falta, vale
01:46:33
aquí los tengo los plugins, vale entonces
01:46:38
me voy a sacar
01:46:40
una de las mallas que está en el plugin
01:46:41
que es el dragón este, ¿vale?
01:46:44
Este dragón
01:46:47
lo coloco aquí.
01:46:48
Perfecto.
01:46:53
90.
01:46:56
Muy bien.
01:46:57
Vale.
01:47:01
Ahora, vamos a empezar a hacer
01:47:02
modificaciones de movimiento
01:47:04
por blueprints, ¿vale?
01:47:07
¿Cómo hacemos esto?
01:47:09
Pues muy sencillo.
01:47:12
Antes de ponernos a hacer modificaciones
01:47:18
con blueprints
01:47:20
necesito que entendáis
01:47:20
un par de conceptos, ¿vale?
01:47:23
Necesito que entendáis qué son las coordenadas globales, relativas y locales, ¿vale?
01:47:25
Entonces, si sacamos nuestra pizarrita, tenemos coordenadas globales, relativas y locales.
01:47:35
¿Por qué? Porque luego las transformaciones que vamos a poder hacer en Blueprints van a ser globales, relativas o locales.
01:48:05
¿Vale? Perfecto. Las globales son las que coinciden con las coordenadas del mundo, ¿vale? Estas son las world. Y aquí lo que tenemos que tener claro es que el eje que mira para adelante es el X y a efectos de Blueprint se va a llamar forward vector, ¿vale? Forward.
01:48:11
El que mira para la derecha, me he confundido, es el Y y este se llama Right Vector, ¿vale? Y el que mira para arriba es el Z y se va a llamar Up Vector, ¿vale?
01:48:42
Entonces, estas son las globales. Las globales son las que tenemos siempre aquí abajo, ¿vale? Si yo giro, ¿veis? Tengo un gizmo que me indica cuáles son las coordenadas del mundo, ¿vale? Pues yo voy a poder mover, rotar o escalar los objetos en base a las coordenadas globales, si quiero, ¿vale?
01:49:00
Luego, ¿las relativas cuáles son? Van a ser las que yo tenga cuando un objeto esté atachado a otro, cuando haya una relación parent-child, ¿vale?
01:49:19
Entonces, lo que va a pasar ahí es que si el parent gira, el forward vector y el right vector cambian de orientación, ¿no? ¿Vale?
01:49:36
Entonces las relativas son esas y luego las locales van a ser las que yo tenga al girar o desplazar el objeto, ¿vale? Van a ser las propias del objeto, vamos a verlo, propias.
01:49:46
vamos a duplicar este objeto
01:49:59
me lo duplico
01:50:05
y le digo a este
01:50:08
que sea
01:50:10
un child
01:50:12
del de arriba, de hecho vamos a cambiarle el nombre
01:50:15
dragón
01:50:17
parent para que se entienda
01:50:17
mejor y dragón
01:50:21
child para que se entienda mejor
01:50:22
vale, ahí está
01:50:24
entonces, las coordenadas
01:50:27
globales de este objeto
01:50:30
son las que vienen aquí, 650, 570, 0.
01:50:31
De hecho, si quiero que sean números enteros, me la podría llevar a 600, 600, ¿vale?
01:50:38
En esta escena, el 00 de la escena es esta esquina de aquí abajo, ¿vale?
01:50:45
Entonces, lo que yo tengo son 600 centímetros hasta aquí y 600 centímetros hasta aquí, ¿vale?
01:50:52
6 metros.
01:50:59
Entonces, las coordenadas globales de este objeto son 600, 600 y 90 grados en Z, ¿vale? Está girado 90 grados con respecto a la orientación global del mundo, ¿bien? ¿Se entiende eso?
01:50:59
fijaros, cuando yo selecciono el otro
01:51:18
lo que me está diciendo
01:51:21
es que sus coordenadas
01:51:23
son 100
01:51:27
simplemente 100, 0, 0
01:51:28
¿por qué? porque él tiene
01:51:31
100 centímetros con respecto
01:51:32
al padre, ¿vale?
01:51:35
si yo quisiera saber
01:51:37
cuáles son las del mundo
01:51:38
podría cambiarlo y me va a decir que son
01:51:40
600, 700, 0
01:51:43
tiene sentido, ¿no?
01:51:45
vale, entonces cuando
01:51:49
yo introduzco una variación de transformación en este objeto
01:51:51
como está dependiendo de otro, voy a tener en cuenta que sus
01:51:55
coordenadas tienen que ser estas. Luego, si yo me
01:51:59
duplico con Alt este dragón de aquí y yo le hago una modificación
01:52:04
de este estilo y me vengo aquí arriba y
01:52:08
cambio de coordenadas del mundo a coordenadas locales
01:52:15
las coordenadas locales son estas. ¿Se entiende?
01:52:18
se entiende que ahora han girado los ejes
01:52:24
y cuando yo giro, giro con respecto
01:52:28
a la última modificación
01:52:30
no a las del mundo, ¿bien?
01:52:32
se entiende
01:52:37
más o menos, coordenadas globales
01:52:38
coordenadas relativas y coordenadas locales
01:52:40
¿sí?
01:52:42
vale, pues esto es lo que nosotros vamos
01:52:44
a utilizar para desplazar objetos
01:52:46
¿vale?
01:52:48
entonces, me cargo este dragón
01:52:50
me lo cargo
01:52:52
voy a venir aquí
01:52:53
y le voy a cambiar el material a este para identificarlo un poquito mejor, ¿vale?
01:52:55
Me vengo al material que ya tiene, que es este, botón derecho y me creo una instancia.
01:53:01
Y esa instancia se la aplico a este de aquí.
01:53:07
Y básicamente lo que voy a hacer es cambiarle los colores.
01:53:10
Porque si no, va a ser más difícil de ver.
01:53:13
Le digo que esto sea azul y que esto sea morado, por ejemplo, ¿vale?
01:53:16
y ya tenemos un dragón marroncito que es el padre y un dragón azul que es el hijo, ¿vale?
01:53:22
Perfecto, entonces, fijaros, yo ahora me vengo a mi Level Blueprint
01:53:29
y me traigo una referencia del dragón padre, de este, botón derecho, Create, Reference, perfecto.
01:53:36
¿Qué es lo que tengo que hacer yo aquí ahora?
01:53:55
Pues tengo que tirar de aquí y buscar un nodo que se llama set location, set location, set, set, set, set, tengo varios, ¿vale?
01:53:57
Set, ¿veis que? Yo aquí tengo set world location, set relative location y también tengo lo que se llama add actor local offset.
01:54:13
aquí se están viendo las tres tipologías de coordenada
01:54:22
que os comentaba, la global, la del mundo
01:54:25
la relativa que es con respecto al padre
01:54:28
y la local que es con respecto
01:54:32
a la última modificación de transformación que haya sufrido el objeto
01:54:34
¿vale? entonces yo ahora mismo lo que quiero
01:54:37
meterle es un set world
01:54:40
location ¿vale?
01:54:44
perfecto, entonces
01:54:46
el set world location fijaros
01:54:49
lo que me está pidiendo es una nueva localización X y Z con respecto al mundo, ¿vale?
01:54:51
Entonces, si yo quisiera, por ejemplo, que este dragón se moviera a este punto,
01:54:59
que este punto es el punto 600, 500, 0, tendría que venir aquí y decirle, vale,
01:55:05
quiero que cuando algo pase esto se vaya al 600, 500, 0.
01:55:18
¿Vale? Entonces vamos a sacar un evento de teclado también.
01:55:25
La U.
01:55:30
Entonces le doy U espacio keyboard.
01:55:31
Y yo quiero que cuando pulse la U, este dragón se mueva a estas coordenadas.
01:55:36
¿Vale?
01:55:43
Así de sencillo.
01:55:44
Compilamos.
01:55:46
Si yo le doy al play, estoy aquí.
01:55:48
Ahí están mis dragones.
01:55:52
si yo le doy a la U
01:55:53
no me hace ni caso
01:55:55
¿por qué no me está haciendo ni caso?
01:55:58
vale
01:56:01
para que los objetos se muevan
01:56:01
hay que cambiarle la movilidad a movible
01:56:05
si están estáticos no funcionan
01:56:07
¿vale?
01:56:08
entonces este objeto tiene que estar en movible
01:56:09
y este objeto también tiene que estar en movible
01:56:11
¿vale?
01:56:15
ahora
01:56:18
le doy al play
01:56:19
estoy jugando
01:56:20
si yo le doy a la U
01:56:21
ves que cambia de posición
01:56:24
¿no?
01:56:26
vale, pero y si yo quisiera
01:56:28
que después de eso
01:56:30
se moviera a otra
01:56:31
localización, ¿cómo podría hacerlo?
01:56:33
con el flip flop
01:56:37
vengo aquí al open level blueprint
01:56:38
y le digo, vale, yo quiero que la primera
01:56:42
vez que le dé pase una cosa, pero que la segunda
01:56:44
pase otra
01:56:46
pues venga
01:56:47
entonces, me saco un flip flop
01:56:49
este no, perdón
01:56:52
Click, flop, este de aquí, conecto esto aquí, voy un poco rápido, pero es que no tengo mucho tiempo para contaros esto.
01:56:58
Entonces, la primera vez me lo mueves aquí y la segunda me lo mueves a otra ubicación, control C, control V.
01:57:12
Y ahora quiero que en lugar de a 600 me lo muevas al 300 en I, ¿vale?
01:57:18
y compilamos, me dice
01:57:29
hay un error, ¿qué es lo que falta?
01:57:31
que le conecte el target, no sé
01:57:33
qué actor es el que tengo que mover
01:57:35
lo conectamos
01:57:37
compilo y salvo
01:57:39
entonces le doy al play
01:57:41
la primera vez que le doy al AU se mueve ahí
01:57:43
la segunda vez que le doy al AU se mueve aquí
01:57:47
si le doy otra vez, como es un flip-flop
01:57:50
se mueve aquí, ¿vale?
01:57:52
se ve, ¿no?
01:57:55
lo que está pasando
01:57:56
si nosotros dejamos la ventana abierta
01:57:57
y ponemos aquí que queremos
01:57:59
debuguear este mapa
01:58:02
lo puedo ver
01:58:04
en tiempo real, le doy al play
01:58:07
y lo que pasa es que
01:58:09
cuando le doy al lado una vez
01:58:11
se mueve a ese punto y la segunda vez
01:58:13
se mueve a ese punto y la primera vez
01:58:15
se mueve al anterior
01:58:18
¿se ve chicos?
01:58:19
¿lo que está pasando?
01:58:22
si
01:58:24
esto con respecto a las
01:58:24
coordenadas globales
01:58:28
Si yo lo que quisiera es tocar las coordenadas relativas, tendría que venir aquí, traerme un objeto que tenga coordenadas relativas, que es el child, botón derecho, me crea una referencia y le digo que lo que quiero hacer ahora es setRelativeLocation, por ejemplo.
01:58:29
¿Vale? Perfecto. Entonces aquí
01:58:53
las coordenadas que yo le meta aquí tienen que ser con respecto al padre, no con respecto
01:59:00
al mundo. ¿Vale? Control-C, Control-V
01:59:04
conecto el target y me saco otra tecla
01:59:07
que puede ser la J, por ejemplo. J
01:59:12
espacio keyboard. Y me saco otro flip-flop
01:59:16
Control-D. Control-D es igual que Control-C, Control-V
01:59:22
¿Vale? Pero más corto. Entonces, la primera vez yo quiero que esto se mueva, por ejemplo, para acá hasta aquí. Eso sería 100 menos 100. ¿Vale? Pues la primera vez quiero que esto sea 100 menos 100.
01:59:26
y la segunda vez quiero que esto sea 200 menos 300, por ejemplo, vale, la A pasa esto y la B pasa esto, y compilo, vale, entonces, si yo vengo aquí y le digo que lo quiero debuguear,
01:59:45
Lo que tendríamos es lo siguiente, me lo tengo que traer otra vez al mismo punto en el que estaba al principio, si yo le doy al play, con la U hacemos modificaciones con respecto al mundo y con la J hago modificaciones con respecto al parent, ¿vale?
02:00:10
bien
02:00:35
perfecto
02:00:37
pero
02:00:40
¿cómo podría hacer yo
02:00:41
para que
02:00:43
el dragón
02:00:43
girara
02:00:45
indefinidamente?
02:00:46
¿qué se os ocurre?
02:00:47
¿qué podríamos hacer?
02:00:48
¿pero al pulsar una tecla?
02:00:54
no
02:00:57
con otro tipo de evento
02:00:57
que os he contado
02:01:00
pero que todavía no he utilizado
02:01:01
el que se actualiza
02:01:02
en cada fotograma
02:01:06
eso es
02:01:07
el event tick
02:01:08
con el event tick
02:01:10
nosotros podríamos hacer
02:01:11
que en cada fotograma
02:01:12
le añadieramos
02:01:14
un grado
02:01:16
al giro, por ejemplo.
02:01:17
Vamos a hacerlo.
02:01:21
Si nosotros, por ejemplo, tenemos
02:01:23
el Dragon Parent y nos
02:01:25
sacamos el
02:01:28
Add
02:01:29
Local
02:01:30
Rotation
02:01:32
y le digo que
02:01:35
necesito el Event Tick
02:01:37
y que en Z quiero que
02:01:41
cada vez que
02:01:43
renderice un frame le añado un grado
02:01:45
al giro en Z
02:01:47
me traigo el event tick
02:01:48
que si no está aquí
02:01:51
me lo puedo sacar
02:01:52
botón derecho
02:01:54
tick, event tick
02:01:57
aquí está
02:02:00
pues yo conecto esto
02:02:01
entiendo que solo puede haber uno
02:02:04
en
02:02:06
solo puede haber uno
02:02:07
exacto
02:02:11
compilamos
02:02:12
y vemos que pasa
02:02:14
fijaros que el event tick está todo el rato lanzando ejecuciones, todo el rato, si yo le doy al play, el parent gira, ¿vale?
02:02:16
Entonces el resto funcionan igual, con la U yo cambio las transformaciones y con la J cambio la transformación relativa, ¿vale?
02:02:28
Pero mientras tanto, mi dragón sigue girando, ¿vale?
02:02:41
Uy, me he subido encima de un dragón, sin querer.
02:02:47
Bueno, no pasa nada, me puedo bajar.
02:02:51
Vale.
02:02:55
Sí, pregunta, a lo mejor lo vas a explicar ahora, pero le has dicho que cambie, ¿cuánto? ¿un grado?
02:02:57
Un grado en cada frame, sí.
02:03:03
Claro, y esto supongo que será igual que en Unity, no podemos depender del número de fotogramas,
02:03:05
pero claro, son 360 grados
02:03:09
un grado por fotograma
02:03:11
a 60 fotogramas por segundo
02:03:13
estamos hablando de 60 grados por segundo
02:03:15
pero no podemos
02:03:17
depender de la velocidad de fotogramas
02:03:19
por segundo
02:03:21
por eso mismo
02:03:22
tendríamos que hacer
02:03:25
una traducción
02:03:27
a delta seconds
02:03:29
¿vale?
02:03:30
claro, lo que pasa es que eso ya es
02:03:33
un pelín más complejo
02:03:35
si quiero dejarlo ahí
02:03:36
Unity es el time delta time pero es el mismo concepto
02:03:39
es el mismo concepto
02:03:41
por eso mismo el event tick
02:03:43
te permite sacar este dato
02:03:45
de información para que nosotros podamos controlar
02:03:47
exactamente cuanto gira porque si no
02:03:49
lo que dice Álvaro
02:03:51
menudo lío
02:03:52
vale entonces
02:03:54
si yo además de que gire
02:03:56
quiero que suba
02:03:58
hacia arriba le podría decir
02:04:01
que
02:04:03
le quiero dar un add
02:04:04
local
02:04:07
offset. ¿Vale?
02:04:08
Un desplazamiento.
02:04:12
Y si lo conecto aquí, se va a estar actualizando
02:04:14
en cada frame. ¿Cuánto quiero que suba?
02:04:16
Pues le puedo dar a lo mejor
02:04:19
un centímetro
02:04:20
en cada frame. ¿Vale? Vamos a ver qué pasa.
02:04:21
Yo le doy al play
02:04:27
y de repente
02:04:28
mis dragones se me van para arriba.
02:04:29
¿Vale?
02:04:32
Y esto
02:04:34
me
02:04:35
Y esto me lleva a explicaros el concepto de variable.
02:04:36
Y si yo quisiera volver al estado inicial del dragón, ¿cómo podría hacerlo?
02:04:44
Esto es como cuando yo coloco una taza de café en la mesa, la muevo y quiero volver a ponerla exactamente en la misma posición.
02:04:50
¿Cómo podríamos hacer eso?
02:04:57
¿Qué se os ocurre?
02:05:02
tendríamos que almacenar la información
02:05:02
de posición inicial cuando yo le doy al play
02:05:11
para luego poder acceder a ella y replicarla
02:05:15
y eso es una variable, ese es el concepto de variable
02:05:17
las variables son contenedores de información que nosotros podemos
02:05:22
o cambiar o almacenar para poder consultarla
02:05:26
entonces si nosotros nos creamos una variable
02:05:30
aquí le damos al más y yo lo llamo posición inicial dragón, dragón, parent, tienen que ser nombres que nos ayuden, si yo a esta variable la llamo 002, pasado mañana ya no sé qué información está almacenando,
02:05:34
¿Vale? Tienen que ser nombres que sean lógicos. Entonces, ¿qué tipología de variable? Fijaros que cuando yo abro esto, aquí tengo un montón de tipos de información diferente. Yo la información que necesito es la posición y la posición es un vector. X, Y, Z. ¿Vale?
02:05:55
Entonces le doy naturaleza de vector y ¿qué es lo que necesito? Almacenarla cuando le doy al play, ¿no? Por lo cual yo podría coger el dragón parent, control D, me duplico la referencia y hago uso de un nodo que se llama get actor.
02:06:11
GetActorLocation, ¿vale? Con esto lo que voy a hacer es tener acceso a la posición del actor, ¿vale? Pero ¿cuándo? Cuando le doy al play.
02:06:42
Entonces, yo tendría que venir a ver dónde está todo esto, GetActorLocation, y coger mi variable, arrastrarla a la escena y decir que la quiero establecer.
02:06:54
establecer, veis que cuando yo tiro de una
02:07:08
variable y la arrastro a la escena puedo hacer get
02:07:10
o set
02:07:12
el set sirve para cambiar
02:07:12
y el get sirve para
02:07:15
consultar información
02:07:17
entonces yo ahora quiero establecerla
02:07:19
quiero establecer
02:07:22
la posición actual del
02:07:24
actor cuando
02:07:26
cuando le doy al play, entonces el play
02:07:27
viene por aquí
02:07:30
y se enchufa por aquí
02:07:30
entonces cuando yo le doy al play
02:07:33
me guardo la localización del actor
02:07:35
y cuando yo
02:07:38
le doy
02:07:40
a ver, ¿cómo hacemos esto?
02:07:42
¿cómo hacemos esto?
02:07:46
esto está rotando
02:07:48
y está moviéndose
02:07:49
entonces yo me tendría que hacer otra variable
02:07:51
que sea la rotación original del actor
02:07:53
¿vale?
02:07:55
entonces, eso es otro vector
02:07:57
fijaros
02:07:59
la información de la rotación es esta
02:08:02
Entonces, ¿yo qué es lo que tengo que hacer? Tendría que establecer también una variable que fuese la rotación inicial DragonParent.
02:08:06
dragon parent, voy a escribirlo bien, y esta tiene que ser, tiene que ser, tiene que ser un rotator, ¿vale?
02:08:31
La información en este caso es un rotator, porque en lugar de ser números son grados, ¿vale?
02:08:46
Y compilamos. Entonces de aquí lo que voy a hacer es sacarme un get actor, actor rotation, actor rotation y ejecutarlo con un set. Voy a establecer esa posición inicial cuando le demos al play.
02:08:51
aquí
02:09:15
bien
02:09:18
con esto ya tenemos almacenada la posición y la rotación
02:09:20
cuando le damos al play
02:09:23
perdón por la pregunta
02:09:25
pero la variable de tipo rotator
02:09:27
es un quaternion
02:09:29
no sé lo que es un quaternion
02:09:30
vale, nadie sabe lo que es un quaternion
02:09:33
vale, vale, pues nada
02:09:35
perdón antes de hacerla, muy bien
02:09:36
no he dicho nada
02:09:38
vale, fijaros, cuando yo tengo
02:09:39
nodos de este tipo
02:09:42
y tengo aquí las tres coordenadas,
02:09:44
yo siempre puedo hacer un botón derecho,
02:09:47
split, struct, pin.
02:09:50
¿Para qué?
02:09:52
Para que me permita meter información
02:09:52
de uno solo de los ejes.
02:09:54
¿Vale?
02:09:56
Igual que aquí.
02:09:57
Botón derecho, split, struct, pin.
02:09:58
Entonces yo podría variar solamente
02:10:00
lo que está cambiando.
02:10:03
¿Vale?
02:10:05
Si quisiera.
02:10:07
¿Vale?
02:10:09
Entonces, ¿qué es lo que podría hacer yo ahora?
02:10:10
Pues que el EventDict pase por un flip-flop, ¿vale?
02:10:14
En el cual, a ver, no, no, no, no, esto no me gusta.
02:10:24
A ver, un momentito, voy a mirar la chuleta, que me hice aquí una comprobación el otro día, ¿vale?
02:10:42
con la rotación
02:10:51
nosotros tenemos
02:10:55
el dragón
02:11:10
rotando y yo lo que
02:11:13
quiero es que cuando le de
02:11:15
a una tecla
02:11:16
recupere
02:11:22
su posición
02:11:24
original, que la tengo almacenada
02:11:26
aquí, entonces yo lo que me
02:11:28
tengo que sacar ahora es
02:11:30
esa variable
02:11:32
esa variable con un get
02:11:33
¿Vale? Tengo que obtener esa información tanto de posición como de rotación. ¿Vale? Me la saco aquí con un get. ¿Vale? Y yo lo que quiero es que cada vez que yo pulse una tecla, por ejemplo la P, P keyboard, me la enchufo aquí, la primera vez le vamos a decir set rotation y set location.
02:11:37
¿Vale?
02:12:17
Tenemos que hacer, sacando de aquí, un set actor.
02:12:19
No, esto no es un actor.
02:12:32
El actor es este.
02:12:34
Vale.
02:12:36
Entonces, vamos a hacer una cosa.
02:12:36
Vamos a hacer una cosa.
02:12:38
Vamos a hacer una cosa.
02:12:42
La rotación.
02:12:43
Me estoy liando con esto un poquito.
02:12:47
A ver.
02:12:50
Esto está rotando todo el rato.
02:12:52
le estamos metiendo un grado y un centímetro
02:12:54
y yo lo que quiero es devolverlo
02:12:57
pero esto añade, ¿vale?
02:12:59
le estamos añadiendo grados
02:13:00
y añadiendo
02:13:02
y añadiendo
02:13:03
desfase de posición
02:13:06
con lo cual yo lo que tengo que hacer ahora es
02:13:09
establecer, ¿vale?
02:13:11
entonces
02:13:13
cogemos el actor
02:13:14
que es este
02:13:16
y le digo set
02:13:17
actor location
02:13:19
Actor
02:13:21
Location
02:13:24
Y también necesito un
02:13:26
Set Actor Rotation
02:13:28
Set
02:13:30
Actor
02:13:32
Rotation
02:13:34
Rotation
02:13:35
Pero claro, este de aquí
02:13:37
Sería la posición
02:13:46
Inicial
02:13:48
Y este de aquí sería la
02:13:48
Rotación inicial
02:13:51
Que tiene el actor
02:13:53
entonces
02:13:55
una pregunta
02:13:56
aquí no sería necesario
02:13:57
flip flop
02:13:59
¿no?
02:13:59
solo lo que es hacer una vez
02:14:00
claro
02:14:01
ahora de momento no haría
02:14:02
pero yo
02:14:03
a mí lo que me gustaría
02:14:03
es crear
02:14:04
una variable
02:14:05
que establezca
02:14:07
si el objeto
02:14:08
está en movimiento
02:14:09
o no
02:14:09
¿vale?
02:14:10
entonces
02:14:12
para eso
02:14:13
es necesario
02:14:14
crear una variable
02:14:16
que se llama
02:14:18
isDragonParent
02:14:20
moving
02:14:26
y le pongo también
02:14:27
una interrogación.
02:14:29
Esta tipología tiene que ser
02:14:32
de tipo booleano, porque solo la respuesta
02:14:33
solo puede ser sí o no.
02:14:36
¿Vale? Entonces, ¿cómo funciona
02:14:38
esto? Para esto
02:14:40
necesito
02:14:41
crear un branch.
02:14:43
¿Vale? El branch
02:14:46
es el equivalente a un if en
02:14:47
programación.
02:14:50
Branch. ¿Vale?
02:14:52
Entonces,
02:14:54
Lo que va a pasar aquí es que yo voy a tener en el true esto de aquí.
02:14:55
A ver, ¿cómo era?
02:15:06
Set actor location, set actor rotation.
02:15:08
Uf, me estoy liando un montón.
02:15:12
A ver si me acuerdo.
02:15:14
Yo necesito meterle aquí una condición y que esa condición esté controlada por esta variable.
02:15:19
Tengo que traer el get.
02:15:27
Vale.
02:15:29
¿Vale? Entonces el true o false yo lo voy a controlar con esta variable, con lo cual cada vez que yo le dé a este botón solo va a ser true cuando esta condición esté en true y cada vez que yo le dé a este botón solo va a ser false cuando esta condición esté en false.
02:15:30
Nosotros, cuando le damos a compilar, podemos seleccionar cualquier variable y establecer un estado inicial también, ¿vale?
02:15:51
Entonces, de primeras, lo que le damos a decir es que queremos establecer esta rotación y esta posición, ¿vale?
02:15:59
Ahí.
02:16:15
Vale.
02:16:18
¿Esto sirve de algo?
02:16:20
creo que no
02:16:21
a ver un momento, voy a hacer una prueba rápida
02:16:23
voy a eliminar esto
02:16:25
para ver si funciona
02:16:30
lo de la posición inicial
02:16:33
esto está rotando
02:16:34
a su rollo y yo de repente le doy a este botón
02:16:37
y debería de bajar
02:16:39
vale
02:16:42
vamos a hacer una prueba
02:16:44
a la P
02:16:46
le damos al play, esto sube
02:16:48
si yo le doy a la P, baja
02:16:52
vale, funciona
02:16:54
además veis que recupera
02:16:56
la posición y la rotación
02:16:59
vale
02:17:01
perfecto
02:17:02
bien
02:17:06
esto funciona
02:17:06
entonces yo para qué quería
02:17:08
hacer lo del branch
02:17:11
claro porque el branch
02:17:12
al final
02:17:15
lo que hace es replicar
02:17:15
el comportamiento
02:17:16
de un flip flop
02:17:17
pero
02:17:18
con cierto grado de control
02:17:19
vale
02:17:22
yo por ejemplo
02:17:23
pero esto ya es por
02:17:26
yo por ejemplo
02:17:27
lo que le haría es preguntarle si llega
02:17:28
a dos metros, vuelve a la posición inicial
02:17:30
que es un poco como
02:17:32
podrías hacerlo por programación, que es claro
02:17:33
yo lo he trasladado todo al código
02:17:36
si tu posición
02:17:37
actual es mayor de
02:17:39
dos metros en Z
02:17:42
pues vuelve a tu posición inicial
02:17:44
con lo cual estaría subiendo
02:17:46
y volviendo al inicio constantemente
02:17:47
claro, es que nosotros luego
02:17:49
tenemos nodos matemáticos que nos permiten
02:17:52
establecer si un valor es mayor que
02:17:54
o menor que
02:17:56
o mayor o igual, cosas así
02:17:57
que nos permitan hacer ese tipo de operaciones
02:18:00
pero vamos, eso se lo dejamos al programador
02:18:02
no te preocupes
02:18:04
entonces, lo que yo os quería contar
02:18:05
ahora, es como poder operar
02:18:08
todo el tema este de las pantallas
02:18:10
que hemos hecho antes, entonces, por ejemplo
02:18:11
si yo
02:18:14
vengo aquí
02:18:16
y me creo un planito
02:18:17
me creo un planito
02:18:19
os voy a contar como animar un objeto
02:18:24
sin necesidad de sequencer, vale
02:18:26
Si yo me traigo aquí un plan, le doy la vuelta, lo subo, le voy a dar escala 0.9, 1.6, para que sea 16.9, ¿vale?
02:18:28
Tenemos esto.
02:18:47
Entonces, si yo lo que quiero hacer es que esto sea una pantalla que suba y que baje,
02:18:49
Lo podría hacer con un Sequencer y lanzarlo como hemos visto en el otro proyecto o lo podríamos mover con un Timeline, ¿vale? Fijaros, ahora me traigo una, esto lo vamos a llamar Screen, Screen, ¿vale? Y esto nos lo vamos a traer como referencia a nuestro Level Blueprint, aquí.
02:18:54
Y entonces, botón derecho, Create Reference. Perfecto. Con lo cual, ¿yo qué es lo que quiero? Quiero establecer Set Location. ¿Vale? Set Actor Location, por ejemplo.
02:19:19
Entonces, ¿cuál es la posición inicial que yo necesito?
02:19:43
La posición inicial que yo necesito es que la pantalla no se vea, ¿no?
02:19:47
Yo quiero que cuando arranque, la pantalla esté aquí, ¿vale?
02:19:55
Y eso es esta de aquí, ¿vale?
02:19:59
¿Qué pasa?
02:20:03
Que nosotros, dentro de Blueprints, tenemos un Lerp también.
02:20:04
Nosotros podríamos establecer una interpolación entre una localización y otra.
02:20:10
¿Vale? Entonces, ¿cómo lo podríamos hacer? Pues, por ejemplo, podríamos sacarnos una variable que fuese la localización de la pantalla, ¿vale? Por ejemplo, una forma muy rápida de hacerte una variable es coger uno de los pines de información, ¿vale? Y decirle botón derecho, promote tu variable, ¿vale?
02:20:16
Esto podría ser la variable de posición de mi pantalla.
02:20:44
Entonces, yo la llamo así, la nombro así.
02:20:50
Y veis que automáticamente ya me pone la naturaleza de información que necesita.
02:20:52
Esto lo llamamos screen position.
02:20:57
Screen position.
02:21:01
Entonces, ¿qué posición necesito yo al principio?
02:21:04
Esta, ¿vale?
02:21:08
Con lo cual, podría venir y decirle, vale,
02:21:09
pues vamos a hacer un set
02:21:12
de esta variable en el begin play
02:21:14
que tenga esas coordenadas
02:21:16
¿vale? viene por aquí
02:21:18
el begin play
02:21:20
si no quieres estar todo el rato
02:21:21
siguiendo la dirección
02:21:24
del begin play tenemos otro nodo
02:21:26
que se llama sequence que me permite
02:21:28
hacer cosas en paralelo
02:21:31
entonces yo podría
02:21:33
venir aquí, conectar
02:21:34
esto y que por aquí arriba
02:21:36
pasase otra cosa en paralelo
02:21:38
Entonces podría venir ahí y decirle, vale, yo quiero establecer set screen position en estas coordenadas que es 1160, 770, 1160, 770 y la otra es menos 100.
02:21:40
menos 100. Entonces yo
02:22:12
hago play y coloco esta variable
02:22:15
ahí. Y como
02:22:18
esta variable
02:22:19
está generándose
02:22:20
en todo momento,
02:22:24
¿vale?
02:22:27
Ya la tengo aquí colocada. Entonces esto
02:22:27
es lo que
02:22:29
yo hago al darle al play. ¿Vale?
02:22:31
Y ahora,
02:22:33
¿qué es lo que necesito? Necesito
02:22:35
un nodo que me
02:22:40
permita hacer una interpolación.
02:22:42
¿Vale?
02:22:44
Yo necesito un nodo que me permita hacer una interpolación. ¿Entre qué y qué? Vamos a verlo. Ese nodo se llama Timeline. Timeline. Timeline. Timeline. Add Timeline. ¿Vale?
02:22:45
Y este timeline lo vamos a llamar, pues no lo sé, Screen Transition, Transition, Transition, Transition, ¿vale? Perfecto.
02:23:04
Entonces, ¿yo qué es lo que voy a hacer con esto? Pues fijaros, tengo que entrar dentro, ¿vale?
02:23:22
Le voy a decir, entro dentro y dentro, ¿veis que yo puedo ir y venir del timeline? Yo me tengo que crear un track y este track va a ser un float, ¿vale? La longitud de este float va a ser de un segundo, por ejemplo, ¿vale? Uno, ¿vale?
02:23:30
cero.
02:24:00
Ahora me creo otro, botón derecho,
02:24:02
y a este le digo que esté en el 1,
02:24:07
1, ¿vale?
02:24:10
Y tengo esto, tengo una curva que va de 0 a 1 en un segundo, ¿vale?
02:24:13
Perfecto.
02:24:18
Entonces, esa información,
02:24:20
esa información yo se la tengo que meter a un lerp, ¿vale?
02:24:21
Entonces,
02:24:31
¿Qué es lo que necesito?
02:24:31
Un lerp que sirva para introducir
02:24:35
información de vector.
02:24:37
Este play, o sea, cuando yo lanzo
02:24:41
esta transición entre 0 y 1, lo puedo poner con una tecla.
02:24:43
Por ejemplo, p espacio keyboard.
02:24:46
Keyboard.
02:24:50
Esta, por ejemplo. Entonces, cuando yo le dé,
02:24:53
hace play entre 0 y 1 en un segundo.
02:24:56
Entonces, ahora, yo me saco un lerp
02:24:59
Un ler de transformación de vectores, ¿vale?
02:25:03
Y esta información es la que le va a entrar al setActorLocation, ¿vale?
02:25:08
Perfecto.
02:25:14
Entonces, el alfa de este ler tiene que ser la información del timeline.
02:25:17
Y el A y el B tienen que ser el punto inicial y el punto final de ese actor, ¿vale?
02:25:22
Y esto se tiene que estar ejecutando en todo momento.
02:25:28
¿Vale? A ver, a ver, a ver, un momentito. El event tick, este de aquí, ¿vale? Tiene que estar comprobando en todo momento si esto cambia. Cuando esto empieza a cambiar es cuando se mueve, ¿vale? ¿Se entiende esto más o menos, chicos, lo que estoy haciendo? ¿Bien? Esto es un poco más lioso ya, ¿no?
02:25:33
que lo del principio
02:26:02
bueno vamos a probar a ver si funciona
02:26:05
realmente esto tampoco se utiliza tanto
02:26:06
porque normalmente nosotros siempre animamos
02:26:08
con el sequencer y lo lanzamos directamente
02:26:10
con el sequencer que lo podríamos hacer también
02:26:12
vale entonces la posición
02:26:14
inicial cual es esta de aquí
02:26:16
vale vamos a meterle
02:26:18
que pase del punto A
02:26:20
que es 1160
02:26:22
770
02:26:24
menos
02:26:26
100 al
02:26:28
pues vamos a ver
02:26:32
solamente habrá que subirlo en Z
02:26:34
aquí por ejemplo
02:26:36
que sería 120
02:26:38
vale
02:26:39
1160
02:26:40
700
02:26:45
y 120
02:26:46
por ejemplo
02:26:50
compilamos
02:26:51
y vemos lo que pasa
02:26:53
cuando yo le doy a la P
02:26:55
se debería adelantar
02:26:57
ah no, perdón
02:26:59
no tiene que estar conectado con el
02:27:01
con el event
02:27:03
tiene que estar conectado con el update
02:27:04
del timeline, ¿vale? Cuando el timeline
02:27:07
se actualiza es cuando esto
02:27:10
se ejecuta, ¿vale? Es así
02:27:12
como tiene que estar, ¿vale?
02:27:14
Evidentemente con un
02:27:18
timeline yo me puedo crear diferentes
02:27:19
tracks, ¿vale?
02:27:21
Y utilizar esto para diferentes cosas,
02:27:23
¿vale? No tiene por qué ser solo una.
02:27:25
Entonces, compilo,
02:27:28
salvo, y vemos
02:27:30
lo que pasa.
02:27:31
Yo me vengo por aquí, esto va a ir a su rollo,
02:27:33
y si yo le doy a la P,
02:27:35
no, es la P
02:27:37
vale, la movilidad está puesta como está aquí
02:27:38
va a pasar lo mismo que con el dragón
02:27:41
le tengo que decir que se mueva
02:27:43
vale
02:27:45
entonces, comprobamos
02:27:48
comprobamos
02:27:51
que la P
02:27:53
es la que hace de trigger
02:27:56
de toda esta cadena
02:27:58
lo pongo aquí para que veamos el
02:27:59
para que veamos el
02:28:03
el proceso
02:28:07
y si yo le doy al play
02:28:09
le doy a la P
02:28:14
ahí lo tenemos
02:28:16
claro
02:28:18
pero yo quiero
02:28:19
que haga
02:28:20
este recorrido
02:28:21
de ida
02:28:22
y el recorrido
02:28:22
inverso
02:28:24
de vuelta
02:28:25
a ver cómo se puede hacer eso
02:28:27
cómo se puede hacer eso
02:28:28
tendría que
02:28:32
coger este mismo nodo
02:28:35
control C
02:28:38
control V
02:28:40
cambiarle este valor
02:28:41
120
02:28:44
menos 100
02:28:45
sacar esto
02:28:48
y uff
02:28:52
no, esto es más complejo de lo que parece
02:28:57
el alfa tendría que ser el mismo
02:29:00
y cuando se tendría que ejecutar esto
02:29:04
play
02:29:08
ah bueno, le puedo dar un reverse
02:29:09
aquí, estoy idiota
02:29:12
claro, pero para eso necesito un flip flop
02:29:14
flip flop
02:29:17
La primera vez me ejecuta el play y la segunda vez me ejecuta el play reverse, ¿vale?
02:29:20
Y además tendría que poner este elemento de primeras aquí abajo que no se viera, ¿vale?
02:29:26
Salvamos, le doy al play y cuando yo le doy a la P aparece y desaparece.
02:29:36
Además veis que la P es también la que devolvía el dragón a su posición inicial, ¿vale?
02:29:44
Bien, ¿se entiende más o menos? Vale, pues vamos a ver cómo se haría esto con la secuencia, que es lo mismo que hemos dejado programado en nuestro proyecto de set virtual, ¿vale?
02:29:49
Nos venimos aquí, nos creamos una secuencia, Cinematic Level Sequence, lo llamamos LS barra baja, Screen, Screen, ahí estamos, doble clic, me traigo la referencia de este actor,
02:30:02
le decimos que queremos funcionar en 24 frames por segundo
02:30:24
que la posición inicial de transformación sea esta
02:30:31
con un intro para que me cree los keyframes
02:30:34
activamos el auto key
02:30:37
me voy a 24 frames
02:30:40
le digo que esto es el final de la animación
02:30:45
y que lo que yo quiero es que esto suba para acá
02:30:48
¿vale?
02:30:52
hasta aquí
02:30:53
más o menos, vale, entonces lo que tenemos es play y play reverse, perfecto, entonces, bueno la parte de curvas creo que nos la he contado, verdad, os suena que hayamos hablado de curvas dentro del sequencer, vale, bueno pues os hago una pequeña introducción a curvas para que sepáis donde está, si queremos tocar las curvas de cualquier keyframe que hayamos creado tenemos que darle a este botoncito, vale,
02:30:54
esto nos abre
02:31:24
un editor de curvas
02:31:26
básicamente entonces que es lo único que está animado
02:31:30
en esta malla el eje Z
02:31:32
si yo vengo aquí
02:31:33
y me voy a localización eje Z
02:31:35
veis se me filtra
02:31:38
entonces yo lo que
02:31:39
quiero aquí es que estos dos
02:31:42
no tengan esta curva de animación
02:31:44
sino que al principio vaya más rápido
02:31:46
y que luego vaya decelerando
02:31:48
vale
02:31:50
entonces para hacer
02:31:51
es muy sencillo. Seleccionamos los dos keyframes, les decimos que queremos que sean keyframes
02:31:54
asimétricos, selecciono uno y lo subo. ¿Vale? Sería algo así. También podemos hacer zoom
02:32:01
en la selección. Si selecciono dos keyframes y le damos a este botoncito, ¿veis? Nos hace
02:32:13
zoom solamente en esos keyframes que están seleccionados. ¿Vale? Entonces, si yo quisiese
02:32:17
que la deceleración
02:32:23
fuese más pronunciada
02:32:24
en esta zona
02:32:26
podría coger
02:32:26
este
02:32:27
este controlador
02:32:28
y moverlo
02:32:30
¿vale?
02:32:31
si me quiero mover
02:32:32
en horizontal
02:32:33
o en vertical
02:32:34
pulso shift
02:32:35
¿vale?
02:32:37
y además
02:32:39
así
02:32:40
lo que hacemos es
02:32:40
jugar con la tangente
02:32:41
¿vale?
02:32:42
entonces
02:32:43
este de aquí
02:32:44
lo podría subir
02:32:45
un poquito más
02:32:46
y ya tendríamos eso
02:32:47
con lo cual
02:32:48
si me vengo
02:32:49
al principio de la animación
02:32:50
tengo esto
02:32:51
y ves que hace como una deceleración
02:32:52
cuando llega, ¿no?
02:32:55
Play, reverse
02:32:58
y play.
02:32:59
Vale, pues si yo quisiera operar esto,
02:33:02
si yo quisiera operar esto desde Blueprints,
02:33:04
lo que tendría que hacer es
02:33:08
sacar un actor, ¿vale?
02:33:10
Sacar la secuencia escena,
02:33:13
traerme una referencia al level Blueprint,
02:33:16
traerme una referencia al level Blueprint,
02:33:21
esta parte la voy a desconectar vale con la con la secuencia como actor seleccionada me
02:33:22
traigo una referencia con botón derecho me saco el play esto lo que hemos hecho en el
02:33:36
proyecto del set antes y me saco el play river play rivers tienen que salir del
02:33:45
componente lógicamente y me pongo aquí un flip flop vale ahí estamos
02:33:56
Perfecto. Con la A lo saco y con la B lo oculto, ¿vale? Con la P le doy al play y con la P sale y con la P se retira, ¿vale?
02:34:04
¿Pero qué está pasando? Aquí hay una cosa que os tengo que contar, que es importante. Es que el elemento, cuando nosotros lo animamos, tiene un parámetro que es el que define qué pasa con ese objeto cuando ha terminado la animación.
02:34:20
Entonces, para que la animación mantenga el estado final que le hemos dado, se lo tenemos que especificar.
02:34:38
Botón derecho, propiedades, y veis que aquí tiene una opción que se llama when finished, cuando acaba.
02:34:45
Pues cuando acaba le tenemos que decir que mantenga el estado, porque si no, está reapareciendo todo el rato, cada vez que le damos al play.
02:34:52
¿vale? entonces
02:34:59
ahora que le hemos hecho eso
02:35:04
si le damos al play
02:35:06
bueno, lo que tengo que hacer es
02:35:07
cerrar esto
02:35:10
le doy al play
02:35:11
y cuando le doy al AP
02:35:13
aparece y cuando le doy al AP
02:35:15
desaparece ¿vale?
02:35:17
¿bien? ¿se entiende
02:35:20
más o menos chicos?
02:35:23
si
02:35:25
yo creo que estamos ya
02:35:26
los dragones
02:35:31
van por ahí arriba
02:35:33
si le doy a la P vuelve a su sitio
02:35:34
bueno
02:35:38
más o menos se entiende un poco
02:35:42
esto de los blueprints, es muy rápido
02:35:44
meteros esto en hora y media
02:35:46
es demasiado a lo mejor
02:35:47
pero bueno, sí que quería que
02:35:49
por lo menos tuvieseis una primera toma de contacto
02:35:52
con todo esto
02:35:55
para cuando tengáis que hacer cositas más complejas
02:35:56
por lo menos que os suene, y que si hacéis un tutorial
02:35:58
pues que os suenen un poco los conceptos
02:36:00
¿vale?
02:36:02
evidentemente, yo si tuviese
02:36:05
que hacer todas estas cosas, probablemente
02:36:06
no las haría en el Level Blueprint, me haría un
02:36:08
Blueprint Class, ¿vale?
02:36:10
Fijaros, si
02:36:13
yo, por ejemplo, me creo
02:36:14
un botón derecho, Blueprint
02:36:16
Class, y me
02:36:18
creo un actor vacío, ¿vale? Estas son
02:36:20
todas las tipologías que tenemos de Blueprint,
02:36:22
bueno, no todas, estas son las más comunes.
02:36:25
Aquí abajo las tenemos
02:36:27
todas, en el buscador, pero si yo me
02:36:28
quiero hacer un Blueprint sencillo, vacío,
02:36:30
que sea
02:36:33
un BP barra baja,
02:36:34
rotaping
02:36:36
rotaping
02:36:38
dragon
02:36:40
me lo crearía así
02:36:41
doble clic
02:36:47
se me abre
02:36:49
el blueprint class
02:36:50
que veis que también tiene un event graph
02:36:52
igual que el del blueprint
02:36:54
y yo lo que tendría que hacer básicamente aquí
02:36:55
es decirle
02:36:58
primero que quiero añadir un static mesh
02:36:59
a este blueprint
02:37:02
los blueprint nos sirven para hacer
02:37:06
elementos compuestos
02:37:08
¿Vale? Que tengan mallas, que tengan cámaras, etcétera, etcétera. Entonces, para mí esto va a ser el Dragon Mesh. ¿Vale? Y cuando lo tengo seleccionado, veis que yo aquí a la derecha tengo un slot para la malla. ¿Vale? Pues voy a seleccionarlo y lo meto aquí. ¿Vale? Lo metemos aquí. Ahí tengo el Dragon ya creado.
02:37:10
compilo y fijaros en el viewport
02:37:33
yo ya tengo un blueprint que tiene una malla
02:37:36
adentro y que esa malla es la malla
02:37:38
de un dragón, vale
02:37:40
entonces yo podría
02:37:42
venir aquí y decir
02:37:44
vale pues este va a ser mi rotating
02:37:46
dragon, es un blueprint
02:37:48
ya no es una malla, es una malla
02:37:50
que contiene un blueprint, perdón al revés
02:37:52
es un blueprint que contiene una malla
02:37:54
vale, entonces para
02:37:56
decirle yo a este dragón que rote
02:37:58
lo que tendría que hacer es venir al event graph
02:38:00
Sacarme una referencia de la malla y decirle que le quiero añadir a local rotation, ¿vale?
02:38:03
¿Cuánto? Pues no lo sé.
02:38:16
Vamos a establecerlo con una variable y lo conecto al event tick, ¿vale?
02:38:20
Lo conecto al event tick.
02:38:26
Veis que aquí en el delta rotation tengo los tres.
02:38:28
Los voy a desplegar.
02:38:30
botón derecho, split, struct pin y yo lo único que quiero tocar es la Z
02:38:32
¿vale? entonces si yo aquí me creo
02:38:37
una variable que sea
02:38:40
pues como la podríamos llamar
02:38:43
angle amount
02:38:48
de primeras compilo y le digo que el valor por defecto
02:38:55
será 0 para que no rote ¿vale?
02:39:02
de primeras
02:39:04
cero para que no rote
02:39:06
perfecto
02:39:09
entonces si yo
02:39:11
abro esto
02:39:15
fijaros
02:39:17
el dragón no está rotando
02:39:19
si yo pulso shift f1
02:39:21
me saca el ratón
02:39:23
y estando en play
02:39:25
yo podría venir aquí
02:39:26
y seleccionar
02:39:30
mi dragón
02:39:31
a ver donde está
02:39:33
rotatingDragon
02:39:34
¿dónde está?
02:39:36
¿dónde estás?
02:39:39
aquí está
02:39:39
rotatingDragon
02:39:40
vale
02:39:41
yo lo que quiero
02:39:41
es que esa variable
02:39:43
esté disponible
02:39:45
cuando yo esté
02:39:46
en el juego
02:39:47
¿cómo se hace eso?
02:39:48
me salgo del modo juego
02:39:50
me meto otra vez aquí
02:39:52
le digo que esta variable
02:39:55
quiero que se vea
02:39:56
¿vale?
02:39:57
eso se llama
02:40:00
hacer una variable
02:40:00
instanceEditable
02:40:02
¿por qué?
02:40:03
porque todas las instancias de este blueprint que estén en el nivel van a tener disponible ese parámetro.
02:40:04
Fijaros, ahora yo cuando lo selecciono tengo aquí un parámetro que se llama angle amount, ¿verdad?
02:40:13
Entonces, si a este le digo que tenga 1, a este le digo que tenga 5, a este le digo que tenga 0, como está,
02:40:19
y a este le digo que tenga 10, fijaros, salgo, le doy al play y cada uno está girando con una velocidad diferente, ¿vale?
02:40:27
Es la misma variable, pero como son instancias independientes, yo puedo cambiar ese valor, ¿vale?
02:40:39
¿Entiende?
02:40:46
Entonces, si yo ahora pulso Shift F1 para que me aparezca el ratón, yo podría elegir cualquiera de estas
02:40:48
y cambiarle ese valor, ¿vale?
02:40:57
Este que está girando, le digo que esté en 0 y se para,
02:41:02
o le digo que se ponga en 10 y gira más rápido.
02:41:05
Si le digo 50, pues se pone a girar como un loco, ¿vale?
02:41:08
¿Veis un poco la diferencia entre un Blueprint Class y el Level Blueprint?
02:41:14
Al final, lo bueno de esto es que yo tengo acceso a todas las variables
02:41:18
en cada instancia y además lo bueno de esto es que lo que yo programe
02:41:22
en el Blueprint Class me lo puedo llevar a otro proyecto
02:41:26
sin necesidad de migrarme
02:41:28
el nivel completo
02:41:30
¿Vale? ¿Se entiende
02:41:31
chicos? ¿Más o menos?
02:41:34
Hombre, yo sí
02:41:38
Bueno
02:41:39
Pues yo creo que más o menos
02:41:44
esto es lo que os quería contar de Blueprints
02:41:46
para que tengáis una idea aproximada porque al final
02:41:48
ya vais a ver que
02:41:50
las cosas
02:41:51
que se suelen parametrizar
02:41:54
para axiometría son cosas muy sencillas.
02:41:56
Suelen ser elementos que suben y bajan
02:41:58
o a lo mejor
02:42:00
la intensidad de una luz,
02:42:02
por ejemplo.
02:42:04
Si yo, por ejemplo,
02:42:06
o el color de una luz,
02:42:08
que ya lo hemos hecho,
02:42:10
eso es lo que se suele parametrizar
02:42:13
para axiometría. Y luego ya si se meten en cosas más
02:42:14
complejas, normalmente lo que suele haber es un programador
02:42:16
que te cree toda esa programación
02:42:18
y que luego tú tengas acceso a ella mediante
02:42:20
axiometría. De todas maneras,
02:42:22
si se os ocurren cosas
02:42:24
bizarras que programar, Rafa
02:42:26
probablemente tenga una solución
02:42:28
para eso. Él tampoco es programador, pero sí que le ha
02:42:30
tocado pelearse mucho con este tipo
02:42:32
de historias, ¿vale?
02:42:34
Así que bueno.
02:42:37
Yo creo que
02:42:40
lo vamos a dejar aquí
02:42:40
porque
02:42:41
no me quiero meter en más líos de
02:42:43
blueprints, que al final lo que va a hacer es liaros
02:42:46
más. Pero bueno, si me dices, Álvaro, que
02:42:48
más o menos se ven las correspondencias
02:42:50
con lo que hacéis en Unity, con eso me vale.
02:42:52
Sí, sí, sí. De hecho
02:42:57
es más intuitivo con los blue frames
02:42:58
en Unity hacen un lerp
02:43:01
es un dolor, y aquí ya he visto lo fácil que es
02:43:03
perfecto
02:43:05
los lerps se utilizan para todo
02:43:07
para hacer transiciones entre colores
02:43:09
entre posiciones, entre rotaciones
02:43:11
entre lo que sea, porque al final es
02:43:13
interpolación lineal
02:43:15
entre dos estados
02:43:17
muy bien chicos, pues nada, pues os subo
02:43:18
entonces el último proyecto
02:43:24
que teníamos a Drive
02:43:26
que es
02:43:28
este de aquí
02:43:29
bueno, os puedo subir los dos si queréis
02:43:31
así tenéis también el ejemplo de Blueprints
02:43:33
ya programado
02:43:35
y nada, con lo que sea
02:43:36
me decís
02:43:40
estoy a vuestra disposición
02:43:41
y si necesitáis algún
02:43:43
que miremos la posibilidad
02:43:45
de algún escenario
02:43:47
para la gente de cine o lo que sea, igual
02:43:49
me decís y lo hablamos
02:43:51
¿vale?
02:43:54
vale, vamos a ver
02:43:55
y nada, gracias por
02:43:56
soportar toda esta chapa
02:43:59
infame que os acabo de soltar
02:44:01
espero que os haya gustado el curso
02:44:02
y que sigáis
02:44:05
evolucionando en Anriado si es posible
02:44:06
gracias
02:44:08
habrá que volver sobre ello pero
02:44:10
por lo menos una idea la tenemos
02:44:12
muy bien
02:44:14
un placer
02:44:16
venga muchas gracias
02:44:18
adiós
02:44:20
adiós
02:44:22
- Idioma/s:
- Autor/es:
- Diego Hernández
- Subido por:
- Alvaro H.
- Licencia:
- Reconocimiento - No comercial - Sin obra derivada
- Visualizaciones:
- 7
- Fecha:
- 20 de mayo de 2024 - 20:49
- Visibilidad:
- Clave
- Centro:
- CFP JOSÉ LUIS GARCI
- Duración:
- 2h′ 44′ 36″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 1.03