Estou tentando implementar um gráfico de cena e, em todos os artigos que encontrei, há discussões sobre classificação de objetos. Então, você classifica seus objetos por "material", por exemplo. Agora, até que me sentei e comecei a implementá-lo, eu meio que tomei isso como garantido, porque fazia sentido. Mas agora estou me perguntando o que realmente muda a classificação?
No meu mecanismo, tenho um gerente de UBOs, uso-os para armazenar dados que serão compartilhados entre programas, no momento que envolve apenas tempo, matrizes de câmera e projeção e luzes (não me preocupo em gerenciar quais luzes afetam quais objetos ATM).
Agora, para cada modelo, eu tenho que mudar o modelo para uniforme da matriz mundial, nenhuma classificação vai mudar isso. Então é o salto de mudar essa matriz para também definir um material para cada objeto tão ruim?
Lembro- me vagamente de ler em algum lugar que cada vez que você altera algo no pipeline, ele precisa ser liberado e isso pode causar problemas de desempenho. Mas, para cada chamada de desenho, estou configurando um modelo para a matriz mundial, então que sentido faz para se preocupar com isso?
Aliás, existe alguma informação sobre se alterar um uniforme e chamar glBufferSubData é mais (ou menos) caro.
fonte
Respostas:
Você definitivamente deseja classificar para agrupar materiais. Se você puder, também pode usar instanciamento para agrupar geometria (por exemplo, se você tiver um número X dos mesmos objetos).
Também há valor na classificação por profundidade também. Você deve classificar de volta para a frente em busca de objetos transparentes (ignorando várias técnicas avançadas que removem essa necessidade, em circunstâncias limitadas).
Também vale a pena classificar objetos opacos da frente para trás, pois isso permite que o Z inicial reduz bastante a sobrecarga do shader de fragmentos da cena.
fonte
A classificação de objetos puramente por profundidade tem um enorme valor, especialmente em arquiteturas de renderização em bin ou em ladrilhos.
Classifique os sólidos da frente para trás, as transparências de trás para a frente.
Ao renderizar, o material mais próximo da câmera e do sólido é renderizado primeiro, e qualquer outra coisa que ocupe o mesmo espaço será rejeitada por uma verificação inicial do buffer z.
Se a arquitetura gráfica tiver algum tipo de buffer z hierárquico ou de baixa resolução, a geometria poderá ser descartada antes mesmo que algo seja renderizado.
fonte