Digamos que eu tenha uma octree e, em um certo nível, eu armazene VBOs nessa octree. Conheço as dimensões dos nós que possuem o vbo para que eu possa fazer a seleção básica do frustum. Isso funciona muito bem porque tudo fora da tela nunca é renderizado.
No entanto, meu mundo é muito grande e atualmente também desenhei coisas por trás de outros lugares já desenhados. O que eu usaria para não desenhar nós ocluídos por outros nós e como eu faria isso?
Eu vi algumas menções de seleção de oclusão no OpenGL soberbamente, mas não consigo entender como posso utilizá-lo quando não tenho uma distinção clara entre oclusores e oclusos.
Respostas:
Um dos recursos do octree é que ele permite que você processe seus nós octree na ordem inversa ou anterior. Fazer isso ajudará muito o desempenho, pois permite que a implementação do EarlyZ do hardware gráfico seja mais eficaz (você executa menos shaders, executa menos trabalhos de varredura etc.)
O benefício de usar consultas de oclusão para consultar a visibilidade dos nós octree é que ele pode evitar que você renderize objetos geométricos altamente complexos ocluídos. Os objetos (opacos) em sua cena são seus oclusores e seus nós de octree (e, implicitamente, o conteúdo deles) são ocluídos. Como Samaursa disse, é realmente difícil fazer isso direito, portanto, verifique este documento antes de tentar (as barracas prejudicarão o desempenho se não forem tratadas com cuidado). Além disso, verifique se a complexidade geométrica é realmente o seu limitador de desempenho, caso contrário você provavelmente estará perdendo seu tempo.
fonte
O OpenGL nativamente não suporta consultas de oclusão, mas você pode usar extensões como ARB_occlusion_query . O link tem um projeto e um bom
PDF
que explica como usá-lo. Porém, tenha cuidado, às vezes as consultas de oclusão acabam custando mais do que simplesmente desenhar a geometria. Isto é especialmente verdade se a geometria não for muito complexa.Se você fornecer mais informações sobre sua cena (captura de tela), uma solução melhor poderá ser fornecida.
fonte
Atualmente, fui apenas encomendar meus vbos por distância para a câmera. Isso parece ajudar mais. A menos que eu não consiga entender as consultas de oclusão, isso torna meu código lento e fornece resultados estranhos, em vez de realmente ajudar. Portanto, a menos que eu veja mais alguns problemas de desempenho ao longo do caminho, continuo com o que tenho.
fonte