IMPUNES Devlog: Objetos e vegetação

O que aconteceu?

Recentemente o Quixel Megascans ficou grátis para todas as game engines, onde anteriormente era grátis somente para jogos criados usando Unreal, deste modo, nós, que usamos Unity, agora podemos também usufruir de modelos realistas escaneados em 3D!

Você pode não conhecer por nome, mas já deve ter jogado algum jogo (tanto indie quanto AAA) que utiliza esses objetos.

Eles são de qualidade excepcional, justamente por serem escaneados em 3D com tecnologia de ponta, portanto eles são literalmente fotorrealistas, juntamente com o básico de shadermaps.

Ainda assim, há alguns pequenos pontos negativos: Por serem scans, a topologia não é das melhores, portanto dificulta otimização em LODs baixos; e são objetos reutilizados em centenas de jogos, e nós nos preocupamos em entregar um produto que não pareça “genérico”, portanto os objetos que estaremos usando são principalmente secundários, evitaremos usar em objetos importantes demais (exceto se forem realmente muito superiores, como foi o caso dos sacos de lixo, onde decidimos desconsiderar os nossos, mesmo que bons, os sacos do Megascans são excelentes).

O que fizemos?

Junior_Djjr revisou literalmente todas as dezenas de milhares de objetos 3D (comumente chamados de “props”) do Quixel Megascans, selecionando os úteis para o jogo (ou seja, coisas que combinam para uma ambientação brasileira), e baixando as versões de LODs mais baixos, por otimização.

Acreditamos na importância da transparência do que nós criamos e não criamos: A maioria dos assets acima não são criados por nós, mas mesmo os não criados, eles são convertidos aos nossos shaders e padrões (de qualidade, cores etc), e estamos fazendo pequenas mudanças, como trocar cores e adições de rótulos em embalagens, para combinar com a ambientação do nosso jogo.

Boa parte dos objetos da imagem são do Megascans, enquanto os outros são próprios criados por nós, comprados ou baixados grátis (tudo com seleção e ajustes manuais). Vegetações são criadas, ou compradas e editadas por nós com SpeedTree, e algumas poucas são compradas de asset. Muitas plantas pequenas são do Megascans.

Mesmo que exista ferramentas “bridge” para auxiliar na importação de objetos do Megascans pra Unity, nós tivemos preferência em fazer nossa própria ferramenta automatizada de adaptação de assets do Megascans, o que em muitos casos é útil também para outros assets.

A ferramenta auxilia no setup de um prefab (pré-definição de um objeto de jogo, explicando grosseiramente) dado um nome (que verifica automaticamente na pasta de props do jogo para ver se já não usamos um objeto de mesmo nome), mesh (o modelo 3D) para cada nível de LOD (se houver mais de um), cada textura, e outras opções de auxílio.

Por otimização, nós criamos o nosso próprio shader, algo comumente chamado de “uber shader”, onde todas as funcionalidades gráficas dos objetos do jogo ficam dentro de somente 1 (ou poucos) shader, que inclui variações de funcionalidades, portanto cada objeto do jogo, deve usar os nossos próprios shaders, em vez dos shaders padrões da Unity ou outros.

Também por otimização, nós utilizamos um “packed map” onde é uma textura em que cada canal de cor é um mapeamento de um elemento do shader: R é o metallicness; G é o ambient occlusion; B é o color mask ou emissive mask; A é o smoothness. Um detalhe técnico é que nós temos planos para mudar a ordem do R com o A especialmente para objetos de mapa, visto que metalicness é o menos comum em nosso caso (nosso mapa usa poucos materiais metálicos), assim poderemos usar várias texturas RGB em vez de RGBA, assim economizando uso de memória.

Devido ao uso do packed map, usamos um “channel packer” que funciona por compute shader para juntar diferentes texturas de maps em canais de uma única textura, tudo dentro da Unity, sem a necessidade de fazer isso manualmente em cada textura usando Photoshop, por exemplo.

Perceba que não está automatizado colisores, isto será feito depois separadamente com auxílio do Easy Collider Editor, onde mesmo que não dê para automatizar 100%, ele é um excelente atalho, enquanto que outras definições de colisores (como materiais físicos/balísticos) também terão um setup automatizado.

Após o script fazer toda a montagem, há opção do prefab criar corretamente no chão na frente da câmera, isto também para agilizar o processo, onde logo em seguida é feito o posicionado na cena de prévia de objetos do jogo, na qual temos a visão de todos os objetos do jogo num só local, para adaptar e testar em massa não só o funcionamento, mas também se o visual entre eles estão combinando.

No momento temos convertido 167 objetos do Megascans para se adequar aos padrões técnicos do jogo, algo que pode aumentar um pouco caso notarmos mais alguns úteis no futuro.

São 700 linhas de código que agilizou não horas, mas dias de trabalho! E vai continuar agilizando, visto que podemos usar o mesmo (ou com alguns ajustes) para outros packs de props.

Além de aumentar a produtividade, visto que não precisamos modelar centenas de objetos, a qualidade é indiscutivelmente superior a nós criarmos do zero, afinal, objetos do Megascans são 3D scans de objetos do mundo real!

E como dito anteriormente, nós estamos procurando fazer pequenas alterações para os objetos não parecerem “genéricos” demais, como cores (alguns usará color mask com nosso shader) e rótulos/logotipos (por exemplo, perceba a imagem da furadeira de mesa). E continuamos criando à mão objetos mais importantes e únicos pro nosso projeto.

E continuamos investimos comprando mais alguns assets de coisas básicas não tão específicas do Brasil, para aumentar nossa produtividade, assim podemos focar em trabalhar nas coisas mais específicas do Brasil e cidade do jogo.

E continuamos trabalhando em objetos props mais específicos para as nossas necessidades, com ajuda do Zeneric…

…e também do nosso novo desenvolvedor, Allen Anderson.

Yuri (Yhdf) continua trabalhando no design 2D, como centenas de logotipos, embalagens, rótulos, estampas, outdoors/cartazes etc.

Junior_Djjr, mesmo sendo o programador, também cuida de algumas modelagens 3D, e junto com Yuri, trabalharam em montar o atlas de placas de trânsito/sinalização do jogo (na imagem, são só algumas de estacionamento, nós já temos a textura para múltiplas vezes mais do que isto e iremos montando conforme a necessidade), o que inclui shader próprio para funcionalidades e efeitos específicos de placas.

Fazendo uma conta aproximada, nós já temos em torno de 450 objetos “props” (sem contar alguns objetos mais básicos como móveis simples, também não inclui variações de placas e coisas assim). Há também mais 500 objetos de pequenos lixos, já selecionados, mas eles ainda precisam de tratamento manual de texturas.

Na verdade, as imagens já estão desatualizadas… De fato é difícil ter a noção da quantidade de objetos que um jogo de mundo aberto precisa!

E as vegetações do Megascans?

Um total de 270 objetos de plantas! (3 ou 4 variações cada).

Não parece haver tantas assim nas imagens, pois muitas são pequenas (como pequenos matinhos de chão).

Demorou muito para que as plantas certas fossem selecionadas no Megascans, pois há muitas, principalmente de cultivo/decoração, e cada uma foi necessário pesquisar o nome da espécie para saber se ela realmente existe no Brasil (obviamente não fizemos isso com coisas mais genéricas, como matos).

Por fim, foi um total de 270 objetos (e pode aumentar mais se notarmos mais algumas que podem ser úteis), muito mais do que esperávamos! Principalmente plantas de cultivo, que por nossa surpresa, havia muitas, pois é comum diferentes países usarem as mesmas plantas como decoração, então muitas de nossas plantas que temos em nossos quintais na verdade são da Europa etc.

Já acabou? Não!

Nós ainda temos em torno de 100 objetos que não necessariamente são vegetações, mas são detalhes de natureza, como raízes de árvores, barrancos etc. A conversão ainda não foi feita, pois não precisamos disso no momento (o trabalho de mapa do jogo ainda está focado na cidade, mesmo que em breve também precisaremos preencher as florestas dos morros norte e sul).

 

E como ficam as árvores?

Não há árvores no Megascans. As árvores do IMPUNES, entre algumas plantas, são do SpeedTree, sejam projetos comprados, criados do (quase) zero, ou simplesmente árvores editadas das outras que compramos.

SpeedTree é um excelente programa da Unity para criar vegetações de maneira simples e otimizada, usada inclusive por muitos jogos triple-A.

O uso é essencial, principalmente porque nossa ambientação é brasileira, portanto nós constantemente precisamos criar árvores próprias das espécies da flora brasileira, e mesmo que a gente escolhesse não seguir exatamente as mesmas espécies (o que também seria uma opção, e algumas vezes a gente abre essa ideia), você pode perceber que até mesmo o formato das árvores no Brasil são diferentes de outros países (especialmente o sistema de formação da copa), como EUA e países europeus, portanto é muito difícil encontrar árvores que lembram a flora tropical, do Brasil ou América do Sul em geral. Isto deve ser um dos maiores desafios de criar um jogo ambientado no Brasil, principalmente se você não quer usar uma vegetação genérica, como basicamente todos os jogos fazem.

Veja por exemplo a versão atualizada da nossa Palmeira Imperial, uma árvore muito comum no Brasil, mas principalmente pelas praias e ruas de Balneário Camboriú:

Até o momento, simplesmente não existe nenhum modelo 3D de Palmeira Imperial tão realista e otimizado quanto este que fizemos (trabalhando com base numa palmeira do SpeedTree), especialmente esse tipo “foxtail”, que de fato é difícil criar de maneira realista e otimizada para não pesar o jogo.

Várias árvores do IMPUNES foram criadas usando fotos próprias de folhas e flores, como o clássico e maravilhoso ipê.

Você provavelmente deve estar achando que estamos exagerando em focar tanto na representação das vegetações do nosso jogo, mas nós gostamos de sempre dar o nosso melhor, e de fato acreditamos que vegetações num jogo como esse são tão importantes quanto a modelagem das casas, prédios, postes etc.

Você, que está acostumado com a flora brasileira, consegue perceber a imersão de ver uma vegetação que é realmente a que se vê no Brasil, mesmo inconscientemente, e isso é muito importante em nossa opinião.

Árvores demoram muito mais para serem criadas/editadas, além de serem muito caras (já investimos vários milhares de reais nisso), mas já temos mais de 30 espécies diferentes! Sendo quase 300 modelos únicos… E ainda tem mais algumas plantas!

 

Qualquer desenvolvedor de jogos procurando reproduzir a vegetação brasileira, vai precisar aprender SpeedTree para criar as próprias árvores e outras plantas, pois simplesmente não existem pacotes de árvores e plantas brasileiras — na verdade, você até pode encontrar atualmente em 2025, mas são ruins ou não otimizadas para jogos.

Nossos apoiadores seguiram toda nossa luta em tentar reproduzir as principais vegetações necessárias para a imersão do nosso jogo, onde compartilhamos cada espécie no nosso Discord.

Em vez de um shader próprio, ou padrão do SpeedTree, estamos usando o The Visual Engine, o que padroniza e possibilita várias funcionalidades artísticas, entre elas, a gente definir áreas de poeira:

 

Excelente para simular as empoeiradas vegetações ao redor de estradas de terra.

E devido ao Brasil ser um país muito úmido, é muito comum a existência de muitos musgos pelas árvores, principalmente dentro das florestas.

Estas, agora, são umas das poucas árvores do IMPUNES que não são criadas pelo SpeedTree, mas sim criadas através de múltiplos escaneamentos 3D de árvores reais.

Obviamente, não são exatamente a mesma espécie regional do Brasil e Santa Catarina (mata atlântica), mas foi editado algumas texturas e cores para se assimilar às árvores de lá, inspirado em árvores como a Canela do Brejo:

Ok, mas de onde tudo isso veio? Pesquisas, é claro.

Junior_Djjr foi atrás de ler diversas pesquisas científicas sobre o tipo de vegetação da mata atlântica específica do litoral de Santa Catarina (mais especificamente, “floresta ombrófila densa“) — o que é, de fato, uma parte divertida do desenvolvimento de jogos, adoramos estudar!

Ficamos impressionados com a quantidade de informação fácil de ser encontrada, inclusive listas de espécies da flora local, como nesta pesquisa específica do Parque Natural Municipal Raimundo Gonçalez Malta de Balneário Camboriú, especialmente na página 116. Quem fez esse documento nunca deve ter imaginado no quão útil isso foi para o desenvolvimento de um jogo indie! Não só este, mas foi usado muitos documentos, tanto específicos da região (este de Floripa também foi muito útil) quanto genéricos (quando menos se espera, estávamos estudando sobre Sistema de Raunkiær; lá há muitos microfanerófitos, nanofanerófitos e caméfitos, diga-se de passagem).

Com um bom capricho e altíssima otimização usando Amplify Impostors e GPU Resident Drawer da Unity, conseguimos morros florestados com dezenas de milhares de árvores com um visual natural muito similar a como são os morros da cidade real:

A transição entre o LOD “impostor” e o modelo em alta definição ficou excelente, não esperávamos que fossemos conseguir um resultado tão bom — e estávamos com medo disso, pois os morros da cidade são importantes para o visual do jogo, tanto de longe quanto de perto.

Por fim, estamos super felizes com os resultados, e temos certeza de que, ao jogar nosso jogo, você vai se sentir a imersão de uma ambientação realmente brasileira.

Muito além de paredes com chapisco e filtros de barro, a imersão é criada não com uma ou duas coisas, mas sim o conjunto de todas!

Você pode perceber que nós realmente estamos nos esforçando para entregar uma experiência caprichada e única de imersão, nos apoie fazendo uma doação para que a gente possa continuar focando no projeto da maneira que estamos focando agora, e de quebra, você receberá benefícios, como acesso antecipado do jogo e ao Discord para acompanhar tudo isso o que tentamos resumir aqui. Você poderá conversar com a gente, dar sugestões e ver várias outras imagens e informações que não deu para falar aqui, pois já está muito longo!

Todo esse devlog é só um pedacinho, não dá para resumir tudo o que foi feito no último ano, a melhor forma de acompanhar o projeto é realmente participando do nosso Discord para apoiadores.