
Quando a transição do DX9 para o DX10 acabou de começar, muitos jogos começaram a aparecer com água modelada com os efeitos certos. Então a diferença era muito perceptível, especialmente se você comparar jogos das gerações passadas com o mesmo Crysis. Portanto, quando me deparei com um guia sobre como fazer uma simulação de rio simples, mas realista, por meio do plug-in Houdini para UE4, nem pensei nisso e o traduzi rapidamente.
Prólogo
- Faça o download dos ativos da Unreal e da Houdini. O vídeo de instalação está aqui .
- Na maior parte do projeto, segui os tutoriais de Ben Shriver e Andreas Glad .
- Não tenha medo de nós e scripts. Não é tão difícil quanto pode parecer.
- Para água, usei o mapa normal do conteúdo do Unreal Starter.
1. Introdução
Meu nome é Simon. Comecei a programar no QBasic e Pascal quando jovem (aqui estão alguns
exemplos ), percebi imediatamente que a codificação é difícil e mudei para a arte 3D. Ao mesmo tempo, sempre mantive interesse no lado técnico da criação de jogos - acabei me tornando um artista de efeitos visuais. Esta profissão combina bem arte e tecnologia.
Trabalhei como artista 3D em
Sacred 2 e
X: Rebirth e como artista de
efeitos visuais no
RiME ,
The Invisible Hours . Agora estou trabalhando no
WiLD .

Também tenho vários projetos pessoais relacionados ao desenvolvimento de jogos: o blog
Game Art Trick , o canal alemão
Game Dev Podcast e os canais do YouTube com os tutoriais da
Unreal e
Houdini .
Apresentando Houdini
Fiz amizade com Houdini enquanto trabalhava nas Horas Invisíveis. Depois, criei um pequeno simulador de fluidos que poderia ser pausado, implantado e reproduzido em tempo real. O resultado foi assim:
Fonte: Simulação de Fluidos das Horas InvisíveisEu não tinha ideia de como adicionar modelagem de fluidos ao Unreal. Felizmente, uma tecnologia incrível chamada
Animação por Fluido com Base em Alvos Agudos de Vertex-Count-Agnostic foi implementada em Houdini e, portanto, pude adicionar minha simulação de fluidos ao jogo. A tecnologia foi originalmente desenvolvida por
Norman Shaar .
Fonte: Alvos de Morph Agudos e Vertex-Count no UE4 Norman ShaarSe você quiser saber mais sobre a implementação, confira esta seção da minha palestra Cool Stuff with Textures:
Efeito River: O Início
Eu queria aprender como criar um rio processualmente gerado para o
Realtime VFX River Challenge , mas não tinha ideia de por onde começar. Por acaso, me deparei com um ótimo
tutorial de Ben Shriver , onde ele fala sobre rios em Horizon Zero Dawn. Eu estava viciado e decidi tentar!
A propósito, há outro tutorial muito legal sobre os rios Houdini de
Andreas Glad :
Esses vídeos realmente me ajudaram no começo e se tornaram a base.
Uma maneira muito difícil de construir paisagens
O alívio foi muito complexo. Ilustrarei o processo de criação para que todos entendam:
Fonte: Criando terreno em HoudiniBrincadeira. É muito fácil
Efeito rio
Os primeiros passos são 100% copiados do tutorial de Ben e são legais. Primeiro, você cria um spline e o deixa "cair" no chão. Isso é feito lendo a altura do relevo nos pontos do spline e movendo os pontos para essa altura:

Em seguida, deixe os pontos do spline deslizarem ladeira abaixo para integrar melhor o rio ao terreno:

De fato, eles não rolam fisicamente. Em vez disso, a base normal da superfície e a normal do ponto são usadas para calcular o eixo local de cada ponto (que se move do spline para baixo da inclinação). Então você move os pontos um pouco ao longo do eixo calculado (esse processo é muito bem mostrado no vídeo de Ben).
O próximo passo é garantir que o rio não flua a montante devido à paisagem (porque há uma pequena colina onde o rio corre).

Um pequeno script Python garante que o ponto de spline no espaço 3D nunca seja maior que o anterior:

Outro truque para adicionar naturalidade é evitar inclinações contínuas. Em vez disso, deixe o rio fluir em etapas (para melhor visualização, mostro a geometria do rio aqui, mas, na realidade, ainda estamos trabalhando com apenas um spline).

Finalmente, chegamos à etapa em que apresento minhas próprias idéias: adicione cores ao spline para marcar onde a inclinação é (verde), onde começa (turquesa) e onde termina (vermelho). Isso me ajudará mais tarde a misturar diferentes texturas de água e a colocar sistemas de partículas.

Vamos continuar a criar a geometria do rio mais rapidamente, pois tudo isso é perfeitamente explicado no vídeo de Ben. O ponto mais importante é que apenas as margens externas do rio estão novamente alinhadas com o relevo (como fizemos com o spline em primeiro lugar):

Deformação do terreno de acordo com o fluxo
Novamente, esse é o fluxo de trabalho de 100% de Ben, começando com o movimento do relevo abaixo da geometria do rio, para que eles não se cruzem de forma alguma:

Então, para cada ponto do terreno, você desenha raios para cima. Se eles caírem na geometria do rio, esses pontos serão movidos para o local do impacto:

Cada ponto que não atingiu nenhum lugar receberá sua altura original.

Este gif mostra o que acontece quando o spline muda:

Em seguida, a região da altura da paisagem é convertida em polígonos e misturada novamente. Agora está pronto para uso no Unreal:

Agora vamos falar sobre conversão UV, materiais, mapas de fluxo e muito mais.
Geometria do rio
A geometria do rio, que você viu anteriormente, foi usada apenas para cortar a área. O rio real é um pouco mais fino, tem UV e foi dividido (observe que minhas cores de inclinação ainda estão lá):

Geração UV
Como o spline sempre varia em comprimento, o UV deve se adaptar a isso. Felizmente, isso é muito fácil em Houdini. Primeiro, você cria um UV no espaço 0-1-UV e depois mede o comprimento do spline. Este valor pode ser usado para escalar UV. Aqui você vê como altero o spline e, na parte inferior - como o UV se adapta automaticamente. Acredite, se você já tentou isso, nunca mais precisará criar UV manualmente.

Canal
Outro detalhe: eu queria deixar o canal mais escuro e molhado. Para fazer isso, faço alguns raios de cada polígono da paisagem e, se eu entrar no rio, atribuo uma cor a todos os pontos desse polígono. A máscara criada é a seguinte:

E aqui está um exemplo usando uma máscara em um material para atribuir diferentes valores de imprecisão e aspereza:

Fluxograma
Criar um mapa de fluxo fluvial com Houdini é muito fácil. Você acabou de dizer ao nó especial "esta é a minha geometria do rio, e este é um spline que indica a direção do rio" e o boom, a geometria repentinamente obtém as cores dos picos que representam o fluxo do rio:

Você pode adicionar outro nó que faz o mapa de fluxo responder a obstáculos. Agora a água fluirá ao seu redor:

E o mais legal: você pode causar o cozimento do mapa de fluxo no Unreal! Não há necessidade de alternar entre Unreal e Houdini. Basta definir o botão Render no Houdini como parâmetro. Aqui você vê como eu mudo obstáculos e visualizo um novo mapa de fluxo (observe que o cozimento leva mais tempo do que em um GIF):

Máscara de espuma
Para fazer espuma na água em torno de obstáculos, eu uso o chamado nó isoOffset. Basicamente, ele armazena a distância do objeto na cor do topo do rio. Então eu adicionei um pouco de barulho e a máscara está pronta:

Para tornar a máscara de espuma menos estática, eu uso um modelo simples de nuvem do Photoshop que eu movo ao longo do rio e subtraí-o da máscara original:

E já que estamos falando de espuma: as cascatas também têm uma textura simples de espuma, que é mostrada apenas na margem do rio. A estrutura de espuma rola mais rápido que a água do rio:

Sistemas de partículas
Observei onde estão as partes superior e inferior da minha cascata, para que eu possa filtrar esses elementos (linhas foram usadas para criar a geometria do rio), criar um ponto no centro e copiar a caixa dummy. Mais tarde, substituí-lo pelo sistema de partículas em Unreal:

Para partículas em torno de obstáculos, eu uso um nó chamado Análise de interseção para obter a interseção dos obstáculos e do rio. Essas arestas de interseção têm pontos. Para seu número aleatório, copio novamente a caixa dummy (que depois é trocada com o sistema de partículas em Unreal):

Isto é o que parece quando substituo as caixas fictícias no Unreal:

Exportando um projeto para o Unreal
O chamado mecanismo Houdini é um plug-in para Unity, Unreal, 3ds Max, Maya e Cinema 4D e executa uma rede de nós que você cria no Houdini diretamente nesses programas. Preciso fazer com que o terreno e o rio apareçam para salvar o arquivo Houdini como um ativo digital. Ele pode ser importado e usado como qualquer outro recurso no Unreal:

Agora eu posso alterar os parâmetros (definidos em Houdini) ou alterar o spline para que o rio flua de uma maneira diferente:

Os materiais ainda são criados e atribuídos no Unreal, mas você pode atribuí-los com antecedência (abaixo está o meu tutorial sobre isso).
Devemos estudar igualmente os fluxos de trabalho do Houdini?
Houdini tem muito a aprender. Além disso, essas são novas ferramentas de desenvolvimento, portanto, imprecisões ocorrerão na documentação.
Mas essa é uma situação comum para desenvolvedores de jogos. Trabalhamos constantemente com tecnologias avançadas que precisam ser domadas primeiro. Mais importante: você não está sozinho.
A Discórdia Procedimental do Pensamento está cheia de caras legais que ajudarão e ensinarão. Nessas conversas, você pode até encontrar desenvolvedores do SideFX!
Referências