Saltar al reproductorSaltar al contenido principalSaltar al pie de página
  • anteayer
Tutorial - Como criar o modificador curve deform com Geometry Nodes no Blender

Categoría

😹
Diversión
Transcripción
00:00Caderno operacional Blender número 1. Modificador Curve Deform com Geometry Nodes.
00:10Modificador Curve Deform na forma tradicional.
00:13Vamos demonstrar como aplicar um modificador Curve Deform em um objeto.
00:18Aqui, aumentei o tamanho do cubo no eixo Y em 20 unidades.
00:23Entrei no modo de edição e fiz 20 cortes ao longo do eixo Y.
00:30Depois, adicionei uma Bezier Curve, que será utilizada para deformar o objeto.
00:36Aumentei e editei essa curva.
00:47Selecionei o objeto, fui no menu de modificadores e adicionei um modificador do tipo Curve Deform.
00:55Selecionei nossa Bezier Curve como Curve Object.
00:58Neste tutorial, utilizaremos o eixo Y para deformação.
01:02Pronto, agora o objeto será deformado de acordo com o formato da curva, no eixo Y.
01:11Agora vamos mostrar como criar este modificador utilizando Geometry Nodes.
01:15No Geometry Nodes não existe um nó nativo para essa finalidade.
01:19Portanto, teremos que criar manualmente e aqui vamos explicar como fazer.
01:22Precisaremos de um objeto, no caso aqui um cubo, que será deformado e de uma curva.
01:36Cada ponto da curva possui um vetor normal em vermelho e um vetor tangente em verde, os quais podem ser lidos diretamente.
01:47Mas precisaremos de um terceiro vetor, que será calculado a partir dos dois que já citamos, através de uma operação chamada produto vetorial.
01:54Além dos vetores citados, precisaremos também das posições de cada ponto na curva.
02:03O Geometry Nodes já possui um nó chamado SAMPLE, que faz a leitura direta dos ver de posição, vetores normais e tangente de cada ponto da curva.
02:12O outro vetor que precisaremos é um vetor perpendicular aos vetores normais e tangentes, determinado através da operação chamada cross product, ou produto vetorial.
02:24Os vetores normais e tangentes da curva já são lidos diretamente pelo nó SAMPLE.
02:29O vetor formado pelo produto vetorial é um vetor perpendicular ao plano formado pelos vetores normais e tangentes, como mostrado azul no vídeo.
02:42Mas como calculamos este vetor?
03:01Não precisa! O Blender já calcula pra você!
03:06Aqui temos um paralelepípedo que será deformado no formato desta curva.
03:10Cada ponto do paralelepípedo no eixo Y corresponde a uma posição proporcional ao longo da curva.
03:22Cada ponto do paralelepípedo no eixo Y será posicionado numa posição proporcional ao longo da curva,
03:29levando em conta a direção dos vetores normais e do cross product referente àquele ponto da curva.
03:34Para isso, vamos associar o valor da posição X de cada vértice do objeto ao vetor normal do ponto correspondente na curva,
03:42e da posição Z de cada vértice do objeto ao produto vetorial do mesmo ponto na curva.
03:47Os valores de Y de cada vértice do paralelepípedo serão associados à posição de cada ponto da curva.
03:53Vamos ver como isso será calculado.
03:56Pegaremos um vértice como exemplo.
03:58Este vértice possui valores de X, Y e Z no espaço.
04:03O valor de X do vértice será multiplicado pelo vetor normal do ponto na curva.
04:08O resultado será somado à multiplicação do valor de Z do vértice com o produto vetorial.
04:13O novo resultado será somado ao vetor de posição do ponto na curva correspondente ao valor Y do vértice.
04:21Agora vamos demonstrar como isso é feito com um exemplo.
04:24Pegaremos primeiramente este vértice com índice 0,
04:29posicionado em X igual a 4, Y igual a 0 e Z igual a menos 4.
04:35Multiplicaremos o valor de X igual a 4 e o valor de Z igual a menos 4
04:40pelos vetores normal e cross product da curva, na posição correspondente.
04:45Neste momento, desconsideraremos o vetor de posição.
04:48Assim, temos estes resultados, que serão somados entre si, chegando neste resultado final,
04:53que é a posição para onde o vértice em questão deverá ser reposicionado.
04:57Vamos agora fazer o mesmo com os demais vértices.
05:09Veja que o objeto está paralelo ao vetor normal da curva no ponto correspondente.
05:15E agora vamos adicionar naquele cálculo o componente da posição do ponto na curva.
05:20Pronto? Agora vamos fazer isso para os demais.
05:23O próximo objeto, distante no eixo Y, será reposicionado de acordo com o conto correspondente na curva,
05:31e assim por diante até o último vértice do paralelopípedo.
05:40Um pré-requisito é que o tamanho do objeto a ser deformado no eixo de deformação
05:44seja normalizado ao valor 1.
05:47Ou seja, independente do tamanho neste eixo, aqui no exemplo com 30 unidades no eixo Y,
05:52para o deformador este valor deve variar de 0 a 1.
05:56Como faremos isso?
05:57Vamos mostrar um exemplo de um objeto mais complexo.
06:00Existe um nó que faz a leitura dos valores máximos e mínimos de posição dos vértices de um determinado objeto,
06:07chamado bounding box.
06:08Veja que o bounding box envolve todo o objeto dentro de uma caixa.
06:20E o tamanho desta caixa varia de acordo com a variação de tamanho do objeto.
06:23Assim, independente do tamanho que este objeto tenha, o bounding box saberá onde ficam as extremidades deste objeto.
06:31E agora, para normalizar, ou melhor, compactar este tamanho em uma escala que varia de 0 a 1,
06:38precisaremos de um nó chamado Map Range.
06:40Vamos alterar o modo para Vector.
06:43Na entrada Vector do Map Range, vamos conectar um leitor de posição que irá ler a posição de cada vértice do objeto.
06:50E posteriormente, vamos utilizar as informações de mínimo e máximo que o bounding box nos passa para conectar no Map Range.
06:58Assim, o intervalo entre os valores mínimos e máximos das posições dos vértices será convertido no intervalo de 0 a 1.
07:15Bom, agora que temos as ferramentas necessárias Sample Curve, Cross Product, Bounding Box e Map Range,
07:21vamos partir para a criação do modificador Curve Deform.
07:30Vou habilitar aqui a visualização de Wireframe do objeto, para enxergarmos melhor as arestas do mesmo.
07:36Habilite o modo de trabalho Geometry Nodes.
07:40Com o cubo selecionado, crie um novo Geometry Nodes.
07:42Vamos criar um paralelepípedo utilizando um cilindro de 4 vértices.
07:52Altere a profundidade, depth para 20 e a quantidade de segmentos laterais para 50.
07:59Adicione um modificador Transform para rotacionar 90 graus no eixo X e 45 graus no eixo Y.
08:15Adicione um Join Geometry na linha entre o objeto e o Group Output.
08:18Agora vamos adicionar uma curva. Neste exemplo, vou utilizar uma espiral.
08:25Conecte a saída dessa curva no Join Geometry.
08:33Vamos colocar os nós necessários para normalizar o tamanho do objeto, como mostrado anteriormente.
08:39Adicione um Bounding Box, conecte a saída do objeto nele
08:42e adicione um Map Range, alterando-o para Vector.
08:51Conecte a saída Min do Bounding Box na entrada From Min do Map Range
08:55e a saída Max do Bounding Box na entrada From Max do Map Range.
09:00Adicione um leitor de posição, que irá ler as posições dos vértices do paralelepípedo
09:05e conecte na entrada Vector do Map Range.
09:07Acrescente agora um Sample Curve e conecte a saída da curva na entrada Curves deste nó.
09:26Na linha entre a saída do objeto e o Join Geometry, adicione um nó Set Position.
09:32Este nó é o que fará o reposicionamento dos vértices do objeto.
09:35Na saída do Map Range, adicione um Separate XYZ.
09:44Conecte a saída do Map Range na entrada do Separate XYZ
09:49e depois conecte a saída Y deste Separate na entrada Factor do Sample Curve.
09:55Isso é o que fará a associação das posições dos vértices do objeto no eixo Y com as posições dos vértices da curva.
10:03Agora vamos montar aquele cálculo dos vetores que mostramos anteriormente.
10:06Adicione dois nós do tipo Vector Math com a operação de adição, conectando a saída de um na entrada do outro.
10:14Adicione outro Vector Math, alterando a operação para Cross Product, que fará o produto vetorial entre os vetores tangentes e normais da curva.
10:28Conecte a saída Position do Sample Curve em uma das entradas dos Vector Math de adição.
10:46Adicione um novo Vector Math, alterando seu operador para Scale.
10:53O Scale é uma operação que fará a multiplicação entre um valor numérico e um vetor.
10:58Conecte a saída do Cross Product na entrada Vector do Scale.
11:04Faça uma cópia do Scale.
11:09Conecte agora a saída normal do Sample Curve na entrada Vector deste novo Scale.
11:16Agora conecte a saída de cada Scale numa entrada livre dos Vector Math de adição.
11:21Agora precisaremos obter os valores das posições X e Z de cada vértice do objeto.
11:27Para isso adicione um leitor de posição e um Separate XYZ.
11:31Conecte a saída X deste Separate na entrada Scale do nó conectado à saída normal do Sample Curve.
11:39Assim, temos um operador que irá multiplicar o valor de cada vértice do objeto no eixo X com o vetor normal do ponto correspondente na curva.
11:46Faça o mesmo com a saída Z e o Cross Product.
11:50Pronto. Agora que temos nossa expressão matemática concluída, conecte o resultado na entrada Position do Set Position.
11:56E voilà! O nosso objeto está deformado com o formato da curva espiral.
12:03Alterando os valores de Y nos campos To Mean e To Max no Map Range, alteramos o início e o fim da deformação.
12:10Podemos acrescentar operadores matemáticos para suavizar essa alteração.
12:14Para suavizar essa alteração.
12:15Para suavizar essa alteração.
12:16Para suavizar essa alteração.
12:21Música
12:49Caso desejado, após a versão 4.2 do Blender, foi implantado um operador chamado SetCurveNormal
12:55para alterar a orientação dos vetores normais da curva.
12:59Neste operador, se escolhermos ZUp, os vetores normais apontam para a direção Z, eliminando torções.
13:10Neste exemplo, utilizamos o eixo Y para deformação, mas é possível escolher deformar também nos demais eixos.
13:17Por exemplo, no eixo X.
13:20Para isso, ao invés de conectarmos o valor de Y extraído do MapRange no factor do SampleCurve, vamos conectar o valor de X.
13:29E ao invés de multiplicarmos o valor de X pelo vetor normal da curva, vamos multiplicar pelo valor de Y.
13:37E por último, vamos inserir valores no eixo X dos campos ToMin e ToMax do MapRange, ao invés do eixo Y.
13:44Bom, dicas finais.
13:48Aqui temos um objeto que será deformado numa curva fechada, ou seja, um caminho cíclico.
13:54Antes, vamos conferir se os vetores normais do objeto estão na direção correta.
13:57Vá no menu Overlays e habilite a caixa Face Orientation.
14:04Se ficar vermelho, como mostrado aqui, as normais estão na direção errada.
14:08Para corrigir, vá na ligação entre os vetores normais e tangentes da curva com o operador CrossProduct e inverta as conexões.
14:16Se o objeto ficar azul, as normais do mesmo estão apontando corretamente.
14:19Aqui, vemos que quando o objeto chega ao final da curva, ainda que esta seja fechada e cíclica, ele colapsa.
14:24O mesmo ocorre quando chega no início.
14:27Para uma movimentação cíclica sem colapsos, devemos adicionar, após a curva, um operador SetSplineCyclic.
14:34E marcar a caixa, Cíclic.
14:46E na linha que conecta o eixo de deformação ao Factor do SampleCurve, deve ser inserido um operador matemático do tipo Módulo.
14:56Aqui, utilizamos o FlooredMódulo.
14:59O valor do módulo deve ser igual a 1 a 1, já que o Factor varia de 0 a 1.
15:07Pronto, com isso temos uma deformação cíclica.

Recomendada