Jogo IMPUNES: Chuva e muito mais!

Introdução

Para quem não viu, eu anunciei que eu voltei a trabalhar no nosso jogo IMPUNES diariamente desde o início do ano (pulei só um mês), ou seja, finalmente tratando esse projeto de maneira séria.

Se você perdeu, veja a postagem anterior:

Jogo IMPUNES: Achou que eu tava brincando?

1 mês e meio depois, aqui estão as novas coisas que eu (Junior_Djjr) fiz no jogo:

O vídeo resume quase toda essa postagem, assista com atenção!

E esse vídeo foi criado por um script externo programado em Lua, como se fosse uma missão custom, legal né?

Iremos pausar o jogo por algumas semanas ou meses, pois eu (Junior_Djjr) tenho alguns outros trabalhos acumulados pra fazer.


O que foi feito:

  • Mapa completamente otimizado com LODs gerados pelo Simplygon.
  • Sistema de fogo com propagação simples, programado do zero.
  • Adição de postes com fios com física que reage dinamicamente ao vento.
  • A quantidade de nuvens influencia no gráfico do jogo.
  • Transição de nuvens sincronizado com climas, como chuva, garoa etc.
  • A chuva molha o chão gradualmente, criando poças que refletem o mundo.
  • Gotas de chuva pela tela, que reagem com a física.
  • Água da chuva escorrendo pelos telhados.
  • Nova animação de andar feminino (ainda será ajustado, estamos sem animadores).
  • Poças volumétricas que fazem transição suave com as poças falsas do shader de superfície.
  • Diferentes materiais recebem diferentes efeitos de molhado, por exemplo, a grama absorve água, portanto o reflexo tem mais rugosidade e gera menos poças.
  • A água da chuva primeira se acumula entre os vãos da superfície (por exemplo, entre os blocos da calçada).
  • Janelas e vitrines com novas texturas de variação aleatória.
  • Recriado a praça.
  • Novas fontes de letras.
  • Som ambiente dinâmico.
  • Ícones das armas são gerados dinamicamente através do modelo da arma e shader estilizado e editor.

 


LOD (Level Of Detail)

Dentro desse pouco mais de 1 mês, 2 semanas foram somente para criar LOD do mapa do jogo.

jogo impunes gta brasileiro indie 2nibble dev lod

Para isso, eu usei Simplygon, também usado por jogos como The Witcher 3, Uncharted, Borderlands 3, Gears 5, Control, Far Cry 5, RE7, Mafia 3, MGSV etc…

O problema é que nenhuma solução de LOD é perfeita, esta também requer trabalhos manuais. Portanto cada modelo, antes de passar pelo gerador de LOD, eu precisei fazer um “pré-LOD” para a geração ser melhor.

Demorou, mas valeu muito a pena, afinal, quanto melhor é o LOD, mais próximo da câmera pode usar, e portanto, mais otimização de desempenho. Isso também entra na questão de quantos níveis de LOD usaremos. Eu pensei em 2 níveis, mas quanto mais níveis, mais trabalho terá para deixar cada um deles caprichado (e será necessário fazer shadermap para colocar reflexos nas janelas por exemplo), portanto, no momento eu estou usando somente 1 nível, mas com atenção maior naquele único nível. Quando o mapa ficar grande (com zona rural, ou seja, vai demorar) eu pretendo mudar para 2 níveis.

Só não há LOD na torre de todos os prédios (exceto um), pois é melhor fazer manualmente, mas é bem demorado e chato, portanto fica pra depois.

O jogo ainda está vazio demais para comparações de FPS (o aumento do FPS foi baixo pois o jogo ainda não tem carga o suficiente no CPU, e mapa em si é muito leve pra GPU), mas em draw calls, o LOD fez o jogo cair de 6 mil para somente 2 mil draw calls (em referência, uma cena do GTA V tem 3~5 mil draw calls), portanto estamos no caminho certo. Economizou 150 mil triângulos e 200 MB.

 


Sistema de fogo com propagação

Há muitos sistemas de fogo prontos para comprar ou baixar grátis por aí, mas todos são “avançados” demais para o nosso jogo, onde o fogo é só uma consequência, não uma mecânica central.

Pensando nisso, e também porque eu estava muito curioso pelo desafio, eu programei o meu próprio sistema de propagação de fogo do zero, somente com o básico necessário.

jogo impunes gta brasileiro indie 2nibble dev fogo fire

Eu fiz também o efeito visual do fogo, que é também influenciado pelo vento (eu sei o quão importante é o vento para a imersão do jogo, portanto eu quero que tudo tenha influência). O efeito ficou bonito na minha opinião, o que não é difícil, só basta encontrar uma boa textura de animação que o resto é detalhe (por exemplo, perceba como eu simulei o brilho do fogo influenciando na cor da fumaça, e o tamanho do fogo muda a velocidade da animação, um detalhe importante pro realismo).

E é óbvio, o material da superfície influencia no nível de combustível e propagação: grama gera médio combustível mas muita propagação; madeira gera muito combustível mas pouca propagação etc. Assim como a chuva apaga o fogo.

Após um ponto ser queimado, será armazenado um cachê onde evitará que aquele ponto seja queimado de novo (uma simples simulação de que acabou o “combustível para queimar”), e assim, naturalmente gerou um efeito de espalhamento a partir de um centro.

Eu programei o sistema de propagação da maneira mais simples possível, por otimização, e a quantidade de pontos de fogo influencia na qualidade do fogo em si. Isto é, diminuirá a quantidade de pequenas partículas e fumaça, afim de evitar o FPS cair caso haja realmente muitos pontos de fogo no seu jogo.

Mas ainda falta otimização para diminuir os pontos de luz e som, algo bem chato de fazer, farei depois…

 


Gráficos

Falando novamente sobre as nuvens volumétricas.

Há um valor médio da cobertura das nuvens no céu, portanto eu usei esse valor para alterar o gráfico do jogo de maneira dinâmica.

jogo impunes gta brasileiro indie 2nibble dev iluminacao grafico molhado

Isto é, há uma fonte de iluminação ambiente vinda principalmente de cima, que simula a luz que o céu emite (afinal, não é só o Sol que emite luz, o próprio céu emite uma luz azul também, por isso as sombras são azuis), este tom azul, no entanto, é coberto pela quantidade de nuvens no céu do jogo, assim diminuindo a iluminação de cima pra baixo, e a cor do céu (deixando os tons menos azuis por exemplo).

Esta é uma solução muito melhor do que usar valores pré-definidos (como normalmente jogos fazem), pois as nuvens correlacionarão dinamicamente com o gráfico do jogo. Lembrando que também há sombra de nuvem.

Outra coisa importante para uma boa simulação de gráficos nublados, é deixar as sombras mais suaves (com mais blur), mas o sistema de sombras que a gente comprou (e usamos no jogo NPD) ainda não está disponível pro URP então temos que aguardar.

Perceba também que a parte de cima das superfícies ficam mais escuras, simulando superfícies molhadas. O asfalto ficou quase preto, semelhante ao mundo real (peguei todas as referências daqui).

Durante esse tempo eu também fiz mais ajustes visuais nos gráficos do jogo, como as cores da iluminação e mais shadermaps para materiais. O asfalto ficou bem mais realista.

 


Climas

Eu já havia programado o sistema de climas para o Warpunk, mas assim como o ciclo de dia e noite, eu decidi refazer do zero, sincronizado com o sistema de nuvens que a gente usa.

Isto é, climas e nuvens estão completamente correlacionados, cada nuvem tem valores que fazem uma transição suave, e alguns dos valores, são usados para o clima do jogo.

Por exemplo, haverá diferentes formatos de nuvens para garoa, chuva média, chuva forte… E algo um tanto interessante…

jogo impunes gta brasileiro indie 2nibble dev god rays nuvens

Através de compute shaders do DirectX 11, é possível detectar a quantidade de nuvens que estão literalmente em cima de você, isto quer dizer que eu posso usar isto para definir a chuva! Isso mesmo, só haverá chuva caso de fato exista uma nuvem de chuva em cima de você!

O problema: Menos controle sobre o momento de chover ou não chover. Claro, você pode desativar para forçar a chuva caso alguma missão queira que seja feita totalmente na chuva, mas pense no free roam, a qualidade gráfica das nuvens (principalmente, se você desativar as nuvens volumétricas durante o gameplay) possibilitará o jogador a controlar a existência ou não de chuva no jogo, simplesmente trocando as nuvens no menu de qualidade gráfica. Uma solução é fazer um tempo de “penalidade”, por exemplo 1 minuto para o nível da chuva poder mudar, mas também possibilitaria usar a penalidade para benefício.

Portanto eu não sei se eu realmente vou incluir este detalhe, é algo aparentemente novo, que eu consegui fazer, um detalhe que não existe nem em jogos AAA (pelo que eu saiba), provavelmente será uma opção no menu do jogo e só se ativará em free roam, fora de missão, e fora de um possível futuro multiplayer, e também precisará ser desativado caso jogue em DX10. Deem opiniões e ideias nos comentários.

 


Poças de chuva

Eu criei o shader de poças de chuva, com pingos (ripples), já faz um tempinho, mas agora fiz ajustes finais e sincronizei as poças com o CPU com uma solução legal, mas também um pouco óbvia.

O caso é, as poças são geradas no shader, rodando na GPU, e eu preciso identificá-las para colocar efeitos sonoros e visuais quando você pisa em cima de uma poça (ou melhor, um chão molhado). Então agora as poças são geradas com uma textura global, que se repete no mundo todo, por cima da superfície, e no CPU, eu converto a coordenada do jogo para o pixel da textura, dessa forma eu consigo ter o nível de molhado daquele local, e assim usar isso para adicionar efeitos ou influenciar na física dos carros. Uso vertex color para “pintar” os locais que não molham.

Isto é para as poças falsas que simula o chão molhado, mas eu também fiz poças volumétricas, que fazendo blend perfeito com as poças falsas.

jogo impunes gta brasileiro indie 2nibble dev pocas chuva puddle

As poças volumétricas são uma pequena simulação de água que pode estar sempre presente em buracos no mapa, e crescem conforme a chuva, como acumulação. O efeito visual da poça acumulando ficou muito bom.

E outro detalhe muito bom é a acumulação de água primeiro entre os vãos da superfície, por exemplo, bloquinhos da calçada.

jogo impunes gta brasileiro indie 2nibble dev puddle shader floor

Eu só fiz isso porque era fácil, eu sei que é um detalhe pequeno demais, mas não há nenhum impacto no desempenho.

 


Gotas de água na tela

Nós compramos um sistema avançado que simula gotículas de água grudadas na câmera do jogo, refratando (com distorção) a imagem da tela.

jogo impunes gta brasileiro indie 2nibble dev raindrops screen chuva

Há gotas estáticas (redondas) e dinâmicas (que escorrem pela tela), como postfx na GPU, que aparecem principalmente quando a câmera está olhando pra cima durante a chuva, e eu programei um simples sistema para simular a reação física das gotas.

Por exemplo, se a câmera está indo rápido para o lado direito, as gotas irão se esticar em direção ao lado esquerdo. Sim, eu sei, não é a coisa mais incrível do mundo pois até GTA clássicos têm isso. Mas eu fiz parecido, e inclusive simulei a gravidade das gotas escorrendo conforme a direção que a câmera está apontada.

 


Água escorrendo nos telhados

E aqui um shader que eu me irritei diverti muito em fazer!

Uma das poucas coisas que sabemos sobre o GTA VI hoje é que deverá haver água escorrendo pelos telhados, portanto eu decidi fazer da minha forma simplista, principalmente porque é um detalhe muito legal que traz muita vida ao visual do jogo.

jogo impunes gta brasileiro indie 2nibble dev rain chuva shader roof telhado

Os telhados do jogo não podem acumular poças como o chão, portanto, eu fiz um simples shader que adiciona água escorrendo na direção da face do telhado.

A questão é que é fácil fazer uma textura animada por cima do mapeamento de outra textura, mas isso é falho, houve alguns poucos telhados que as telhas estavam invertidas (assim a água caía pra cima, não vale a pena ficarmos testando e corrigindo isso), e as cumeeiras são mapeadas na horizontal, portanto eu tive que fazer um cálculo de direção com base na face, o que é simples mas eu sou noob em shader (e matemática em geral), mas consegui e fiquei muito feliz com o resultado!

Eu tentei o mesmo em outras superfícies, mas a solução não é perfeita. À primeira vista você pode pensar que basta isso para por exemplo fazer um rio com água com direção de fluxo, ou água escorrendo pelas valas, mas não é verdade, requer algo muito mais avançado para possibilitar coisas assim, esta é uma solução simples pensada somente em telhados e superfícies inclinadas simples.

Aproveitando, no mesmo shader eu adicionei uma simulação de madeiras na parte de baixo dos telhados.

jogo impunes gta brasileiro indie 2nibble dev telhado casa

Isto porque o mapa do jogo foi criado quando a ideia ainda era um jogo simples com câmera vista de cima, portanto não havia detalhes embaixo dos telhados (como tábuas), e adicionar um novo material embaixo do telhado é uma tarefa muito chata (lembre-se, a telha de cima tem que fazer sentido com a telha de baixo), e não legal pra otimização, uma solução mais simples foi fazer um shader que, automaticamente, adiciona um overlay de tábuas para tudo o que está na direção de baixo, assim não teremos absolutamente nenhum trabalho adicional na parte de baixo dos telhados, também diminuindo o número de materiais e texturas. Não há profundidade 3D, mas o nosso jogo é assim mesmo, gráfico simples e leve.

 


Janelas e vitrines

Criei as texturas variáveis para as janelas e vitrines. São aleatórias, mas como eu expliquei anteriormente, posso usar vertex alpha para escolher qual usar.

jogo impunes gta brasileiro indie 2nibble banco hfbr

A ideia inicial era usar shader de interior falso, para simulação de profundidade parallax, o problema é que cada vitrine precisa fazer um pouco de sentido (não ser como GTA Trilogy), portanto é um trabalho adicional desnecessário. Quem sabe no futuro, mas no momento temos coisas mais importantes para focar.

Portanto eu criei várias texturas completamente genéricas, para poder usar nas vitrines sem nenhum problema de falta de lógica, e eu realmente gostei do resultado, não tanto quando está acesa, mas ainda pintarei as vitrines acesas para dar vida, ficará melhor.

 


Postes com fios com física

Adicionei postes com fios em todo o mapa atual (exceto em algumas ruas que ligarão com próximas quadras).

O modelo dos postes foi criado pelo Meck há alguns anos atrás, e só usado agora.

Como eu disse anteriormente, eu quero que o mapa reagindo ao vento, para aumentar a imersão e vida do ambiente. Portanto, os fios dos postes reagem com o vento atual! (direção, intensidade).

jogo impunes gta brasileiro indie 2nibble dev postes fios

Foi bem chatinho, pois eu tive que fazer um sistema novo para adicionar os fios automaticamente em cada poste.

Os fios são meshes 3D, portanto eu usei o mínimo de segmentos possível para diminuir o peso do modelo (que facilmente ocupa milhares de vértices), e usa fios com espessura num formato de triângulo. Umas pessoas podem dizer que eu devia usar fios com duas faces cruzadas (GTA Trilogy fez assim) para economizar 2 triângulos cada segmento, mas conte o número de vértices e veja, a única coisa que você vai ganhar é um fio com iluminação bugada.

Mas isso é só o começo. Ainda há somente 1 modelo de poste, nós pretendemos adicionar mais variações, pinturas na base do poste, transformador podendo atirar para quebrar e coisas assim.

E o principal: Brasil é assustadoramente lotado de fios, mesmo regiões ricas, há postes com muitos fios, principalmente na parte de baixo, e obviamente não podemos usar física neles, portanto, faremos futuramente de uma maneira otimizada, com texturas alpha. O mesmo vale para os fios que saem do poste e vão para as casas, poderíamos fazer também 3D com física, mas não é legal para o desempenho.

 


Fonte de texto e som ambiente

Gastei um tempinho pesquisando por boas fontes para usar nos textos do jogo, decidi usar Tauri para textos gerais, Paytone One para textos impactantes, e Ubuntu Mono para scripts.

jogo impunes gta brasileiro indie 2nibble dev futebol penalti

À primeira vista eu achei a Paytone One “divertida” demais, mas pensando bem, por que o jogo tem que parecer sério?

Sobre sons ambientes, eu criei um sisteminha para usar um valor real entre 0 e 1 para definir uma transição entre 3 sons ambientes diferentes para a cidade, onde cada um é um nível de intensidade de sons da cidade (você pode ouvir no vídeo). Assim, basta eu definir a intensidade com base na quantidade de carros e pessoas por volta de você para dinamicamente ter diferentes sons ambientes para diferentes locais da cidade.

Já esquecendo, eu também recriei esta praça. Ainda não estava remasterizada e era estranha com pouco espaço.

jogo impunes gta brasileiro indie 2nibble dev praca

Inclusive, memorizem ela hoje, ainda sem os bancos, sem a estátua, sem as flores, sem as árvores… Em breve vocês verão como ficará!

Provavelmente na próxima postagem de progresso do jogo, haverá árvores (finalmente), e assim a ambientação do mapa ficará muito mais interessante.

 


Ícones das armas

E para finalizar, finalmente a roda de armas e hud têm ícones de armas!

Na postagem anterior eu usei imagens placeholders para os ícones das armas, e ainda coloquei um “PH” grande em cima para deixar claro que não se trata de ícones finais do jogo, avisei no post, vídeo, e mesmo assim houve pessoas reclamando que os ícones estavam feios… Sério?

Enfim, aqui estão os bonitinhos:

jogo impunes gta brasileiro indie 2nibble dev armas weapon icons

Você pode dizer “bonito mas poderia ser melhor”, mas veja a sacada: isto não são imagens desenhadas, são renderizações do modelo 3D da arma com shader estilizado!

Isto é extremamente importante, pois possibilita criar novas armas, inclusive instalar mods de armas, sem a necessidade de desenhar um ícone novo! E todo mundo que já baixou mods de armas pro GTA SA, sabe que isso é um grande problema, pois os modders não se esforçam, ou simplesmente não sabem desenhar os ícones. Este problema não existirá no IMPUNES.

Dentro do próprio jogo, eu criei uma espécie de “gerador de ícone”, onde você posiciona a arma dentro de um quadrado. Note que isto não irá gerar a imagem do ícone, isto só irá configurar a posição para gerar a imagem posteriormente, conforme a resolução da sua tela etc.

jogo impunes gta brasileiro indie 2nibble dev armas weapon icons editor

Isto não é o editor da Unity, isto é a imagem do jogo. Essas setas dos eixos (pivot) estão implementadas dentro do jogo para você ajustar a posição e rotação da arma, ainda com pequenos bugs na renderização mas fácil resolver.

Não só isso, devido à usar um shader estilizado, é possível trocar o estilo dos ícones alterando o shader, ou valores do material, para novas cores etc, e todas as armas (inclusive mods) automaticamente terão o novo estilo que você definiu!

E lembrando de novo que essas armas são placeholders do sistema de armas que estamos usando, não são as armas do jogo (obviamente criaremos armas brasileiras).

 


Doações

Pela primeira vez, depois de tantos anos trabalhando sem receber 1 centavo, nós finalmente abrimos doações!

Pix

Qualquer valor; instantâneo; sem tarifas. Neste caso é somente Brasil.

Chave aleatória: c03b3c1e-414d-4aee-8cb9-902ce2c65334

Para outras opções internacionais, veja a página de doação/financiamento no site da 2nibble.

Eu recomendo fortemente que você leia a página de doação/financiamento para entender a importância de financiar a gente.

Nota: No momento, as doações são para toda a 2nibble, não especificamente IMPUNES — mas de qualquer forma, também ajuda indiretamente, é claro.

Como eu já disse várias vezes, durante esses anos, eu (Junior_Djjr) tirei milhares de reais do meu próprio bolso para investir nesse jogo, para mostrar algo para vocês antes de pedir ajuda, e eu já até neguei bons empregos para focar nisso, que de fato é algo que eu gosto.

O dinheiro será usado para recuperar os gastos antigos, e o que sobrar, será usado para gastos futuros, renda extra para membros da equipe, ou contratação de trabalhos terceiros.

Não pode ajudar financeiramente? Simplesmente divulgue o nosso trabalho, espalhe a nossa ideia.

 


Importante:

O projeto foi totalmente renovado, portanto queremos desvincular o nome antigo do projeto (“2NTD”).

Agora o progresso do jogo estará somente nas redes sociais da equipe 2nibble.

facebook.com/2nibble

twitter.com/2nibbleStudios

youtube.com/c/2nibble

2nibble.com/donate


No momento este site está parado (motivos aqui) portanto não estamos mais moderando e aceitando comentários.

Prefira usar o nosso Discord, fórum, Facebook ou Youtube.

8 Comentários
Newest
Oldest Most Voted
Inline Feedbacks
View all comments