Domina las simulaciones con nodos de geometría en Blender | Yassine Larayedh | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Domina las simulaciones con nodos de geometría en Blender

teacher avatar Yassine Larayedh, VFX Artist

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Trailer

      1:51

    • 2.

      Zonas de repetición

      1:46

    • 3.

      Zonas de simulación

      2:30

    • 4.

      Qué es una simulación

      1:04

    • 5.

      Qué es la velocidad

      1:07

    • 6.

      Qué es la aceleración

      3:27

    • 7.

      Qué es un atributo

      5:05

    • 8.

      El atributo de aceleración

      8:38

    • 9.

      El problema de Delta-t

      8:13

    • 10.

      Adición de restricciones Pt.1

      5:08

    • 11.

      Adición de restricciones Pt.2

      6:51

    • 12.

      Radio

      11:46

    • 13.

      Colisión

      9:36

    • 14.

      Desove de partículas

      4:31

    • 15.

      Fricción

      3:51

    • 16.

      Descripción final

      7:56

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

195

Estudiantes

3

Proyectos

Acerca de esta clase

En este curso, aprenderás a crear simulaciones con nodos de geometría en Blender, al crear tu propio motor de física.

Este curso no es solo otro tutorial de “hacer clic en esto”: es una inmersión profunda en el mundo de las simulaciones en Blender.

No solo aprenderás a pensar como un artista, sino también como un ingeniero.

Explorarás el lado técnico de la creación de simulaciones realistas.

Abordaremos conceptos esenciales de física, como

  • Gravedad
  • Velocidad
  • Aceleración
  • Colisión y más

Todo eso te permitirá dominar las simulaciones con una sólida comprensión de la ciencia que hay detrás.

Al final, estarás preparado para diseñar escenas complejas y dinámicas con confianza.

Conoce a tu profesor(a)

Teacher Profile Image

Yassine Larayedh

VFX Artist

Profesor(a)

I'm a VFX generalist, which is a fancy way of saying I do a bit of everything when it comes to visual effects.

I also have a bit of an obsession with the technical side of 3D--things like shading nodes and procedural stuff that make most people's eyes glaze over. But hey, it's fun for me!

I also happen to be pretty good at video editing. VFX and editing go hand-in-hand, so I figured I might as well get good at both.

When I'm not working on my own stuff, I actually enjoy teaching others how to do this kind of thing. I know, weird, right? But there's something really satisfying about breaking down complicated processes and seeing people have that "Aha!" moment. So, I started creating courses to share what I've learned.

Thanks for stopping by! Feel free to reach... Ver perfil completo

Level: Intermediate

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Trailer: Oye, échale un vistazo a esto. Toda esta simulación se realizó con solo usar nodos de geometría. Y si solo sabes un poco sobre nodos, sabes lo desafiante que puede ser crear tal cosa. El caso es que entender los nodos es duro y frustrante. Pero si no lo haces, te perderás un aspecto crucial de la licuadora que te abrirá un nuevo mundo de posibilidades. Probablemente también hayas visto algunos de esos locos crees de nodo y te has preguntado, ¿cómo siquiera empiezas a hacer esto? ¿Cómo lo sé? Porque yo estaba ahí. Sufrí por encontrar muchas respuestas a mis preguntas. Al hacer este curso, estoy apuntando a que el proceso de aprendizaje de simulaciones en nodos de geometría sea más fácil y divertido para ti A lo largo de este curso, no solo aprenderás a crear una simulación de física en blender. Literalmente construirás tus propios motores de física dentro de nodos de geometría. Aprenderás sobre las fuerzas de la vida real que hacen que nuestro mundo funcione de la manera que es. Aprenderás sobre la velocidad. Aprenderás sobre la aceleración, colisión, gravedad y cómo todas estas fuerzas interactúan entre sí. Y más. Y aprenderás todo eso creando la simulación de bolas que caen. Sé lo que algunos de ustedes podrían estar pensando ahora mismo. Oye, Yassine, ¿por qué me molestaría crear una simulación de bolas que caen Quiero aprender a crear las cosas buenas como explosiones o aprender lo que hace cada nodo Créeme, ese sería un enfoque terrible. Tan simple como caer bolas puede parecer un concepto. Te sorprenderá la gran cantidad de conceptos que aprenderás con solo crear la simulación. ¿Cuál lo convierte en el ejercicio perfecto? Ser bueno en simulaciones es ser bueno en física. Y este curso cerrará la brecha entre ambos y te abrirá esa puerta. Entonces, si te interesa aprender simulaciones usando nodos de geometría en blender, este curso es para ti, y no puedo esperar a verte del otro lado. Por favor. 2. Zonas de repetición: Zonas de repetición. En las versiones recientes de Blender, se introdujo un nuevo concepto, repitiendo zonas. Este es el cubo predeterminado, bérrelo porque tienes que hacerlo, y voy a agregar una esfera. Si abro el editor de nodos de geometría, creo un nuevo árbol, y llamémoslo , por ejemplo, simulación. Si vas a agregar der utilities, tendrás una opción para repetir zonas. Como puedes ver, tendrán estos dos nodos con esta caja alrededor de ellos. Las zonas de repetición son una forma de decirle a Blender que repita ciertas operaciones varias veces. Por ejemplo, Lo que viene de esta entrada grupal es mi geometría original, que es la esfera. También tengo mi salida de grupo, que es la geometría que voy a tener al final. Voy a tapar la zona repetitiva entre ellos así. También voy a agregar otro nodo llamado set position, que me permitirá cambiar la posición de un objeto. Desplazar A, establecer posición, y voy a enchufarlo en la zona de repetición. Digamos que voy a mover la esfera 1 metro sobre el eje x, y eso es exactamente lo que tendré si escribo una aquí. Ahora, digamos que quiero repetir esta operación diez veces. Por supuesto, puede ser tan fácil como escribir diez aquí, pero imagina si tienes un árbol de nodos más grande. En esa situación, necesitarás multiplicar cada valor por diez, lo que puede ser una molestia. Es por eso que en el primer nodo de la zona de repetición, tienes este número etiquetado iteraciones, lo que representa cuántas veces quieres blender para calcular lo que hay dentro de la zona de repetición Si escribo diez aquí, licuadora ejecutará lo que hay dentro de esta zona repetitiva diez veces. Entonces, si fuéramos a resumir lo que son las zonas de repetición, las zonas de repetición son una forma de decirle a blender que repita ciertas operaciones un cierto número de veces. Es así de simple. Ahora bien, ¿qué pasa con las zonas de simulación? 3. Zonas de simulación: Zonas de simulación. Las zonas de simulación tienen un concepto similar a las zonas de repetición. Hay una manera de ejecutar ciertas operaciones varias veces. La única diferencia entre las zonas de simulación y las zonas de repetición es que en las zonas de repetición, especifica cuántas veces desea que blender compile esas diferentes operaciones. tanto, en las zonas de simulación, Blender compilará todas las operaciones en cada fotograma. Si voy a agregar simulación, tendré zona de simulación. Como puedes ver, es bastante similar a la zona de repetición, excepto que no tiene el valor de iteración Tiene tiempo de dilta en su lugar. Ahora bien, si duplico la misma operación de posición establecida dentro de la zona de simulación, enchufar la entrada de grupo a la entrada de simulación y la salida de simulación en la salida de grupo para ver el resultado final, nada sucederá al principio. Pero si abro la línea de tiempo y golpeo play, verás que la esfera se mueve. Ahora, Blender está ejecutando las operaciones dentro las zonas de simulación en cada fotograma. En el marco uno, la licuadora moverá la esfera 1 metro, y en el cuadro diez, moverá la esfera 10 metros. Es así de simple. Ahora es importante señalar que blender no está ejecutando la simulación diez veces cuando está en el fotograma diez. Eso va a necesitar muchos recursos informáticos. Es más como si Blender estuviera acumulando los resultados con cada fotograma que pasa Por ejemplo, en el fotograma uno, Blender moverá el cubo 1 metro ejecutando la simulación una vez. En el cuadro dos, Blender moverá el cubo también 1 metro en base a la posición anterior. Blender ejecuta la simulación solo una vez, y la posición inicial de la simulación es el resultado del fotograma anterior. Espero que eso tenga sentido. En resumen, puede pensar en las zonas de simulación como una zona de repetición donde el número de iteraciones cambia en cada fotograma De hecho, si agrego un nodo llamado tiempo de escena, este socket de fotogramas me dará el número del frame am on. En el cuadro uno, dará salida a uno, y en el cuadro 37, dará salida a 37. Si vuelvo a la zona de repetición y conecto el marco a las iteraciones, eso significa que el número de iteraciones seguirá al número del fotograma en el que estoy encendido Si le pego play, obtendré el mismo resultado que la zona de simulación. Se puede pensar en las zonas de simulación como una zona de repetición con el tiempo de escena conectado a las iteraciones La diferencia ahora debería ser clara entre repetición y las zonas de simulación. Las zonas de repetición son una forma de repetir ciertas operaciones manualmente especificando cuántas veces quiso repetir. En tanto, las zonas de simulación lo harán automáticamente en cada fotograma. Ahora, con todo eso fuera del camino, ahora podemos empezar a hablar de simulaciones 4. Qué es una simulación: ¿Qué es una simulación? Encontré esta buena definición de lo que es una simulación. Una simulación es un método para imitar un proceso del mundo real a lo largo del tiempo Evoluciona creando un modelo que representa características clave, comportamientos y funciones del proceso o sistema A modo de ejemplo, si tengo una pelota y la hago caer, Una simulación será un programa que prediga lo que sucederá. Voy a darle a ese programa ciertas entradas como qué tan grande es la pelota, qué tan alta es desde el suelo, qué tan pesada es, qué tan fuerte es la gravedad tirando de ella hacia abajo. Y en base a esos insumos, el programa intentará predecir lo que sucederá. Entonces, si queremos crear una simulación física en blender, necesitamos pensar en formas de recrear la realidad en blender Eso significa que necesitamos pensar en las fuerzas de la vida real que permiten que nuestro mundo funcione como es. La clave para ello son dos fuerzas, la velocidad y la aceleración, y vamos a explicar ambas. Ahora estamos empezando a meternos en la parte divertida. En el siguiente video, aprenderemos sobre la velocidad. 5. Qué es la velocidad: ¿Qué es la velocidad? Vlocity es una cantidad de vector físico que describe la velocidad a que un objeto cambia su posición En pocas palabras, la velocidad es lo rápido que se mueve algo. Comúnmente nos referimos a ella como velocidad. Lo que quiero que tengas en cuenta es que no podemos pensar en la velocidad sin considerar el factor del tiempo porque la velocidad al final del día depende la distancia recorrida dentro de un cierto periodo de tiempo. No podemos decir que la velocidad del auto sea de 100 kilómetros o 100 millas. Tenemos que especificar ¿por qué unidad de tiempo estamos hablando? ¿Son 100 kilómetros/hora por minuto por segundo? Hay una gran diferencia. En nuestra pequeña simulación, esta esfera se mueve a una velocidad de 1 metro por cuadro, y esa es su velocidad, 1 metro por cuadro. O como mi velocidad de fotogramas es de 24, eso significa que la esfera se moverá 24 metros/segundo Podemos decir que su velocidad es de 24 metros/segundo, o 14 40 metros/minuto, o 86,400 metros/hora Se te da la idea. Entonces esa es la velocidad. Ahora tenemos que hablar de aceleración. 6. Qué es la aceleración: ¿Qué es la aceleración? La velocidad es la tasa de cambio en la posición a lo largo del tiempo? aceleración es la tasa de cambio en velocidad o la velocidad a través del tiempo? Un automóvil está acelerando cuando su velocidad va en aumento. La aceleración representa los cambios en la velocidad. Igual que la velocidad, podemos hablar de aceleración por sí sola sin considerar el factor del tiempo. Podemos decir que este auto está acelerando a un ritmo de 10 metros. Tenemos que especificar ¿por qué unidad de tiempo estamos hablando? ¿Está acelerando a una velocidad de 10 metros/segundo por minuto por hora? Esa es una gran diferencia. En el pequeño sistema que construimos en Blender, la esfera se mueve a una velocidad de 1 metro por cuadro, y esa es su velocidad. Pero no está acelerando ni acelerando, lo que significa que la aceleración es cero. En la vida real, las velocidades de los objetos aumentan y disminuyen con el tiempo debido a diferentes fuerzas Entonces, ¿cómo podemos programar esas cosas licuadora. Antes de explicar cómo hacer eso, quiero cambiar un poco la simulación. Voy a eliminar la entrada de grupo y en su lugar, voy a agregar un nodo de punto. Es importante mencionar que un punto en blender es solo un contenedor de datos que luego podremos reemplazar con otros objetos. Por eso lo estamos usando porque ofrece una enorme flexibilidad más adelante. Voy a cambiar la simulación para convertirme en una simulación de punto de caída moviendo los 0.5 metros en el aire, así que esa sería mi posición inicial. Como quiero que el punto esté cayendo, necesito actualizar el nodo de posición establecida. En lugar de movernos sobre el eje x, necesito decirle a blender que vamos a estar moviéndonos sobre el eje z. Voy a restablecer el eje x a cero, y en el eje z, escribiré, por ejemplo, 0.1 metro. Si le pego play, notarás que la pelota se mueve hacia arriba no hacia abajo. Es porque la licuadora está moviendo la pelota por 01 metros hacia arriba. Entonces, si quisiéramos moverlo hacia abajo, necesitamos cambiarlo a -0.1 metros Ahora bien, si golpeo play, notarás que la pelota está cayendo lentamente hacia abajo. Ahora podemos empezar a pensar en cómo implementar la aceleración en nuestro sistema. Para entender lo que vamos a hacer, necesitamos volver a la definición de aceleración. La aceleración es el cambio de velocidad de un objeto. Un objeto que cae se irá acelerando, lo que significa que su velocidad aumentará gradualmente cuanto más tiempo pase cayendo. En otras palabras, necesitamos encontrar una manera de decirle a blender, Hey, licuadora, queremos que aumentes la velocidad con cada momento que pasa. Como en, por ejemplo, en el fotograma uno, mueve este punto 01 metros hacia abajo. En el fotograma dos, mueve este punto por cero 15 metros hacia abajo. Estará a menos 020 5 metros. En el fotograma tres, mueve este punto por cero 2 metros hacia abajo. Será a -0.45 metros. La clave para conseguir aceleración, para hacer que la distancia recorrida con cada fotograma sea cada vez más grande. Piénsalo. Si la pelota se mueve a la misma distancia en cada cuadro, tendrás una velocidad constante. Pero cuando acelera o desacelera, eso significa que la distancia que se cruza con cada fotograma es cada vez más grande o menor Si la distancia es mayor, eso significa que se está acelerando, si la distancia es cada vez más pequeña, significa que está acelerando. La solución para implementar aceleración en nuestro sistema es encontrar una manera de decirle a blender que aumente o disminuya este valor con el tiempo. Para ello, hay un concepto importante que hay que entender. Que son atributos. De eso vamos a estar hablando en el próximo video. 7. Qué es un atributo: ¿Qué es un atributo? Si revisas el manual de la licuadora para lo que es un atributo, encontrarás la siguiente definición. Un atributo es un término genérico para describir los datos almacenados por elemento en un bloque de datos de geometría. Así es como quiero que lo pienses. Imagina una geometría de tres D. Esta geometría puede ser tan simple como un punto como en nuestro ejemplo o cualquier otro objeto tres D. Los atributos son datos adjuntos a los tres objetos D que definen ciertas características de ese objeto tres D. Por ejemplo, si salto a mi espacio de trabajo de nodos de geometría, y desde la hoja de cálculo, saltaré a punto porque la única geometría que tengo en este momento es el punto Aquí podrás ver todos los diferentes atributos asociados a esta geometría. En primer lugar, tienes el índice. En este caso, es cero. Pero si aumento el número de puntos, por ejemplo, a cinco, cada punto tendrá un índice. El número de índice es un atributo. En el caso del índice, el atributo es el número que hace referencia al índice de cada punto. También tiene el atributo position que define la ubicación de ese punto en particular. También tienes el radio de ese punto. Ese es también otro atributo. Los atributos son como una tarjeta de identificación que define las características de un elemento en blender. Por eso la mejor manera de pensar en los atributos, como dije, es que sean un bloque de datos unido al objeto tres D, que define ciertas características de ese objeto tres D. Ahora bien, esos son los atributos que vienen por defecto con el punto. Lo bueno es que Blender nos permite crear nuestros propios atributos. Si voy a agregar atributos, store named attribute, tendré este nodo que voy a enchufar justo después de la entrada de simulación. El nodo de atributo llamado store me permitirá crear mis propios atributos. Puedo comenzar especificando el tipo. En nuestro caso, la velocidad y la aceleración son ambos vectores. Por eso voy a cambiar el tipo de datos de float a vector. A continuación, voy a darle un nombre a este atributo. Puedes llamarlo como sea que tenga sentido para ti, pero para que todo esté claro, voy a llamarlo velocidad. Ahora bien, si vuelvo a la hoja de cálculo, notarán que ahora tenemos otro atributo llamado velocidad Si selecciono el atributo store named y pulso vacío silenciarlo, observe cómo esa propiedad desaparecerá del editor de hojas de cálculo Espero que al menos ahora tengas una idea de lo que es un atributo. Es un bloque de datos unido a un objeto de tres D. Pero tal vez te estés preguntando, ¿cómo se supone que esto es útil? Bueno, ahora que tenemos la velocidad como atributo, podemos empezar a hacer un montón de operaciones geniales con ella como cambiarla con cada fotograma que pasa. Porque recuerden, ese es nuestro objetivo hacer la velocidad aumente o disminuya con el tiempo, lo que nos dará aceleración. En nuestro árbol de nodos actual, la velocidad es constante. Si pensamos en lo que sucede en cada fotograma, blender cambiará la posición de este punto por la cantidad especificada del nodo de posición establecida. Además, como puedes ver, este socket offset es un vector, ya que sí tiene tres valores, y sí tiene el zócalo rombo púrpura. Técnicamente, si queremos ser más precisos, este socket offset representa la tasa de cambio en cada fotograma, que mencionamos antes, es decir la velocidad. Algo sencillo que puedo hacer es agregar un nodo llamado vector y conectarlo al offset. Yo no hice nada elegante. Acabo de reemplazar el offset con este vector. Si escribo -0.1 en el eje z del nodo vector, Hit play, obtendré el mismo resultado exacto Este nodo vectorial en este momento representa la velocidad. Para ir aún más lejos, voy a eliminar este nodo vectorial, y voy a agregar un nodo llamado atributo llamado, lo que me permitirá convocar a cierto atributo El atributo que quiero convocar es un vector, y su nombre es velocidad Este atributo de velocidad que estamos llamando es el mismo atributo exacto que creamos usando el nodo atributo store named. ¿Cuál es la naturaleza de este atributo de velocidad? Es un vector, que es la naturaleza exacta del socket offset, así que puedo enchufar el atributo named en el socket offset. Si le pego play, nada va a pasar porque este vector de velocidad es básicamente todo ceros. ¿Cómo lo sé? Porque en el atributo store named, no especificamos los valores de este vector de velocidad. Si escribo -0.1 en el eje z y pulso play, obtendrás exactamente lo mismo que teníamos antes Aquí está la lógica de lo que está sucediendo. Creamos un vector que llamamos velocidad, y tiene los siguientes valores. Entonces en nuestro árbol de nodos, podemos convocar o llamar al vector que creamos y usarlo en múltiples lugares Entonces este nodo de atributo llamado está buscando un vector llamado velocidad, que se define por esta tienda llamada nodo de atributo. Es como si creáramos un vector, ahora lo estamos usando en múltiples lugares en el árbol de notas. En el futuro, si quiero cambiar el vector de velocidad, todo lo que necesito hacer es cambiar los valores en el atributo store named, y ese cambio ondulará a través todo el árbol de notas porque estaré usando el nodo de atributo named en todas partes de mi árbol de notas. Ahora que cambiamos un poco nuestro árbol de notas y creamos el atributo velocity, y el siguiente video, vamos a crear el atributo de aceleración. 8. El atributo de aceleración: Atributo de aceleración. Como mencioné antes, aceleración es el cambio de velocidad. Entonces, si queremos implementar la aceleración en nuestro sistema, necesitamos encontrar una manera de hacer que la velocidad cambie con el tiempo. Queremos decirle a blender que incremente la tasa de cambio. En otras palabras, queremos hacer más grande la distancia que atraviesa el punto de fotograma a fotograma. Por ejemplo, en el fotograma cero, el punto está en 0.0. En el marco uno, mételo 01 metros hacia abajo. Será a menos 01 metros. Entonces empujarlo por cero, 15 metros hacia abajo, lo que estará a menos 020 5 metros, y luego empujarlo por cero 2 Por lo que será a menos cero, 45 metros. Al hacer esto, como se puede ver, la distancia recorrida por el punto con cada momento que pasa va aumentando gradualmente, lo que significa que se está acelerando. Entonces, ¿cómo podemos programar tal cosa en nodos en blender? Bueno, esto es sencillo. Entonces aquí es donde paramos la última vez. Tenemos este atributo llamado store que está definiendo un atributo llamado velocity que sí tiene estos valores, y luego usamos este atributo de velocidad o este vector de velocidad aquí mismo. Lo estamos llamando desde este nodo, y lo usamos para actualizar la posición, y esto nos está dando una velocidad constante. Lo que queremos hacer, como dije, es hacer que este vector de velocidad incremente sus valores por el tiempo. Algunos de ustedes podrían sugerir que puedo enmarcar esta propiedad aquí mismo y agregar un par de fotogramas clave, y podré animar este valor con el tiempo Y este es en realidad un enfoque viable. Lo que queremos hacer es construir un motor de física que pueda encargarse de todo. Voy a hacer algo que sonará un poco contraintuitivo al principio, pero lo voy a explicar. Voy a ir a agregar atributo con nombre. Como recuerdas, este nodo me permitirá llamar o convocar a cierto atributo que he creado En este caso, voy a llamar a un vector, que es la velocidad. Es el mismo vector exacto Este nodo está creando. Es el mismo atributo, y lo voy a enchufar en el valor. Como dije, esto podría sonar contrario a la intuición. Entonces, básicamente, este nodo está definiendo una propiedad llamada velocidad que sí tiene este valor. En este valor, estoy tapando un atributo que se llama velocidad Es literalmente el mismo atributo. Es como el meme del tipo vertiendo el agua en sí mismo mientras está en la piscina. Probablemente puedas adivinar que la licuadora lee el árbol de notas de izquierda a derecha, por lo que comenzará con los puntos, luego ingresará a la zona de simulación. Almacenar atributo con nombre, y para cada nodo, comenzará de arriba a abajo. Al principio, leerá punto vectorial, luego leerá la geometría, luego esta elección, y luego creará una propiedad llamada velocidad o un atributo llamado velocidad. Para el valor, enchufé la velocidad, y siempre que conectes un atributo al nodo que está creando el atributo, blender asumirá un valor de cero Por eso ahora si golpeo barra espaciadora para darle a play, no pasará nada. El punto se quedará en el mismo lugar, porque esta conexión que hice aquí mismo, enchufando la velocidad del atributo en la tienda llamada atributo definiéndolo me llevará a cero Entonces no va a pasar nada. Pero lo realmente lindo ahora, si voy a agregar turno A y busco matemáticas vectoriales, y voy a enchufarlo justo después del atributo nombrado, Ahora Blender tomará el vector de velocidad, que es en nuestra situación un cero, le agregaremos un valor que especificaré aquí mismo, y ese será mi nuevo valor de velocidad o mi nuevo vector de velocidad que usaré más adelante para actualizar la posición. Si digamos, por ejemplo, escribo -0.1. Ahora trata de pensar en lo que va a pasar. En el fotograma cero, por supuesto, nada va a pasar. Voy a abrir mi línea de tiempo, y para organizar mejor mi espacio de trabajo, voy a colapsar esto a esto, y voy a agregar otro editor aquí mismo, y voy a cambiarlo a la ventana gráfica de tres D, y vamos a bajarlo así Esto me dará más espacio aquí en mi nota prueba. Tengo aquí está en la línea de tiempo, y puedo moverme aquí mismo en mi ventana gráfica de tres D. Y como estamos trabajando ahora mismo en sólo dos dimensiones, voy a golpear una desde el teclado numérico para saltar a la vista frontal. Entonces este será mi espacio de trabajo. Creo que esto es mejor. A lo mejor hasta voy a arrastrar esto un poco así que tengo más espacio en mi nota try. Como dije, ahora mismo en el fotograma cero, no va a pasar nada. El punto está en la posición inicial de cero o en realidad 5 metros, pero suponemos que es cero. En el fotograma uno, Blender tomará el vector de velocidad, que sí tiene el valor de cero, le agregará -0.1, y ese será mi vector de velocidad que luego usaremos para actualizar la posición Por lo que ahora en el marco uno, licuadora moverá este punto 01 metros hacia abajo. Mira, boom. Entonces este es 01. En el cuadro dos, digamos que la licuadora volverá a ejecutar el ciclo. Pero, ¿cuál es el valor de este nodo de velocidad en estos momentos? ¿Es cero o es menos 01? Esto es lo importante que hay que tener en cuenta, que es que este nodo en este momento mantendrá el valor del estado anterior. Este nodo en este momento contiene un atributo de velocidad que no es 000. En realidad es 00 menos 01. Ahora cuando le voy a sumar menos 01, Este nuevo vector de velocidad que voy a obtener de aquí no será menos 01. Será menos 02, y fíjate lo que va a pasar. Ahora la distancia que se recorre en el cuadro dos es ligeramente mayor. En la tercera ocasión para el fotograma número tres, ¿cuál es el valor de éste? Es el valor de velocidad anterior, que es menos 02. Ahora le agregaré menos 01, así que tendré menos 03, y esta será mi nueva velocidad que usaré para cambiar la posición. Entonces ahora la brecha se está haciendo más grande. Estoy en el fotograma tres. En el fotograma cuatro, este vector de velocidad no será cero. Como dije, será menos 03, y cuando le agrego menos 01, estará en -0.4, y eso es lo que usaré para actualizar la posición Boom. Ahora bien, si golpeo play, notarás que la pelota caerá un poco más rápido, cuanto más tiempo pase cayendo. Déjame alejarme un poco para ver a fondo lo que sucede. Y si le pego a play, como pueden ver, ahora estamos consiguiendo algo que se asemeja a una bola que cae. La clave de eso es este pequeño truco que hicimos aquí mismo. Tomamos la velocidad del estado anterior, agregamos un cierto valor, y debido a que es una batidora baja cada vez que ejecuta la simulación, agregamos menos 01 en el eje z al estado anterior del vector de velocidad. Espero que eso tenga sentido. Ahora mismo, este vector lo estoy agregando aquí mismo, este vector es en realidad el vector de aceleración. Estos valores son los que definen cuánto quieres licuadora para aumentar la velocidad con cada momento que pasa. Esto es en realidad aceleración. Como quiero que también la aceleración sea un atributo porque lo estaré usando más adelante, voy a agregar otro nodo ahora mismo llamado store named attribute, shift A, store named attribute, y voy a almacenar un vector al que llamaré aceleración que sí tiene estos valores. Y lo voy a usar aquí mismo, así que busca atributo con nombre. Voy a buscar un vector que acabo de crear llamado aceleración. ¿Dónde está la aceleración? ¿Bien? Es un vector llamado aceleración. Y voy a enchufarlo aquí. No va a pasar nada porque esta aceleración es cero. ¿Cómo lo sé? Porque en el nodo que lo define, no especificé qué valor debería tener este vector. Si vuelvo al fotograma número uno, y si le doy a play, no pasará nada porque la aceleración es cero. No voy a añadir nada. Nada va a cambiar. Por eso voy a escribir menos 01. Mm. Y ahora, si le pego a play, obtendrás exactamente la misma animación o simulación que acabamos de tener. Por lo que este atributo llamado tienda definirá un vector llamado aceleración. Y cada vez que blender ejecutamos la simulación, estamos agregando este valor a la tasa de cambio. En otras palabras, cada fotograma o cada vez que la licuadora ejecuta la simulación. Esta es la cantidad de licuadora que aumentará la distancia atravesada por el punto. Cada vez la distancia aumentará en menos 01 metros. Sé que puede ser un poco confuso porque estamos usando menos, pero siempre recuerda que la razón principal por la que estamos usando menos es porque nos estamos cayendo. Por eso necesitamos el signo menos. Entonces este es nuestro actual notario. Espero que tenga sentido. Ahora tenemos una simulación de punto de caída, supongo. Pero en realidad, hay un pequeño problema en esta simulación que necesitamos arreglar en el siguiente video. 9. El problema de Delta-t: Problema de Delta T. Algo que mencioné antes es que las simulaciones en licuadora se evalúan en cada fotograma Esto provocará un pequeño problema. Nuestra velocidad de fotogramas actual es de 24 fotogramas por segundo. Esto significa que la licuadora ejecutará la simulación 24 veces en 1 segundo. Voy a saltar de nuevo al trabajo de nodos de geometría, puntos. Si golpeo placa para almacenar en caché la simulación y luego voy al fotograma 24, aquí está la ubicación del punto. 00 -25. Ahora, digamos que quiero que la animación final sea más suave. Así que decidí subir la velocidad de fotogramas a 60 fotogramas por segundo. Después de 1 segundo, ¿cuántas veces crees que Blender ejecutará la simulación? Adivina a la derecha, 60 veces. Si golpeo placa para coger la simulación e ir al marco 60, observe la ubicación del punto. 00 -178. Sé que esto puede ser confuso, así que para realmente clavar el punto a casa, esto es lo que sucede en la vida real. Imagina que estás lanzando una pelota desde un lugar alto. Digamos que la pelota tardará 3 segundos hasta que toque el piso, y tienes dos cámaras, una grabando a 24 fotogramas por segundo y la otra a 60 fotogramas por segundo. Lanza la pelota. En 1 segundo, la pelota estará en este nivel. Lo importante a notar es que ambas cámaras capturarán el balón en la misma posición. La única diferencia es que la cámara de 24 FPS grabó solo 24 fotogramas. Es decir, registró el balón en 24 posiciones diferentes. En tanto, la cámara de 60 FPS grabó 60 fotogramas. Es decir, registró el balón en 60 posiciones diferentes. El tiempo es siempre el mismo. La única diferencia es la velocidad de fotogramas. Lo que debería pasar en Blender es lo siguiente. Después de 1 segundo, el punto debe estar en la misma posición independientemente de la velocidad de fotogramas. Entonces, ¿cómo podemos solucionar este problema? La mejor manera de explicar la solución es haciendo algunas matemáticas. Pero lo prometo, no va a ser tan complicado. Algo que mencioné antes es que velocidad es la tasa de cambio en la posición en el tiempo. Una forma de traducir esa declaración en una función matemática es como la siguiente. V, que es velocidad igual Delta P sobre Delta T. Me gustaría que pensaras en la palabra Delta como el cambio. P significa posición y t por tiempo. Decimos que la velocidad es Delta P, el cambio de posición. Sobre Dilta T, el cambio en el tiempo. Ahora, ¿qué pasa con la aceleración? Como recuerdas, la aceleración es la tasa de cambio de velocidad a través del tiempo. Una forma también de escribir esto como fórmula es la siguiente. Aceleración A igual, Delta V sobre delta t. Decimos que la aceleración es Dilta V, el cambio de velocidad, sobre Dilta T, el tiempo de cambio En nuestro árbol de nodos actual, Delta t es una variable que cambia dependiendo de la velocidad de fotogramas. Si la velocidad de fotogramas es 24, entonces Delta t es igual a 1/24, y si la velocidad de fotogramas es 60, entonces Delta T es igual a 1/60 Queremos que el tiempo de nuestra simulación sea el mismo independientemente de la velocidad de fotogramas. Con base en la primera ecuación, velocidad es igual a Delta P sobre Delta T, se puede concluir que Delta P igual velocidad multiplicada por Delta T. Con base en la segunda ecuación, A, aceleración igual Delta V sobre Dilta T? Podemos concluir que Delta V, el cambio de velocidad es igual a la aceleración, multiplicada por Delta T, el cambio en el tiempo. La matemática es realmente sencilla. Todo lo que hicimos ahora es expresar tanto el cambio de posición como el cambio de velocidad en función de Delta T. Esto hará que Blender considere la velocidad de fotogramas al ejecutar la simulación. ¿Cómo podemos traducir esa lógica en el árbol de nodos? Esto será sencillo. Empecemos primero con el cambio de posición Delta P es igual a la velocidad multiplicada por Delta T. ¿Cuál es el nodo responsable de cambiar la posición del punto? Es el nodo de posición establecida, y esta parte de la ecuación es la que necesitamos para computar e introducir en el socket offset. Ahora mismo es sólo el vector de velocidad. Con base en la ecuación, necesitamos multiplicar la velocidad por Delta T. Tienes que hacer es agregar un nodo matemático vectorial, cambiar la operación para multiplicarla, y multiplicarla por la Delta T, que puedes obtener desde el primer nodo de la zona de simulación. Además, puede establecer la operación de este nodo matemático vectorial a escala, y hará exactamente lo mismo. Usamos multiplicar cuando tratamos con dos vectores, pero como el tiempo Delta es un número simple, podemos cambiarlo a escala. Puedes usar este siempre que estés multiplicando un vector por un solo número También se les llama escalares en licuadora. De ahí la escala de nombre para la operación. Bien, entonces ahora estamos compensando el cambio de posición basado en nuestro tiempo Delta, que se basa en nuestra velocidad de fotogramas. Ahora tenemos que hacer lo mismo para la segunda operación. Delta V, el cambio en la velocidad es igual al vector de aceleración multiplicado por Delta T. ¿Dónde estamos definiendo V, el cambio en la velocidad? Bueno, estamos definiendo el cambio de velocidad usando este primer atributo llamado store. El encargado de crear la aceleración. Recuerda siempre, los valores que estamos usando para el vector de aceleración son responsables de cuánto aumenta nuestra velocidad con cada fotograma. Entonces lo que puedo hacer es ingresar un vector en el valor de esta tienda llamado atributo, y por defecto blender mantendrá los mismos valores. La ecuación, Delta V igual aceleración multiplicada por Delta T, lo que ingresaremos en el socket de valor de la tienda llamada atributo define la tasa de cambio en la velocidad, que es igual a la aceleración, que es este nodo vector, y necesitamos multiplicarlo por Delta T. Todo lo que hay que hacer es agregar un nodo matemático vectorial, cambiar la operación a escala, y multiplíquelo por Delta T, que se puede obtener desde el primer nodo de la zona de simulación como mencioné anteriormente. Es así como podemos implementar la lógica de las ecuaciones que expliqué en el notario Como resultado de eso, nuestra simulación ahora se adaptará a la velocidad de fotogramas y se mantendrá consistente independientemente de la velocidad de fotogramas. Para asegurarse de que ese es el caso, si le pego play, antes que nada, notarás que la animación es demasiado lenta. Dado que nuestra simulación ahora se basa en el tiempo de la vida real, no en los números de fotogramas, necesitamos comenzar a usar valores de la vida real para estos vectores. Es el valor de la gravedad en la vida real. Es -9.8 Asegúrate de usar ese valor para el vector de aceleración porque así es como los objetos se aceleran al caer. Por lo que siempre es agradable usar los valores de la vida real porque eso significa que nuestra simulación será más realista. Ahora nuestra velocidad de fotogramas actual es de 24 FPS. Así que vamos a ejecutar la simulación golpeando play. Vaya al fotograma 24, lo que significa 1 segundo en la simulación, y vea la posición del punto. Está en 0.304. Ahora, cambiemos la velocidad de fotogramas a 60 FPS, volvamos a ejecutar la simulación y vayamos al fotograma 60, lo que también significa 1 segundo en la simulación porque simplemente cambiamos la velocidad de fotogramas y leemos la posición de ese punto, y está en 0182 Los valores son cercanos, pero no son los mismos. ¿Por qué es eso? Sin entrar en el meollo arenoso detalles de por qué está sucediendo eso, todo lo que necesitas hacer es que cada vez que estés haciendo este tipo de simulaciones en Blender, siempre habrá Y eso se debe al método de integración de engrase utilizado en Blender Puedo pasar horas tratando de explicar cuáles son los métodos de integración de engrase y todos los problemas con él. Pero eso va a ser demasiado para manejar. Entonces todo lo que necesitas saber es que siempre habrá un margen de error del que tenemos que lidiar al hacer este tipo de simulaciones en blender Además, debo mencionar que hay otras formas de integrar otros métodos de integración en blender usando nodos, pero vamos a estar aprovechando las cosas más avanzadas de los nodos de geometría. Y en realidad, Esos ni siquiera se trata nodos de geometría tanto de matemáticas literalmente puras. Y ese no es el tema principal del curso. Por eso sacrificaremos algo de estabilidad y aceptaremos un gran error de margen en aras de la simplicidad. Y ahora que nuestra simulación es independiente de la velocidad de fotogramas, necesitamos hacer que estas bolas básicamente reboten del piso introduciendo algunas restricciones, que haremos en el siguiente video. 10. Adición de restricciones Pt.1: Adición de restricciones Parte uno, el suelo. Nuestro punto en este momento seguirá cayendo para siempre básicamente. Tenemos que encontrar una manera de decirle a licuadora, oye, licuadora, una vez que el punto llegue al piso, hacer que se equilibre de él. Este será un ejercicio divertido. La primera pregunta que me viene a la mente es, ¿ cuándo llega el punto al piso? La respuesta es sencilla. Una vez que la posición del punto es igual o inferior a cero. Ahora, si vuelvo a la frase, oye, licuadora. Una vez que nuestro punto llegue al piso, queremos que se equilibre de él, podemos cambiarlo a la siguiente frase. Oye, licuadora. Una vez que la posición de nuestro punto es igual o menor que cero, queremos equilibrar fuera del piso. Ahora viene la segunda parte. ¿Cómo podemos hacer que rebote en el suelo? La solución más sencilla será revertir todas las fuerzas que se aplican en nuestro punto o en nuestra bola. Ahora mismo, nuestra simulación está haciendo caer el punto. Entonces todo lo que tenemos que hacer es decirle a blender que una vez que el punto llegue al piso, revertir la simulación. En otras palabras, invertir la velocidad y la posición. Para entenderlo completamente, quiero explicar la arquitectura de nuestro motor de simulación. Primero definimos la aceleración. Árbol utilizado para definir la velocidad, que usamos para actualizar la posición. Es bastante sistemático o algorítmico en cierto sentido. Es un proceso paso a paso. Ahora le diremos a blender, si la posición del punto es menor que cero, invierta la velocidad e invierta la posición del punto. Esto llevará al punto rebotando hacia arriba. Es como si estuviéramos construyendo un mini motor que se pondrá en marcha una vez que la posición del punto sea menor a cero. Traduzcamos todos estos pensamientos en nodos. El primer paso en la construcción nuestro mini motor es saber cuándo arrancará este motor. Eso lo dije varias veces. Cuando la posición del punto sea menor que cero, comenzaré agregando un nodo de posición. Nos dará la posición del punto, después voy a añadir un nodo llamado x y z separado porque solo necesitamos la posición sobre el eje z, ya que es el encargado definir la posición del punto arriba y abajo. Agrega un nodo de comparación y configúrelo en menos de cero, y esta es nuestra condición. Una forma de leer la lógica de estos nodos que creamos es la siguiente. Cuando la posición en el eje z sea menor que cero, haga algo. Ahora vamos a construir lo que debería suceder cuando esta condición sea cierta. Esto debería ser sencillo porque todo lo que tenemos que hacer es hacer funcionar el mismo motor que construimos justo a la inversa, que podemos hacer fácilmente multiplicándolo por menos uno Primero, necesitamos invertir la velocidad. El punto solía bajar, ahora tiene que subir. ¿Cómo podemos actualizar la velocidad? Fácil. Agrega un atributo llamado store, cambia el tipo a vector, y necesitamos velocidad. Lo que sea que escribamos aquí ahora anulará los valores que teníamos anteriormente para el vector de velocidad. Luego agregaré un atributo con nombre. Velocidad vectorial. Esto me dará el valor de velocidad del cuadro anterior, y lo multiplicaré por menos uno en el eje z y otro en el eje x e y, ya que no quiero que cambien porque multiplicar por uno siempre conducirá al mismo resultado Y voy a enchufar eso en el socket de valor del atributo storm named. Ahora invertimos el vector de velocidad. Pasemos a actualizar la posición, así la pelota va en sentido inverso. Agregaré un nodo de posición establecida, agregaré un nodo de posición, agregaré una matemática vectorial y lo multiplicaré por menos uno en el eje z. Y uno en el eje x e y y tapar eso recto a la posición, porque queremos recto hacia arriba cambiar la posición, no solo el desplazamiento. Y ahora, este es nuestro mini motor encargado revertir la simulación si el punto va por debajo de cero. Pero ahora mismo, Blender todavía no sabe cuándo ejecutar el pequeño motor porque necesitamos enchufar nuestros nodos definiendo la condición en el socket de selección del atributo store named y la posición establecida. Entonces ahora, ambas de estas dos operaciones de cambiar la velocidad y cambiar la posición, solo se ejecutarán una vez que se cumpla esta condición. Si le pego a play ahora, fíjese en lo que va a pasar. Nuestro punto es rebotar, y así es como podemos introducir restricciones a nuestra simulación El balón ahora rebotará para siempre, pero en la vida real, debería perder energía lentamente hasta que se detenga. La forma de evitar eso será decirle a blender que disminuya la velocidad gradualmente. Eso se puede hacer incrementando el vector de velocidad, así que en lugar de multiplicarlo por menos uno, que es un reflejo perfecto, lo multiplicas por -0.8, por Ahora la simulación perderá vapor lentamente cada vez que toque el piso. Hasta que se detenga. La forma en que programamos la fricción en este momento solo se aplica una vez que se cumple esta condición. Una vez que la pelota toca el suelo. Pero en la vida real, la pelota en realidad debería perder velocidad gradualmente desde el inicio de la simulación. Una forma de evitar eso es agregar un nodo meta vectorial, configurarlo a escala y conectarlo justo antes del atributo llamado store que define la velocidad y establecer el valor en algo así como 0.98 Ahora la simulación perderá energía general o en cada fotograma. ¿Por qué? Porque como sabemos, blender compila la simulación cada frame Para nuestra simulación, voy a eliminar el nodo de escala, y programaré la fricción de los nodos responsables de las restricciones en un video futuro. Ahora construimos el sistema de restricción para el piso. También necesitamos construir algunas restricciones para las paredes laterales, y eso es exactamente lo que haremos en el próximo video. 11. Adición de restricciones Pt.2: Agregar restricciones para dos, los muros laterales. En el video anterior, creamos la restricción de piso, que permitirá que la pelota rebote en el piso. En este video, vamos a crear algo similar. Construiremos las restricciones para las paredes laterales, derecha e izquierda, delantera y trasera. Solo para que todos estemos en la misma página, asegúrate de golpear uno desde el teclado numérico para saltar a la vista frontal. Empezaremos por crear las restricciones para el muro correcto. Digamos que queremos que la pelota rebote una pared imaginaria que está a 1 metro de distancia. Por aquí. El concepto es realmente similar a lo que hicimos para el piso. Necesitamos encontrar una manera de decirle a Blender que si la pelota toca esta pared imaginaria, invierta la simulación. O para usar la analogía del mini motor, vamos a crear un pequeño motor de física que pateará si la pelota toca la pared derecha Empecemos con la condición. Esto debería ser sencillo. El punto toca la pared. Si la posición en el eje x es igual o más de uno. Agregar nodo de posición para leer la posición de un punto en particular, agregaré a continuación un xyz separado. Todo lo que me importa es el eje x, que debería ser mayor que uno. Es mi condición. Ahora pasamos a lo que debería suceder si esta condición es cierta. Queremos revertir la simulación, así invertimos primero la velocidad, y luego la posición. En lugar de crear todos esos nodos desde cero, simplemente copiaré la configuración de la restricción de piso y la conectaré así. Para la multiplicación de la velocidad, asegúrese de cambiar el eje z de nuevo a uno. Cambiar el eje x a menos uno, porque ahora estamos trabajando en el eje x. Haré lo mismo por la multiplicación de la posición. Cambiaré el eje z de nuevo a uno y cambiaré el eje x a menos uno, y también me aseguraré de conectar la condición tanto al atributo llamado store named como a la posición establecida. Estas operaciones sólo entrarán en acción si se cumple esta condición. Ahora bien, si golpeo play, la pelota caerá recta hacia abajo. Quiero empujarlo ligeramente hacia la derecha. Iré justo después del nodo de puntos, el primer nodo del árbol minero, y agregaré el atributo store named. Eso es un vector, y voy a escoger la velocidad, y a la derecha, por ejemplo, dos en el eje x. Entonces ahora, el vector de velocidad comenzará en dos, lo que significa que el punto será empujado ligeramente hacia la derecha, y de esa manera podremos probar nuestra restricción de muro que acabamos de crear. Es como si creáramos una velocidad inicial para el punto, así que no empezará desde cero. Si le pego a play, el punto tocará la pared derecha, pero está actuando de manera extraña De alguna manera salta al otro lado. ¿Por qué es eso? Bueno, si nos enfocamos en este nodo de posición, notarás que lo estamos multiplicando por menos uno Entonces digamos hipotéticamente, la posición del punto en un determinado marco está en 0.9 en el eje x La simulación seguirá funcionando normalmente porque no tocamos la línea única. En el siguiente fotograma, la posición de la pelota está en uno, lo que significa que ahora se cumple la condición, lo que significa que la licuadora ejecutará estas operaciones que le indican que invierta la simulación. Entonces ahora la pelota también debería estar aquí en 0.9 en el eje x. Pero como estamos multiplicando la posición en el eje x por menos uno, salta al otro lado a -0.9 en el La solución para esto es simple. Tenemos que llevar esta bola dos unidades a la derecha, lo que podemos hacer agregando un nodo meta vector, configurarlo para agregar, y agreguemos dos en el eje x. Y ahora si presiono play, notarás que el punto rebota perfectamente de la pared derecha, y esta es nuestra restricción para la pared derecha Ahora vamos a crear la restricción para el muro izquierdo. Esto debería ser sencillo. Voy a duplicar toda la restricción de pared derecha y conectarla después de ella así. El muro izquierdo es la línea menos uno. ¿Cuándo toca la pelota la pared izquierda? O la línea menos una, cuando la posición es igual o menor que menos una, voy a cambiar mi condición para ser cuando la posición en el eje x es menor que menos uno. Entonces esta es mi nueva condición. Lo que debería suceder es que invertiremos la velocidad multiplicándola por menos uno en el eje x Entonces voy a mantener estos nodos tal como están, y para la posición establecida, estamos multiplicando por menos uno Tenemos que corregir para eso agregando dos. En el caso de la pared izquierda, ya que estamos multiplicando por menos uno en el eje x, eso significa que la pelota ahora saltará hacia el lado derecho, por lo que necesitamos moverla dos unidades hacia atrás, que podemos hacer fácilmente restando Todo lo que necesitas hacer es cambiar este nodo matemático vectorial de sumar a restar Ahora si le doy a play, verán como nuestro punto está rebotando tanto de la pared derecha como de la izquierda, y eso es exactamente lo que queremos Ahora creamos la restricción para la pared derecha e izquierda. Haremos exactamente lo mismo solo para la pared frontal y trasera. En nuestra ventana gráfica tres D, ahora estamos mirando la vista frontal, lo que significa que esta es la pared derecha e izquierda Si golpeo tres desde el teclado numérico, saltaré a la vista lateral, lo que significa que ahora esta es la parte delantera, Esta es la parte de atrás. Otra forma de pensar en esto antes, estábamos trabajando a lo largo del eje x. Si golpeo uno desde el teclado numérico, verás la línea roja que representa el eje x. Ahora bien, si golpeo tres desde el teclado numérico, saltaré a la vista lateral, y ahora estaré trabajando a lo largo del eje y. Crear restricciones para ambos será realmente sencillo. Simplemente duplicaré toda la configuración tanto para la pared derecha como para la izquierda y la cambiaré de funcionamiento basado en el eje x al eje y. Seleccionaré ambos de estos dos grupos de nodos y golpearé D para duplicarlos. Los conectaré así. Empecemos por la pared derecha que ahora es la pared frontal. Cambiar el valor proveniente del eje x y z separado al eje y. Debe ser igual o mayor que uno. Si se cumple esta condición, haremos lo siguiente. Toma la velocidad y multiplícalo por menos uno en el eje y ahora y vuelve a cambiar el eje x a uno. Para la posición, lo mismo, multiplícalo por menos uno en el eje y y cambie el eje x de nuevo a uno. Y como también necesitamos dar cuenta de la corrección, ahora necesitamos sumar dos en el eje y y escribir cero en el eje x. Esta es la restricción para la pared frontal. Ahora pasemos a la restricción para la pared posterior. Voy a hacer algo similar. Cambiar el valor que sale de la x y z separada al eje y. Debe ser igual o menor que menos uno. Y si se cumple esta condición, haremos lo siguiente. Toma la velocidad y multiplícalo por menos uno en el eje y ahora y vuelve a cambiar el eje x a uno. Para la posición, Lo mismo, multiplíquelo por menos uno en el eje y y cambie el eje x de nuevo a uno. Y como también necesitamos dar cuenta de la corrección, ahora necesitamos restar dos en el eje y y escribir cero en el eje x Y así es como construyes la restricción tanto para la pared frontal como para la pared trasera. Ahora bien, si vuelvo a la primera tienda llamada nodo atributo que nos está dando algo de velocidad inicial y le doy a nuestro punto también algo de velocidad inicial en el eje y y presiono play, verás nuestro punto rebotando de las diferentes paredes Bien, así es como puedes construir algunas restricciones para tu simulación. En el siguiente video, vamos a sustituir estos puntos por algunas esferas básicamente o cuencos, que introducirán un nuevo conjunto de retos que debemos superar. 12. Radio: Añadiendo el radio. En este punto, estamos ejecutando nuestra simulación basada en puntos. Como mencioné antes, los puntos en blender son solo contenedores de datos que luego podremos intercambiar con otros objetos. Lo que queremos hacer en este video es básicamente sustituir esos pequeños puntos por esfera o cualquier objeto. Si voy al final de mi árbol de nodos y agrego un nodo llamado instancia en puntos, lo conectaré justo antes del nodo de salida del grupo. Esta instancia en el nodo de puntos reemplazará el punto por una instancia o un objeto tres D que vamos a elegir. Quiero sustituir estos puntos por esfera. Voy a añadir una esfera U. Y lo voy a enchufar en el socket de la instancia. Y como pueden ver, nuestro punto ahora se sustituye por la esfera. Para el radio de esta esfera UV, quise heredar el radio de los puntos, que podemos especificar desde el nodo puntos, el primer nodo del notario Una forma de evitar eso es agregar el nodo de radio y conectarlo a la escala de la instancia en el nodo de puntos. Y ahora, si cambio el radio de los puntos, también estaré cambiando el radio de las instancias o las esferas. Ahora bien, si le doy a play, se dará cuenta de cómo nuestra esfera está rebotando en el piso y las paredes laterales Pero si te enfocas, notarás un pequeño problema. O un gran problema, dependiendo de cómo lo mires. Notarás que cuando la esfera toque el piso, parte de la esfera pasa por debajo la línea del piso. ¿Por qué es eso? Bueno, ya que antes estábamos lidiando con puntos, y dije que son solo contenedores de datos, así que en realidad no tienen radio. Ahora que reemplazamos esos puntos con esferas que son la geometría real de tres D, y tienen un radio, tenemos que dar cuenta de eso en nuestro motor de física. En otras palabras, necesitamos encontrar una manera de hacer que nuestro árbol de nodos sea consciente del radio, por lo que lo considerará al ejecutar la simulación. Será sencillo. Te lo prometo. Primero comencemos con la restricción para el piso. Cuando la esfera toca el suelo. Eso debería ser fácil de responder. Cuando la posición es menor que el radio. Recuerde siempre que la posición se evalúa desde el punto central de un objeto. Cuando la posición o el centro del objeto tres D es menor que el radio, eso significa que el objeto tres D está tocando el piso. Para la restricción de piso, todo lo que necesito hacer es agregar un nodo de radio y enchufarlo en la operación menor que. Ahora se vuelve si la posición de la esfera es menor que el radio, realice las siguientes operaciones. Si le pego a play, todo va a funcionar sin problemas. Parece que la pelota está rebotando en el piso. Pero si cambio el radio del punto a algo así como 0.5 metros, por ejemplo, y vuelvo a golpear play para atrapar la simulación, verás algo raro. Ahora la pelota por cualquier razón va por debajo del suelo antes de que rebote. ¿Por qué es eso? Bueno, ya ves que Blender está haciendo todo el cálculo basado en el centro del objeto. Es importante enfatizar que todas las operaciones que estamos haciendo aquí están todas basadas en los puntos que creamos. Estos puntos sólo se convierten en esferas al final del notario cuando estamos usando la instancia en puntos conocidos Entonces, hasta este punto del notario, seguimos tratando de puntos, lo que significa que Blender está viendo puntos aquí, no esferas Entonces como solución para esto, podemos decirle a Blender lo siguiente. Si la pelota toca el piso, muévala hacia abajo por la cantidad del radio, haz la corrección, y luego vuelve a colocarla Esto se verá algo así en los nodos. Añadiré un nodo de radio y lo conectaré a un nodo XY Z combinado en el eje Z. Estamos haciendo un montón de operaciones sobre vector, por eso necesito convertir este radio, que es un solo valor en un vector. Quiero mover la posición hacia abajo por la cantidad del radio. Voy a sumar un nodo matemático vectorial, cambiar la operación para restar, y voy a enchufar la posición al primer socket, lo que significa que restaré de El segundo valor debe ser el vector que obtuvimos del radio. Entonces enchufaré el vector del nodo combinado x Y Z en el segundo socket. A continuación, haremos nuestra corrección mediante el uso de este nodo multiplicar vector. Necesitamos cancelar la operación de resta que hicimos antes sumando un conjunto de nodos matemáticos vectoriales para sumar, y sumaré el vector que resté antes, que es el vector que sale del nodo combinado x Y Si le pego play, se dará cuenta de que la pelota ahora está rebotando del piso de la manera correcta Ahora viene la peor parte, que es que necesitamos hacer una corrección similar a todas las diferentes restricciones, derecha e izquierda, adelante y atrás. Pero eso va a ser sencillo. Hagámoslo muy rápido. Empecemos por el estado de la pared derecha. ¿Cuándo toca la esfera la pared derecha? Simple cuando la posición en el eje x es mayor que uno menos el radio. Voy a añadir un nodo de radio. Lo conectaré a un nodo matemático, lo configuraré para restar, por lo que será uno menos el radio, y lo conectaré al nodo mayor que Esta es mi nueva condición. ¿Por qué debería pasar ahora si esta condición es cierta? Invierta la velocidad, eso debería permanecer como es. Si le pego play, seguirás notando que la pelota aún irá más allá la pared derecha porque necesitamos hacer una corrección similar a lo que hicimos para el piso. Desplazar la simulación hacia la derecha, hacer la corrección y luego moverla hacia atrás. Esto se verá algo así. Añadiré un nodo de radio y lo conectaré al nodo xyz combinado en el eje x esta vez. Como mencioné antes, estamos haciendo un montón de operaciones sobre vector. Por eso necesito convertir este radio, que es un valor único en un vector. Quiero mover la posición a la derecha por la cantidad del radio. Agregaré un nodo matemático vectorial, cambiaré la operación para agregar. Voy a enchufar la posición al primer socket, lo que significa que agregaré a la posición, el segundo valor, que debería ser el vector que obtuvimos del radio. Entonces voy a enchufar el vector del nodo combinado x y z en el segundo socket. A continuación, haremos nuestra corrección usando este nodo multiplicar vector, Luego usamos la operación ad para contar para la otra corrección, y necesitamos cancelar las operaciones de suma que hicimos antes sumando un nodo matemático vectorial establecido para restar, y restaré el vector que agregué antes, que es el vector que sale del nodo combinado x y z Si golpeo play, notarás que la pelota ahora está rebotando en la pared derecha correctamente Esta es la corrección para la pared derecha. Ahora tenemos que hacerlo para la pared izquierda. Empecemos por la condición para la pared izquierda. ¿Cuándo toca la esfera la pared izquierda? Simple cuando la posición en el eje x es menor que menos uno más el radio o el radio menos uno. Voy a añadir un nodo de radio. Lo conectaré a un nodo matemático, lo configuraré para restar, así será el radio menos uno, y lo conectaré al nodo menos que Esta es mi nueva condición. Debería suceder ahora si esta condición es cierta. Invierta la velocidad, eso debería permanecer como es. Si le pego play, seguirás notando que la pelota aún irá más allá de la pared izquierda, porque necesitamos hacer una corrección similar a lo que hicimos para el piso y la pared derecha al alterar la simulación a la izquierda Haz la corrección, y luego muévala hacia atrás. Esto se verá algo así. Añadiré el nodo de radio y lo conectaré a un nodo combinado x Y Z en el eje x esta vez. Quiero mover la posición izquierda por la cantidad del radio. Voy a sumar un nodo matemático vectorial, cambiar la operación para restar Voy a enchufar la posición al primer socket, lo que significa que restaré de la posición, el segundo valor, que debería ser el vector que obtuvimos del radio Voy a enchufar el vector del nodo xyz combinado en el segundo socket. A continuación, haremos nuestra corrección mediante el uso de este nodo multiplicar vector. Luego usamos la operación de resta para contar para la otra corrección, y necesitamos cancelar la operación de resta que hicimos antes sumando un nodo matemático vectorial, configurarlo para sumar Voy a sumar el vector que resté antes, ¿cuál es el vector que sale del nodo combinado xy Z? Si golpeo play, notarás que la pelota ahora está rebotando de la pared izquierda correctamente Esta es la corrección para la pared izquierda. Ahora tenemos que hacerlo para la pared frontal y trasera. Esto debería ser realmente similar a la pared derecha e izquierda. Voy a golpear tres desde el teclado numérico para saltar a la vista lateral, y comencemos haciendo la corrección para la pared frontal, que parece la pared derecha desde esta vista. ¿Cuándo toca la esfera la pared frontal? Simple cuando la posición en el eje y es mayor que uno menos el radio. Voy a añadir un nodo de radio. Lo conectaré a un nodo matemático, lo configuraré para restar, por lo que será uno menos el radio, y lo conectaré al nodo mayor que Esta es mi nueva condición. ¿Qué debería pasar si esta condición es cierta? Invierta la velocidad, eso debería permanecer como es. Yo le pego play, Seguirás notando que la pelota seguirá yendo más allá la pared frontal porque necesitamos hacer una corrección similar a lo que hicimos antes poniendo la simulación al frente, hacer la corrección, y luego moverla hacia atrás. Esto se verá algo así. Añadiré un nodo de radio y lo conectaré a un nodo xyz combinado en el eje y esta vez. Quiero mover la posición hacia adelante por la cantidad del radio. Voy a añadir un nodo de metanfetamina vector. Cambiar la operación para agregar, y voy a enchufar la posición al primer socket, lo que significa que agregaré a la posición, el segundo valor, que debería ser el vector que obtuvimos del radio. Entonces enchufaré el vector del nodo xyz combinado al segundo socket. A continuación, haremos nuestra corrección mediante el uso de este nodo multiplicar vector. Luego usamos la operación ad para contar para la otra corrección, y necesitamos cancelar la operación de suma que hicimos antes sumando un nodo meta vector establecido para restar, y restaré el vector que agregué antes, que es el vector que sale del nodo xyz combinado Si golpeo play, notarás que la pelota ahora está rebotando de la pared frontal correctamente Esta es nuestra corrección para la pared frontal. Ahora tenemos que hacer lo mismo para la pared posterior. Empecemos con la condición. ¿Cuándo toca la esfera la pared posterior? Sencillo. Cuando la posición en el eje y es menor que menos uno más el radio o el radio menos uno. Voy a añadir un nodo de radio. Lo conectaré a un nodo matemático, lo configuraré para restar, por lo que será el radio menos uno y lo conectaré al nodo menos que Esta es mi nueva condición. ¿Qué debería pasar ahora si esta condición es cierta? Invierta la velocidad, eso debería permanecer como es. Si le doy a play, seguirás notando que la pelota aún irá más allá de la pared posterior porque necesitamos hacer una corrección similar a la que hicimos antes alterando la simulación hacia atrás, hacer la corrección, y luego moverla hacia adelante Se verá algo así. Añadiré un nodo de radio y lo conectaré al nodo XY Z combinado en el eje y esta vez. Quiero mover la posición hacia atrás por la cantidad del radio. Voy a sumar un nodo matemático vectorial, cambiar la operación para restar, y voy a enchufar la posición al primer socket, lo que significa que restaré de la posición, el segundo valor, que debería ser el vector que obtuvimos del radio Entonces enchufaré el vector del nodo XYZ combinado al segundo socket. A continuación, haremos nuestra corrección mediante el uso de este nodo multiplicar vector. Luego usamos la operación de resta para contar para la otra corrección, y necesitamos cancelar la operación de resta que hicimos antes sumando un nodo matemático vectorial, configurarlo para sumar, y agregaré el vector que resté antes, que es el vector que sale del nodo combinado x Si golpeo play, notarás que la pelota ahora está rebotando de la pared posterior correctamente Y ahora nuestro motor de física es consciente del radio de los puntos y lo considerará al ejecutar la simulación. Sé que podría parecer que hicimos mucha operación en este video y eso podría ser abrumador. Pero en caso de que no entiendas lo que hicimos exactamente, regresa y mira este video desde el principio e intenta enfocarte un poco e intentar visualizar lo que está pasando, y te sorprenderá lo fáciles que son estos conceptos. Sé que puede parecer muy complicado, sobre todo cuando estoy haciendo las cosas tan rápido, pero créeme, una vez que lo entiendas, podrás hacerlo como literalmente ojos vendados porque entiendes los conceptos detrás Probablemente también nos reiremos de ti mismo por pensar que eso también es complicado. Es así como podemos implementar el radio en nuestra simulación, y en este momento solo hay un problema más que tenemos que resolver, que es cómo hacer que estas bolas choquen entre sí Eso es lo que vamos a hacer en el próximo video. 13. Colisión: Colisión. Hola, y bienvenidos al último video técnico sobre cómo crear tu propio motor de física en blender usando nodos de geometría. Pasamos por mucho, así que date algo de crédito porque este video podría ser el más complicado hasta ahora. No vamos a agregar muchos nodos, pero a algunos de ustedes les puede resultar un poco complicado entender los conceptos detrás de todas las operaciones que estaremos haciendo en este video. Pero voy a hacer todo lo posible para explicar todo paso a paso. Y ojalá, si te enfocas lo suficiente, entenderás exactamente la lógica de lo que vamos a construir. Aquí es donde nos detuvimos la última vez, y ahora mismo sólo estamos tratando con un punto. O una bola. Quiero tener varios. La forma más fácil de evitar eso será aumentar el número de puntos a algo así como diez, digamos. Y hagamos que el radio se establezca en algo pequeño como 0.2 metros. Ahora, todas estas bolas estarán una encima de la otra. Por eso me conectaré a la posición, un nodo de valor aleatorio, y este nodo asignará una posición aleatoria a cada punto. Y todo lo que necesitas hacer es darle un intervalo especificando un valor máximo mínimo, y asignará un valor aleatorio en ese intervalo para cada punto. Puedes jugar con los valores hasta obtener el resultado que deseas. Pero en mi caso, terminé usando estos valores para los valores mínimos menos uno menos uno, tres, y para los valores máximos, uno, 15. Ahora bien, si le doy a play, verán que ahora tenemos diez esferas, pero el mayor problema es que todos estos cuencos, se cruzan entre sí. No están colisionando. Le dijimos a Blender que hiciera rebotar las bolas de las diferentes paredes, pero no le dijimos que también las hiciera rebotar unas de otras, y esa es una parte crucial para construir nuestro propio motor de física. Entonces, ¿cómo podemos hacer tal cosa? Intentemos hacer una lluvia ideas sobre cómo podemos programar tal cosa Empecemos con la primera pregunta. Uno ¿ básicamente chocan dos bolas? Porque si conocemos esa condición, podemos decirle a Blender que, oye, si esta condición pasa, haz algo. Bueno, te voy a dar la respuesta. Dos bolas chocan cuando la distancia entre ellas o la distancia entre los centros es menor que el radio multiplicado por dos Creo que eso debería quedar claro a partir de esta visualización. Siempre me resulta difícil pronunciar esa palabra. Esa es la lógica de la condición que construiremos más adelante. diremos a Blender que siempre calcule la distancia entre dos puntos, y si la distancia entre ellos es menor que el radio multiplicado por dos, eso significa que están colisionando, y deberías hacer algo al respecto Ahora, vamos a traducir eso en nodos. Voy a añadir un nodo llamado índice de más cercano. Este nodo me dará el índice del punto más cercano. Si salto al espacio de trabajo de los nodos de geometría, como mencioné antes, cada punto tiene un índice que se refiere a él. El índice del nodo más cercano me dará ese índice del punto más cercano a un punto determinado. Una vez que conozco el índice del punto más cercano, puedo pedirle a blender que lea su posición, lo cual se puede hacer agregando un nodo llamado evaluar en índice, que es una manera de decirle a blender. Para ese punto, quiero que calcules algo. En nuestro caso, queremos conocer la posición de ese punto. Cambiaré el tipo de float a vector. Porque la posición es un vector. Añadiré un nodo de posición y lo conectaré al valor. Ahora el vector de salida de este evaluar en nodo índice es el vector de posición del punto más cercano, punto B, que es el más cercano a mi punto. La salida del nodo de posición es el vector de posición del punto A. Una vez que tengo ambos de estos dos vectores, puedo agregar un nodo matemático vectorial y cambiar la operación a distancia, y si tapo el vector que viene del evaluar en índice y el nodo de posición, Este nodo me dará la distancia entre ellos. Ahora bien, ¿cómo sé si esos dos puntos están colisionando? Ya dije la respuesta antes. Si la distancia entre los dos puntos es menor que el radio multiplicado por dos. Voy a agregar un nodo de radio que multiplicaré por dos, la distancia debe ser menor a dos veces el radio. La salida ahora de esta operación menor que es mi condición para cuando dos puntos o bolas están colisionando. Ahora hay algo importante en lo que debemos pensar, el orden de las operaciones. Si ejecutamos las restricciones de colisión antes o después de la restricción de bolas , piénsalo por un segundo. La respuesta es antes. Tenemos que contar para colisionar antes de las restricciones de los muros La razón de ese ser es que tiene más sentido calcular la colisión antes de que las paredes toquen las paredes, ya que podrían empujarse entre sí lejos de las paredes o empujarse entre sí en las paredes. Una vez que sabemos eso, podemos ejecutar las restricciones de los muros. Por eso voy a añadir un nodo set position, y lo voy a enchufar antes la parte donde tenemos las otras restricciones. Básicamente, justo después del nodo encargado de actualizar el puesto. Y voy a tapar el resultado de la operación menor que. Al zócalo de selección de la nota de posición establecida. Ahora que terminamos de construir nuestra condición, ahora necesitamos pasar a lo que debería suceder si esta condición es cierta o lo que debería suceder si dos bolas chocan Entonces mi pregunta ahora, ¿qué debería pasar si dos bolas chocan? Piénsalo. La respuesta es la siguiente. Si chocan dos bolas, tenemos que alejarlas una de la otra Eso es algo seguro de decir, y también creo que es supergenioso decirlo. Pero hay dos preguntas importantes que debemos responder. En primer lugar, ¿por cuánto debemos compensar ambas bolas de estas dos bolas? ¿Es así o se van a empujar así? Eso es algo importante de averiguar. Entonces ese es el número uno. Número dos, a lo largo de qué dirección. Entonces, si ambas bolas chocan, ¿irían así o esto o esto o esto o esto? Eso también es algo importante que necesitamos para encontrar una manera de traducirlo a nodos. Por lo mucho que necesitamos para compensar la posición de los dos puntos, eso debería ser sencillo. Calcula la distancia entre los dos puntos, divídala por dos y mueve cada punto por esa cantidad. Para la dirección, es necesario empujar a lo largo del vector que cruza ambos puntos. ¿Cómo podemos calcular el vector? Aquí está el vector de posición para el punto A, y aquí está el vector de posición para el punto B. Puedo calcular el vector que los cruza haciendo una operación de resta, posición del punto A menos vector de posición del punto B. Eso me dará el vector a lo largo cual debería pasar la posición de desplazamiento Ahora, traduzcamos todos esos pensamientos en nodos. Empezaré calculando el vector que cruza los dos puntos. Como dije, esa será la posición del punto A menos la posición del punto B, lo que se puede hacer sumando un nodo matemático vectorial y configurarlo para restarlo Voy a enchufar la posición en el primer socket y el vector que sale de la evaluar en el índice en el segundo socket? Ese es el vector voy a mover los dos puntos a lo largo. Ahora pasemos a la cantidad de por cuánto compensar los dos puntos. Tenemos que calcular esa distancia dividida por dos, y esa es la cantidad por cuanto debo compensar cada punto. ¿Cómo puedo calcular la línea roja? Este es el radio. Este es también el radio, y esta es la distancia entre los dos puntos. Si hago dos veces el radio menos la distancia, eso me dará la longitud de la línea roja o por cuánto se cruzan los dos puntos Traduzcamos eso en notas. Voy a añadir un conjunto de notas matemáticas para restar. La operación es dos veces el radio, menos la distancia entre los dos puntos. Añadiré otro nodo matemático y lo configuraré para dividirlo, y yo lo dividiré por dos. El resultado de esto es la cantidad de compensación. Añadiré un nodo matemático vectorial, lo cambiaré a escala, y escalaré el vector a lo largo del cual quiero que ocurra la operación, que viene del nodo de resta vectorial, y lo escalaré por la cantidad viene del nodo de matemáticas divididas Esto irá directamente al socket de desplazamiento del nodo de posición establecida. Y eso es todo. Así es como puedes construir colisiones en nuestro motor de física. Ahora bien, si le pego play, seguirás notando que las bolas siguen colisionando. Esta es la parte en la que puedes empezar a odiarme porque incluso después de toda esta complicada matemática, todavía no funciona Pero eso lo arreglaremos. Quiero mencionar que no es que lo que hicimos esté mal, el problema es sobre licuadora. No es culpa nuestra. Se trata de licuadoras Como mencioné antes, debido al método de integración de engrase utilizado en Blender, necesitamos lidiar con altos números de error El método de integración de engrase está bien en el mejor de los casos, y es realmente propenso a errores Entonces, la mejor solución para hacer nuestra simulación más precisa es en lugar de ejecutar esta operación solo una vez, si podemos encontrar una manera de decirle a blender que cada cuadro no solo ejecuta este motor de física una vez, ejecútelo, por ejemplo, 100 veces. De esa manera conseguirás un resultado más preciso. En realidad, ya sabes la respuesta a esta pregunta. ¿Puedes adivinarlo? Rollos de tambor, y está repitiendo zonas. Lo primero de lo que hablamos en este curso. Lo que haré es agregar una zona de repetición e insertaré todo mi sistema de restricciones dentro de la zona de repetición así. Y ahora desde el primer nodo de la zona de repetición, puedo especificar cuántas veces quiero blender para calcular las restricciones. Sí, Blender ejecutará la simulación solo una vez, pero puedo especificar usando la zona de repetición, cuántas veces ejecutar ciertas operaciones dentro de un fotograma. Eso se llama subpaso. Yo haré, por ejemplo, 50. Ahora, si presiono play, blender, cada fotograma ejecutará el sistema de colisión 50 veces para obtener un resultado realmente preciso. Y ahora, como puedes ver, nuestras bolas están colisionando muy bien, y todo está funcionando sin problemas, y así es como creamos el sistema de colisión para nuestras bolas En el siguiente video, compartiré algunas reflexiones finales sobre cómo hacer ciertas cosas en nuestro motor de física. 14. Desove de partículas: desove de partículas. Hola y bienvenidos, y en este video, vamos a hacer que los puntos se generen con el tiempo y no tenerlos todos a la vez Aquí es donde paramos la última vez. Ahora mismo, nuestra simulación tiene sólo diez puntos. Digamos que quiero 100 puntos. Si aumento el número de puntos a 100 y golpeo play, notarás que la simulación se volverá loca porque cuando aumentemos el número de puntos, aumentamos la probabilidad de error, y eso hará que la simulación sea súper inestable Entonces, ¿cuál es la solución para eso? Bueno, en nuestra simulación actual, tenemos 100 puntos desde el principio. ¿Y si descubrimos una manera de decirle a blender que no tenga 100 puntos desde el principio, sino que los engendremos o los agregue con el tiempo Eso debería llevar a una simulación más estable. ¿Cómo podemos hacer eso? Empecemos con la primera parte que es ¿cómo decirle a Blender que genere las partículas con el tiempo? Eso va a ser sencillo. Todo lo que necesita hacer es agregar un nodo de geometría de unión y conectarlo como el primer nodo en la zona de simulación. Tomaré la salida del nodo de puntos, técnicamente del almacén llamado nodo de atributo y lo conectaré al nodo de geometría conjunta. Lo que va a pasar ahora es que blender sumará más puntos cada vez que ejecute la simulación. O para ser más precisos, Blender unirá la geometría anterior con la nueva geometría. A continuación, voy a bajar el número de puntos a uno, porque si no hago eso, la licuadora explotará Empezará a tener 100 puntos, y cada fotograma sumará otros 100 puntos. Se puede ver fácilmente cómo eso llevará a tener un número loco de puntos realmente rápido, lo que colapsará el software. Cuando cambio el número de puntos a uno, Blender solo agregará un punto por fotograma. En realidad, eso sigue siendo demasiado, y necesitaremos hacer que una licuadora genere un punto tal vez cada 20 cuadros Pero antes de que hagamos eso, si le pego play, como pueden ver, Blender está agregando un nuevo punto a cada fotograma, que sigue siendo demasiado, y sigue llevando a la estimulación sea inestable. La solución será decirle a blender que T no apunte ni un punto cada fotograma. Tal vez agregue un punto cada diez fotogramas o 20 fotogramas. Entonces, ¿cómo podemos programar tal cosa? Comenzaré agregando un mismo nodo de tiempo. Este nodo o bien me dará el valor de segundos o el frame am on. Tomaré el marco y lo conectaré al conteo del nodo de puntos. Ahora, en el marco uno, licuadora agregará un punto. En el fotograma dos, Blender sumará dos puntos, así que tendré tres puntos y en el fotograma tres, Blender sumará tres puntos, así tendré seis puntos en total. Eso no es lo que quiero. Quiero decirle a blender que un punto cada cierto número de fotogramas. Voy a agregar un nodo matemático y lo configuraré en módulo floored Floord módulo es solo una forma elegante de decir que este nodo devolverá el resto de una operación de división por este valor Este nodo nos permitirá especificar con qué frecuencia queremos que blender agregue un nuevo punto. También agregaré otro nodo matemático y lo estableceré para que sea igual a dos, y el valor debería ser cero. Aquí está la lógica de lo que está sucediendo. Blender tomará el número del marco amon luego lo dividirá por este valor, y si el resto es igual a cero Eso significa que esta condición igual a es verdadera, lo que significa que este nodo dará salida a uno, por lo que Blender agregará un punto. Y si el resto no es igual a cero, eso significa que esta condición igual dos es falsa, lo que significa que este nodo dará salida a cero, por lo que blender no agregará ningún punto. Quiere que la licuadora agregue un punto sobre 20 cuadros. Eso es lo que obtendré si tecleo 20 aquí. He aquí un ejemplo de lo que va a pasar. Digamos que estoy en el fotograma 55. Blender dividirá 55 por 20. El resto de la operación es de 15. 15 no es igual a cero, lo que significa que este nodo dará salida a cero, y como este nodo va a los recuentos del nodo de puntos, eso significa que blender no sumará ningún punto. Ahora, digamos que estoy en el fotograma 60. Blender dividirá 60 por 20. El resto de la operación es cero, cero es igual a cero, lo que significa que este nodo dará salida a uno porque esta condición es verdadera ahora. Ese irá al socket de conteo de puntos, y Blender agregará un punto a la simulación. Creo que ahora la lógica debería estar clara de lo que está sucediendo. Ahora si le pego a play, Blender comenzará a agregar partículas poco a poco, que es exactamente lo que quiero. Lo último que quiero hacer es decirle a blender que genere cada punto en una dirección diferente Puedo hacer eso asignando un vector de velocidad inicial aleatorio a cada punto, lo que puede hacer fácilmente enchufando un nodo de valor aleatorio en el socket vectorial del atributo de nombre de tienda definiendo la velocidad inicial Y voy a sumar los valores a menos uno menos 10 para el mínimo, y 110 para el máximo. Es así como podemos hacer que la licuadora genere las partículas a lo largo del tiempo Piensa que la lógica es súper simple. En el siguiente video, agregaremos fracción a nuestra simulación. 15. Fricción: Adición de fracción. Una parte importante de cualquier simulación es la fracción. Sin fricción, las bolas seguirán rebotando para siempre. Por eso es importante encontrar una manera decirle a Blender que humedezca la simulación con el tiempo Y de hecho ya tocamos este tema antes, pero lo que haremos en este video es facilitar un poco el proceso de cambiar la fricción. Ahora bien, este es nuestro árbol de notas completo, y lo que planeo hacer es lo siguiente. Como recordarán, en las restricciones, tengo la velocidad que se multiplica por menos uno dependiendo del eje. Si llevo este valor hasta algo así como -0.8, eso conducirá a más fricción Lo que quiero es cambiar este valor para todos los diferentes nodos multiplicados a la vez. Esto es sencillo. Voy a añadir un nodo xy z combinado. Entraré el mismo valor aquí, uno, uno menos uno y lo conectaré al vector del nodo multiplicar. No hice nada elegante, solo reemplazé el valor en el nodo multiplicar por este nodo combinado x y z. La razón por la que hice eso es que ahora puedo agregar un nodo de entrada de grupo y tomar el eje z y conectarlo a la entrada de grupo. Ahora bien, si voy a la puñalada modificadora, verás que desde aquí puedo cambiar el valor Además, es importante tener en cuenta que solo estaré cambiando el valor para los ejes z porque ese es el zócalo enchufado a la entrada del grupo Para el resto de los enchufes, se quedarán uno. Esto facilitará el proceso de cambiar los valores de fricción de manera más fácil. Ahora, necesito hacer lo mismo para todas las diferentes restricciones. Comenzaré haciéndolo para el muro derecho, agregaré un nodo combinado x Y Z y agregaré una entrada de grupo. Pasaré a la pared izquierda, agregaré un x y zende combinado con los mismos valores, y agregaré entrada de grupo Voy a hacer lo mismo también por la pared frontal ahora mismo. Por último, haré lo mismo por la pared trasera. S. Y ahora puedo controlar la fricción fácilmente desde aquí. También puedo abrir la barra lateral golpeando n y el editor de nodos de geometría, seleccionar una de las entradas de grupo, y puedes hacer doble clic para cambiar el nombre de esta propiedad a algo así como fricción. Para mi simulación, voy a establecer el valor de fricción en -0.9 Otra forma de agregar fracción es volviendo al almacén llamado nodo atributo definiendo la velocidad, y si agrego un nodo matemático vectorial y lo configuro a escala, podré amortiguar la velocidad en toda la simulación Es como una fricción global que aplicará cada cuadro. Incluso puedo agregar una entrada de grupo y conectarla ahí, cambiar su nombre a fricción global. Lo estableceré en 0.99. La simulación perderá velocidad un factor de 1% cada fotograma. Además, podría ser útil cambiar el número de pasos de la zona de repetición del paso modificador. Por eso también lo conectaré a un nodo de entrada de grupo y lo llamaré, por ejemplo, sub pasos, y lo pondré en 20. Esos son los valores que utilizo para el render promocional. Por último, estableceré mi velocidad de fotogramas en 120, así tendré una velocidad de fotogramas muy fluida, y mi simulación será menos propensa a errores. Para el rango de fotogramas, digamos que quiero un render de diez segundos, lo que significa que mi rango de fotogramas será de hasta 1,200 fotogramas. Si pulso play, nuestra simulación está funcionando sin problemas. Eso es todo, todos por este video. Técnicamente terminamos todo. En la siguiente, te mostraré cómo creé la escena final y cómo renderizarla. 16. Descripción final: Hola otra vez. En la última vez. Este es el último video de construir nuestro propio motor de física en Blender. Este video es un resumen, recorta una vista de pájaro sobre todo lo que hicimos hasta este punto Lo primero con lo que voy a empezar en este video es nuestro notario, porque actualmente es un lío absoluto. Si decides volver a este proyecto en el futuro, probablemente te perderás en la C de todos estos diferentes nodos. Por eso empezaré por organizar y etiquetar al notario, y luego pasaré al resumen Bien, bienvenido de nuevo a Blender, y esto es todo mi no intento, y es un desastre honestamente. Voy a golpear la barra espaciadora de Control para maximizar este editor. Como puedes ver, hay muchos nodos, y sobre todo en el futuro, va a ser difícil entender realmente lo que está sucediendo porque no etiquetamos nuestra nota try. Lo que vamos a hacer en este video, como mencioné, es, primer lugar, comenzar por organizar nuestro árbol de notas. Voy a ir al inicio de la nota tratar. Voy a seleccionar todos estos nodos, golpear Control G para crear una etiqueta alrededor de ellos, golpear F dos para un nombre, y llamémoslo, por ejemplo, condición inicial. Una vez que tenemos nuestra condición inicial, ingresamos a la zona de simulación. Tenemos esta geometría de articulación encargada de sumar puntos a lo largo del tiempo. Después de eso, definimos la aceleración usando este atributo nombrado, y se relaciona con la escala y este nodo vectorial. Asegúrate de seleccionar los tres. Golpea Control G, F dos por un nombre, y llamémoslos aceleración. A continuación, tendrás el atributo store named responsable de definir la velocidad. Vamos a moverlo aquí. Lo mismo. Pongamos todos estos nodos uno encima del otro así apilándolos. Selecciona todos estos nodos, controla G y F dos para un nombre, y llamémoslo velocidad porque estamos definiendo la velocidad usando estos nodos. A continuación, estamos actualizando la posición usando el nodo set position, así que apile los nodos entre sí. Selecciónalos, controla G, F dos, y llamémoslos actualización de posición. Después de eso, entramos en la zona de repetición, que se encarga compilar todas las diferentes restricciones Pongamos este nodo por aquí. En realidad, voy a moverlo hacia arriba, pero vamos a tratar de encontrar una solución en todo este lío de aquí mismo. En realidad, para facilitar todo el proceso y tener más espacio, comenzaré a organizar estos nodos desde el final. Voy a tener estos nodos que se encargan de transformar los puntos en las esferas, así seleccionaré todos ellos, Control G para crear una etiqueta, F dos por un nombre, y llamémoslo, por ejemplo, instancer Mueva estos hacia atrás. Mueva esto también hacia atrás. Cuanta menos restricción tengo aquí, es la restricción para la pared posterior. Vamos a seleccionarlo por completo, que deberían ser todos estos nodos. Vamos a organizarlos. En primer lugar, tendrás estos nodos en la parte superior. Voy a tomar Control G, y esta es mi condición. Organicemos estos nodos aquí mismo. Algo así. A lo mejor trabajarás. Y luego elige todos estos nodos, Control G, F dos por un nombre, y llamémoslo strant de pared posterior A continuación, tendrás esto. Haz algo similar, selecciona estos, Control G y F dos, y llamémoslo condición. A continuación, voy a mover estos nodos aquí. Este de aquí, aquí, estos de aquí. Seleccione todos ellos. Controle G, F dos para un nombre, y llamémoslos restricción de pared frontal. Ahora a la restricción de muro izquierdo, todos estos nodos, seleccione estos control G F dos condición. Siguiente, está aquí, esta de aquí y esta de aquí. Seleccione todo el árbol de notas, control G, F dos, muro izquierdo, restricción. Ahora a la restricción de pared derecha, Control G, F dos condición, mover estos nodos aquí. Lo mismo para éste y éste, entonces así. A continuación, seleccione todos ellos, control G, F dos, restricción de muro derecho. Por último, la restricción de suelo, que son estos nodos. Haremos algo similar. Seleccione la condición de control G, F dos. Mueva estos aquí, para la posición, para la velocidad, lo siento, y seleccione todos estos. Control G F restricción de dos pisos. Estas son las diferentes restricciones, y por último, tendrás el sistema de colisión. Tratemos de encontrar una manera de organizar todos estos. Voy a seleccionarlos a todos y mover todo hacia abajo. Creo que esto va a ser mejor. Pongamos este aquí y tal vez movamos la zona p y todos estos nodos ligeramente hacia la izquierda, y luego seleccionemos todos estos Control G F dos, y se le llama colisión. Este es mi grupo de colisiones. Y trae este insumo grupal, esto un poco así. Y al hacer esto, organizamos nuestro árbol de nodos. En el futuro, si vuelves a esto, sabrás exactamente qué está haciendo cada grupo de nodos. Porque los etiquetamos. Además, cuando tomas esta vista de pájaro en todo el árbol de nodos, empiezas a ver la lógica detrás de todo lo que hicimos. Como resumen final, aquí está la lógica de todo lo que construimos. En primer lugar, comenzamos definiendo las condiciones iniciales, cuántos puntos tenemos, cuándo queremos generar puntos, y todo eso Estos puntos posteriormente ingresarán a la zona de simulación. Lo primero que hacemos aquí es definir la aceleración y luego definir la velocidad. Que ambos usamos para actualizar la posición de nuestros puntos. Una vez que tengamos esta configuración básica, podemos empezar a pensar en diferentes restricciones. Para nuestro motor de física, hay dos tipos de restricciones que nos importan. La primera es la colisión, que es la colisión entre las distintas esferas, y luego las diferentes paredes, que son el piso, la pared derecha y trasera, y la pared izquierda y frontal. Y al final del árbol de notas, utilizamos esta instancia en nodo de puntos para transformar esos puntos en una geometría real, que en nuestro caso pasó a ser esfera EUV Y sin embargo, Este es todo nuestro motor de física. Y si, eso es básicamente todo por cómo puedes construir tu propio motor de física en licuadora. Ahora puedes crear una escena alrededor la simulación y renderizarla como quieras. Además, dado que el sombreado y animación están más allá del alcance de las partituras, y quería que el curso fuera conciso y que se tratara de nodos de geometría Por eso hice un video gratis bonus que puedes ver, donde te llevo paso a paso sobre cómo creé mi render. Puedes ver ya sea desde el enlace en la descripción o yendo a mi sitio web. La parte del nodo de geometría y la parte de afeitado son disciplinas bastante diferentes, y por eso tenía más sentido mantenerlas como cosas separadas ya que tomo diferentes enfoques en la enseñanza de ambas. Por último, gracias por sintonizar este curso. Espero que hayas aprendido mucho. Si te ha resultado útil este curso, por favor déjanos una buena reseña que nos ayude a hacer mejores cursos, y aún puedes consultar el resto de mis cursos aquí. Muchas gracias, y te veré o.