A multitexturação é realmente apenas "usando mais de uma textura"?

10

Isso pode parecer estúpido, mas me incomoda. Pelo que entendi, a multitexturação está apenas usando mais de 1 textura por sombreador (geralmente para misturá-las de alguma forma). Então, ao invés de criar 1 textura, eu crio 2 ou mais, o que é ... bastante óbvio!

Por que existe um termo especial para isso? Existe mais do que apenas "usar mais de uma textura"? Estou esquecendo de algo?

NPS
fonte
Em um ponto, especialmente em gráficos 3D em tempo real, o uso de uma textura (mapa difuso) era muito comum. Portanto, o nome foi usado para sugerir que você esteja usando mais de uma textura. Eu não vejo o problema. Muito parecido com multi-threaded
AturSams 2/14/14
Mas o multithreading requer API especial, design de programa completamente diferente e assim por diante. Difere em muitos aspectos. Minha pergunta decorre do fato de que a multi-extensão não parece ter nada diferente, exceto a contagem de texturas. E não é um problema, apenas uma pergunta.
NPS
Ele não precisa exigir uma API especial. Isso dependeria da implementação. Eu uso algumas ferramentas que deleite multitexturas da mesma forma que faria "unitexture";)
AturSams
@concept Qual parte? O título?
Anko

Respostas:

16

O termo especial tem a ver com a evolução das placas gráficas e das APIs gráficas em tempo real, em vez de ser tão especial. Por exemplo, o processamento de imagens e a renderização gráfica offline tinham esse recurso muito antes de estar disponível nas APIs gráficas em tempo real e no hardware no nível do consumidor.

Desde o OpenGL 1.1 (funcionalidade fixa), a multitexturação foi introduzida como um novo estado para a API. Em vez de vincular apenas uma textura, ele permitiu vincular várias texturas; um para cada unidade de textura e depois misture entre elas usando um dos parâmetros do ambiente de textura, misture, module ... etc 1

Em seguida, foram introduzidos combinadores de textura , que permitiam combinar um conjunto de texturas usando operações mais flexíveis, oferecendo a você uma maneira de passar parâmetros para um conjunto fixo de operações (pense nisso como sombreadores, mas com um conjunto fixo de parâmetros). mais flexível que os "combinadores" originais.

Com a introdução dos shaders, os combinadores anteriores se tornaram redundantes até serem oficialmente descontinuados. Finalmente, tornou-se trivial (à medida que o hardware e, consequentemente, as APIs evoluíram) passar um amostrador de textura para o shader e deixar a GPU executar operações arbitrárias (seu shader) em suas texturas, muito mais flexíveis do que era antes.

O ponto aqui; mesmo que se tornasse trivial, o termo sobreviveria como um termo genérico para qualquer operação que descreva amostragem e convolução de várias texturas.

1 Estou usando minha memória para recuperar a funcionalidade fixa do OpenGL, me corrija se eu perdi o sth.

concept3d
fonte
5

A razão histórica é que "multi-extensão" era um chavão de marketing como "hardware TnL" era uma vez. Como era uma característica distintiva dos novos cartões, era preciso haver uma palavra para vendê-los.

A razão técnica é que a multitexturação não está apenas criando e usando duas texturas em vez de uma. Se você simplesmente usou duas texturas (ou três, ou qualquer número), também pode usar apenas uma textura, pois existe apenas um fragmento de saída. Isso não faria diferença (seja qual for a entrada, a saída pode ser apenas uma ou outra), portanto, não seria nada de especial.

A diferença não é que você pode criar várias texturas, mas que você combina duas ou mais texturas. Por exemplo, você pode combiná-los com base em alfa ou em alguns fatores de mesclagem interpolados por vértice ou adicioná-los ou algo diferente.
A quantidade de configurabilidade / programabilidade evoluiu bastante na última década, mas a única grande diferença é que você pode de alguma forma combinar duas ou mais entradas em uma saída.

Damon
fonte
2

No começo havia luz

A iluminação OpenGL, para ser específica, que especificou certas operações matemáticas a serem aplicadas a um fragmento, que foram combinadas com texturas para obter uma cor final.

E então houve Quake

O Quake não usou esse tipo de iluminação para muitos de seus objetos. Em vez disso, usou uma segunda textura para representar a iluminação, que foi multiplicada (ou "modulada com) a textura do objeto para obter uma cor final.

No entanto, o hardware da época não suportava isso em uma única operação. Então Quake precisava desenhar seus objetos de cena duas vezes:

  • Desenhe tudo uma vez para definir as texturas de base.
  • Defina um modo de mesclagem modular.
  • Desenhe tudo uma segunda vez para aplicar as texturas de iluminação.

Claro que isso foi lento; não só toda a geometria precisou ser transformada e cortada duas vezes (o que naquela época era uma operação da CPU), mas todos os pixels na tela acabaram sendo tocados duas vezes durante a renderização.

Digite multitexture

O Multitexture foi a solução para isso e foi originalmente exposto através da extensão GL_SGIS_multitexture, que existia apenas em alguns cartões 3DFX de consumo. Originalmente, ele só permitia misturar duas texturas (e com um conjunto limitado de modos de mesclagem).

Para citar o leia - me original do GLQuake :

GL_SGIS_multitexture O
suporte a multitexturas permite que determinado hardware renderize o mundo em uma passagem em vez de duas. O GLQuake usa duas passagens, uma para as texturas mundiais e a segunda para os mapas de luz que são misturados nas texturas. Em alguns hardwares, com uma implementação OpenGL suportada por GL_SIGS_multitexture, isso pode ser feito de uma só vez. No hardware que suporta isso, você obterá um aumento de 60% a 100% na taxa de quadros. Atualmente, apenas os cartões TMF duplos 3DFX (como o Obsidian 2220) suportam essa extensão, mas outros hardwares seguirão em breve.

É importante lembrar que, atualmente, efeitos como mapeamento normal, qualquer outro tipo de iluminação por pixel, até sombreadores etc. não existiam (bem, existiam , mas principalmente apenas em trabalhos acadêmicos e projetos de pesquisa e não foram considerados viáveis ​​para uso na renderização em tempo real).

E assim até o presente

A partir daqui, é praticamente como descrito nas outras respostas. A multi-extensão se tornou um recurso padrão ao longo do tempo, com mais modos de mesclagem disponíveis, eventualmente dando lugar a um código de sombreador arbitrário.

Mas o que é importante para os propósitos da sua pergunta é o seguinte: no início, a funcionalidade padrão era capaz de usar uma textura por vez ao renderizar. Ser capaz de usar mais de um era funcionalidade adicional suportada apenas por hardware de última geração e, portanto, precisava de um nome. Esse nome poderia ter sido "texturização dupla" (como as primeiras implementações suportaram apenas duas texturas), mas com um olho no futuro, o nome "multitextura" foi escolhido.

Leituras adicionais sobre a história de tudo isso estão disponíveis aqui , e uma boa redação histórica (do contexto mais amplo e do papel que a multi-estrutura desempenha) nesta resposta do programador .

Maximus Minimus
fonte