Construindo cidades com um clique do mouse com Houdini e Python



No desenvolvimento de jogos, pipelines, algoritmos e pequenos processos são criados e aplicados constantemente, o que economiza muito tempo e esforço. Muitas vezes, essas soluções são simples, mas elegantes.

Este artigo é sobre isso. O autor surgiu com um método de construção de cidades virtuais, que no futuro ele deseja se transformar em uma ferramenta completa de um designer de níveis.

Neste artigo, examinarei as configurações básicas da ferramenta City Builder em Houdini, que pode construir cidades com simples cliques do mouse. Observe que ele só funciona dentro do Houdini usando os estados do Python Viewer.

Referência


A maior inspiração para mim foi Oscar Stolberg . Seu trabalho foi impressionante e me fez pensar se é possível repetir isso em Houdini. Minha tentativa também pode ser considerada uma prova de que é bastante realista reproduzir qualquer idéia em outro software.



Configuração inicial


A primeira coisa a fazer é a grade ou avião no qual as casas serão construídas. Teoricamente, poderia ser qualquer coisa, por exemplo, triângulos, hexágonos e assim por diante. A maneira mais fácil que eu encontrei é usar o quadrilátero.

Comece com o nó do círculo e coloque um nó de malha instantâneo sob ele (é das ferramentas do Labs, verifique se você os instalou).



Depois disso, coloque o nó de extrusão - posteriormente, ele será usado para extrudar as primitivas selecionadas pelo mouse.



A configuração será minimizada no HDA, nele você criará um parâmetro para trabalhar com o código Python. Nesse caso, você precisa controlar o parâmetro group para estender e preencher as primitivas nas quais o mouse clica.



Estados do visualizador Python


Agora você pode acessar o código Python. Se você é novo nos estados de visualizador, escrevi anteriormente uma introdução básica a ele.

Crie um novo estado de visualizador e comece com um modelo vazio. Isso gerará apenas o código realmente necessário.



Há algumas coisas a acrescentar. Você pode dividi-los em 2 partes:

  • Obtendo a geometria para visualizar com cliques do mouse.
  • Ficando primitivo com um clique do mouse.

Para começar, na parte init, adicione uma nova variável para a geometria chamada self.geometry = None. Em seguida, adicione a função OnEnter - esse método é chamado quando o estado é ativado pelo usuário que cria / seleciona o nó e pressiona Enter na janela de exibição.

É aqui que a geometria atual é armazenada na própria self.geometry. Feito usando node.geometry ().



Agora há uma conexão com a geometria.

A próxima parte é obter um número primitivo com base na posição do mouse ao clicar. Para fazer isso, crie a função OnMouseEvent - este é o processamento de eventos do mouse (como cliques ou posição do mouse).

No início do evento do mouse, crie variáveis ​​para trabalhar. Em seguida, faça a interseção com a geometria usando a função GeometryIntersector e use self.geometry.

A partir desse cruzamento, você obterá as informações necessárias, descobrirá e imprimirá um número primitivo.



Se tudo for feito corretamente, ocorrerá o seguinte:



A última configuração é usar um número primitivo no parâmetro group, o que você fez no início. Substitua a sequência por uma nova, chame o parâmetro group e defina o número primitivo como o valor. Observe que também é convertido em uma string, porque group é um parâmetro de string.



Acontecerá o seguinte:



Esta é a ideia principal com a qual comecei a criar uma ferramenta. A partir de agora, você armazenará informações, não as reescreverá. Essa configuração fornecerá uma base para o início e mais experiências.

Detalhe


Depois de ter esses cubos, você pode fazer qualquer coisa com eles. Se você precisar de uma cidade, crie um gerador de casas - há muitos tutoriais sobre esse assunto na Internet. Enquanto isso, meu exemplo.

Uma parede modular é copiada em cada lado do cubo.



Uma borda chanfrada e desdobrada com UV.



O desempenho é muito importante aqui. Para que a ferramenta funcione rapidamente e quando você pressiona a casa aparece instantaneamente, você precisará fazer a otimização. Para fazer isso, você pode tentar usar o número mínimo de nós de loop e nós booleanos na rede.

Futuro do instrumento


Eu quero ir mais longe e torná-lo uma ferramenta para criar níveis. A ideia é que você possa prototipar rapidamente os níveis concluídos com alguns cliques. Eu fui inspirado pelo Hob .



Finalmente, uma pequena demonstração do que recebi no momento:


All Articles