Transcrições
1. Trailer: Ei, dê uma olhada nisso. Toda essa simulação foi feita apenas usando nós de
geometria E se você conhece
um pouco sobre nós, sabe como
criar algo assim pode ser desafiador. O fato é que entender os nós é difícil e frustrante. Mas se você não fizer isso,
perderá um aspecto crucial do liquidificador que abrirá um novo mundo de
possibilidades para você Você provavelmente também
já viu alguns
desses crees malucos de nodos e se perguntou como
começar a fazer isso? Como eu sei disso?
Porque eu estava lá. Sofri para encontrar muitas
respostas para minhas perguntas. Ao fazer este curso, pretendo tornar o processo
de aprendizado de simulações em nós de geometria mais fácil
e divertido Ao longo deste curso,
você não aprenderá apenas a criar uma
simulação de física no blender Você literalmente construirá seus próprios mecanismos de física
dentro dos nós de geometria Você aprenderá sobre
as forças da vida real que fazem nosso mundo
funcionar do jeito que está. Você aprenderá sobre velocidade. Você aprenderá sobre
aceleração, colisão, gravidade e como todas essas forças interagem umas com as
outras. E muito mais. E você aprenderá
tudo isso
criando a simulação de
bolas caindo. Eu sei o que alguns de vocês
podem estar pensando agora. Ei, Yassine, por que eu me incomodaria criar uma simulação de bolas caindo Quero aprender a criar
coisas boas, como explosões, ou aprender
o que cada nó faz Acredite em mim, isso
seria uma abordagem terrível. Tão simples quanto cair bolas
pode parecer um conceito. Você ficará
surpreso com a grande quantidade de conceitos que aprenderá
apenas criando a simulação O que o torna o exercício
perfeito? Ser bom em simulações
é ser bom em física. E este curso preencherá a
lacuna entre os dois e abrirá
essa porta para você. Então, se você estiver
interessado em aprender simulações usando
nós de geometria no Blender, este curso é para
você, e mal posso esperar para ver você do
outro lado. Por favor.
2. Zonas de repetição: Zonas repetidas. Nas versões
recentes do Blender, um novo conceito foi
introduzido, zonas repetidas Este é o cubo padrão, exclua-o porque você precisa, e eu vou adicionar uma esfera Se eu abrir o editor de nós de
geometria, crio uma nova árvore e vamos chamá-la, por
exemplo, de simulação Se você adicionar os utilitários, terá a opção
de repetir zonas Como você pode ver, terá esses dois nós com
essa caixa ao redor deles. As zonas de repetição são uma
forma de fazer com que o liquidificador repita determinadas operações
várias vezes. Por exemplo, o que está saindo
dessa entrada de grupo é minha geometria original,
que é a esfera Também tenho minha saída de grupo, que é a geometria que
terei até o final Vou conectar a
zona de repetição entre eles assim. Também vou adicionar outro
nó chamado set position, que me permitirá alterar
a posição de um objeto. Mude A, defina a posição e eu vou conectá-lo
na zona de repetição Digamos que eu mova a esfera 1 metro no eixo x, e é exatamente isso que
terei se eu digitar uma aqui. Agora, digamos que eu queira repetir
essa operação dez vezes. Claro, pode ser tão
fácil quanto digitar dez aqui, mas imagine se você tivesse
uma árvore de nós maior Nessa situação,
você precisará
multiplicar cada valor por dez, que pode ser um incômodo É por isso que no primeiro
nó da zona de repetição, você tem esse número
chamado iterações, que representa
quantas vezes você quer que blender calcule o que está
dentro da Se eu digitar dez aqui, liquidificador executará
o que está dentro dessa zona de repetição dez vezes Então, se formos resumir
o que são zonas repetitivas, as zonas
repetidas são uma
forma de dizer ao liquidificador repita certas operações por
um determinado número de tempo É simples assim. Agora, e
quanto às zonas de simulação?
3. Zonas de simulação: Zonas de simulação. As zonas de simulação têm
um conceito semelhante às zonas de repetição Há uma maneira de executar determinadas operações
várias vezes. A única diferença entre zonas de
simulação e zonas repetição é que,
nas zonas de repetição, você especifica
quantas vezes deseja que Blender compile Enquanto isso, nas zonas de
simulação, Blender compilará todas as
operações em cada quadro Se eu for adicionar simulação, terei uma zona de simulação. Como você pode ver, é muito
semelhante à zona de repetição, exceto pelo fato de não
ter o valor de iteração Em vez disso, tem tempo de dilta. Agora, se eu duplicar
a mesma operação de posição definida dentro
da zona de simulação, conectar a entrada do grupo na entrada
da simulação e a saída
da simulação na saída do grupo para
ver o resultado final, nada acontecerá no início Mas se eu abrir a
linha do tempo e clicar em play, você verá a esfera se movendo Agora, o Blender está executando as operações dentro
das zonas de
simulação
em cada quadro No quadro um, o liquidificador
moverá a esfera em 1 metro, e no quadro dez, moverá a esfera em 10 metros.
É simples assim. Agora, é importante
observar que o liquidificador não está executando a simulação dez
vezes quando está no quadro dez Isso precisará de muitos recursos
do computador. É mais como se o Blender
estivesse acumulando os resultados
a
cada quadro que passa Por exemplo, no primeiro quadro, Blender moverá o cubo 1 metro executando
a No quadro dois, o Blender
moverá o cubo também 1 metro com base
na posição anterior Blender executa a
simulação apenas uma vez, e a posição inicial
da simulação é o resultado
do quadro anterior Espero que isso faça sentido. Em resumo, você pode pensar nas zonas
de simulação apenas como uma zona de repetição em que o número de iterações
muda a cada quadro Na verdade, se eu adicionar um
nó chamado tempo de cena, esse soquete de quadro
me dará o número
do quadro em que estou No quadro um, ele
produzirá um, e no quadro 37, ele produzirá 37. Se eu voltar para a zona de
repetição e conectar o quadro
às iterações, isso significa que o número de iterações seguirá o
número em que o quadro Se eu clicar em play, obterei o mesmo resultado
da zona de simulação. Você pode pensar nas zonas de
simulação como uma zona de repetição com o tempo da cena
conectado às A diferença agora
deve estar clara entre repetição e zonas de
simulação As zonas de repetição são uma forma de
repetir determinadas operações manualmente, especificando quantas vezes você
deseja Enquanto isso,
as zonas de simulação farão isso automaticamente
em cada quadro. Agora, com tudo
isso resolvido, agora podemos começar a falar
sobre simulações.
4. O que é uma simulação: O que é uma simulação? Achei essa boa definição
do que é uma simulação. Uma simulação é um método para imitar um
processo do mundo real ao longo Ele evolui criando um modelo que representa
as principais características, comportamentos e funções
do processo ou sistema Por exemplo, se eu tiver
uma bola e a fizer cair, uma simulação será um programa que prevê
o que acontecerá. Vou dar a esse programa certas informações,
como o tamanho da bola,
a altura ela está do chão, o
quão pesada ela é, o quão
forte é a gravidade que a
puxa E com base nessas entradas, o programa tentará
prever o que acontecerá Então, se quisermos criar uma simulação
física no Blender, precisamos pensar em maneiras de
recriar a realidade no Isso significa que precisamos pensar nas forças
da vida real que
permitem que nosso mundo
funcione do jeito que está. A chave para isso são duas forças, velocidade e aceleração, e explicaremos
as duas Agora estamos começando a
entrar na parte divertida. No próximo vídeo,
aprenderemos sobre velocidade.
5. O que é Velocity: O que é velocidade? A velocidade é
uma grandeza vetorial física que descreve a taxa na qual um objeto
muda sua posição Simplificando, velocidade é a velocidade que algo
está se movendo Geralmente nos referimos
a isso como velocidade. O que eu quero que você tenha
em mente é que não
podemos pensar em velocidade sem considerar o fator
tempo, porque a velocidade no final
do dia depende
da distância percorrida em
um determinado período de Não podemos dizer que a velocidade
do carro é de 100 quilômetros ou 100 milhas. Precisamos especificar por qual unidade
de tempo estamos falando? São 100 quilômetros/hora
por minuto por segundo? Há uma grande diferença. Em nossa pequena simulação, essa esfera está se movendo a uma
taxa de 1 metro por quadro, e essa é sua velocidade, 1 metro por quadro Ou como minha taxa de quadros é 24, isso significa que a esfera
se moverá 24 metros/segundo Podemos dizer que sua velocidade
é de 24 metros/segundo,
ou 14 40 metros/minuto, ou 86.400 metros/hora Você entendeu a ideia.
Então isso é velocidade Agora precisamos falar
sobre aceleração.
6. O que é aceleração: O que é aceleração? Velocidade é a taxa de mudança
na posição ao longo do tempo? Aceleração é a
taxa de mudança na velocidade ou velocidade ao longo do tempo Um carro está acelerando quando
sua velocidade está aumentando. A aceleração representa
as mudanças na velocidade. Assim como a velocidade, podemos
falar
sobre aceleração por si só, sem considerar
o fator tempo Podemos dizer que este carro está acelerando a uma
taxa de 10 metros. Precisamos especificar por qual
unidade de tempo estamos falando? Está acelerando a uma taxa de 10 metros/segundo por minuto por
hora Essa é uma grande diferença. No pequeno sistema
que construímos no Blender, a esfera está se movendo a uma
taxa de 1 metro por quadro, e essa é sua Mas não está acelerando
nem acelerando, o que significa que a
aceleração é zero Na vida real,
as velocidades dos objetos aumentam
e diminuem com o tempo devido a forças
diferentes Então, como podemos
programar essas coisas liquidificador. Antes de
explicar como fazer isso, quero mudar um pouco a
simulação. Vou excluir a entrada do
grupo e, em vez disso, vou adicionar um nó pontual. É importante mencionar
que um ponto no blender é apenas um contêiner de dados que
podemos substituir posteriormente por outros objetos É por isso que
o estamos usando,
pois ele oferece uma grande
flexibilidade posteriormente. Vou mudar a
simulação para se tornar uma simulação de ponto de queda
movendo 0,5
metros no ar, então essa seria minha posição
inicial. Como quero que o
ponto caia, preciso atualizar o nó de posição
definida. Em vez de nos movermos no eixo x, preciso dizer ao Blender que nos
moveremos no eixo z. Vou redefinir o eixo x para zero
e, no eixo z, escreverei, por
exemplo, 0,1 metro. Se eu apertar play, você notará
que a bola está se movendo para cima e não para baixo. É
porque o liquidificador está movendo a bola em 10 metros para cima. Então, se quisermos movê-lo para baixo, precisamos
alterá-lo para -0,1 metros. Agora, se eu apertar play, você
notará que a bola está
caindo lentamente. Agora podemos começar a
pensar em como implementar a aceleração
em nosso sistema. Para entender o que
faremos, precisamos voltar à
definição de aceleração. Aceleração é a mudança
na velocidade de um objeto. Um objeto em queda
estará acelerando, o que significa que sua
velocidade
aumentará gradualmente quanto mais tempo
ele passar Em outras palavras,
precisamos
descobrir uma maneira de dizer ao liquidificador: Ei,
liquidificador, queremos que você aumente a velocidade
a
cada momento que passa Como, por exemplo,
no quadro um, mova esse ponto
10 metros para baixo. No quadro dois, mova esse ponto
em zero 15 metros para baixo. Estará a menos
020 5 metros. No quadro três, mova esse
ponto em zero 2 metros para baixo. Estará a -0,45 metros. A chave para obter aceleração, para tornar a distância
percorrida com cada quadro cada
vez maior. Pense sobre isso. Se a bola estiver se movendo na
mesma distância a cada quadro, você terá uma velocidade constante. Mas quando ele acelera
ou desacelera, isso significa que a
distância percorrida com
cada quadro está
ficando maior ou menor Se a distância for maior, isso significa
que está acelerando, se a distância está
ficando menor, significa
que está acelerando A solução para implementar a aceleração em nosso
sistema é descobrir uma maneira de dizer ao liquidificador que
aumente ou diminua esse valor com o tempo Para fazer isso, há um conceito importante que
você precisa entender. O que são atributos. É sobre isso que
falaremos no próximo vídeo.
7. O que é um atributo: O que é um atributo?
Se você verificar o manual do liquidificador para
saber o que é um atributo, encontrará a
seguinte definição Um atributo é um termo
genérico para descrever dados armazenados por elemento
em um bloco de dados de geometria Veja como eu quero que você
pense sobre isso. Imagine uma geometria de três D. Essa geometria pode ser tão
simples quanto um ponto, como em nosso exemplo ou em qualquer
outro objeto de três D. Atributos são dados anexados
aos três objetos D que definem certas
características desses três objetos D.
Por exemplo, se eu pular para o espaço de trabalho
dos meus nós de geometria e sair da planilha, vou pular para o ponto porque
a única geometria que tenho
agora Aqui você poderá ver todos os diferentes atributos
associados a essa geometria Primeiro de tudo, você
tem o índice. Nesse caso, é zero. Mas se eu aumentar o
número de pontos, por exemplo, para cinco, cada ponto terá um índice. O número do índice
é um atributo. No caso do índice,
o atributo é o número que se refere ao índice
de cada ponto. Você também tem o atributo de
posição que define a localização
desse ponto específico. Você também tem o
raio desse ponto. Esse também é outro atributo. Os atributos são como
um cartão de identificação que define as características
de um elemento no liquidificador É por isso que a melhor maneira
de pensar em atributos, como eu disse, é que eles sejam um bloco de dados anexado ao objeto de três D, que define certas
características desse objeto de três D. Agora, esses são os atributos que vêm por padrão
com o ponto. O bom é que o Blender nos
permite criar
nossos próprios atributos. Se eu for adicionar atributos, armazenar o atributo chamado,
terei esse nó que vou conectar logo
após a entrada da simulação. A loja chamada
attribute node
permitirá que eu crie
meus próprios atributos. Posso começar
especificando o tipo. No nosso caso, velocidade e
aceleração são vetores. É por isso que vou mudar o tipo de dados de
flutuante para vetor Em seguida, vou dar um nome a
esse atributo. Você pode chamá-lo do que
fizer sentido para você, mas para manter tudo claro, vou chamá-lo de velocidade Agora, se eu voltar
para a planilha, você notará que agora temos outro atributo
chamado Se eu selecionar o
atributo chamado loja e clicar em vazio para silenciá-lo, observe como essa propriedade
desaparecerá do editor de
planilhas Espero que pelo menos agora você tenha uma ideia do que é um atributo. É um bloco de dados anexado
a um objeto de três D. Mas você pode estar se perguntando como isso pode
ser útil? Bem, agora que temos a velocidade
como um atributo, podemos começar a fazer
várias operações interessantes com ela, como alterá-la
a cada quadro que passa Porque lembre-se,
esse é nosso objetivo fazer a velocidade aumente
ou diminua com o tempo, o que nos dará aceleração Em nossa árvore de nós atual, a velocidade é constante Se pensarmos no que
está acontecendo em cada quadro, Blender mudará a
posição desse ponto pela quantidade especificada
do nó de
posição definido Além disso, como você pode ver, esse soquete de deslocamento é um vetor, pois tem três valores e tem o soquete roxo de
diamante Tecnicamente, se
quisermos ser mais precisos, esse soquete de deslocamento representa a taxa de mudança
em cada quadro,
que mencionamos
anteriormente, ou seja, Algo simples
que posso fazer é adicionar um nó chamado vetor e
conectá-lo ao deslocamento Eu não fiz nada extravagante. Acabei de substituir o
deslocamento por esse vetor. Se eu escrever -0,1 no
eixo z do nó vetorial, pressione play, obterei exatamente
o mesmo resultado Este nó vetorial agora
está representando a velocidade. Para ir ainda mais longe, excluirei
esse nó vetorial e adicionarei um nó
chamado attribute chamado attribute, que me permitirá
invocar um determinado atributo O atributo que eu
quero invocar é um vetor e seu nome é velocidade Esse atributo de velocidade
que estamos chamando é exatamente
o mesmo atributo que
criamos usando a loja
chamada attribute node Qual é a natureza
desse atributo de velocidade? É um vetor, que é a natureza exata do soquete de
deslocamento, então eu posso conectar o atributo
nomeado ao deslocamento. Se eu apertar play, nada acontecerá porque esse
vetor de velocidade é basicamente todo zeros. Como eu sei disso? Porque na loja
chamada attribute, não
especificamos os valores
desse vetor de velocidade Se eu escrever -0,1 no eixo
z e clicar em play, você obterá
exatamente a mesma coisa que tínhamos antes Aqui está a lógica do
que está acontecendo. Criamos um vetor
que chamamos de velocidade e ele tem os seguintes valores Então, em nossa árvore de
nós, podemos
invocar ou chamar o vetor que
criamos e usá-lo
em vários lugares Portanto, esse nó de atributo nomeado está procurando por um vetor
chamado velocidade, que é definido por essa
loja chamada nó de atributo É como se tivéssemos criado um vetor, agora o estamos usando em vários
lugares na árvore de notas. No futuro, se eu quiser
alterar o vetor de velocidade,
tudo o que preciso fazer é alterar valores no atributo chamado
da
loja, e essa alteração se
espalhará por toda a árvore de notas porque
usarei
o nó do atributo
nomeado em
todos os lugares da minha Agora que mudamos um pouco nossa árvore de notas e criamos
o atributo velocidade, e no próximo vídeo, vamos criar o atributo de
aceleração
8. O atributo de aceleração: Atributo de aceleração. Como mencionei antes, aceleração é a
mudança na velocidade Então, se quisermos implementar
aceleração em nosso sistema, precisamos descobrir uma maneira de
fazer a velocidade
mudar com o tempo Queremos dizer ao liquidificador que
aumente a taxa de alteração. Em outras palavras, queremos aumentar
a distância percorrida pelo ponto de
quadro a quadro. Por exemplo, no quadro zero, o ponto está em 0,0. No primeiro quadro,
empurre-o 10 metros para baixo. Estará a menos 10 metros. Em seguida, empurre-o em
zero, 15 metros para baixo, para que fique a
menos 020 5 metros, e depois empurre-o em
zero Então, será a menos
zero, 45 metros. Ao fazer isso, como você pode ver, a distância percorrida
pelo ponto a cada momento que passa está
aumentando gradualmente, o que significa que está acelerando Então, como podemos programar
isso em nós no liquidificador? Bem, isso é simples. Então foi aqui que
paramos da última vez. Temos esse
atributo chamado loja que define um atributo chamado velocidade
que tem esses valores
e, posteriormente, usamos esse atributo de
velocidade ou esse
vetor de velocidade aqui Estamos chamando isso desse nó e o usamos para
atualizar a posição, e isso está
nos dando uma velocidade constante. O que queremos fazer, como eu disse, é fazer com que esse vetor de velocidade aumente seus valores com o tempo Alguns de vocês podem sugerir
que eu possa estruturar essa propriedade aqui e
adicionar alguns quadros-chave, e poderei animar
esse valor com o tempo E essa é, na verdade,
uma abordagem viável. O que queremos fazer é construir um motor de física que possa
cuidar de tudo. Farei algo que
soará um pouco contra-intuitivo no início,
mas vou explicar. Vou adicionar um atributo
nomeado. Como você se lembra, esse
nó me permitirá
chamar ou invocar um determinado
atributo que eu criei Nesse caso, vou chamar um vetor, que é velocidade É exatamente o mesmo vetor que
este nó está criando. É o mesmo atributo e vou
inseri-lo no valor. Como eu disse, isso pode
parecer contra-intuitivo. Então, basicamente, esse nó
está definindo uma propriedade chamada velocidade que
tem esse valor Nesse valor, estou inserindo
um atributo
chamado velocidade É literalmente o
mesmo atributo. É como o meme
do cara despejando água em si mesmo
enquanto está na piscina Você provavelmente pode
adivinhar que o liquidificador lê a árvore
de notas da esquerda para a direita, então ela começará
com os pontos entrará na zona de simulação Armazene o atributo nomeado
e, para cada nó, ele começará de
cima para baixo. Primeiro, ele
lerá o ponto vetorial, depois lerá a geometria, depois essa eleição e, em
seguida, criará uma propriedade chamada velocidade ou um atributo chamado Para o valor,
conectei a velocidade
e, sempre que você
conectar um atributo ao nó que está
criando o atributo, o blender assumirá
um valor zero É por isso que agora, se eu pressionar a barra de
espaço para tocar,
nada acontecerá. O ponto permanecerá
no mesmo lugar, porque essa conexão que
fiz aqui, conectando o atributo
velocidade à loja
chamada attribute que o define, me
levará Então, nada vai acontecer. Mas
o mais legal agora é que, se eu adicionar o deslocamento A e
procurar a matemática vetorial, e eu o inserir logo
após o atributo nomeado, agora o Blender pegará
o vetor de velocidade, que é zero em nossa
situação, adicionaremos a ele um valor que
especificarei aqui, e esse será meu
novo valor de velocidade ou
meu novo vetor de velocidade que usarei posteriormente Digamos, por
exemplo, que eu digite -0,1. Agora tente pensar no
que vai acontecer. No quadro zero, é claro,
nada acontecerá. Vou abrir minha linha do tempo
e, para organizar melhor
meu espaço de trabalho, vou reduzir
isso para isso, e vou adicionar
outro editor aqui, e vou alterá-lo
para a janela de visualização em três D, e vamos
reduzi-lo assim Isso me dará mais
espaço aqui na minha tentativa de anotações. Eu tenho aqui na linha do tempo e posso me mover aqui
na minha janela de visualização em três D. E como estamos trabalhando
agora em apenas duas dimensões, vou pressionar uma no teclado numérico para pular
para a vista frontal. Então esse será meu
espaço de trabalho. Eu acho que isso é melhor. Talvez até eu vá
arrastar isso um pouco para ter mais
espaço na minha tentativa de anotações. Como eu disse, agora, no quadro
zero, nada acontecerá. O ponto está na posição
inicial de zero ou, na verdade, de 5 metros, mas assumimos que seja zero. No primeiro quadro, o Blender
pegará o vetor de velocidade, que tem
o valor zero, adicionará -0,1,
e esse será o
meu vetor de velocidade que usaremos posteriormente para e esse será o
meu vetor de velocidade que atualizar Então, agora no primeiro quadro, liquidificador moverá esse
ponto em 10 metros para baixo. Olha, boom. Então isso é 01. No segundo quadro, digamos que o liquidificador execute
o ciclo novamente. Mas qual é o valor desse nó de
velocidade agora? É zero ou é menos 01? Essa é a coisa importante que você precisa ter em mente, que é que esse
nó agora manterá o valor
do estado anterior. Neste momento, esse nó contém um atributo de velocidade
que não é 000 Na verdade, é 00 menos 01. Agora, quando
adicionarei menos 01, esse novo
vetor de velocidade que
obterei daqui
não será menos Será menos 02, e observe o que vai acontecer Agora,
a distância percorrida no quadro dois é um pouco maior. Na terceira vez para o
quadro número três, qual é o valor desse? É o
valor da velocidade anterior, que é menos 02. Agora vou adicionar menos 01, então terei menos 03, e essa será minha nova velocidade que usarei para
mudar a posição Então, agora a lacuna está
ficando maior. Estou no quadro três.
No quadro quatro, esse vetor de velocidade não
será zero Como eu disse, será menos 03, e quando eu adicionar menos 01, estará em -0,4, e é
isso que vou usar
para atualizar a posição Estrondo. Agora, se eu apertar play, você notará que a bola
cairá um pouco mais rápido quanto mais tempo ela passar caindo Deixe-me diminuir um pouco
para ver completamente o que acontece. E se eu apertar play,
como você pode ver, agora temos algo
parecido com uma bola caindo A chave para isso é esse pequeno
truque que fizemos aqui. Pegamos a velocidade
do estado anterior, adicionamos a ela um certo valor
e, como é um liquidificador baixo toda vez que
executa a simulação, adicionamos menos 01 no eixo z
ao
estado anterior do vetor de Espero que isso faça sentido. Agora, esse vetor
que estou adicionando aqui, esse vetor é na verdade
o vetor de aceleração. Esses valores são os
que definem o quanto você deseja que o liquidificador aumente a velocidade
a cada momento
que passa Na verdade, isso é aceleração. Como eu também quero que a
aceleração seja um atributo, porque
vou usá-la mais tarde, vou adicionar
outro nó
agora chamado store named
attribute, shift ,
store named attribute, e
vou armazenar um vetor que
chamarei de aceleração que
tem esses valores. E eu vou
usá-lo aqui, então procure o atributo nomeado. Vou
procurar um vetor que acabei de criar
chamado aceleração. Onde está a aceleração? Está bem? É um vetor
chamado aceleração. E eu vou conectá-lo aqui. Nada acontecerá
porque essa aceleração é zero. Como eu sei disso? Porque no nó que o define, eu não especifiquei qual valor esse vetor
deveria ter. Se eu voltar ao
quadro número um e apertar play, nada acontecerá porque a
aceleração é zero. Não estou adicionando nada.
Nada vai mudar. É por isso que vou
digitar menos 01. Mamãe. E agora, se eu clicar em play, você obterá exatamente a
mesma animação ou simulação que acabamos de ter. Portanto, esse
atributo chamado loja definirá um
vetor chamado aceleração. E toda vez
que executamos a simulação no Blender, estamos adicionando esse valor
à taxa de variação Em outras palavras, cada quadro ou sempre que o liquidificador
executa a simulação Isso é o quanto o liquidificador
aumentará a distância
percorrida pelo ponto Toda vez que a distância
aumentará em menos 10 metros. Sei que pode ser um pouco confuso porque
estamos usando menos, mas lembre-se sempre de que
o principal motivo pelo qual estamos usando menos é porque
estamos É por isso que precisamos
do sinal de menos. Então, este é o nosso notário atual. Espero que faça sentido. Agora temos uma simulação de
ponto de queda, eu acho. Mas, na verdade,
há um pequeno problema
nessa simulação que precisamos
corrigir no próximo vídeo.
9. O problema da Delta-t: Problema do Delta T. Algo que
eu mencionei antes é que as simulações no blender
são avaliadas em cada quadro Isso causará um pequeno problema. Nossa taxa de quadros atual
é de 24 quadros por segundo. Isso significa que o
liquidificador executará a simulação 24
vezes em 1 segundo Vou voltar para o espaço de trabalho
dos nós de geometria, Se eu clicar na placa para armazenar
a simulação em cache e
depois ir para o quadro 24, aqui está a localização
do ponto. 0 -25. Agora, digamos que eu queira que a
animação final seja mais suave. Então, decidi aumentar a taxa de quadros para 60
quadros por segundo Depois de 1 segundo,
quantas vezes
você acha que o Blender
executará a Você adivinha certo, 60 vezes. Se eu bater na placa para pegar a simulação e
ir para o quadro 60, observe a localização
do ponto. 0 -178. Eu sei que isso pode ser confuso,
então, para esclarecer
a questão, aqui está o que acontece
na vida real. Imagine que você está jogando uma
bola de um lugar alto. Digamos que a bola leve 3 segundos até
tocar o chão e você tenha duas câmeras, uma gravando a 24 quadros por segundo e outra a
60 quadros por segundo Jogue a bola. Em 1 segundo, a bola estará nesse nível. O importante
é notar que as duas câmeras capturarão a
bola na mesma posição. A única diferença é que a câmera de 24 FPS
gravou apenas 24 quadros Em outras palavras, ele registrou a bola em 24 posições
diferentes. Enquanto isso, a
câmera de 60 FPS gravou 60 quadros. Em outras palavras, ele registrou a bola em 60 posições
diferentes. O momento é sempre o mesmo. A única diferença
é a taxa de quadros. O que deve acontecer no
Blender é o seguinte. Após 1 segundo, o
ponto deve estar
na mesma posição, independentemente
da taxa de quadros. Então, como podemos resolver esse problema? A melhor maneira de explicar a solução é
fazendo algumas contas. Mas eu prometo, não
será tão complicado. Algo que mencionei
antes é que velocidade é a taxa de
mudança na posição no tempo Uma forma de traduzir
essa afirmação em uma função matemática
é a seguinte. V, que é a velocidade
igual a Delta P sobre Delta T. Eu gostaria que você pensasse
na palavra Delta como a mudança P significa posição
e t significa tempo. Dizemos que a velocidade é Delta P, a mudança de posição Sobre Dilta T, a
mudança no tempo. Agora, e quanto à aceleração? Como você se lembra, a aceleração é a taxa de variação da
velocidade ao longo do tempo Uma maneira também de escrever isso como
uma fórmula é a seguinte. Aceleração A
igual, Delta V sobre delta t. Dizemos que a
aceleração é Dilta V, a mudança na velocidade,
sobre Dilta T, o Em nossa árvore de nós atual, Delta t é uma variável que muda
dependendo da taxa de quadros. Se a taxa de quadros for 24, então Delta t é igual a 1/24, e se a taxa de quadros for 60,
então Delta T é igual a 1/60 então Delta T Queremos que o tempo
de nossa simulação
seja o mesmo, independentemente
da taxa de quadros. Com base na primeira equação, velocidade é igual a Delta
P sobre Delta T,
pode-se concluir que Delta P é igual à velocidade
multiplicada por
Delta T. Com
base na segunda equação, A, aceleração é igual a
Delta
V Podemos concluir que Delta V, a mudança na velocidade
é igual à aceleração,
multiplicada por Delta T, a mudança no tempo A matemática é muito simples. Tudo o que fizemos
agora foi expressar
tanto a mudança na posição
quanto a mudança na velocidade
em função do Delta
T. Isso fará Blender considere a
taxa de quadros ao executar a taxa de quadros ao executar Como podemos traduzir essa lógica na
árvore de nós. Isso será simples. Vamos começar primeiro com a mudança de
posição do Delta P igual à velocidade multiplicada pelo Delta
T. Qual é o nó responsável por mudar a posição
do É o nó da posição definida, e essa parte da
equação é a que precisamos calcular e
inserir no soquete de deslocamento No momento, é apenas
o vetor de velocidade. Com base na equação, precisamos multiplicar
a velocidade pelo Delta T. Você precisa
adicionar um nó matemático vetorial, alterar a operação
para multiplicar
e multiplicá-la pelo Delta T, que você pode obter
do primeiro nó da zona de simulação Além disso, você pode definir a operação desse
nó matemático vetorial em escala e ele fará exatamente a
mesma coisa. Usamos a multiplicação ao
lidar com dois vetores, mas como o tempo Delta
é um número simples, podemos alterá-lo para escala Você pode usar esse
sempre que estiver multiplicando um vetor
por um único número Eles também são chamados de
escalares no liquidificador. Daí a escala de nomes
para a operação. Ok, agora estamos compensando
a mudança de posição
com base em nosso tempo Delta, que é baseado em
nossa taxa de quadros. Agora precisamos fazer a mesma coisa para a segunda operação. Delta V, a mudança
na velocidade é igual ao
vetor de aceleração multiplicado pelo Delta T. Onde
estamos definindo V, a mudança na velocidade? Bem, estamos definindo a mudança na velocidade usando esse primeiro atributo chamado
loja O responsável por
criar a aceleração. Lembre-se sempre de que os valores que
estamos usando para o vetor de
aceleração são responsáveis pelo quanto nossa velocidade está aumentando
a cada quadro Então, o que posso
fazer é inserir um vetor no valor dessa
loja chamado attribute
e, por padrão, o Blender
manterá os mesmos valores A equação, Delta
V igual aceleração multiplicada por Delta T, o que vamos inserir no soquete de
valores do atributo
chamado loja define a
taxa de mudança na velocidade, que é igual à
aceleração que é esse nó vetorial, e precisamos multiplicá-lo por Delta T. Tudo o que você precisa fazer
é adicionar um nó matemático vetorial,
alterar a operação para escala, alterar a operação para escala e multiplique por Delta T, que você pode obter do
primeiro nó
da zona de simulação, como
mencionei antes É assim que podemos
implementar a lógica
das equações que
expliquei no notário Como resultado disso,
nossa simulação agora se adaptará
à taxa de quadros
e permanecerá consistente, independentemente da taxa de quadros. Para ter certeza de que é esse o caso, se eu clicar em play, primeiro você notará que a
animação está muito lenta. Como nossa simulação agora é
baseada no tempo da vida real, não em números de quadros, precisamos começar a usar valores da vida
real
para esses vetores É o valor da gravidade
na vida real. É -9,8 Certifique-se de usar esse valor para o vetor de aceleração, pois é assim
que os objetos
aceleram ao cair Portanto, é sempre bom usar os
valores da vida real, pois isso significa que nossa simulação
será mais realista. Agora, nossa
taxa de quadros atual é de 24 FPS. Então, vamos executar a simulação
clicando em play. Vá para o quadro 24, que significa 1 segundo
na simulação, e veja a posição
do ponto. Está em 0,304. Agora, vamos alterar a taxa de
quadros para 60 FPS, executar a simulação novamente
e ir para o quadro 60, que também significa 1 segundo na
simulação, porque
apenas alteramos a taxa de quadros e lemos a posição
desse ponto, e ele está em 0182 Os valores estão próximos, mas não são os mesmos. Por que isso? Sem
entrar nos detalhes mais minuciosos
de por que isso está acontecendo,
tudo o que você precisa fazer é
que sempre que estiver fazendo esse tipo de
simulação no Blender , sempre haverá E isso se deve ao método de
integração do lubrificador usado no Blender Posso passar horas
tentando explicar quais são os métodos de integração do lubrificador e todos os problemas com eles Mas isso será
demais para lidar. Então, tudo que você precisa
saber é que sempre
haverá uma margem de erro com a qual precisamos lidar
ao fazer esse tipo de
simulação no Blender Além disso, preciso mencionar que
existem outras maneiras de
integrar outros métodos de
integração no Blender usando nós, mas vamos explorar as coisas mais avançadas
dos nós
de geometria E, na verdade, não
se trata nem mesmo nós de
geometria, mas de matemática
literalmente pura E esse não é o
tópico principal do curso. É por isso que sacrificaremos um
pouco de estabilidade e aceitaremos um grande erro de margem
por uma questão de simplicidade. E agora que nossa simulação
é independente da taxa de quadros, precisamos fazer com que essas
bolas basicamente saltem do chão
introduzindo algumas restrições, o que faremos
no próximo vídeo
10. Como adicionar restrições Pt.1: Adicionando restrições
Parte um, o piso. Nosso ponto de vista agora continuará
caindo para sempre, basicamente. Precisamos descobrir uma
maneira de dizer ao liquidificador: ei,
liquidificador, uma vez que a ponta
chegue ao chão, faça com que ela se equilibre Este será um exercício divertido. A primeira pergunta
que vem à mente é quando o ponto
chega ao chão? A resposta é simples.
Uma vez que a posição do ponto seja igual
ou abaixo de zero. Agora, se eu voltar para a
frase, ei, liquidificador. Quando nosso ponto
atinge o chão, queremos que ele se equilibre, podemos alterá-lo para a seguinte
frase. Olá, liquidificador Quando a posição do nosso ponto for igual ou menor que zero, queremos nos equilibrar no
chão. Agora vem a segunda parte. Como podemos fazer isso
ricochetear no chão? A solução mais
fácil será reverter todas as forças aplicadas em nossa
ponta ou em nossa bola. No momento, nossa simulação está
fazendo a questão cair. Então, tudo o que precisamos fazer é dizer
ao Blender que, uma vez que o ponto atinja o chão,
inverta a simulação Em outras palavras, inverta
a velocidade e a posição. Para entender isso completamente, quero explicar a arquitetura
do nosso mecanismo
de simulação. Primeiro definimos
a aceleração. Árvore usada para definir
a velocidade, que usamos para
atualizar a posição Em certo sentido, é bastante sistemático
ou algorítmico. É um processo passo a passo. Agora diremos ao Blender que, se a posição do
ponto for menor que zero, inverta a velocidade e inverta a posição
do Isso fará com que o
ponto suba. É como se estivéssemos construindo
um minimotor que
entrará em ação quando a posição
do ponto for menor que zero. Vamos traduzir todos
esses pensamentos em nós. O primeiro passo para construir nosso mini motor é saber
quando esse motor entrará em ação. Eu disse isso várias vezes. Quando a posição do
ponto for menor que zero, começarei adicionando
um nó de posição. Nos dará a
posição do ponto e, em
seguida, adicionarei um nó chamado x y z separado porque precisamos apenas da
posição no eixo z, pois é o
responsável por definir a posição
do ponto para cima e para baixo. Adicione um nó de comparação e
defina-o para menos de zero, e essa é a nossa condição. Uma forma de ler a lógica
desses nós que criamos
é a seguinte. Quando a posição no eixo
z for menor que zero, faça alguma coisa. Agora
vamos construir o que deve acontecer quando essa
condição for verdadeira. Isso deve ser simples, porque
tudo o que precisamos fazer é operar o mesmo motor que
construímos ao contrário, o que podemos fazer facilmente
multiplicando-o por menos Primeiro, precisamos
reverter a velocidade. O ponto costumava descer, agora precisa subir. Como podemos atualizar a velocidade? Fácil. Adicione uma loja
chamada attribute, altere o tipo para vetor e precisamos de velocidade Tudo o que escrevermos
aqui agora substituirá os valores que tínhamos anteriormente
para o vetor de velocidade Em seguida, adicionarei um atributo nomeado. Velocidade vetorial. Isso me dará
o valor
da velocidade do quadro anterior e eu o
multiplicarei por menos um no eixo z e um
no eixo x e y, pois não quero que
eles mudem porque
multiplicar por um sempre
levará ao multiplicar por um sempre
levará E eu vou conectar isso
ao soquete de valor do atributo chamado
tempestade Agora invertemos o vetor de
velocidade. Vamos atualizar
a posição, que a bola vá
na direção inversa. Vou adicionar um nó de posição definida, adicionar um nó de posição, adicionar uma matemática vetorial e
multiplicá-la por menos um no eixo z. E um nos
eixos x e y e
conecte-o diretamente na posição, porque queremos
mudar diretamente a posição,
não apenas o deslocamento E agora, esse é o nosso mini
motor responsável por reverter a simulação se
o ponto ficar abaixo de zero Mas, no momento, o Blender
ainda não sabe quando operar o pequeno
motor porque precisamos
conectar nossos nós que definem a condição
no soquete de seleção
do atributo
chamado da loja e
na Então, agora,
essas duas operações de alterar a velocidade
e mudar a posição só
serão executadas quando
essa condição for atendida Se eu clicar em play agora,
observe o que vai acontecer. Nosso argumento é saltar, e é assim que podemos introduzir restrições A bola agora vai
quicar para sempre, mas na vida real, ela deve perder energia lentamente
até parar A maneira de contornar isso
será dizer ao liquidificador que diminua a
velocidade gradualmente Você pode fazer isso aumentando
o vetor de velocidade,
então, em vez de
multiplicá-lo por menos um,
que é uma reflexão perfeita, você o multiplica por -0,8, por
exemplo Agora, a simulação
perderá vapor lentamente sempre que
tocar o chão Até que pare. A
forma como programamos atrito agora só se aplica quando essa
condição é Uma vez que a bola toca o chão. Mas na vida real, a bola deve
realmente perder velocidade gradualmente desde o início
da simulação. Uma maneira de contornar isso é adicionar um nó vetorial de metanfetamina,
configurá-lo em escala
e conectá-lo logo antes
do atributo chamado loja, e conectá-lo logo antes
do atributo chamado loja definindo a velocidade e definindo o valor como
algo como 0,98 Agora, a simulação
perderá energia geral ou em cada quadro. Por quê? Porque, como sabemos, o Blender compila a simulação em
cada quadro Para nossa simulação,
excluirei o nó de escala e programarei o
atrito dos nós responsáveis pelas
restrições em um Agora construímos o
sistema de restrição para o piso. Também precisamos criar algumas restrições
para as paredes laterais, e é exatamente isso que
faremos no próximo vídeo
11. Como adicionar restrições Pt.2: Adicionando restrições para
dois, as paredes laterais. No vídeo anterior,
criamos a restrição de piso, que permitirá que
a bola salte do chão Neste vídeo,
criaremos algo semelhante. Construiremos as restrições
para as paredes laterais,
direita e esquerda, frente e Para que todos nós
estejamos na mesma página, certifique-se de pressionar um no teclado numérico para pular
para a vista frontal. Começaremos criando as restrições para
a parede direita Digamos que queremos que a
bola ricocheteie em uma parede imaginária que está a
1 metro de distância. Por aqui. O conceito é muito parecido com o que fizemos para o chão. Precisamos descobrir uma maneira dizer
ao Blender que, se a bola tocar essa parede imaginária,
reverta Ou, para usar a analogia
do minimotor, vamos criar
um pequeno motor de física que entrará em ação se a
bola tocar a parede direita Vamos começar com a condição.
Isso deve ser simples. O ponto toca a parede. Se a posição no eixo x
for igual ou maior que uma. Adicione o nó de posição para ler a posição de um ponto
específico. Em seguida, adicionarei um xyz separado Tudo o que me importa é o eixo x, que deve ser
maior que um. É minha condição. Agora, passamos ao que deve acontecer se essa
condição for verdadeira. Queremos reverter
a simulação, então invertemos a primeira velocidade
e depois a posição Em vez de criar todos
esses nós do zero, vou simplesmente copiar a configuração
da restrição de piso e
conectá-la assim Para a multiplicação da velocidade, certifique-se de mudar o eixo
z de volta para Mude o eixo x para menos um, porque agora estamos
trabalhando no eixo x. Eu farei a mesma coisa para multiplicar a posição Vou mudar o eixo z de volta para um e mudar o
eixo x para menos um, além de me certificar de
conectar a condição ao atributo chamado store
e à posição definida Essas operações só
entrarão em ação se essa
condição for atendida. Agora, se eu apertar play, a bola cairá
direto para baixo. Eu quero empurrá-lo
um pouco para a direita. Vou logo após
o nó de pontos, o primeiro nó da minha árvore, e adicionarei o atributo
chamado loja. Isso é um vetor, e
eu vou escolher a velocidade, e à direita, por exemplo,
duas no eixo x. Agora, o
vetor de velocidade começará em dois, que significa que o ponto
será empurrado levemente para a direita
e, dessa forma, podemos testar
nossa restrição de parede que acabamos É como se tivéssemos criado uma
velocidade inicial para o ponto, que ele não começasse do zero Se eu apertar play, o ponto
tocará a parede direita, mas está agindo de forma estranha De alguma forma, ele salta para o
outro lado. Por que isso? Bem, se focarmos
nesse nó de posição, você notará que o estamos
multiplicando por menos um Então, digamos que, hipoteticamente, a posição do ponto em um determinado quadro esteja em
0,9 no eixo x. A simulação
continuará funcionando normalmente porque não
tocamos em uma linha. No próximo quadro, a posição
da bola está em uma, o que significa que a
condição agora foi atendida, o que significa que o Blender executará essas operações que lhe dirão
para reverter a simulação Então, agora a bola também deve
estar aqui em 0,9 no eixo x. Mas como estamos multiplicando a posição no eixo
x por menos um, salta para o outro lado
para -0,9 no A solução para isso é simples. Precisamos trazer essa bola
duas unidades para a direita, o que podemos fazer adicionando
um nó vetorial de metanfetamina, configurá-lo para adicionar e vamos
adicionar duas no eixo x. E agora, se eu apertar play, você notará que o ponto salta perfeitamente
da parede direita, e essa é a nossa restrição
para a Agora vamos criar a
restrição para a parede esquerda. Isso deve ser simples.
Vou duplicar toda a restrição da parede
direita e
conectá-la depois dela dessa forma A parede esquerda é
a linha negativa. Quando a bola
toca a parede esquerda? Ou a linha menos uma, quando a posição for igual
ou menor que menos um, mudarei minha condição
para quando a posição no eixo x for
menor que menos Então essa é minha nova condição. O que deveria acontecer é
revertermos a velocidade multiplicando-a
por
menos um no Então, vou manter esses
nós do jeito que estão, e para a posição definida, vamos
multiplicá-la por menos Precisamos corrigir
isso adicionando dois. No caso da parede esquerda, como estamos multiplicando por
menos um no eixo x,
isso significa que a bola
agora pulará para o lado direito, então precisamos movê-la
duas unidades para trás, que podemos fazer facilmente Tudo o que você precisa fazer é alterar esse nó matemático vetorial
de adicionar para subtrair. Agora, se eu apertar play,
você verá como nosso ponto está saltando da parede direita e esquerda, e é exatamente isso que queremos Agora criamos a restrição para a parede direita e esquerda Faremos exatamente a mesma coisa apenas para a parede frontal
e traseira. Em nossa janela de visualização em três D, agora
estamos vendo a
vista frontal, que significa que essa é a parede
direita e esquerda Se eu acertar três
no teclado numérico, vou pular para a vista lateral, o que significa que agora esta é a
frente, esta é a parte de trás. Outra forma
de pensar nisso anteriormente, estávamos trabalhando
ao longo do eixo x. Se eu pressionar um
no teclado numérico, você verá a linha vermelha
que representa o eixo x. Agora, se eu
acertar três no teclado numérico, pularei para a vista lateral e trabalharei
ao longo do eixo y agora. Criar restrições para ambos será muito Vou apenas duplicar toda
a configuração da
parede direita e esquerda e alterá-la
de funcionar com base no eixo x
para o eixo y. Vou selecionar
esses dois grupos de nós e pressionar D para
duplicá-los Vou conectá-los assim. Vamos começar com a parede direita , que agora é a parede frontal. Altere o valor proveniente
do eixo x y
z separado para o eixo y. Deve ser igual
ou maior que um. Se essa condição for atendida,
faremos o seguinte. Pegue a velocidade e
multiplique por menos um no eixo y agora e
mude
o eixo x de volta para Para a posição, a mesma coisa, multiplique por menos um no eixo y e mude
o eixo x de volta para E como também precisamos
considerar a correção, agora
precisamos adicionar dois
no eixo y e escrever
zero no eixo x. Essa é a restrição
para a parede frontal. Agora vamos passar para a
restrição da parede traseira. Eu farei uma coisa parecida. Altere o valor que sai
do eixo x y
z separado para o eixo y. Deve ser igual ou
menor que menos um. E se essa condição for atendida,
faremos o seguinte. Pegue a velocidade e
multiplique por menos um no eixo y agora e
mude
o eixo x de volta para Para a posição, a mesma coisa, multiplique por menos um no eixo y e altere
o eixo x de volta para E como também precisamos
considerar a correção, agora
precisamos subtrair dois
no eixo y e escrever
zero no eixo x. E é assim que você constrói a restrição tanto para
a parede frontal quanto para a traseira Agora, se eu voltar
para a primeira loja chamada node de atributo
que está nos dando alguma velocidade inicial
e der ao nosso ponto também alguma velocidade inicial
no eixo y e clicar em play, você verá nosso ponto saltando Ok, então é assim que você pode criar algumas restrições
para sua No próximo vídeo,
substituiremos esses pontos por algumas
esferas, basicamente ou taças, que introduzirá
um novo conjunto de desafios que
precisamos superar
12. Raio: Adicionando o raio.
Neste momento, estamos executando nossa
simulação com base em pontos. Como mencionei antes, os pontos no Blender são apenas contêineres de
dados que podemos trocar
posteriormente com outros objetos O que queremos fazer neste
vídeo é basicamente substituir esses pequenos pontos por
esfera ou qualquer objeto. Se eu for até o final
da minha árvore de nós e adicionar um nó chamado
instance on points, eu o conectarei logo antes
do nó de saída do grupo. Essa instância no
nó de pontos substituirá o ponto por uma instância ou um objeto de três D que
escolheremos. Eu quero substituir esses
pontos por esfera. Vou adicionar uma esfera U. E vou conectá-lo ao soquete
da instância. E como você pode ver, nosso ponto agora
é substituído pela esfera. Para o raio
dessa esfera UV, eu queria herdar o
raio dos pontos,
que podemos especificar a
partir do nó de pontos, o primeiro nó do notário Uma maneira de contornar isso é
adicionar o nó radius e conectá-lo à escala da instância
no nó de pontos E agora, se eu mudar o
raio dos pontos, também
mudarei o raio das instâncias ou
das Agora, se eu apertar play,
você notará como nossa esfera está saltando
do chão e das paredes laterais Mas se você se concentrar,
notará um pequeno problema. Ou um grande problema, dependendo de como você o vê. Você notará que quando a
esfera toca o chão, parte da esfera fica abaixo linha
do piso. Por que isso? Bem, já que estávamos lidando
com pontos anteriormente, eu disse que eles são
apenas contêineres de dados, então eles não
têm realmente um raio Agora que substituímos
esses pontos esferas que têm uma geometria real de
três D e têm um raio, precisamos considerar isso
em nosso mecanismo Em outras palavras, precisamos
descobrir uma maneira tornar nossa árvore de nós
ciente do raio, para que ela o considere ao
executar a simulação Será simples. Eu prometo. Vamos começar primeiro com a
restrição do piso. Quando a esfera
toca o chão? Isso deve ser fácil de responder. Quando a posição é
menor que o raio. Lembre-se sempre de que
a posição é avaliada a partir do
ponto central de um objeto. Quando a posição
ou o centro
dos três objetos D é
menor que o raio, isso significa que o
objeto três D está tocando o chão Para a restrição de piso, tudo o que preciso fazer é adicionar um nó de raio e conectá-lo
na operação menor que Agora, se
a posição
da esfera for
menor que o raio, faça as seguintes operações Se eu clicar em play, tudo
correrá bem. Parece que a bola está
saltando do chão. Mas se eu mudar o
raio do ponto para algo como 0,5 metro,
por exemplo, e apertar play
novamente para pegar a simulação, você verá algo estranho Agora, a bola, por qualquer motivo vai para baixo do chão
antes de quicar Por que isso? Bem,
você vê que o Blender está fazendo todo o cálculo com base no centro
do objeto É importante enfatizar que todas as operações que estamos fazendo aqui são todas
baseadas nos pontos que criamos. Esses pontos só se tornam
esferas no final do notário quando usamos a
instância em pontos conhecidos Então, até este
ponto do notário, ainda
estamos lidando com pontos, que significa que o Blender está
vendo pontos aqui, Então, como solução para isso, podemos dizer ao Blender
o seguinte Se a bola tocar o chão, mova-a para baixo na quantidade
do raio,
faça a correção
e, em seguida, coloque-a volta. Isso terá a seguinte
aparência nos Vou adicionar um
nó de raio e conectá-lo a um nó XY Z combinado
no eixo Z. Estamos fazendo várias
operações em vetor, é por isso
que preciso
converter esse raio, que é um
valor único, em um vetor Eu quero mover a posição para baixo na quantidade
do raio Vou adicionar um nó matemático vetorial, alterar a operação
para subtrair e vou conectar a
posição ao primeiro soquete, o que significa que vou
subtrair O segundo valor deve ser o vetor que obtivemos
do raio. Então, conectarei o vetor
do nó x Y Z combinado
ao segundo soquete Em seguida, faremos nossa correção usando esse nó de
multiplicação vetorial Precisamos cancelar a operação de
subtração que fizemos antes adicionando um conjunto de nós
matemáticos vetoriais para adicionar, e eu adicionarei o vetor que
subtraí antes, que é o vetor que
sai
do nó combinado x Y Se eu apertar play, você
notará que a bola agora está quicando do chão
da maneira certa Agora vem a pior parte, que é que precisamos
fazer uma correção
semelhante todas as
restrições diferentes,
direita e esquerda, frente e verso Mas isso será simples. Vamos fazer isso muito rápido. Vamos começar com a
condição da parede direita. Quando a esfera
toca a parede direita? Simples quando a posição
no eixo x é maior que
um menos o raio Vou adicionar um nó de raio. Vou conectá-lo a um
nó matemático, configurá-lo para subtrair, para que seja um
menos o raio, e conectá-lo ao nó
maior que Essa é minha nova condição. Por que deveria acontecer agora se
essa condição for verdadeira? Inverta a velocidade, que
deve ficar do jeito que está. Se eu apertar play, você ainda notará que a bola ainda vai além da parede direita
porque precisamos fazer uma correção semelhante à
que fizemos no chão. Deslocando a
simulação para a direita, faça a correção e, em
seguida, mova-a de volta Isso será mais
ou menos assim. Vou adicionar um
nó de raio e conectá-lo
ao nó xyz combinado
no eixo x desta Como mencionei
antes, estamos fazendo várias operações em vetor. É por isso que preciso
converter esse raio, que é um
valor único, em um vetor Quero mover a posição para a direita de acordo com a quantidade
do raio Vou adicionar um nó matemático vetorial, alterar a operação para adicionar. Vou conectar a
posição ao primeiro soquete, o que significa que
adicionarei à posição
o segundo valor, que deve ser o vetor que obtivemos
do raio Então, conectarei o vetor
do nó x y z combinado
ao segundo soquete Em seguida, faremos nossa correção usando esse nó de
multiplicação vetorial.
Em seguida, usaremos
a operação ad para contar a
outra correção e precisaremos cancelar as
operações de adição que fizemos antes adicionando um nó
matemático vetorial definido para subtrair, e eu subtrairei o
vetor que adicionei antes, que é o vetor que
sai
do nó combinado x y z. Se eu apertar play, você
notará que a bola agora está quicando
na parede direita corretamente Essa é a correção
para a parede direita. Agora precisamos fazer isso
para a parede esquerda. Vamos começar com a
condição da parede esquerda. Quando a esfera
toca a parede esquerda? Simples quando a posição
no eixo x é menor que
menos um mais o raio
ou o raio Vou adicionar um nó de raio. Vou conectá-lo a um
nó matemático, configurá-lo para subtrair, para que seja o
raio menos um, e conectá-lo
ao nó menor que Essa é minha nova condição. Deve acontecer agora se
essa condição for verdadeira. Inverta a velocidade, que
deve ficar do jeito que está. Se eu apertar play, você ainda
notará que a bola ainda vai
além da parede esquerda, porque precisamos fazer uma correção
semelhante
à que fizemos para chão e
a parede direita,
alterando a
simulação para a esquerda Faça a correção e, em
seguida, mova-a de volta. Isso será mais
ou menos assim. Vou adicionar um nó de raio
e conectá-lo um nó x Y Z combinado
no eixo x desta vez Eu quero mover a posição a
esquerda pela quantidade
do raio Vou adicionar um nó matemático vetorial, alterar a operação
para subtrair. Vou conectar a
posição ao primeiro soquete, o que significa que vou subtrair
da posição,
o segundo valor, que deve ser o vetor que obtivemos
do raio Vou conectar o vetor
do nó xyz combinado
ao segundo soquete Em seguida, faremos nossa correção usando esse nó de
multiplicação vetorial Em seguida, usamos a operação de
subtração para contar a
outra correção e precisamos cancelar a operação de
subtração que fizemos antes adicionando um nó
matemático vetorial e configurando-o para Vou adicionar o vetor
que subtraí antes, que é o vetor que sai
do nó combinado xy Z Se eu apertar play, você
notará que a bola agora está quicando corretamente
na parede esquerda Essa é a correção
para a parede esquerda. Agora precisamos fazer isso
na parede frontal e traseira. Isso deve ser muito semelhante
à parede direita e esquerda. Vou pressionar três no teclado numérico para pular
para a vista lateral, e vamos começar fazendo a correção para
a parede frontal, que se parece com a
parede direita dessa vista. Quando a esfera
toca a parede frontal? Simples quando a posição
no eixo y é maior que
um menos o raio Vou adicionar um nó de raio. Vou conectá-lo a um
nó matemático, configurá-lo para subtrair, para que seja um
menos o raio, e conectá-lo ao nó
maior que Essa é minha nova condição. O que deve acontecer se
essa condição for verdadeira? Inverta a velocidade, que
deve ficar do jeito que está. eu apertar play, você ainda notará que a bola ainda vai além da parede frontal porque
precisamos fazer uma
correção semelhante à que fizemos antes,
colocando a simulação na frente,
fazendo
a correção e
depois movendo-a para trás. Isso será mais
ou menos assim. Vou adicionar um
nó de raio e conectá-lo a um nó xyz combinado
no eixo y desta Eu quero mover a posição para frente pela quantidade
do raio Vou adicionar um nó vetorial de metanfetamina. Altere a operação para adicionar e conectarei a
posição ao primeiro soquete, o que significa que
adicionarei à posição
o segundo valor, que deve ser o vetor que obtivemos
do raio Então, conectarei o vetor
do nó xyz combinado
ao segundo soquete Em seguida, faremos nossa correção usando esse nó de
multiplicação vetorial Em seguida, usamos a operação ad para contar a
outra correção, e precisamos cancelar
a operação de adição que fizemos antes adicionando um nó vetorial de
metanfetamina definido para subtrair,
e eu subtrairei o
vetor que adicionei antes, que é o vetor que
sai do nó xyz combinado Se eu clicar em play, você
notará que a bola agora está saltando corretamente
na parede frontal Esta é a nossa correção
para a parede frontal. Agora precisamos fazer o
mesmo com a parede traseira. Vamos começar com a condição. Quando a esfera
toca a parede traseira? Simples. Quando a posição
no eixo y é menor que menos um mais o raio
ou o raio Vou adicionar um nó de raio. Vou conectá-lo a um
nó matemático, configurá-lo para subtrair, então será o raio menos
um e conectá-lo ao nó menor que Essa é minha nova condição. O que deve acontecer agora se
essa condição for verdadeira? Inverta a velocidade, que
deve ficar do jeito que está. Se eu apertar play, você ainda
notará que a bola ainda vai
além da parede traseira porque precisamos fazer uma
correção semelhante à que fizemos antes, alterando a
simulação para trás,
fazendo a correção e
depois movendo-a para frente Será algo parecido com isso. Vou adicionar um
nó de raio e conectá-lo
ao nó combinado XY Z
no eixo y desta vez Eu quero mover a posição para trás na quantidade
do raio Vou adicionar um nó matemático vetorial, alterar a operação
para subtrair e vou conectar a
posição ao primeiro soquete, o que significa que vou subtrair
da posição,
o segundo valor, que
deve ser o vetor que obtivemos do Então, conectarei o vetor
do nó XYZ combinado
ao segundo soquete Em seguida, faremos nossa correção usando esse nó de
multiplicação vetorial Em seguida, usamos a operação de
subtração para contar a
outra correção, e precisamos cancelar a operação de
subtração que fizemos antes adicionando um nó
matemático vetorial, configurando-o para adicionar, e eu adicionarei o vetor que
subtraí antes, que é o vetor que sai do nó combinado x Se eu clicar em play, você
notará que a bola agora está quicando corretamente
na parede traseira E agora nosso
mecanismo de física está ciente
do raio dos
pontos e o
considerará ao
executar a simulação Sei que pode
parecer que fizemos muitas operações neste vídeo e
isso pode ser avassalador Mas caso você não
entenda exatamente o que fizemos, volte e assista a este vídeo
desde o início e tente se concentrar um pouco e tentar visualizar
o que está acontecendo, e você ficará surpreso com a
facilidade desses conceitos Eu sei que pode
parecer muito complicado, especialmente quando estou fazendo as coisas tão rápido,
mas acredite, uma vez que você entenda,
você será capaz de
fazer isso literalmente olhos vendados, porque você
entende os conceitos Provavelmente também
riremos de si mesmos por pensar que isso
também é complicado. É assim que podemos implementar o raio em nossa simulação, e agora só há
mais um problema que precisamos resolver, que é como fazer essas
bolas colidirem umas com É isso que
faremos no próximo vídeo.
13. Colisão: Colisão. Olá, bem-vindo ao último vídeo técnico sobre como criar seu
próprio mecanismo de física no Blender usando nós de geometria Passamos por muita coisa, então
dê algum crédito a si mesmo porque esse vídeo pode ser o mais complicado até agora. Não vamos
adicionar muitos nós,
mas alguns de vocês podem achar um pouco complicado
entender os conceitos por trás de
todas as operações que faremos neste vídeo. Mas farei o meu melhor para explicar
tudo passo a passo. E espero que, se
você se concentrar o suficiente, entenderá
exatamente a lógica do que construiremos Foi aqui que
paramos da última vez, e agora estamos lidando
apenas com um ponto. Ou uma bola. Eu quero ter vários. A maneira mais fácil de contornar
isso será aumentar o número de pontos para
algo como dez, digamos. E vamos ajustar o raio para algo pequeno, como 0,2 metros. Agora, todas essas bolas
estarão em cima umas das outras. É por isso que vou me conectar
à posição, um nó de valor aleatório, e esse nó atribuirá uma posição aleatória a cada ponto. E tudo o que você precisa
fazer é fornecer um intervalo especificando um valor máximo
mínimo, e ele atribuirá
um valor aleatório nesse intervalo para cada ponto Você pode jogar com os valores até obter o
resultado desejado. Mas no meu caso, acabei usando esses valores para os
valores mínimos menos um menos um,
três, e para os valores
máximos, um, 15 Agora, se eu apertar play, você verá que
agora temos dez esferas, mas o maior problema é
que todas essas taças
se cruzam umas com as outras.
Não estão colidindo. Dissemos ao Blender
que fizesse as
bolas quicarem nas diferentes paredes, mas não pedimos que ele
também as fizesse
quicar umas nas outras, e essa é uma parte crucial da
construção de nosso próprio motor de física Então, como podemos fazer uma coisa dessas? Vamos tentar debater algumas ideias sobre como podemos
programar uma coisa dessas Vamos começar com
a primeira pergunta. Uma delas é que duas bolas
basicamente colidem? Porque se conhecermos
essa condição, podemos dizer ao Blender que, ei, se essa condição
acontecer, faça Bem, eu vou te dar a resposta. Duas bolas colidem quando a
distância entre elas ou a distância entre os centros é menor que o raio
multiplicado Acho que isso deve ficar claro
nessa visualização. Eu sempre acho difícil
pronunciar essa palavra. Essa é a lógica da
condição que construiremos mais tarde. Diremos ao Blender que sempre calcule a distância
entre dois pontos, e se a distância
entre eles for menor que o raio
multiplicado por dois,
isso significa que eles estão colidindo, isso significa que eles estão colidindo, e você deve fazer Agora, vamos traduzir
isso em nós. Vou adicionar um nó chamado
índice do mais próximo. Esse nó me dará o
índice do ponto mais próximo. Se eu pular para o espaço de trabalho
dos nós de geometria, como mencionei
antes, cada ponto terá um índice que se refere a O índice do
nó mais próximo me dará esse índice do
ponto mais próximo de um determinado ponto. Depois de saber o índice
do ponto mais próximo, posso pedir ao liquidificador que
leia sua posição, que você pode fazer adicionando um nó chamado evaluate at index, que é uma forma de saber o blender Para esse ponto, quero que você
calcule algo. No nosso caso, queremos saber
a posição desse ponto. Vou mudar o tipo
de flutuante para vetor. Porque a posição é um vetor. Vou adicionar um nó de posição
e conectá-lo ao valor. Agora, o vetor
de saída dessa avaliação no nó do
índice é o
vetor de posição do ponto mais próximo, ponto B, que é o
mais próximo do meu ponto. A saída do nó de posição é o
vetor de posição do ponto A. Depois de ter
esses dois vetores, posso adicionar um nó matemático vetorial e alterar a
operação para distância Se eu conectar o
vetor proveniente do avaliação
no índice
e do nó de posição, esse nó me dará a
distância entre eles Agora, como eu sei se esses
dois pontos estão colidindo? Eu disse a resposta antes. Se a distância entre os dois pontos for menor que
o raio multiplicado por Vou adicionar um nó de raio que
multiplicarei por dois, a distância deve ser
menor que duas vezes o A saída agora dessa operação
inferior é minha condição para quando dois
pontos ou bolas estão colidindo Agora, há algo
importante em que precisamos pensar, a ordem das operações. Se executarmos as
restrições de colisão antes ou depois da
restrição de bolas ,
pense nisso A resposta é antes.
Precisamos contar com
as colisões antes das restrições
das paredes A razão disso
é que faz mais sentido calcular
a colisão antes que as paredes
toquem as paredes, pois elas podem
se afastar das paredes ou
se empurrar contra as Uma vez que saibamos disso, podemos
eliminar as restrições das paredes. É por isso que adicionarei
um nó de posição definida e o conectarei antes da parte em que temos
as outras restrições Basicamente, logo após o nó responsável pela
atualização da posição. E eu vou apagar o resultado
da operação menor que. Para o soquete
de seleção da nota de posição definida. Agora que terminamos de
construir nossa condição, agora precisamos passar para o que deve acontecer se
essa condição for verdadeira ou o que deve acontecer
se duas bolas estiverem colidindo Então, minha pergunta agora, o que deve acontecer se duas bolas estiverem colidindo? Pense sobre isso. A resposta é a seguinte. Se duas bolas estão colidindo, precisamos
afastá-las uma da outra Isso é uma coisa segura de
se dizer, e também acho que é
supergenial dizer Mas há duas
questões importantes que
precisamos responder. Em primeiro lugar, em
quanto devemos compensar essas duas bolas É assim ou eles vão se
esforçar assim? Isso é uma
coisa importante de descobrir. Então esse é o número um. Número
dois, em qual direção. Então, se essas
duas bolas colidirem, elas
iriam assim
ou isso ou isso ou isso Isso também é
importante: precisamos
descobrir uma maneira de
traduzi-lo em nós. Quanto
precisamos compensar a posição
dos dois
pontos, isso deve ser simples Calcule a distância
entre os dois pontos, divida-a por dois e mova
cada ponto nesse valor. Para a direção, é necessário
empurrar o vetor que
cruza os dois pontos Como podemos calcular o vetor? Aqui está o
vetor de posição para o ponto A, e aqui está o
vetor de posição para o ponto B. Eu posso calcular o vetor que
os cruza fazendo uma operação de
subtração, vetor
posição do ponto menos
vetor posição do ponto B. Isso me dará
o vetor ao longo do
qual a posição de deslocamento deve acontecer Agora, vamos traduzir todos
esses pensamentos em nós. Começarei calculando o vetor que cruza
os dois pontos Como eu disse, essa
será a posição
do ponto A menos a
posição do ponto B, o que você pode fazer adicionando um nó matemático vetorial e
configurando-o para subtrair Vou conectar a posição
no primeiro soquete e o vetor que
sai do índice de avaliação no segundo soquete Esse é o vetor ao longo do qual
moverei os dois pontos. Agora, vamos passar para a quantidade de por quanto
compensar os dois pontos Precisamos calcular essa
distância dividida por dois, e essa é a quantidade de
quanto eu deveria compensar cada ponto Como posso calcular a
linha vermelha? Esse é o raio. Esse também é o raio e essa é a distância
entre os dois pontos Se eu fizer duas vezes o
raio menos a distância, isso me dará o
comprimento da linha vermelha
ou o quanto os dois
pontos estão se cruzando Vamos traduzir isso em notas. Vou adicionar um conjunto de
notas matemáticas para subtrair. A operação é duas
vezes o raio, menos a distância
entre os dois Vou adicionar outro nó matemático
e configurá-lo para dividir, e eu vou dividi-lo por dois. O resultado disso é a
quantidade de compensação. Vou adicionar um
nó matemático vetorial, alterá-lo para escala e escalar
o vetor ao longo do qual quero que a
operação aconteça, que vem do nó de subtração do
vetor, e escalá-lo pela quantidade proveniente do nó matemático de
divisão Isso irá direto para o soquete de deslocamento do nó
de posição definida E é isso.
É assim que você pode criar uma colisão em
nosso motor de física Agora, se eu apertar play,
você ainda
notará que as bolas ainda
estão colidindo Essa é a parte em
que você pode começar a me odiar porque mesmo depois de toda
essa matemática complicada, ela ainda não funciona Mas vamos consertar isso. Quero mencionar que não é que o
que fizemos esteja errado, o problema é com o liquidificador Não é nossa culpa.
São liquidificadores Como mencionei
antes, devido
ao
método de integração de lubrificadores usado no Blender , precisamos lidar
com altos números O
método de integração do lubrificador é, na melhor das hipóteses, bom e é realmente propenso a erros Então, a melhor solução para
tornar nossa simulação mais precisa é, em vez de executar
essa operação apenas uma vez, se pudermos descobrir
uma maneira de dizer ao Blender que cada quadro não executa
esse mecanismo de física apenas uma vez, execute-o, por exemplo, 100 vezes Dessa forma, você obterá
um resultado mais preciso. Na verdade, você já sabe
a resposta para essa pergunta. Você consegue adivinhar? O tambor rola e está repetindo zonas A primeira coisa
sobre a qual falamos neste curso. O que vou fazer é adicionar uma zona de
repetição e inserir todo o
meu sistema de restrição dentro da
zona de repetição desta forma E agora, a partir do primeiro
nó da zona de repetição, posso especificar quantas vezes
quero que o Blender calcule
as restrições Sim, o Blender executará a
simulação apenas uma vez, mas posso especificar,
usando a zona de repetição, quantas vezes executar determinadas operações
em um quadro Isso é chamado de subetapa. Eu farei, por exemplo, 50. Agora, se eu apertar play, blender, cada quadro executará
o sistema de colisão 50 vezes para obter um resultado
realmente preciso E agora, como você pode ver, nossas bolas estão colidindo bem
e tudo está
funcionando bem, e é assim que criamos
o sistema
de colisão No próximo vídeo, compartilharei algumas reflexões finais sobre como fazer certas coisas em
nosso mecanismo de física.
14. A desova do Particle: Partículas desovando. Olá e bem-vindo,
e neste vídeo, vamos fazer com que os pontos apareçam com
o tempo e não
os tenhamos todos de uma vez É aqui que paramos da última vez. No momento, nossa simulação
tem apenas dez pontos. Digamos que eu queira 100 pontos. Se eu aumentar o número de
pontos para 100 e clicar em play, você notará que
a simulação ficará confusa porque quando
aumentamos o número de pontos, aumentamos a
probabilidade de erro, que tornará a
simulação super instável Então, qual é a
solução para isso? Bem, em nossa simulação atual, temos 100 pontos
desde o início. E se
descobrirmos uma maneira de fazer com liquidificador não tenha 100
pontos desde o início, mas os gere ou os
adicione ao longo Isso deve levar a uma simulação
mais estável. Como podemos fazer isso? Vamos começar com a primeira parte,
que é como fazer com que o liquidificador gere as partículas ao longo
do tempo?
Isso será simples. Tudo o que você precisa fazer é adicionar um
nó de geometria da junta e conectá-lo como o primeiro nó
na zona de simulação Vou pegar a saída do nó
de pontos,
tecnicamente do nó de
atributo denominado loja , e conectá-la
ao nó de geometria da junta O que acontecerá agora é
que o liquidificador adicionará mais pontos cada vez
que executar a simulação Ou, para ser mais preciso, Blender unirá a geometria anterior com a nova geometria Em seguida, vou diminuir o
número de pontos para um, porque se eu não fizer isso, o
liquidificador explodirá Começará a ter 100 pontos e cada quadro
adicionará outros 100 pontos. Você pode ver facilmente
como isso fará com que tenha um número
absurdo de pontos muito rápido, que travará o software. Quando eu altero o número
de pontos para um, Blender adiciona apenas
um ponto a cada quadro Na verdade, isso ainda é demais, e precisaremos
fazer um liquidificador gerar
um ponto, talvez a cada 20 quadros Mas antes de fazermos isso, se eu apertar play, como você pode ver, Blender está adicionando um
novo ponto a cada quadro, que ainda é demais, e ainda está fazendo com que
a estimulação fique A solução será
dizer ao liquidificador que T não aponta
um ponto para cada quadro Talvez adicione um ponto a cada
dez quadros ou 20 quadros. Então, como podemos programar uma coisa
dessas? Começarei adicionando
um mesmo nó de tempo. Esse nó me fornecerá o valor dos segundos
ou o quadro que estou ativado. Vou pegar a
moldura e conectá-la ao nó
de contagem de pontos. Agora, no primeiro quadro, o liquidificador
adicionará um ponto. No quadro dois, o Blender
adicionará dois pontos, então eu terei três
pontos e no quadro três, o
Blender adicionará três pontos,
então eu terei seis pontos no total Isso não é o que eu quero. Eu
quero dizer ao Blender que um ponto a cada certo
número de quadros Vou adicionar um nó matemático e
vou configurá-lo como módulo com piso módulo Floord é apenas uma
maneira elegante de dizer que esse nó retornará o restante de
uma operação de divisão Esse nó
nos permitirá especificar com que
frequência queremos que o liquidificador
adicione um novo ponto Também adicionarei
outro nó matemático e o definirei como igual a dois, e o valor deve ser zero. Aqui está a lógica do
que está acontecendo. Blender pegará o número
do quadro e o
dividirá por esse valor e se o restante
for igual a Isso significa que essa condição igual
à é verdadeira, o que significa que esse nó
produzirá um, então o Blender adicionará um E se o restante não
for igual a zero, isso significa
que essa condição igual a
dois é falsa, que significa que esse nó
produzirá zero, então o Blender não adicionará nenhum Quer que o liquidificador adicione um
ponto em 20 quadros. Isso é o que eu vou conseguir
se eu digitar 20 aqui. Aqui está um exemplo do
que vai acontecer. Digamos que eu esteja no quadro 55. O Blender dividirá 55 por 20. O restante da
operação é 15. 15 não é igual a zero, o que significa que esse nó
produzirá zero, e como esse nó vai para a contagem
do nó de pontos, isso significa que o liquidificador
não adicionará nenhum ponto Agora, digamos que eu esteja no quadro 60. O Blender dividirá 60 por 20. O restante da
operação é zero, zero é igual a
zero, que significa que esse
nó produzirá um porque essa
condição é verdadeira agora Esse vai para o soquete de contagem de
pontos, e o Blender adicionará
um ponto à Acho que a lógica agora deve estar clara do que está acontecendo. Agora, se eu clicar em play, Blender começará a adicionar
partículas gradualmente, que é exatamente o que eu quero A última coisa que quero
fazer é mandar o
Blender gerar cada ponto em
uma direção diferente Posso fazer isso atribuindo um
vetor de velocidade inicial aleatório a cada ponto, que você pode fazer facilmente
conectando um nó de
valor aleatório soquete vetorial do atributo
do nome da
loja que define a um
vetor de velocidade inicial aleatório a cada ponto, o
que você pode fazer facilmente
conectando um nó de
valor aleatório ao soquete vetorial do atributo
do nome da
loja que define a velocidade inicial. E eu adiciono os valores a menos um menos 10
para o mínimo e 110 para o É assim que podemos fazer com que o liquidificador gere as partículas ao longo do Acho que a lógica é super simples. No próximo vídeo,
adicionaremos uma fração à nossa simulação.
15. Atrito: Adicionando fração.
Uma parte importante de qualquer simulação é a fração. Sem atrito, as bolas continuarão quicando É por isso que é importante descobrir uma maneira de
fazer o liquidificador atenue a simulação com
o tempo Na verdade,
abordamos esse tópico antes, mas o que faremos neste
vídeo é tornar o processo de alteração do atrito
um pouco mais fácil Agora, esta é
toda a nossa árvore de notas, e o que pretendo
fazer é o seguinte. Como você se lembra,
nas restrições, eu tenho a velocidade que é multiplicada por menos um Se eu elevar esse valor
para algo como -0,8, isso levará a mais atrito O que eu quero é
alterar esse valor para todos os diferentes nós
multiplicados uma só
vez. Isso é simples. Vou adicionar um nó xy z combinado. Vou inserir o mesmo
valor aqui, um, um menos
um e conectá-lo ao vetor do nó
de multiplicação Não fiz nada extravagante, apenas
substituí o valor no multiplicação por esse nó
combinado x y z. A razão pela qual fiz isso
é que agora posso adicionar um nó de entrada de grupo, pegar o eixo z e conectá-lo
à entrada do grupo. Agora, se eu for para a guia do
modificador, você verá que posso
alterar o valor a partir Além disso, é importante observar que só
alterarei o valor
dos eixos z porque esse é o soquete conectado à
entrada do grupo Para o resto dos soquetes,
eles permanecerão um. Isso facilitará muito o
processo de alteração dos valores de
atrito Agora, preciso fazer a mesma coisa para todas as diferentes
restrições Começarei fazendo
isso na parede direita, adicionarei um nó x Y Z combinado e adicionarei uma entrada de grupo. Vou passar para a parede esquerda, adicionar um zende x y combinado
com os mesmos valores e adicionar uma entrada de grupo Eu farei a mesma coisa também para a parede frontal agora. Por fim, farei a mesma
coisa com a parede traseira. S. E agora eu posso controlar o
atrito facilmente a partir daqui. Também posso abrir a barra lateral
pressionando n e o editor de nós de
geometria, selecionar uma das entradas do grupo e você pode clicar duas vezes
para alterar o nome dessa propriedade para
algo Para minha simulação, vou definir o valor de atrito em -0,9 Outra forma de adicionar fração
é voltar para
a loja chamada
nó de atributo que define a velocidade, e se eu adicionar um
nó matemático vetorial e configurá-lo em escala, poderei diminuir a velocidade em
toda a É como um atrito global
que se aplicará a cada quadro. Posso até adicionar uma
entrada de grupo e conectá-la lá, mudar seu nome para atrito
global Vou configurá-lo para 0,99. A simulação
perderá velocidade por um fator de 1% a cada quadro Além disso, pode ser útil
alterar o número de etapas da zona de repetição a
partir da etapa do modificador É por isso que
também o conectarei um nó de entrada de grupo e o chamarei, por exemplo, de subetapas, e o configurarei como 20 Esses são os valores que eu
uso para a renderização promocional. Por fim, definirei minha taxa de
quadros para 120, então terei uma taxa de quadros realmente
suave e minha simulação
estará menos sujeita a erros Para o intervalo de quadros,
digamos que eu queira uma renderização de dez segundos, o que significa que meu intervalo de quadros
será de até 1.200 quadros Se eu clicar em play, nossa simulação
está funcionando sem problemas. É isso aí, pessoal,
por esse vídeo. Tecnicamente,
terminamos tudo. Na próxima,
mostrarei como
criei a cena final
e como renderizá-la.
16. Visão geral final: Olá de novo. Na última vez. Este é o último vídeo sobre construir nosso próprio
motor de física no Blender Este vídeo é um resumo
, uma visão panorâmica de tudo o que fizemos
até agora A primeira coisa com a qual
vou começar
neste vídeo é nosso notário, porque atualmente
está uma bagunça absoluta Se você decidir voltar a
esse projeto no futuro, provavelmente se
perderá
no C de todos esses nós
diferentes. É por isso que vou começar
organizando e
rotulando o notário e depois passarei para
o resumo Ok, bem-vindo de volta ao Blender, e esta é toda a minha tentativa, e é uma bagunça Vou clicar na barra de espaço de
controle para maximizar esse editor. Como você pode ver,
há muitos nós
e, especialmente no futuro, será
difícil
realmente entender o que
está acontecendo porque
não rotulamos nossa nota como try. O que faremos neste
vídeo, como mencionei, é, antes de tudo, começar
organizando nossa árvore de notas. Vou até o início
da tentativa de nota. Vou selecionar
todos esses nós, pressionar Control G para criar
um rótulo em torno deles, pressionar F dois para obter um nome
e vamos chamá-lo, por exemplo, de condição inicial. Assim que tivermos nossa condição
inicial, entramos na zona de simulação. Temos essa geometria da junta responsável por adicionar
pontos ao longo do tempo. Depois disso, definimos a aceleração usando
esse atributo nomeado, e ela está relacionada à
escala e a esse nó vetorial. Certifique-se de selecionar
os três. Pressione Control G, F dois para obter um nome, e vamos
chamá-los de aceleração. Em seguida, você terá
o
atributo nome da loja responsável por
definir a velocidade Vamos movê-lo para cá. A mesma coisa. Vamos colocar todos esses nós em cima uns dos outros
desta forma, empilhando-os. Selecione todos esses nós, controle G e F dois para obter um nome e vamos chamá-lo de
velocidade porque estamos definindo a velocidade
usando esses Em seguida, atualizaremos
a posição
usando o nó de posição definida, então empilhe os nós uns
sobre os outros Selecione-os, controle G, F dois e vamos chamá-los de atualização de
posição. Depois disso, entramos
na zona de repetição
, responsável por compilar todas as
diferentes restrições Vamos colocar esse nodo por aqui. Na verdade, vou
adiantar, mas vamos tentar encontrar uma solução para toda
essa bagunça aqui Na verdade, para
facilitar todo
o processo e ter mais espaço, começarei a organizar
esses nós a partir do final. Eu terei esses nós
responsáveis por transformar
os pontos em esferas,
então selecionarei todos eles, Control G para criar um rótulo, F dois para um nome, e vamos chamá-lo,
por exemplo, por exemplo, Mova-os de volta.
Mova isso também para trás. Quanto menos restrições
eu tenho aqui, é a restrição
para a parede traseira Vamos selecioná-lo inteiramente, que devem ser
todos esses nós. Vamos organizá-los. Em primeiro lugar, você
terá esses nós no topo. Vou pegar o Control G, e essa é minha condição. Vamos organizar esses
nós aqui. Algo parecido com isso. Talvez você trabalhe. E então
eleja todos esses nós, Controle G, F dois para um nome, e vamos chamá-lo de
back wall strant Em seguida, você terá isso. Faça algo semelhante,
selecione estes, Controle G e F dois, e vamos chamá-lo de condição. Em seguida, vou mover
esses nós aqui. Esse aqui, aqui,
esses aqui. Selecione todos eles. Controle
G, F dois para obter um nome e vamos chamá-los de restrição da parede
frontal Agora, para a restrição de parede esquerda, todos esses nós, selecione essas duas condições de controle
G F. Em seguida, está aqui, esse
aqui e esse aqui. Selecione toda a árvore de
notas, controle G, F dois, parede esquerda, restrição Agora, para a restrição de
parede direita, controle G, condição F dois, mova esses nós aqui A mesma coisa para
este e este, então assim. Em seguida, selecione todos
eles, controle G, F dois, restrição de parede direita Por fim, a restrição de piso, que são esses nós Faremos algo semelhante. Selecione a condição de controle
G, F dois. Mova esses aqui, para a posição,
para a velocidade, desculpe, e selecione todos eles Controle G F restrição de dois
andares. Essas são as
diferentes restrições
e, por último, você terá Vamos tentar descobrir uma maneira de
organizar tudo isso. Vou selecionar todos
eles e mover tudo para baixo. Eu acho que isso vai ser melhor. Vamos colocar isso
aqui e talvez mover a zona p e todos esses nós
ligeiramente para a esquerda, e então selecionar todos
esses controles G F dois, e isso é chamado de colisão Este é meu grupo de colisão. E traga essa opinião do grupo, um pouco assim. E ao fazer isso,
organizamos nossa árvore de nós. No futuro, se
você voltar a isso, saberá exatamente o que
cada grupo de nós está fazendo. Porque nós os rotulamos. Além disso, quando você tem
essa visão
panorâmica de toda a árvore de nós, começa a ver a lógica
por trás de tudo o que fizemos. Como resumo final, aqui está a lógica de
tudo o que construímos. Primeiro de tudo, começamos
definindo as condições iniciais, quantos pontos temos, quando queremos gerar
pontos e tudo Posteriormente, esses pontos
entrarão na zona de simulação. A primeira coisa
que fazemos aqui é definir a aceleração e depois
definir a velocidade Que nós dois usamos para atualizar
a posição dos nossos pontos. Depois de termos essa configuração básica, podemos começar a pensar em
diferentes restrições Para nosso mecanismo de física, há dois tipos de
restrições com as quais nos preocupamos A primeira é
a colisão, que é a colisão entre
as diferentes esferas, e depois as diferentes
paredes, que são o chão, a parede direita e traseira e a parede esquerda
e E no final da árvore de notas, usamos essa instância
no nó de pontos para transformar esses pontos
em uma geometria real, que no nosso caso era uma
esfera EUV E ainda assim, este é
todo o nosso motor de física. E sim, é
basicamente isso que mostra como você pode construir seu próprio
motor de física no liquidificador Agora você pode criar
uma cena em torno da simulação e
renderizá-la como quiser. Além disso, como o sombreamento e animação estão além do
escopo das pontuações, eu queria manter o curso
conciso e torná-lo apenas
sobre nós geométricos É por isso que fiz um
vídeo bônus gratuito que você pode assistir, onde mostro passo a passo
como criei minha renderização. Você pode assistir
pelo link
na descrição ou
acessando meu site. A parte do nó de geometria e a parte de barbear são disciplinas bem
diferentes, e é por isso que fazia
mais sentido mantê-las separadas, já que eu adoto abordagens
diferentes para
ensinar as duas Por fim, obrigado por se
inscrever neste curso. Espero que você tenha aprendido muito. Se você achou este curso útil, deixe uma boa avaliação que nos ajude a criar cursos
melhores, e você ainda pode conferir o
resto dos meus cursos aqui. Muito obrigado,
e nos vemos ou.