Nesta série de blogs, abordaremos todos os aspectos da criação da nossa demo “Livro dos Mortos”. Hoje, focamos em recursos de fotogrametria, árvores e efeitos visuais. Este é o quarto blog da série. Dê uma olhada nos dois últimos blogs que abordam a criação de personagens e artes conceituais de “Book of the Dead”.
Olá, meu nome é Zdravko Pavlov e sou um artista de CG e VFX com experiência em VFX, composição de vídeo, edição e design gráfico. Trabalho com a equipe de demonstração da Unity desde 2014 e contribuí com várias partículas, dinâmicas de corpos rígidos e simulações de tecidos nas demos “Viking village”, “The Blacksmith” e “Adam”.
A demo de “Book Of The Dead” foi um pouco diferente. Um território completamente novo para mim, já que meu papel neste projeto seria criar vários ativos ambientais usando uma abordagem de fotogrametria. Fotografia ao ar livre é meu hobby, então fiquei mais do que feliz em realizar tal tarefa. Criando árvores? Quer dizer, quão difícil pode ser, certo? No post a seguir tentarei descrever tudo o que aprendi durante a fase de pré-produção e desenvolvimento do projeto.
Felizmente, atualmente, a Internet está cheia de informações valiosas sobre esse processo, então foi aí que meu aprendizado começou. O que a maioria dos artigos lhe dirá é que o que você precisa é de qualquer câmera DSLR com lente prime de 50 mm. Eu não tinha nenhuma dessas câmeras à disposição na época, então decidi fazer meus testes iniciais com minha Sony a7II mirrorless de 24 MP com uma lente de zoom de 16 mm-35 mm. E deixe-me dizer logo que funciona muito bem! A lente mais larga causa mais distorção, mas você sempre pode consertar isso no Lightroom, por exemplo. Na verdade, é melhor não fazer isso! O software de fotogrametria lida com isso com elegância. Lentes fixas são mais rígidas e, em teoria, devem proporcionar uma imagem mais nítida. Eles são realmente ótimos se você digitalizar em um ambiente de estúdio controlado e eu os recomendo fortemente em tais cenários. No entanto, em campo, ser capaz de enquadrar corretamente o objeto desejado com uma lente de zoom de qualidade lhe dará uma vantagem.
Testei a maioria dos softwares de fotogrametria mais populares que existem e alguns deles funcionaram muito bem. Escolhi o RealityCapture por causa de seu desempenho significativamente melhor e capacidade de processar uma grande quantidade de fotos sem ficar sem RAM. A quantidade de detalhes que ele consegue reconstruir a partir das fotos é incrível! Consegui obter modelos, às vezes de até 185 milhões de triângulos, e exportar com sucesso a geometria no formato PLY.
Isso, claro, é mais que suficiente e também um pouco extremo. A maioria das minhas reconstruções resultou em algo em torno de 50 a 90 milhões de triângulos. No início, eu estava usando o GF980TI, mas depois atualizei para o GF1080, o que me deu um pequeno aumento de desempenho.
Em algum momento, também atualizei minha câmera para uma Sony aRII de 42 MP com uma lente Planar T* FE 50mm f/1.4 ZA. No entanto, dobrar a resolução e usar a lente prime super nítida não me deu os resultados "UAU" que eu esperava. Por um lado, a lente principal mais longa (e estreita) significa que você tem que dar alguns passos para trás para ter a sobreposição de imagem necessária para uma reconstrução bem-sucedida. Isso nem sempre é possível quando você está no meio da floresta, com todas as outras árvores, arbustos e tudo mais. Isso também significa que você precisa gerenciar, armazenar e processar o dobro de gigabytes de dados de imagem. Mas isso não necessariamente leva a digitalizações de alta definição. Ter mais imagens é o que te leva lá, e tê-las em 24 MP é mais administrável. Isso pode parecer óbvio, mas não me ocorreu até que eu realmente tentei em primeira mão.
Como mencionei, usei um formato PLY para exportar a geometria incrivelmente densa. Eu prefiro isso ao FBX, embora o exportador PLY do Reality Capture não tenha controles de escala e orientação de eixo, então, diferentemente dos FBXs, os PLYs estavam fora de escala e giravam. Decidi lidar com isso porque estava recebendo alguns erros ao processar texturas usando o FBX. Além disso, a exportação binária FBX foi implementada posteriormente.
Poucos softwares conseguem lidar com essa quantidade de polígonos, então apenas armazenei o arquivo e usei os recursos de dizimação do RC para criar uma versão de baixo polígono do mesmo modelo. Geralmente em torno de 1 milhão de triângulos. E esse pode ser aberto no ZBrush, MeshLab ou qualquer outro software de modelagem, onde pode ser retopologizado e desembrulhado. Dependendo do modelo, usei técnicas diferentes para retopologia. Muitas vezes ZRemesher e às vezes manualmente.
Depois usei o xNormal para preparar texturas. O xNormal não parece se incomodar com centenas de milhões de triângulos e lida com isso com facilidade. Eu assei a textura difusa usando as informações de cor do vértice. A densidade de vértices no highpoly foi mais que suficiente para produzir uma textura limpa e nítida, sem qualquer interpolação entre vértices. Nunca usei os recursos integrados de desembrulhar e texturizar do RC.
Dito isso, se por algum motivo sua nuvem densa não for densa o suficiente, ou houver algumas áreas faltando (como na imagem abaixo), projetar uma textura de suas fotos pode trazer detalhes adicionais a essas áreas.
O que a maioria dos tutoriais de fotogrametria ensina é que é melhor evitar iluminação direta e forte, bem como sombras ao escanear um objeto. Se for uma pedra pequena que você está prestes a capturar, você pode levá-la para a sombra ou até mesmo para o estúdio e usar softboxes e toca-discos. Mas não é possível fazer isso com árvores, então fiquei observando a previsão do tempo e torcendo por um tempo nublado. Entretanto, mesmo em condições nubladas, houve algumas sombras e oclusão ambiental. Isso é resolvido com a ferramenta DeLighting da Unity. Tudo o que você precisa é de um mapa normal, um mapa normal dobrado e AO cozido. Ele mantém os valores difusos intactos enquanto remove as sombras.
Os ativos resultantes foram então importados para o Unity para testar a iluminação dinâmica e os shaders.
Há momentos em que simplesmente não é possível capturar todas as partes do seu modelo. Ou há um obstáculo e você não consegue pegar todos os ângulos. Outras vezes você está com pressa ou a bateria está acabando e você perde alguma coisa e não percebe até chegar em casa e começar a processar os dados. Cometi muitos erros como esse, mas consegui salvar parte do meu trabalho usando o Substance Painter para clonar o carimbo e tentar corrigir os dados ausentes.
Durante a maior parte da produção de Book of the Dead, a equipe de demonstração não tinha um artista de ambiente na equipe e estávamos procurando um. Parte do trabalho foi contratada para um artista de ambiente externo, Tihomir Nyagolov, que fez as explorações iniciais e criou uma caixa branca para o ambiente, mas a carga principal do trabalho recaiu sobre o Diretor de Arte e Criação, Veselin Efremov, e eu. Cada um de nós ia até as florestas próximas para capturar dados de fotogrametria, e o trabalho naturalmente se transformava em produção dos recursos finais do jogo que eram necessários. Não tenho formação em arte de ambiente e não tenho experiência alguma em lidar com otimizações de jogos, LODs etc. Naquele ponto, já havia algumas árvores de espaço reservado criadas por Tihomir com a ajuda do GrowFx, então assumi a partir daí, aprendendo no decorrer do processo.
O GrowFX provou ser uma ferramenta realmente poderosa e versátil para criar todos os tipos de vegetação. Ele interage com outros objetos na sua cena para que você possa obter todos os tipos de resultados únicos e naturais. Ele não foi criado exatamente com a criação de recursos de jogo em mente, mas é controlável o suficiente e pode ser usado para essa tarefa. É um plugin do 3DS Max. Sou usuário do 3DS Max há mais de 20 anos e realmente me sinto em casa nele. Infelizmente, o GrowFX depende de alguns componentes desatualizados do 3DS Max, como as caixas de diálogo de edição de curvas, que não são muito convenientes, mas ainda assim era uma boa ferramenta para a tarefa em questão, então tive que lidar com isso.
A floresta no Livro dos Mortos foi concebida principalmente para ser de coníferas. Existem algumas florestas e parques lindos perto da minha casa, então fui em uma "caça" e examinei alguns deles. Depois, comecei a costurar minhas criações GrowFX nos modelos digitalizados. O tronco final da árvore foi composto de geometria escaneada e textura única na parte inferior, costurada a um tronco gerado processualmente com textura que pode ser aplicada em mosaico no restante, até o topo.
Um pequeno pedaço da parte inferior foi clonado e estampado na parte superior da textura para torná-la ladrilhada
Uma coisa é fazer fotogrametria em rochas e troncos de árvores, mas escanear agulhas de pinheiro é algo totalmente novo. Foi aí que a Quixel entrou em cena e nos forneceu seus atlas lindamente digitalizados. Eles colaboraram com a Demo Team e fizeram vários pequenos recursos como grama, arbustos, detritos, etc., especialmente criados para “Book Of The Dead”.
Como mencionei no começo, minha formação é em produções de CG e já criei grandes florestas antes, usando Multiscatter ou Forest Pack Pro e renderizando em V-ray. Em tais tarefas, você pode usar os atlas Quixel Megascans como eles são, mas para um projeto em tempo real como o Book of the Dead, precisamos fazer alguma otimização. Incluía a construção de elementos maiores (galhos, copas de árvores etc.) e sua organização em novas texturas, transferência dos dados escaneados iniciais para os mapas normais, deslocamento, transmissão e assim por diante.
Os dados normais existentes do Megascans foram ligeiramente modificados para dar uma impressão falsa de volume geral.
Usei diferentes técnicas de edição de normais, como Normal Thief e outros scripts personalizados do 3DSMax para mesclar os galhos com o tronco.
Alterando as normais do vértice para que elas possam se misturar com o tronco
Usando essa abordagem, consegui produzir diferentes tipos de pinheiros.
Queríamos que a floresta parecesse “viva” e o vento era um elemento crucial para nós. As árvores foram criadas para nossa solução de animação de vento baseada em shader de vértice pelo nosso artista ambiental Julien Heijmans.
Há muitas maneiras diferentes de criar um campo vetorial e pesquisei diversas opções. Estando familiarizado com o solucionador de fluidos do Chaosgroup, o PhoenixFD, decidi ver que tipo de dados utilizáveis eu poderia obter dele e trazê-los para o Unity. Consegui exportar a geometria da cena, trazê-la para o 3DS Max como um FBX e passar um pouco de fluido por ela, que gira em torno da vegetação e cria o efeito de vento turbulento. As árvores maiores protegiam a vegetação menor e o efeito ali era menos proeminente.
Fiz um loop da sequência simulada usando os controles de reprodução integrados do PhoenixFD.
As informações vetoriais foram então lidas por meio de um PhoenixFD Texmap, normalizadas e inseridas como uma textura difusa sobre a isosuperfície criada processualmente.
A sequência de imagens renderizadas foi então importada de volta para o Unity, onde o atlas de textura final foi montado. Eu costumava fazer isso no After Effects no passado, mas agora o Unity tem uma ferramenta muito prática, o Sequenciador de Imagens, que pode fazer isso quase automaticamente. É uma das novas ferramentas de efeitos visuais que está sendo desenvolvida pela equipe de efeitos visuais da Unity em Paris.
O atlas de textura criado foi colocado na cena. Criei uma caixa simples para definir os limites da minha simulação e usei-a como referência de posição.
Para deixar claro, este foi um experimento que nos permitiu ampliar o visual de algumas das cenas do teaser cinematográfico que mostramos. É um método que posso recomendar se você estiver usando o Unity para produção de filmes. Ele se conecta à principal solução de animação de vento baseada em shader de vértice procedural, que foi desenvolvida para o projeto pelo nosso líder técnico Torbjorn Laedre e foi usada na maioria das cenas do teaser, bem como na versão de console do projeto que mostramos na GDC.
Em uma próxima postagem do blog, Julien e Torbjorn explicarão mais sobre como lidamos com o Vento e a solução final que adotamos.
Comecei a bloquear algumas ideias sobre a Colmeia logo no começo.
Após o design inicial, comecei a construir vários elementos prontos para o jogo para criar os recursos do Unity .
Para os malucos, fiz algumas explorações para as variações do corpo. Novamente usei o PhoenixFD do Chaosgroup e executei uma simulação de fumaça fluida. Então cortei o formato do parafuso e criei uma isosuperfície com base na temperatura do fluido
Algumas explorações de formas feitas com PhoenixFD
Esse método nos permitiu visualizar rapidamente diferentes formas e foi usado como referência geral. O modelo final do personagem maluco foi criado por Plamen (Paco) Tamnev e você pode ler tudo sobre ele em seu post de blogincrivelmente detalhado.
Para conseguir a seiva pingando no rosto do maluco, usei PhoenixFD novamente. Comecei fazendo uma pequena prova de conceito mostrando as capacidades e o que podemos alcançar com um líquido viscoso denso.
Fiquei bastante satisfeito com o resultado geral e o movimento fluido, então prossegui com a configuração do modelo real. O objetivo era evitar que a simulação formasse muitas peças e gotas separadas.
Isso me permitiu obter um único quadro da sequência geométrica gerada, retopologizá-lo, criar UVs e usar o WRAP3 para projetá-lo sobre o restante das formas na sequência. Como resultado, tenho uma série de formas de mistura que usam a mesma topologia.
Também tentei executar uma simulação de seiva em alguns troncos de árvores.
Acabamos não usando isso no projeto final. No entanto, ainda acho que é uma boa maneira de adicionar alguns detalhes aos modelos digitalizados.
---
Fique ligado na próxima postagem da série. Vamos nos aprofundar mais na arte ambiental criada para Book of the Dead com Julien Heijmans.
Encontre-nos noUnite Berlinem 19 de junho para conhecer o ambiente do Book of the Dead em um console e assista à apresentação de Julien Heijmans sobre arte do ambiente na demo. Veja aprogramação completa aqui.