Shader Stochastic no GTA San Andreas (correção de tiling nas texturas)

Eu (Junior_Djjr) fiz algo que eu mesmo dizia ser impossível: eu corrigi o padrão de repetição de texturas do GTA San Andreas!

gta-sa-mod-skygfx-extended-stochastic-procedural-texture-tiling-fix

Você deve estar se perguntando qual “gambiarra” foi usada, mas na verdade a solução é excelente e substitui nada do seu jogo, através de uma técnica de shader chamada de “procedural stochastic texturing“.

O algoritmo é baseado num paper de Thomas Deliot e Eric Heitz publicado em 2019, ambos desenvolvedores da Unity Engine.

Só é utilizado para texturas categorizadas como “stochastic”, ou seja, um padrão natural de grama, concreto etc.

stochastic-textures-regular-near

Isto não é novidade se você seque os nossos jogos: Nós usamos isto nos jogos Beetles Underground, Warpunk e nosso GTA brasileiro IMPUNES.

procedural-stochastic-terrain-shader-unity-warpunk-game

Inclusive, isto foi um ponto essencial para o jogo Beetles Underground, pois você é um besouro que fica no chão e pode voar, portanto era necessário uma textura que fique boa vista de perto, e de longe.

2nibble-jogo-indie-game-jaaj-beetles-underground-besouros-3

E isto é um detalhe importante, mesmo de perto o resultado é excelente:

gta-sa-mod-skygfx-extended-stochastic-procedural-texture-tiling-fix-2-2

Fazer isto num mod separado causaria conflito com o SkyGfx, portanto eu fiz como parte do SkyGfx, que é uma excelente base para adicionar shaders no GTA SA. Obviamente, com opção no arquivo .ini: “stochasticTexturing=1“.

Será um fork do projeto lançado como “SkyGfx Extended“.

Todas as variações de shaders do SkyGfx foram preservadas, ou seja, você ainda tem o building pipe do PS2 ou Xbox, e detail maps do mobile — que também usam stochastic! Eu só não adaptei para veículos pois não é tão útil e não é amigável adaptar ao instalar um mod de carro.

Como as texturas são adaptadas: Eu adicionei o parâmetro “stochastic” ao arquivo “texdb.txt” do SkyGfx (o mesmo arquivo usado na versão mobile etc).

Por exemplo, se você quer isto para a textura “Grass_128HV”, basta procurar pela linha dela e adicionar “stochastic=1” em algum local da linha. Simples.

Obviamente, no download virá centenas de texturas configuradas para isto, você não precisa fazer nada, é só instalar.

Indo para o lado mais técnico, você encontra tudo no paper, mas abaixo há uma imagem que resume:

procedural-stochastic-texturing-paper

Ou seja, o shader pega aleatoriamente um pedaço da textura e mistura em 3 partes (triângulo). É relativamente complexo, mas não é algo de outro mundo.

No paper ele mostra testes de desempenho, tendo resultado de 4 a 5 vezes mais tempo para fazer o sampling de uma textura, no entanto, foi usado o shader que inclui a correção de histograma, que preserva a coloração da textura mas é muito mais complexo, eu decidi não incluir isto. Portanto eu chuto que é em torno de 3 vezes (visto que faz blend de 3 pontos).

Lembrando que isto é somente o tempo de fazer o “sampling” de uma textura, então é relativo à quantidade de pixels que aquela textura aparece na sua tela, e principalmente, o tempo de sampling de uma textura é algo extremamente minúsculo dentro do tempo de processamento de um jogo inteiro. É como uma gota de água numa piscina.

Exemplo: Se você trocar uma textura 256×256 por 512×512 ela demorará 4 vezes mais tempo para ser processada (afinal, o dobro de cada lado resulta no quádruplo), mas você nunca notará queda de FPS mesmo fazendo isto com dezenas de texturas. Experimente usar “NoTextures=1” no MixSets, o FPS do seu jogo vai continuar quase o mesmo, pois texturas são leves para serem processadas, principalmente no GTA SA que usa shaders extremamente simples. Normalmente o peso das texturas é de carregá-las (pois facilmente pesa vários MB), mas processá-las geralmente é muito rápido.

O jogo Beetles Underground faz blend de 4 texturas de terreno, 1024×1024 cada uma, onde cada uma delas passa por stochastic (na qual aleatoriza e faz blend de 3 pontos), e o terreno ocupa quase a tela toda, e mesmo assim o jogo rodou excelente numa GT 730.

Portanto o desempenho continua ótimo, é esperado nenhuma mudança no FPS do seu jogo se você usa qualquer placa de vídeo offboard (dedicada), mas eu não sei dizer o mesmo de placas de vídeo onboard (ou offboard muito fraca e antiga), afinal, mesmo que seja leve, o impacto ainda existe.

Atualização: TJGM fez um bom vídeo sobre isso:

 


Eu pretendo finalizar a adaptação das texturas hoje e postar amanhã como “SkyGfx Extended”, que é meu fork do projeto SkyGfx (que é open source). Obviamente o autor, aap (The Hero), pode decidir incluir isto de maneira oficial, mas não é a proposta do SkyGfx. Por exemplo, isto requer editar um arquivo que no SkyGfx veio diretamente do mobile, e eu pretendo adicionar mais shaders ao jogo através do SkyGfx, por exemplo, tentar fazer algo com a água, e quem sabe no futuro seja adicionado suporte à normal maps etc. Ou seja, ao meu ver, seria interessante haver um fork do projeto para adicionar gráficos modernos ao jogo, e não só converter gráficos de outros consoles.

É possível fazer o mesmo no GTA Trilogy? Acredito que sim, mas eu não sei editar, ou se é possível editar, os shaders de um jogo compilado na Unreal.

Eu não sei o quanto vou levar isto à diante, pois eu já tenho muitos trabalhos para fazer, mas pelo menos esse shader stochastic é uma adição excelente que estou muito feliz com o resultado, e claro, é o que eu mais gosto: melhorar o jogo corrigindo os problemas sem perder a essência original.

 


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.

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