Nesta terceira seção, onde aprofundaremos a criação de jogos 3D, focaremos no que acontece com o mundo 3D após o processamento dos cantos e a cena é rasterizada. A configuração é um dos estágios mais importantes na renderização, embora tudo o que acontece seja calculado e substituído por uma grade bidimensional de blocos coloridos.

A maioria dos efeitos visuais vistos nos jogos de hoje depende do uso inteligente de texturas - jogos sem eles se tornam maçantes e sem vida. Então vamos mergulhar e ver como isso funciona!

Como sempre, se você não estiver pronto para mergulhar profundamente no tecido, não entre em pânico - você pode começar Criação de jogos em 3D 101. Mas assim que o básico passar, continue lendo para o próximo olhar sobre o mundo dos gráficos 3D.

Vamos começar simples

Escolha os jogos 3D mais vendidos nos últimos 12 meses e todos compartilharão algo em comum: mapas de textura (ou apenas texturas) Esse é um termo muito comum; a maioria das pessoas criará a mesma imagem ao considerar as texturas: um quadrado ou retângulo simples e plano (grama, pedra, metal, roupas, rosto etc.) que contenha a imagem de uma superfície.

No entanto, quando usado em várias camadas e combinado com aritmética complexa, o uso dessas imagens básicas na cena 3D pode produzir imagens surpreendentemente realistas. Para ver como isso é possível, vamos ignorá-los completamente e ver como os objetos no mundo 3D podem parecer sem eles.




Como vimos em artigos anteriores, o mundo 3D é composto de cantos - formas simples que podem ser movidas e coloridas posteriormente. Eles são usados ​​para criar primitivas, que também são compactadas em uma grade de pixels 2D. Como não usaremos texturas, precisamos colorir esses pixels.




É chamado de método que pode ser usado sombreamento retoenvolve pegar a cor do primeiro vértice da substância primitiva e depois usá-la para todos os pixels que se enquadram no escopo da forma na varredura. 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 outro, sem transição suave. Uma solução para esse problema pode ser usar algo chamado Sombreamento Gouraud.




Este é um processo que pega as cores dos cantos e calcula como a cor muda na superfície do triângulo. Matemática usada interpolação linearIsso significa que, embora pareça sofisticado, na realidade, se a cor de um lado primitivo for 0,2 vermelho e o outro lado for 0,8 vermelho, a forma terá uma cor entre 0,2 e 0,8 (ou seja, 0,5).

É relativamente simples de fazer e seu principal benefício é a velocidade. Muitos jogos em 3D iniciais usavam essa técnica porque o hardware que fazia os cálculos era limitado ao que eles podiam fazer.




Mas mesmo isso tem seus problemas, porque se uma luz está apontando bem no meio de um triângulo, seus cantos (cantos) podem não pegá-la corretamente. Isso significa que os realces causados ​​pela luz podem ser completamente ignorados.




Embora o sombreamento plano e o Gouraud estejam incluídos no arsenal de renderização, os exemplos acima são candidatos abertos ao uso de texturas para curá-los. E para entender bem o que acontece quando uma textura é aplicada a uma superfície, voltaremos no tempo ... até 1996.

Um jogo curto e história da GPU

Quake é um jogo de referência 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 com tanta eficiência.

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

Comparado aos padrões atuais, o Voodoo era extremamente simples: sem suporte a gráficos 2D, sem processamento de canto e apenas o básico do processamento de pixels. Ainda era uma beleza:

Ele tinha um chip inteiro (TMU) para obter um pixel de uma textura e outro chip (FBI) para misturá-lo com um pixel da varredura. Ele pode fazer algumas coisas adicionais, como criar efeitos de neblina ou transparência, mas foi quase isso.

Se fornecermos uma visão geral da arquitetura por trás do design e operação da placa gráfica, 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 um tecido. O processo de mesclagem é matematicamente bastante simples, mas difere um pouco entre o que está sendo misturado exatamente e qual API é usada para executar instruções.

O que olhamos Ofertas do Direct3D Em termos de funções de mesclagem e operações de mesclagem, podemos ver que cada pixel é multiplicado pela primeira vez por um número entre 0,0 e 1,0. Isso determina quanto da cor do pixel afetará a aparência final. O conjunto de duas cores de pixel é adicionado, subtraído ou duplicado; Em algumas funções, a operação é sempre uma expressão lógica na qual algo como o pixel mais brilhante é selecionado.

A imagem acima é um exemplo de como isso funciona na prática; do 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 (extraído de uma tabela de programa criada pelo programador e, em seguida, faz a mesma matemática de mistura); fazer algumas verificações e ajustes de visibilidade e transparência; antes de finalmente gravar a cor do pixel na memória da placa gráfica.

Por que lição de história? Apesar da relativa simplicidade do design (especialmente em comparação com os gigantes modernos), o processo explica os princípios básicos da texturização: obtenha alguns valores de cores e misture-os para que modelos e ambientes vejam como deve estar em uma situação específica.

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

Noções básicas de texturização

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

Cada vértice de um polígono possui 2 coordenadas (geralmente sen, v) informa qual pixel na textura está associado a ele. O canto em si possui 3 conjuntos de coordenadas (X ve Z) e digitando texto nos cantos. mapeamento de textura.

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

Temos a textura da esquerda para a direita sen, v coordenadas mapeadas diretamente para os cantos dos cantos x, y coordenadas. Então os cantos superiores y suas coordenadas aumentaram, mas como a textura ainda é mapeada diretamente para elas, a textura é esticada para cima. Na imagem à direita, desta vez alterando a textura: u os valores aumentaram, mas isso faz com que o tecido seja esmagado e depois repetido.

Como a textura agora é efetivamente mais longa, maior u Seu valor deve caber no primitivo - essencialmente a textura foi 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 o cenário para ser mais primitivo, e colocaremos a profundidade de volta no jogo. O que temos abaixo é uma vista de paisagem clássica, mas a textura da caixa é copiada e repetida entre as primitivas.

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

Obviamente, seguimos mais de 20 caminhos, 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 tecido (Sim, isso é uma palavra!). Vamos tentar novamente, mas desta vez ele se aproximou 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 de uma imagem de 1900 pixels de largura. Essa textura passou por algo chamado aumento de tecido.

Esses dois processos de textura sempre ocorrem em jogos 3D, porque todas as texturas aplicadas às primitivas devem ser dimensionadas juntamente com polígonos à medida que a câmera se move pelo palco ou quando os modelos se aproximam e se afastam. Matematicamente, isso não é grande coisa, de fato, mesmo os chips gráficos integrados mais simples estão piscando nesse trabalho. No entanto, a redução e o aumento do tecido apresentam novos problemas que precisam ser resolvidos de alguma forma.

Digite mini texturas

A primeira questão a ser corrigida é para tecidos distantes. Se olharmos novamente para a primeira imagem da paisagem da caixa, as corretas no horizonte têm apenas alguns pixels de tamanho. Não faz sentido, por dois motivos, tentar compactar uma imagem de 256 x 256 pixels em uma área tão pequena.

Primeiro, uma textura menor ocupa menos espaço na placa gráfica, 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á ao máximo os dados na memória próxima. A segunda razão pela qual chegamos por um momento, porque depende do mesmo problema para texturas com zoom.

Uma solução comum para o uso de tecidos grandes esmagados por pequenos primitivos, acoplamento. Essas são versões minimizadas da textura original; o próprio mecanismo de jogo pode ser criado (usando o comando API correspondente para fazer isso) ou pode ser feito com antecedência pelos designers do jogo. Cada nível de tecido mipmap possui metade das dimensões lineares do anterior.

Para a textura da caixa, acontece algo assim: 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 são todos empacotados juntos; portanto, a textura ainda é o mesmo nome de arquivo, mas agora é maior. O tecido é embalado de tal maneira que sen, v suas coordenadas não apenas determinam qual texel aplicar a um pixel no quadro, mas também de qual mipmap. 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 estará à distância, para que um pequeno mipmap possa ser usado.

Os leitores de olhos nítidos podem ter visto a desvantagem dos mipmaps e custar texturas maiores. A textura da caixa original tem 256 x 256 pixels, mas como você pode ver na figura acima, a textura do mapa mip agora é de 384 x 256. Sim, há muito espaço livre, mas independentemente de como você o empacota em texturas menores, o aumento total para pelo menos uma das dimensões do tecido é de 50%.

No entanto, isso se aplica apenas aos mipmaps pré-preparados; Se o mecanismo de jogo estiver programado para produzi-los adequadamente, o aumento nunca poderá exceder 33% do tamanho da textura original. Portanto, você obtém vantagens de desempenho e melhorias visuais para um aumento relativamente pequeno da memória nos mipmaps de tecidos.

Abaixo está uma comparação fechada / aberta de mipmaps de tecido:

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 de moiré longe. No entanto, no lado direito, o uso de mipmaps causa uma transição muito mais suave pela paisagem, onde a textura da caixa se transforma em uma cor consistente no horizonte.

No entanto, alguém quer texturas confusas que perturbam o fundo de seu jogo favorito?

Bilineer, listras triplas, anisotrópica - todo grego para mim

O processo de seleção de pixels de uma textura a ser aplicada a um pixel em um quadro amostragem de tecidose em um mundo perfeito, seu tamanho, posição, direção etc. independentemente de sua textura, seria uma textura que corresponde exatamente ao seu princípio. Em outras palavras, a amostragem de textura nada mais é do que um processo de mapeamento de 1 a 1 pixel a pixel.

Como esse não é o caso, a amostragem de tecidos precisa levar em consideração vários fatores:

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

Vamos analisá-los um por um. A primeira é clara o suficiente: se a textura for ampliada, haverá mais texto cobrindo o pixel primitivo do que o necessário; Com o psiquiatra, será o oposto, agora cada texel deve cobrir mais de um pixel. Isso é um pouco de problema.

Segundo, os mipmaps deixam os tecidos em ângulo, pois são usados ​​para contornar o problema da amostragem de tecidos com primitivos distantes. E sim, isso também é um problema. Por quê? Como todas as texturas são criadas 'abertas' para uma visualização, ou todas são como matemática: a superfície normal da textura é a mesma que a superfície exibida no tecido.

Portanto, para ter muito poucas ou muitas texturas e ter texturas em ângulo, filtragem de tecidos. Se você não usar esse processo, é isso que você obtém:

Aqui substituímos a textura da caixa por uma letra R para mostrar mais claramente quanta confusão ela terá sem filtrar a textura!

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

  • Amostragem de ponto mais próximo
  • Filtragem linear de textura
  • Filtragem de tecido anisotrópico

Para todos os efeitos, amostragem de ponto mais próximo se não filtrar - é porque é o pixel mais próximo do pixel que requer amostragem (ou seja, copia-o da memória) e depois mistura o pixel com sua cor original.

Aí vem a filtragem linear para o resgate. Requeridos sen, v coordenadas texel são enviadas ao hardware para amostragem, mas, em vez de obter o texel mais próximo dessas coordenadas, o amostrador quatro texels. Estes estão diretamente acima, abaixo, à esquerda e à direita do selecionado usando a amostragem de ponto mais próxima.

Estes 4 têxteis são então misturados usando uma fórmula ponderada. Por exemplo, a fórmula no Vulkan:

T "Cor", f Quatro tecidos amostrados para os drenados e 1 a 4. valores alfa ve beta A que distância do ponto definido por sen, v as coordenadas vêm do meio da torneira.

Felizmente, qualquer pessoa envolvida em jogos 3D, jogando ou jogando, acontece automaticamente neste chip de processamento gráfico. De fato, o chip TMU no 3dfx Voodoo fez isso: ele amostrou 4 singles e depois os misturou. O Direct3D chama isso de estranha filtragem bilinear, no entanto, desde a época do chip TMU da Quake e da Voodoo, as placas gráficas foram capazes de filtrar por apenas uma hora de ciclo (se a textura fica confortavelmente na memória), é claro.

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

O último método de filtragem mencionado é chamado anizotrop. Na verdade, isso é um ajuste de acordo com o processo de filtragem bilirear ou trilinear. Inicialmente grau de anisotropia superfície primitiva (e surpreendentemente complicado) - esse valor altera a proporção da primitiva devido à sua orientação:

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

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

É claro que o uso da filtragem anisotrópica pode perceber:

Basta deslizar um pouco e comparar a amostragem de pontos mais próxima para uma filtragem trilinear anisotrópica máxima de 16x. Tão suave, quase delicioso!

Mas deve haver um preço para pagar todo esse belo sabor de textura de manteiga e, definitivamente, o desempenho: toda a filtragem trilinear anisotrópica máxima trará 128 amostras de uma textura para cada pixel processado. Mesmo para as melhores GPUs mais recentes, isso não pode ser feito em um único ciclo de clock.

Se conseguirmos algo como a AMD Radeon RX 5700 XTmarcar cada unidade de tecido dentro do processador pode fechar 32 endereços texel em um loop de clock, carregar 32 texels da memória (cada tamanho de 32 bits) em outro ciclo de clock e montar 4 posteriormente. Portanto, foi misturado para 128 amostras de texel que requerem um ciclo de pelo menos 16 horas.

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

Mesmo em 1996, os gostos do 3Dfx Voodoo eram bastante elegantes no manuseio de texturas. O máximo pode ser dado em 1 texel filtrado bilinear por hora e, enquanto o chip TMU oscilava a 50 MHz, isso significava que 50 milhões de texins podiam ser cortados a cada segundo. Em um jogo que roda a 800 x 600 e 30 fps, são necessários apenas 14 milhões por segundo de texto.

No entanto, tudo isso pressupõe que as texturas estejam na memória próxima e que apenas um texin é mapeado para cada pixel. Vinte anos atrás, a idéia de ter que aplicar mais de uma textura a um princípio era quase totalmente desconhecida, mas agora é comum. Vejamos por que essa mudança aconteceu.

Iluminando o caminho para imagens espetaculares

Dê uma olhada nesta cena do Quake para ajudar a entender como o tecido se tornou tão importante:

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

As primitivas que formam os lados e o piso têm a mesma textura aplicada a elas, mas existe uma segunda textura chamada. mapa de luzé mesclado com valores texel antes de corresponderem a pixels quadrados. Durante os dias do Quake, os mapas de luz foram pré-calculados e elaborados pelo mecanismo de jogo e usados ​​para criar níveis de luz estáticos e dinâmicos.

A vantagem de usá-los foi que cálculos complexos de iluminação foram feitos em texturas em vez de cantos, melhorando especialmente a aparência de uma cena e muito pouco custo de desempenho. Obviamente não é perfeito: como você pode ver no chão, o limite entre as áreas iluminadas e as da sombra é muito claro.

De muitas maneiras, um mapa leve é ​​apenas outra textura (lembre-se de que são todos, exceto matrizes de dados 2D), então o que estamos vendo aqui é o uso precoce do que é conhecido. textura múltipla. Como o nome indica, é um processo no qual dois ou mais toques são aplicados a um princípio. O uso de mapas de luz no Quake foi uma solução para superar as limitações do sombreamento Gouraud, mas à medida que os recursos das placas gráficas aumentavam, os aplicativos de vários drives também aumentavam.

O 3Dfx Voodoo, como outros cartões de sua época, limitava-se ao quanto poderia fazer em uma renderização passar. Essa é essencialmente uma sequência de renderização completa: desde o processamento de cantos até a varredura do quadro e a alteração dos pixels para um buffer de quadro final. Vinte anos atrás, os jogos quase sempre faziam um único passe.

A razão para isso é que era muito caro em termos de desempenho, pois você deseja processar os cantos duas vezes apenas para aplicar mais textura. Alguns anos após o Voodoo, tivemos que esperar até que as placas gráficas ATI Radeon e Nvidia GeForce 2 estivessem disponíveis para que pudéssemos fazer multi-draws em uma única transição de renderização.

Essas GPUs tinham várias unidades de textura por seção de processamento de pixels (ou seja, Linha de tubosFoi muito fácil trazer um texel filtrado de duas texturas separadas. Isso tornou o mapeamento da luz ainda mais popular e alterou os valores da luz devido a mudanças no ambiente do jogo, tornando os jogos totalmente dinâmicos.

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

É normal multiplicar a altura

Nesta série de artigos sobre renderização em 3D, não abordamos como o papel da GPU realmente se encaixa em todo o problema (faremos isso ainda, ainda não!). Mas se você voltar Episódio 1e observe todo o trabalho complicado do processamento de canto, você pode pensar que essa é a parte mais difícil de toda a matriz para o processador gráfico renderizar.

Já faz muito tempo, e os programadores de jogos fizeram o possível para reduzir essa carga de trabalho. Isso significava alcançar o pacote de truques visuais e remover o maior número possível de atalhos e truques, dando a mesma aparência visual do uso de vários cantos em todos os lugares, mas na verdade não usando muitos para iniciá-lo.

E a maioria desses truques, mapas de elevação ve mapas normais. Os dois se relacionam com o fato de que o segundo pode ser criado a partir do primeiro, mas, por enquanto, vejamos apenas uma técnica chamada: mapeamento de relevo.

O mapeamento de tubérculos envolve o uso de uma sequência 2D chamada mapa de elevação, que se parece com uma única versão do tecido original. Por exemplo, na imagem acima, há uma textura de tijolo realista aplicada a 2 superfícies planas. O mapa de textura e altura fica assim:

As cores do mapa de altura representam as normas da superfície do tijolo (cobrimos o que é normal Episódio 1 esta série de artigos). Quando a sequência de renderização chega ao ponto de aplicar a textura de tijolo à superfície, são feitos vários cálculos para ajustar a cor da textura de tijolo ao normal.

Como resultado, embora os tijolos ainda sejam completamente planos, eles parecem mais 3D. Especialmente se você observar cuidadosamente as bordas dos tijolos, poderá ver os limites da técnica: a textura parece um pouco distorcida. No entanto, para um rápido número de adição de mais detalhes a uma superfície, o mapeamento de tubérculos é muito popular.

Um mapa normal é como um mapa de altura, mas as cores dessa textura são normais em si. Em outras palavras, não é necessário um cálculo para normalizar o mapa de altitude. Você pode se perguntar como as cores podem ser usadas para representar uma seta no espaço. A resposta é simples: cada texel é 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 esquerdo mostra como a direção da normal muda em uma superfície irregular. Para representar as mesmas normais em uma textura plana (diagrama do meio), atribuímos uma cor a elas. No nosso caso, R, G, B Aumentando os valores (0.255.0) para a reta e depois a quantidade de vermelho para a esquerda e azul para a direita.

Observe que essa cor não é combinada com o pixel original - indica ao processador em qual direção o normal está voltado para que a câmera possa calcular com precisão os ângulos entre as luzes e a superfície texturizada.

Quando a iluminação dinâmica é usada no palco, os benefícios da correspondência normal e normal realmente brilham, e o processo de renderização calcula os efeitos das mudanças de luz por pixel, não em todos os cantos. Os jogos modernos usam muita textura para melhorar a qualidade da mágica agora.

Essa parede de aparência realista é incrivelmente apenas uma superfície plana - os detalhes sobre tijolo e argamassa não são feitos usando milhões de polígonos. Em vez disso, ele faz apenas 5 texturas e muitos trabalhos de matemática inteligentes.

O mapa de elevação foi usado para produzir o mapa normal para simular o caminho dos tijolos de sombreamento para si e todas as pequenas alterações na superfície. A textura da rugosidade foi usada para alterar a maneira como a luz reflete diferentes elementos da parede (por exemplo, um tijolo achatado reflete mais consistentemente do que a argamassa áspera).

O último mapa, rotulado como AO na imagem acima, faz parte de um processo chamado congestionamento da mídia: essa é uma técnica que veremos em um artigo posterior, mas, por enquanto, são apenas sombras.

A correspondência de tecidos é muito importante

É absolutamente crucial para o design do jogo texturizado. Obtenha a versão 2019 do Warhorse Studio O Reino está chegando: Salvação Um RPG em primeira pessoa fundado no século XV na Boêmia, um país antigo no Oriente Médio na Europa. Os designers estavam ansiosos para criar um mundo realista possível para o período em questão. E a melhor maneira de dar vida ao ator centenas de anos atrás é que todas as paisagens, construções, roupas, cabelos, produtos diários etc. Era para ter a aparência certa.

Cada textura única nesta imagem única no jogo foi feita pelos artistas e seu uso pelo mecanismo de renderização controlado pelo programador. Alguns são pequenos, básicos e levam muito pouco para filtrar ou processar outros tecidos (como asas de frango).

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

Tudo isso está acontecendo agora em muitos jogos, porque os jogadores estão esperando por mais detalhes e realismo. As texturas crescerão e serão mais usadas em uma superfície, mas o processo de amostragem e aplicação de texto em pixels será essencialmente o mesmo que nos dias do Quake. A melhor tecnologia nunca morre, não importa quantos anos!