Uma GPU já pode selecionar os polígonos por polígono, mas isso acontece no tempo de rasterização / configuração, que ocorre após o sombreamento do vértice (usando os sombreadores Vertex / Geometry / Hull / Domain). Isso significa que a GPU ainda pode acabar sombreando vértices poligonais que acabarão sendo descartados. Se isso acontecer, a GPU terá feito muito trabalho por nada e, portanto, será um desperdício de ciclos da GPU.
Por esse motivo, tentamos não desperdiçar os ciclos da GPU selecionando a geometria invisível no lado da CPU (ou no lado da GPU usando recursos do DX10 +, como DrawIndirect e / ou renderização predicada) em lotes de polígonos, simplesmente não chamando draw para esses lotes.
Normalmente, esse lote de polígonos pode ser representado por uma esfera ou caixa que envolve todos esses polígonos. Essa esfera / caixa delimitadora é então testada contra o frustum e, se tocar no frustum, a chamada de empate é invocada para esses polígonos. Caso contrário, a chamada de desenho será ignorada. Uma octree é simplesmente outra maneira de determinar quais lotes de geometria são visíveis, exceto que organiza esses dados de maneira hierárquica. Octrees não são necessariamente adequados para toda a geometria.
Seguem algumas boas referências que explicam a técnica esfera / frustum: