O que é o "Use VBOs" configuração?

No instantâneo 14w29b há uma nova opção no "Video Settings" menu chamado "Use VBOs":

O snapshot update diz que habilitar "Vertex Buffer Objects" deve aumentar o seu FPS em 5% a 10% em média.

Estou à procura de uma explicação simples do que as VBOs fazem visualmente e como funcionam.

Solução

A resposta dada por Flaunting é correta, mas caso alguém esteja interessado porquê pode ser mais eficiente, aqui vai uma explicação.

No modo imediato (acho que este é o caso padrão em minecraft) quando você quer renderizar dizer um quadrado:

Você emitiria os seguintes comandos para cada frame (em pseudo código)

begin drawing
draw line from (0,0) to (1,0)
draw line from (1,0) to (1,1)
draw line from (1,1) to (0,1)
draw line from (0,1) to (0,0)
end drawing

Para um quadrado, isto não é muito, mas pode haver milhões de vértices em uma cena, e eles podem ter mais atributos (cor, normal, etc.). Isto é um monte de dados para enviar para a GPU cada quadro.

Usando VBOS, você carregaria todos os dados do vértice na memória da GPU no início. Pseudo código pode ser parecido com isto:

create VBO
load (0,0) into VBO
load (1,0) into VBO
load (1,1) into VBO
load (0,1) into VBO
load (0,0) into VBO

O código OpenGL irá devolver-lhe um 'name' para esta VBO (um iirc inteiro não assinado a zero). Você pode então referenciar isto quando você quiser desenhar o quadrado. Então, cada frame, você só precisa emitir um comando de desenho:

draw vertices in VBO

Você pode ter que configurar o estado de desenho para que ele use pares de vértices para linhas, mas para cada VBO adicional, você só precisa de uma chamada extra de desenho. Na verdade, para a geometria de nível estático (provavelmente não aplicável no caso de minecraft) você pode combinar todos esses vértices em um VBO maciço, se você tiver memória GPU suficiente.

I'estou surpreso que a aceleração seja de apenas 5-10%. Isto é provavelmente por causa da geometria dinâmica do nível.

Comentários (6)

VBO significa Vertex Buffer Object

Do artigo da Wikipedia

A Vertex Buffer Object (VBO) é uma funcionalidade OpenGL que fornece métodos para carregar dados de vértices (posição, vetor normal, cor, etc.) para o dispositivo de vídeo para renderização em modo não-imediato. As VBOs oferecem ganhos substanciais de desempenho em relação ao modo imediato, tornando principalmente porque os dados residem na memória do dispositivo de vídeo e não no memória do sistema e, portanto, pode ser renderizada diretamente pelo dispositivo de vídeo.

*Em termos simples**

Em minecraft especificamente oferece um aumento de desempenho de ~10% quando ajustado para ON

Ele faz isso reduzindo a carga de trabalho no seu CPU & RAM e reatribuindo-o à sua memória gpu, isso só é recomendado se você tiver uma placa gráfica ok para decente

Comentários (13)

Ele aumenta substancialmente a velocidade, reduzindo a necessidade de trabalho do processador e da memória do sistema (RAM). Em vez disso, utiliza a memória da sua placa gráfica para aumentar o desempenho.

Comentários (0)