Não. Em nenhum momento você deve ter uma matriz mundial explícita em seu shader.
Uma explicação detalhada do porquê pode ser encontrada aqui , mas a versão curta é realmente muito simples: você nunca precisa dela e pode matar sua precisão de ponto flutuante.
Se o seu espaço no mundo for muito grande, uma câmera que esteja longe da origem poderá causar problemas de precisão de ponto flutuante.
Todo o espaço do mundo é nada mais que um intermediário entre o espaço do modelo e o espaço da câmera. É um lugar onde você pode expressar a câmera e todos os outros objetos no mesmo espaço. Mas tudo o que você usa para gerar uma matriz de mundo para câmera, que você aplica a todas as matrizes de modelo para mundo para criar matrizes de modelo para câmera.
Você pode lidar com problemas de precisão em C ++ usando dobras em vez de flutuadores para cálculos de matriz. Você pode convertê-los novamente em carros alegóricos antes de carregá-los no sombreador.
Então, por que você precisaria de uma transformação explícita no espaço mundial em seu shader? No seu código fonte, sim. Mas no seu shader? O que você faria com isso e não pode fazer com o espaço da câmera?
A iluminação pode ser feita no espaço da câmera tão facilmente quanto no espaço do mundo; tudo o que você precisa fazer é transformar suas posições / direções de luz no espaço da câmera. Afinal, o espaço da câmera tem a mesma escala que o espaço do mundo. Você faz essa transformação uma vez por quadro por luz; dificilmente um fardo de desempenho, mesmo na CPU.
Portanto, não há absolutamente nenhum sentido em expor seus shaders a uma transformação explícita no espaço mundial. É apenas um passo intermediário que você dobra em suas matrizes.