O modelo 3D usado neste tutorial: Office wall clock 1

Olá a todos!

Este é o primeiro de dois tutoriais sobre Geometry Nodes no Blender (feito, em particular, com a versão 2.92 do software). Estes tutoriais são para todos os que já têm conhecimentos base sobre o Blender, pois vou tomar como garantida alguma informação sobre a interface e modelação (ambos em Object e Edit Mode).

A Geometry Nodes é uma ferramenta introduzida pela versão 2.92 do Blender, que permite transformar objetos de uma maneira paramétrica, ou seja, usando valores; na verdade, é um modificador que permite executar múltiplas operações, combinadas entre elas, dentro de um grupo.

B3D Geometry Nodes 1 01

No Youtube existem muitos tutoriais que mostram, sobretudo, como usar a ferramenta Geometry Nodes para substituir um sistema de partículas, com o objetivo de “dispersar” instâncias de objetos noutros (ou dentro deles), tais como rochas ou lâminas de vidro numa superfície ... bem, no próximo tutorial vou usar o mesmo exemplo, mas para este primeiro tutorial acerca deste tema quero-me focar em alguns conceitos básicos.

Temos dito que a ferramenta Geometry Nodes é um modificador e sabemos que os modificadores são distinguidos dos operadores do Blender porque permitem executar transformações de uma forma não destrutiva, o que significa que também é possível modificar alguns parâmetros num momento posterior e descobrir as modificações aplicadas noutros modificadores; por exemplo, no vídeo mostro a diferença entre uma colunata feita com o Array modifier (superior) e outra feita com o Spin operator (inferior): para modificar a altura das colunas, no caso do Array, basta ir ao Edit Mode e aumentar a geometria básica para determinar a alteração em todos os outros elementos; usando o Spin operator, por sua vez, terei de eliminar todos os elementos criados, modificar o primeiro elemento no Edit Mode e, depois, o Spin de novo.

B3D Geometry Nodes 1 02

Além disso, uma vez que uma operação tenha sido executada com um operator, se trocarmos para outra ferramenta não seremos capazes de modificar os parâmetros aplicados, enquanto que com os modifiers, estes parâmetros ficam disponíveis e podemos também modificá-los num momento posterior (até aplicarmos o modifier, claro).

B3D Geometry Nodes 1 03

Este é um exemplo mesmo elementar, mas a vantagem em usar modifiers – quando possível – é evidente, especialmente quando existe risco de fazer várias alterações aos elementos ou, pior, ter de fazer operações em sucessão, para os quais uma modificação pode-nos forçar a refazer operações subsequentes também; o que tem sido dito também explica porque modular com modifiers é chamado paramétrico e não destrutivo.

A ferramenta Geometry Nodes é, portanto, um modifier, mas, ao contrário de outros modifiers básicos do Blender, pode ser personalizado combinando nodes juntamente.

Nodes são, basicamente, a representação visual de dois tipos de elementos: informação ou operações; se têm experiência em criar Materiais ou em Pós-Produção no Blender, vão saber, por exemplo, que é possível obter uma informação de entrada (definida num Node), executar operações (através da combinação de um ou mais nodes intermédios) e finalizar o resultado de saída (o que será, por sua vez, definido num node). Assim, vamos ver como este conceito é aplicado às transformações de objetos, usando Geometry Nodes.

B3D Geometry Nodes 1 04

Estou a usar um relógio de parede como modelo para o exemplo usado neste tutorial; podem encontrar o link para este modelo na descrição do vídeo, mas não é necessário tê-lo: podem seguir o tutorial e aprender os conceitos sem, necessariamente, replicá-los com este modelo, claro!

B3D Geometry Nodes 1 05

Defini a interface do Blender para trabalhar com Geometry Nodes, abrindo um editor tipo "Geometry Node" sob visualização 3D e abrindo a aba Modifiers para o objeto selecionado no editor "Properties" (nota: estou a definir este layout porque estou a gravar o vídeo num monitor; se estão a usar um segundo monitor, recomendo que usem o 3D Viewport e o editor Properties num monitor e abram o editor “Geometry Nodes” no outro).

B3D Geometry Nodes 1 06

Os ponteiros dos minutos e das horas são objetos separados, pertencem ao relógio; ambos os objetos têm origem onde devem ter (o seu eixo), assim, uma rotação à volta do eixo Y (local) de cada objeto irá levar a uma correta rotação; de qualquer forma, para este tutorial, vamos recuperar a Origin de um dos dois ponteiros (selecionando-o e escolhendo o Cursor to Selected, do menu que podem abrir com SHIFT S), de seguida, eliminamos os três ponteiros presentes na cena.

Adicionamos então um Cube, que irá ter a mesma Origin que os ponteiros; isto é importante porque as transformações irão acontecer à volta desse ponto.

B3D Geometry Nodes 1 07

Vamos tornar o Cube no objeto principal na base do relógio original, para que possamos mover, rodar e redimensionar o Cube tão bem quando transformamos o relógio.

Vamos adicionar um Geometry Nodes modifier; esta operação pode ser levada a cabo no menu Modifier do objeto ou a partir do botão “New” no editor Geometry Nodes.

B3D Geometry Nodes 1 08

Por defeito, dois nodes são criados, chamados “Group Input” e “Group Output”; o de entrada fornece a geometria do objeto como é fornecida ao modifier (aqui o ponteiro já foi modelado e a Origin já foi definida manualmente: Geometry Input irá começar a partir destes dados), enquanto que o de saída é o que será devolvido no final de todo o processo, o qual iremos realizar entre estes dois nodes.

B3D Geometry Nodes 1 09

Os nodes são adicionados escolhendo-os do menu Add (atalho: SHIFT A); neste menu, em particular, notamos que os nodes são divididos em vários grupos, por exemplo, os nodes do Mesh e grupos Geometry irão atuar no objeto inteiro e na sua geometria (com operações em Object e Edit Mode), enquanto que os do grupo Point irão atuar nas partículas geradas; outros nodes servirão de exemplo para fornecer valores com os quais se transformam os objetos (grupo Input), enquanto que outros servirão para modificar esses valores (grupos Utilities e Vector).

B3D Geometry Nodes 1 10

Para transformar o cube no ponteiro dos minutos, vamos adicionar um Geometry - Transform node, colocando-o mesmo no meio do link que vai desde o Group Input até ao Group Output (Blender irá automaticamente estabelecer as conexões).

B3D Geometry Nodes 1 11

Vamos dar uma olhadela à cor dos portos de entrada e de saída dos vários nodes, com os quais dirigimos o fluxo dos dados e as suas operações: as Geometries têm cor verde e indicam a informação da geometria completa do objeto que passou lá; por outro lado, os portões tipo vector (que contêm tercetos de valores numéricos, um para cada eixo de rotação) são roxos.

Operamos em Translation e Scale para definir o ponteiro dos minutos; em particular, definimos Translation Z em 0.049 e Scale XYZ em 0.001, 0.001 e 0.050, respetivamente.

B3D Geometry Nodes 1 12

Quero apontar uma questão imediatamente: a rotação em torno do eixo local Y, para definir os minutos, NÃO deve ser levada a cabo neste node, pois aqui as operações são feitas para respeitar a geometria movida e redimensionada.

B3D Geometry Nodes 1 13

Para rodar à volta da Origin do cube, é necessário adicionar um novo Geometry - Transform node entre o que acabámos de criar e o Group Output: aqui seremos capazes de rodar em torno do eixo Y.

B3D Geometry Nodes 1 14

Outra coisa a ter em nota é que estas transformações acontecem, por assim dizer, “dentro do modificador”: examinando a aba Item - Transform do objeto, na visualização 3D, notamos que, na realidade, a Location, Rotation e Scale não estão aplicadas ao objeto original; além disso, se trocarmos o Edit Mode numa visualização 3D, notamos que, na realidade, o cube ainda lá está, com as suas características originais!

B3D Geometry Nodes 1 15

Este comportamento, semelhante em todos os aspetos ao encontrado no exemplo com Subdivision Surface, permite-nos entender que Geometry Nodes é, de facto, um modifier (e é possível aplica-lo, na aba Modifiers, desta forma tornando as transformações definitivas ... mas não o apliquem agora).

Vamos voltar atrás ao editor Geometry Node, selecionar o primeiro Transform node e duplicá-lo (com SHIFT D), depois arrastar a saída Geometry do Group Input para a entrada Geometry deste novo node, de seguida, passar o resultado final deste node para o Geometry input do Group Output.

B3D Geometry Nodes 1 16

Dentro do node, alteramos a Scale Z para 0.025 e a Translation Z para 0.025, para assim obter o ponteiro das horas.

B3D Geometry Nodes 1 17

Como conseguimos ver, é possível tomar a geometria inicial do objeto (neste caso, o cube) e passá-lo, do Group Input, para múltiplos operadores ... mas como obter AMBAS as geometrias modificadas no mesmo Object?

É simples: usando um Geometry - Join Geometry node, que nos permite unir múltiplas geometrias numa só e passar o resultado para outros nodes; portanto, é isso o que o Join operator faz no Edit Mode, mas aqui estamos a usar uma forma não destrutiva, dentro de um modifier!

B3D Geometry Nodes 1 18

Redefinimos o valor da Rotation Y do ponteiro dos minutos para 0, duplicamos este node e posicionamos a cópia no fluxo de trabalho do ponteiro das horas criado há momentos: desta forma, seremos capazes de definir o ângulo de rotação de forma independente quer para as horas quer para os minutos.

Por isso, vamos ver como criar uma pequena interface, com Geometry Nodes, para rapidamente definir horas e minutos na aba Modifier e fazer com que os ponteiros se movam automaticamente.

O que queremos fazer é definir a Rotation Y baseada no tempo (um número entre 0 e 60 para minutos e entre 0 e 12 para horas, inclusive). Vamos começar com a Rotation dos minutos.

É de notar que a Rotation tem um porto de entrada roxo, por isso é um vetor; para separar os canais de entrada, adicionamos um Vector - Combine XYZ node e conectamos a saída de Vector do node adicionado à entrada da Rotation de Transform, depois conectamos a entrada Y de Combine XYZ a uma nova entrada de Group Input (arrastar apenas o link de Combine XYZ para o porto de entrada semivisível do Group Input, sob Geometry).

B3D Geometry Nodes 1 19

Na aba Geometry Nodes modifier, o parâmetro de entrada “Value” irá aparecer com um valor por defeito; para alterar o nome deste parâmetro para "minutes", abrir a Sidebar do editor "Geometry Nodes" (atalho: N, enquanto o cursor do rato está nesse editor), depois alterar o nome de "Value" para "Minutes".

B3D Geometry Nodes 1 20

Também podemos definir o valor 0.0 para Min (valor mínimo que o utilizador pode escrever) e 60.0 para Max.

B3D Geometry Nodes 1 21

Contudo, escrevendo qualquer valor entre 0 e 60, notamos que o ponteiro dos minutos não roda adequadamente; isto deve-se ao facto desse valor do ângulo Y ser expresso em redianos e, em particular, o ângulo redondo tem o valor de 6.28 (que é: duas vezes pi).

Para levar a cabo este mapeamento (isto é: trazer um valor na faixa dos 0 - 60 para um na faixa dos 0 - 6.28), adicionamos um Utilities - Map Range node entre a saída "Minutes" do Group Input e a entrada Y de Combine XYZ, depois definimos os valores do node (que têm significados justamente intuitivos), desta forma:

  •  0 em From Min;
  •  60 em From Max;
  •  0 em To Min;
  •  6.28 em To Max.

B3D Geometry Nodes 1 22

Agora, na aba Modifier podemos escrever facilmente o valor dos minutos que queremos que apareça no relógio e o ponteiro dos minutos irá rodas constantemente: mais conveniente do que ter de rodar o objeto em torno do eixo Y!

B3D Geometry Nodes 1 23

Para o ponteiro das horas, o padrão de nodes é praticamente idêntico, exceto para valores de mapeamento no node Map Range; assim, vamos proceder da seguinte forma:

  • Selecionamos e duplicamos o Map Range e Combine XYZ dos minutos, posicionando as cópias num espaço vazio do editor; 
  • Conectamos o Vector do novo Combine XYZ para a entrada Rotation do ponteiro das horas;
  • Conectamos a entrada Value do novo Map Range para uma nova saída Group Input (à qual damos o nome de Hours, entre outas coisas);
  • Vamos modificar o valor “From Max” do Map Range node das Hours de 60 para 12.

B3D Geometry Nodes 1 24

ATENÇÃO: vamos selecionar o Group Input e assegurarmo-nos de que os valores Max dos portos de saída para Minutes e Hours estão definidos corretamente para 60 e 12, respetivamente!

B3D Geometry Nodes 1 25

Neste ponto, podemos definir as horas e os minutos dos ponteiros na interface do Blender e especificar o tempo que desejarmos ... já terminámos? Bem, não: num relógio real, como o ponteiro dos minutos se move para a frente, o ponteiro das horas também se move (de uma hora para a seguinte), isto não acontece neste modelo (experimentem, por exemplo, definir “2:50” ou “4:55”: o ponteiro das horas para no 2 ou no 4, enquanto deveria estar perto do 3 ou do 5).

O que necessitamos é de um pequeno incremento, um “offset” de rotação para o ponteiro das horas, o qual deve ser, em particular, no máximo 30 graus (um duodécimo de um ângulo de um ângulo de rotação, quando o ponteiro dos minutos está perto de 60).

Assim, primeiro, devemos pegar no valor de entrada dos Minutes e dividi-lo por 2, sendo que o podemos fazer com um Utilities – Math node, alterando o seu modo para Divide e definindo “Minutes” para o primeiro valor e 2 para o segundo valor de entrada.

B3D Geometry Nodes 1 26

O resultado obtido é a deslocação da rotação a ser fornecida ao ponteiro das horas, mas este valor é expresso EM GRAUS, enquanto que nós o queremos em RADIANOS… bem, podemos facilmente fazer a conversão através de outro Utilities – Math node, desta vez em “To Radians”!

B3D Geometry Nodes 1 27

Para adicionar este valor a um resultante do Map Range do ponteiro das horas (que já está em radianos), vamos adicionar um Utilities – Math node adicional, desta vez no modo Add, adicionando o Map Range e a saída do “To Radians”, para depois passar o resultado da operação para o Combine XYZ e depois, por fim, para a rotação Y do ponteiro das horas.

B3D Geometry Nodes 1 28

Em teoria, neste ponto, tudo funciona, tal como podemos ver fazendo alguns testes na interface, através da aba Modifier; além disso, se transformarmos o relógio, as alterações são aplicadas consistentemente aos ponteiros também… ou melhor, são aplicadas ao objeto Cube!

Os dois ponteiros são, na verdade, geometrias do mesmo Cube original, que ainda lá se encontra e se relaciona (como um filho) com o relógio: todas as alterações foram feitas no Geometry Nodes node e podem ser alteradas mais tarde, até aplicarmos o modifier.

Antes de terminar este tutorial quero, no entanto, partilhar uma última observação: os campos das “Hours” e “Minutes” na aba modifier também aceitam valores decimais e consideram-nos nos seus cálculos, pelo que o resultado visual pode ser incorreto (tentar, por exemplo, definir 0 para os minutos para 9.30 para as horas).

Uma forma pouco elegante, mas funcional, de resolver este problema é inserir Utilities – Math nodes no modo Rounding – Floor (isto é, arredondar ao menor inteiro mais próximo), imediatamente após os portos de “Minutes” e “Hours” do Group Input; isto não vai esconder os decimais na interface do modificador, mas, pelo menos, ignora-os nos cálculos.

B3D Geometry Nodes 1 29

B3D Geometry Nodes 1 30

Agora sim! Terminámos verdadeiramente a interface do nosso relógio… e terminámos também este primeiro tutorial sobre Geometry Nodes no Blender 2.92! No próximo tutorial (e último desta minissérie), vamos ver um exemplo de dispersão de objetos sobre uma superfície.

Até breve!