Neste terceiro capítulo, onde daremos uma olhada mais profunda na criação de jogos 3D, vamos nos concentrar no que pode acontecer ao mundo 3D depois que o processamento dos cantos é feito e a cena rasterizada. A configuração é uma das etapas mais importantes na renderização, embora tudo o que acontece é que as cores de uma grade bidimensional de blocos coloridos são calculadas e alteradas.

Muitos dos efeitos visuais vistos nos jogos de hoje dependem do uso inteligente de texturas - sem elas, os jogos seriam monótonos e sem vida. Então, vamos mergulhar e ver como funcionam!

Como sempre, se você não estiver pronto para dar um mergulho profundo no tecido, não entre em pânico - você pode começar Criação de jogos 3D 101. Mas, depois de passar pelo básico, continue lendo para ver nossa próxima visão do mundo dos gráficos 3D.

Vamos começar simples

Escolha os jogos 3D mais vendidos dos últimos 12 meses e todos eles terão uma coisa em comum: mapas de textura (ou apenas texturas) Este é um termo muito comum, a maioria das pessoas criará a mesma imagem ao pensar em texturas: um simples quadrado plano ou retângulo contendo a imagem de uma superfície (grama, pedra, metal, roupa, rosto, etc.).

Mas quando usado em várias camadas e reunidas usando aritmética complexa, o uso dessas imagens básicas em uma cena 3D pode produzir imagens incrivelmente realistas. Para ver como isso é possível, vamos ignorá-los completamente e ver como os objetos no mundo 3D ficariam sem eles.

Como vimos em artigos anteriores, o mundo 3D é feito de vértices - formas simples que são movidas e depois coloridas. Estes são então usados ​​para fazer as primitivas, que por sua vez são compactadas em uma grade de pixels 2D. Como não usaremos texturas, precisamos colorir esses pixels.



Um método que pode ser usado é chamado sombreamento planoenvolve obter a cor do primeiro vértice da primitiva e, em seguida, usar essa cor para todos os pixels no raster que caem sob a forma. Se parece com isso:

Obviamente, este não é um bule de chá realista, pelo menos a cor da superfície está errada. As cores saltam de um nível para o seguinte, não há uma transição suave. Uma solução para este problema pode ser usar algo chamado Sombreamento Gouraud.



Esta é uma operação que pega as cores dos vértices e calcula como a cor muda na superfície do triângulo. A matemática usada interpolação linearEmbora pareça extravagante, na realidade, se um lado primitivo é 0,2 na cor vermelha e o outro lado é 0,8 vermelho, isso significa que o meio da forma tem uma cor entre 0,2 e 0,8 (ou seja, 0,5).

É relativamente simples de fazer e o principal benefício é a velocidade. Muitos dos primeiros jogos 3D usavam essa técnica porque o hardware que fazia os cálculos era limitado pelo que podia fazer.

Mas mesmo isso tem seus problemas, porque se uma luz está apontando bem no meio de um triângulo, seus vértices (vértices) podem não ser capazes de capturá-la corretamente. Isso significa que os destaques causados ​​pela luz podem ser completamente esquecidos.

Os sombreamentos Flat e Gouraud estão no arsenal de renderização, enquanto os exemplos acima são candidatos claros para o uso de texturas para melhorá-los. E para entender melhor o que acontece quando uma textura é aplicada a uma superfície, vamos voltar no tempo ... de volta a 1996.

Uma breve história de jogos e GPUs

Quake é um jogo marcante lançado há 23 anos id Software. Embora não tenha sido o primeiro jogo a usar polígonos e texturas 3D para criar o ambiente, foi um dos primeiros a usá-los de forma tão eficaz.

Outra coisa que ele fez foi mostrar o que poderia ser feito com OpenGL (a API gráfica ainda estava em sua primeira revisão), e também ajudou a vender o primeiro produto de placa de vídeo. Comente ve 3Dfx Vudu.

Comparado com os padrões de hoje, o Voodoo era extremamente simples: sem suporte para gráficos 2D, sem renderização de vértices e apenas o básico de renderização de pixels. Ainda era uma beleza:

Ele tinha um chip inteiro (TMU) para obter um pixel de uma textura e depois outro chip (FBI) para misturá-lo com um pixel do raster. Ele poderia fazer alguns extras, como fazer efeitos de neblina ou transparência, mas era basicamente isso.

Se tivermos uma visão geral da arquitetura por trás do design e operação da placa de vídeo, podemos ver como esses processos funcionam.

O chip do FBI pega dois valores de cores e os combina; um deles pode ser um valor de uma textura. O processo de agrupamento é matematicamente bastante simples, mas difere um pouco entre o que exatamente está sendo misturado e qual API é usada para executar as instruções.

tudo o que olhamos Ofertas Direct3D Em termos de funções de mesclagem e operações de mesclagem, podemos ver que cada pixel é primeiro multiplicado por um número entre 0,0 e 1,0. Isso determina quanto da cor do pixel afetará a aparência final. Em seguida, as duas cores de pixel ajustadas são adicionadas, subtraídas ou duplicadas; em algumas funções, a operação é uma expressão lógica em que algo como o pixel mais brilhante é sempre selecionado.

A imagem acima é um exemplo de como isso funciona na prática; o fator usado para o pixel esquerdo alfa valor. Este número transparente píxeis.

O restante das etapas envolve a aplicação de um valor de neblina (obtido de uma tabela numérica criada pelo programador e, em seguida, fazer a mesma matemática de mistura); realizar algumas verificações e ajustes de visibilidade e transparência; antes de finalmente gravar a cor do pixel na memória da placa de vídeo.

Por que aula de história? Apesar da relativa simplicidade do design (especialmente quando comparado aos desenvolvedores modernos), o processo explica os fundamentos básicos da texturização: pegue alguns valores de cor e misture-os para que os modelos e ambientes tenham a aparência que deveriam ter em uma determinada situação.

Os jogos de hoje ainda fazem tudo isso, a única diferença sendo a quantidade de texturas usadas e a complexidade dos cálculos de mistura. Juntos, eles simulam os efeitos visuais vistos em filmes, ou como a luz interage com diferentes materiais e superfícies.

O básico da texturização

Para nós, uma textura é uma imagem 2D plana aplicada aos polígonos que compõem as estruturas 3D no quadro exibido. Para um computador, nada mais é do que um pequeno bloco de memória na forma de um array 2D. Cada entrada na matriz representa um valor de cor para um dos pixels na imagem de textura (mais conhecido) preenchedor de texto - pixels de textura).

Cada vértice em um polígono tem 2 coordenadas (normalmente sen, v) informa qual pixel da textura está associado a ele. Os próprios vértices têm 3 conjuntos de coordenadas (X ve Z) e o processo de conexão de textos a vértices é chamado. mapeamento de textura.

Para ver isso em ação, vamos voltar a uma ferramenta que usamos várias vezes nesta série de artigos: WebGL de renderização em tempo real ferramenta. Por enquanto, z coordene a partir dos cantos e mantenha tudo em um plano plano.

Da esquerda para a direita, temos a textura sen, v coordenadas mapeadas diretamente para vértices de canto x, y coordenadas. Em seguida, os cantos superiores y as coordenadas aumentaram, mas a textura é esticada para cima, pois a textura ainda mapeia diretamente para elas. Na imagem da extrema direita, a textura mudou desta vez: u os valores são aumentados, mas isso faz com que o tecido seja esmagado e, em seguida, recaída.

Porque o tecido agora é efetivamente mais longo, embora mais alto u O valor deve caber dentro do primitivo - essencialmente, a textura é parcialmente repetida. Esta é uma maneira de fazer algo visto em muitos jogos 3D: trepetir. Exemplos comuns disso podem ser encontrados em cenas com paisagens rochosas ou gramadas ou paredes de tijolos.

Agora vamos definir a cena para ser mais primitiva e trazer a profundidade de volta ao jogo. O que temos a seguir é uma visão clássica da paisagem, mas como a textura do peito é copiada e repetida entre os primitivos.

Agora, essa textura de peito tem 66 quilos no formato gif original e uma resolução de 256 x 256 pixels. A resolução original da parte do quadro ocupada pelas texturas da caixa é 1900 x 680, portanto, em termos de 'área' de pixel apenas, essa região deve ser capaz de exibir apenas 20 texturas da caixa.

Obviamente, estamos obtendo mais de 20 caminhos, com tantas texturas de peito no fundo muito Menor que 256 x 256 pixels. Na verdade, eles são e passaram por um processo redução de textura (sim, essa é uma palavra!). Agora vamos tentar de novo, mas desta vez chegou perto de um dos baús.

Observe que a textura tem apenas 256 x 256 pixels de tamanho, mas aqui podemos ver que uma textura tem mais da metade da largura da imagem de 1900 pixels. Passou por algo chamado textura aumento de tecido.

Esses dois processos de textura acontecem o tempo todo em jogos 3D, porque conforme a câmera se move ao redor da cena ou os modelos aumentam e diminuem o zoom, todas as texturas aplicadas às primitivas precisam ser dimensionadas junto com os polígonos. Matematicamente, isso não é um grande problema, na verdade, até mesmo os chips gráficos integrados mais simples piscam em tal negócio. No entanto, a redução e o aumento do tecido apresentam novos problemas que devem ser resolvidos de alguma forma.

Insira mini texturas

O primeiro problema a ser corrigido é para texturas distantes. Se olharmos novamente para a primeira imagem da paisagem da caixa, aquelas voltadas para o horizonte têm apenas alguns pixels de tamanho. Tentar comprimir uma imagem de 256 x 256 pixels em um espaço tão pequeno é inútil por dois motivos.

Por um lado, uma textura menor ocupa menos espaço de memória na placa de vídeo, o que é útil para tentar ajustar uma pequena quantidade de cache. Isso significa que é menos provável que seja removido do cache, e o uso repetido dessa textura aproveitará o benefício de desempenho total dos dados que estão na memória próxima. A segunda razão pela qual estamos aqui por um momento, já que está vinculado ao mesmo problema para texturas ampliadas.

Uma solução comum para o uso de grandes texturas que são esmagadas em pequenas primitivas, Coincidindo. Estas são versões reduzidas da textura original; O motor do jogo em si pode ser construído (usando o comando API correspondente para fazer isso) ou pode ser pré-fabricado por designers de jogos. Cada nível de textura mipmap tem metade das dimensões lineares do anterior.

Para a textura do peito, seria algo como: 256 x 256 → 128 x 128 → 64 x 64 → 32 x 32 → 16 x 16 → 8 x 8 → 4 x 4 → 2 x 2 → 1 x 1.

Os mipmaps estão todos agrupados, então a textura ainda é o mesmo nome de arquivo, mas maior agora. O tecido é embalado de forma que sen, v Suas coordenadas não apenas determinam qual texel aplicar a um pixel no quadro, mas também de qual mipmap. Em seguida, os programadores codificam o renderizador para determinar o mipmap a ser usado com base no valor de profundidade do pixel quadrado, portanto, se for muito alto, o pixel está longe, de modo que um pequeno mipmap pode ser usado.

Leitores com visão aguçada podem ter visto o lado negativo dos mipmaps, e isso ocorre às custas de texturas serem maiores. A textura original do tórax era de 256 x 256 pixels, mas como você pode ver na imagem acima, a textura do mapa mip agora tem 384 x 256 pixels. Sim, há muito espaço livre, mas o aumento geral para pelo menos um dos tamanhos da textura é de 50%, independentemente de como você embala texturas menores.

No entanto, isso se aplica apenas a mipmaps pré-fabricados; Se o mecanismo de jogo foi programado para gerá-los corretamente, o aumento nunca pode ser superior a 33% do tamanho da textura original. Assim, você obtém benefícios de desempenho e melhorias visuais para um aumento relativamente pequeno na memória em mipmaps de textura.

Abaixo está a comparação off / on de mipmaps de textura:

No lado esquerdo da imagem, as texturas da caixa são usadas "como estão", resultando em uma aparência granulada e, supostamente, padrões ondulados longe. À direita, entretanto, o uso de mipmaps resulta em uma transição muito mais suave na paisagem, onde a textura da caixa muda para uma cor consistente no horizonte.

No entanto, quem quer texturas borradas que estragam o fundo de seu jogo favorito?

Bilinear, trilinear, anisotrópico - tudo grego para mim

O processo de seleção de pixels de uma textura a ser aplicada a um pixel em um quadro é chamado amostragem de texturae em um mundo perfeito, seu tamanho, localização, direção, etc. independentemente disso, seria uma textura que se ajustaria exatamente ao primitivo. Em outras palavras, a amostragem de textura nada mais é do que um mapeamento plano de 1 para 1 pixel a pixel.

Como este não é o caso, a amostragem de textura precisa levar em consideração uma série de fatores:

  • A textura é ampliada ou reduzida?
  • A textura é original ou um mipmap?
  • Em que ângulo a textura é mostrada?

Vamos analisá-los um por um. O primeiro é bastante claro: se a textura for ampliada, haverá mais texto sobrepondo o pixel na primitiva; com a redução, será o contrário, cada texel agora deve abranger mais de um pixel. Isso é um pouco problemático.

Em segundo lugar, como os mipmaps são usados ​​para contornar o problema de amostragem de textura com primitivas remotas, ele deixa as texturas em ângulo. E sim, isso também é um problema. Por que é que? Porque todas as texturas são renderizadas 'com a face aberta' para uma visualização, ou todas são semelhantes à matemática: a normal da superfície da textura é a mesma que a normal da superfície sendo exibida acima da textura.

Portanto, ter muito pouca ou muita textura e textura em um ângulo, filtragem de textura. Se você não usar esta ação, obterá o seguinte:

Aqui, substituímos a textura do peito por uma textura de letra R para mostrar mais claramente quanta bagunça ela vai ficar sem filtragem de textura!

APIs gráficas como Direct3D, OpenGL e Vulkan oferecem os mesmos tipos de filtragem de intervalo, mas usam nomes diferentes para eles. Na verdade, tudo é assim:

  • ponto de amostragem mais próximo
  • Filtragem de textura linear
  • Filtragem de textura anisotrópica

Para todos os efeitos, ponto de amostragem mais próximo se não estiver filtrando - é porque é o pixel mais próximo do pixel que requer que as texturas sejam amostradas (ou seja, copiadas da memória) e depois combinadas com a cor original do pixel.

Aqui, a filtragem linear vem ao resgate. Obrigatório sen, v as coordenadas do texel são enviadas ao hardware para amostragem, mas em vez de obter o texel mais próximo dessas coordenadas, o amostrador quatro texel Eles estão diretamente acima, abaixo, à esquerda e à direita daquele selecionado usando a amostragem do ponto mais próximo.

Esses 4 tecidos são então misturados usando uma fórmula ponderada. Por exemplo, em Vulkan, a fórmula é:

T "Cor", f Para o drenado e de 1 a 4 são quatro amostras de tecidos. Valores alfa ve beta quão longe do ponto definido por sen, v as coordenadas vêm do meio do tecido.

Felizmente, todos os envolvidos em jogos 3D, seja jogando ou criando jogos, acontecem automaticamente neste chip de processamento gráfico. Na verdade, o chip TMU no 3dfx Voodoo fez isso: amostrou 4 singletons e depois os embaralhou. Direct3D chama isso de maneira estranha filtragem bilinear, mas desde a época do chip TMU de Quake e Voodoo, as placas gráficas só foram capazes de fazer filtragem bilinear em um ciclo de clock (se a textura ficar confortável perto da memória, é claro).

A filtragem linear pode ser usada junto com os mipmaps e se você quiser ficar realmente sofisticado com a sua filtragem, você pode pegar 4 textos de uma textura, depois outros 4 do próximo nível de mipmaps e depois mesclá-los. E o nome do Direct3D para isso? trilinear filtragem. o que tri sobre este processo? Seu palpite é tão bom quanto o nosso ...

O último método de filtragem mencionado é chamado anizotrop. Na verdade, isso é um ajuste ao processo feito na filtragem bilinear ou trilinear. Inicialmente grau de anisotropia superfície primitiva (e surpreendentemente complexo) - este valor altera a proporção da primitiva por causa de sua orientação:

A imagem acima mostra o mesmo quadrado primitivo com lados de igual comprimento; mas à medida que nos afastamos de nossa perspectiva, ele se parece com um retângulo quadrado e sua largura aumenta acima de sua altura. Portanto, a primitiva da direita tem uma anisotropia maior do que a da esquerda (e no caso do quadrado, o grau é exatamente zero).

A maioria dos jogos 3D atuais permite que você habilite a filtragem anisotrópica e ajuste seu nível (1x a 16x), mas o que isso realmente muda? A configuração controla o número máximo de amostras de texel adicionais tomadas por amostra linear original. Por exemplo, digamos que o jogo esteja configurado para usar a filtragem bilinear anisotrópica 8x. Isso significa que ele retornará 32 valores em vez de apenas receber 4 valores de texto.

É claro que o uso de filtragem anisotrópica pode realizar:

Basta rolar um pouco para cima e comparar a amostragem do ponto mais próximo para um máximo de filtragem trilinear anisotrópica 16x. Tão suave, quase delicioso!

Mas tem que haver um preço a pagar por todo aquele sabor agradável de textura amanteigada, e definitivamente é o desempenho: toda a filtragem trilinear anisotrópica máxima retornará 128 amostras de uma textura para cada pixel renderizado. Mesmo para o melhor das GPUs mais recentes, isso não pode ser feito em um único ciclo de clock.

Se conseguirmos algo como AMD Radeon RX 5700 XTCada unidade de textura dentro do processador pode desligar 32 endereços texel em um ciclo de clock, depois carregar 32 texels da memória (32 bits de tamanho cada) em outro ciclo de clock e então colocar 4 deles juntos para marcar. É por isso que ele é embaralhado para 128 instâncias de texel que requerem pelo menos 16 ciclos de clock.

Agora, a velocidade de clock base do 5700 XT é 1605 MHz, então dezesseis ciclos levam apenas 10 nanosaniye. Basta fazer isso para cada pixel no quadro de 4K. 1 a unidade de tecido ainda duraria apenas 70 milissegundos. Ok, talvez o desempenho não seja tão importante!

Mesmo em 1996, empresas como o 3Dfx Voodoo eram muito bacanas quando se tratava de lidar com texturas. Ele podia atingir no máximo 1 texel filtrado bilinear por ciclo de clock e significava que 50 milhões de tex podiam ser cortados a cada segundo enquanto o chip TMU estava girando a 50 MHz. Um jogo rodando a 800 x 600 e 30fps precisa de apenas 14 milhões de texto filtrado bilinear por segundo.

No entanto, tudo isso assume que as texturas estão na memória próxima e apenas um tex é mapeado para cada pixel. Vinte anos atrás, a ideia de ter que aplicar texturas múltiplas a uma política era quase completamente estranha, mas agora é lugar-comum. Vejamos por que essa mudança ocorreu.

Iluminando o caminho para imagens impressionantes

Para ajudar a entender como a tecelagem se tornou tão importante, dê uma olhada nesta cena de Tremor:

É uma imagem escura, essa era a natureza deste jogo, mas você pode ver que a escuridão não é a mesma em todos os lugares - pedaços de paredes e chão são mais claros do que outros para dar uma sensação de iluminação geral naquela área.

As primitivas que compõem as laterais e o fundo têm a mesma textura aplicada a elas, mas existe uma segunda textura chamada mapa de luzé mesclado com valores texel antes de ser combinado com pixels quadrados. Na época do Quake, os lightmaps eram pré-computados e feitos pelo motor do jogo e usados ​​para criar níveis de luz estáticos e dinâmicos.

A vantagem de usá-los era que cálculos complexos de iluminação eram executados em texturas ao invés de cantos, melhorando a aparência de uma cena em particular e com um custo de desempenho muito pequeno. Obviamente não é perfeito: como podem ver no terreno, a fronteira entre as áreas iluminadas e as sombras é muito plana.

De muitas maneiras, um mapa leve é ​​apenas outra textura (lembre-se de que eles não são nada mais do que matrizes de dados 2D), então o que estamos vendo aqui é um uso inicial do que é conhecido como multi textura. Como o nome sugere, é um processo no qual duas ou mais texturas são aplicadas a um princípio. Usar mapas leves no Quake foi uma solução para superar as limitações do sombreamento de Gouraud, mas conforme as capacidades das placas gráficas aumentaram, o mesmo aconteceu com os aplicativos multithread.

3Dfx Voodoo, como outras cartas de sua época, era limitado em quanto poderia fazer em uma renderização passar. Esta é essencialmente uma sequência de renderização completa: desde renderizar os cantos até rasterizar o quadro e, em seguida, alterar os pixels para um framebuffer final. Vinte anos atrás, os jogos quase sempre realizavam uma passagem.

Isso acontecia porque renderizar os vértices duas vezes era muito caro em termos de desempenho, pois você só queria aplicar mais textura. Alguns anos depois do Voodoo, tivemos que esperar até que ele se tornasse disponível para podermos fazer as placas de vídeo ATI Radeon e Nvidia GeForce 2 multi-threaded em uma única passagem de renderização.

Essas GPUs tinham várias unidades de textura por seção de renderização de pixel (ou seja, tubulação), portanto, trazer um texel filtrado bilinear de dois tecidos separados foi muito fácil. Isso tornou o mapeamento de luz ainda mais popular, permitindo que os jogos fossem totalmente dinâmicos, alterando os valores de luz com base nas mudanças no ambiente do jogo.

Mas há muito mais que pode ser feito com texturas múltiplas, então vamos dar uma olhada.

É normal multiplicar a altura

Nesta série de artigos sobre renderização 3D, não cobrimos como o papel da GPU realmente se encaixa em todo o ponto (faremos isso, ainda não!). Mas se você voltar Episódio 1e observe todo o trabalho complexo em torno da renderização de vértices, você pode pensar que essa é a parte mais difícil de todo o array para a GPU lidar.

Já faz um bom tempo, e os programadores de jogos têm feito o possível para reduzir essa carga de trabalho. Isso significava pegar o saco de truques visuais e retirar o máximo possível de atalhos e cheats, dando a mesma aparência visual de usar muitos vértices por todo o lugar, mas não realmente usar tantos deles para iniciá-lo.

E a maioria desses truques, mapas de elevação ve mapas regulares. Os dois estão relacionados ao fato de que o segundo pode ser criado a partir do primeiro, mas por enquanto, vamos apenas dar uma olhada em uma técnica chamada: mapeamento de relevo.

O mapeamento de relevo envolve o uso de uma matriz 2D chamada mapa de altura, que se parece com uma única versão da textura original. Por exemplo, a imagem acima tem uma textura de tijolo realista aplicada a 2 superfícies planas. A textura e o mapa de altura têm a seguinte aparência:

As cores do mapa de altura representam os normais da superfície do tijolo (cobrimos o que é o normal Episódio 1 desta série de artigos). Quando a sequência de renderização atinge o ponto de aplicação da textura do tijolo à superfície, uma série de cálculos é feita para ajustar a cor da textura do tijolo ao normal.

Como resultado, os tijolos parecem mais 3D, embora ainda sejam perfeitamente planos. Principalmente se você olhar atentamente as bordas dos tijolos, verá os limites da técnica: a textura parece um pouco torta. Mas, para um truque rápido de adicionar mais detalhes a uma superfície, o mapeamento de saliências é muito popular.

Um mapa normal é como um mapa de elevação, mas as cores dessa textura são as próprias normais. Em outras palavras, um cálculo não é necessário para converter o mapa de elevação para o normal. Você pode se perguntar como as cores podem ser usadas para representar uma flecha no espaço. A resposta é simples: cada texel tem um específico R, G, B valores (vermelho, verde, azul) e esses números são diretamente X ve Z valores para o vetor normal.

No exemplo acima, o diagrama à esquerda mostra como a direção do normal muda em uma superfície áspera. Para representar os mesmos normais em uma textura plana (diagrama do meio), atribuímos a eles uma cor. No nosso caso, R, G, B incrementando os valores (0,255,0) para reto e depois as quantidades de vermelho para a esquerda e azul para a direita.

Observe que essa cor não é combinada com o pixel original - ela informa ao processador para que lado o normal está voltado, para que a câmera possa calcular corretamente os ângulos entre as luzes e a superfície texturizada.

Os benefícios do mapeamento de relevo e normal realmente brilham quando a iluminação dinâmica é usada em uma cena, e o processo de renderização calcula os efeitos das mudanças de luz por pixel, não por canto. Os jogos modernos agora usam um monte de texturas para melhorar a qualidade da mágica feita.

Esta parede de aparência realista é incrivelmente apenas uma superfície plana - os detalhes sobre o tijolo e argamassa não foram feitos usando milhões de polígonos. Em vez disso, ele faz apenas 5 texturas e muito trabalho matemático inteligente.

O mapa de elevação foi usado para gerar o mapa normal para simular a maneira como os tijolos projetam sombras sobre si mesmos e quaisquer pequenas alterações na superfície. A textura rugosa foi usada para mudar como a luz reflete diferentes elementos da parede (por exemplo, um tijolo achatado reflete de forma mais consistente do que a argamassa áspera).

O mapa final, denominado AO na imagem acima, faz parte de um processo denominado oclusão de ambiente: uma técnica que examinaremos com mais profundidade em um artigo posterior, mas apenas sombras por enquanto.

O mapeamento de textura é crucial

A texturização é absolutamente essencial para o design de jogos. Obtenha a versão 2019 do Warhorse Studio O Reino está chegando: Salvação - Um RPG em primeira pessoa ambientado na Boêmia do século 15, um antigo país do Centro-Leste Europeu. Os designers estavam ansiosos para criar um mundo o mais realista possível para o período em questão. E a melhor maneira de mergulhar o jogador em uma vida de centenas de anos atrás, em todas as paisagens, edifícios, conjuntos de roupas, cabelos, itens do dia a dia, etc. Tratava-se de ter a aparência certa.

Cada textura única nesta única imagem do jogo é feita pelos artistas e seu uso pelo mecanismo de renderização controlado pelos programadores. Alguns são pequenos, têm detalhes básicos e pouco aproveitam para filtrar ou processar outras texturas (asas de frango, por exemplo).

Outros são de alta resolução e mostram muitos detalhes; filtrado anisotropicamente e combinado com mapas normais e outras texturas - basta olhar para o rosto do homem em primeiro plano. Os diferentes requisitos de texturização de cada elemento na cena são explicados pelos programadores.

Tudo isso agora está acontecendo em muitos jogos, já que os jogadores esperam mais detalhes e realismo. As texturas crescerão e serão mais usadas em uma superfície, mas o processo de amostrar texto e aplicá-lo aos pixels será essencialmente o mesmo que nos dias de terremoto. A melhor tecnologia, não importa quantos anos, nunca morre!