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?
Respostas:
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.
fonte
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.
fonte
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:
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 :
É 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 .
fonte