OpenGL ES 2.0: Usando VBOs?

7

Os VBOs OpenGL (objetos de buffer de vértice) foram desenvolvidos para melhorar o desempenho do OpenGL ( OpenGL ES 2.0 no meu caso). A lógica é que, com a ajuda dos VBOs, os dados não precisam ser copiados da memória do cliente para a placa gráfica por quadro.

No entanto, a meu ver, a cena do jogo muda continuamente: a posição dos objetos muda, a mudança de escala e rotação, eles são animados, explodem, desovam ou desaparecem.

Nesse ambiente altamente dinâmico, como na cena dos jogos de computador, qual é o sentido de usar VBOs , se os VBOs precisariam ser construídos com base em cada quadro?

Você pode me ajudar a entender como tirar praticamente proveito dos VBOs em jogos de computador? Pode haver mais VBOs baseados em vértices (por exemplo, um por um objeto) ou sempre deve haver exatamente exatamente um VBO presente para cada ciclo de desenho?

Bunkai.Satori
fonte

Respostas:

13

Nesse ambiente altamente dinâmico, como na cena dos jogos de computador, qual é o sentido de usar VBOs, se os VBOs precisariam ser construídos com base em cada quadro?

Se você estiver reconstruindo os dados do vértice para cada objeto e cada quadro, estará fazendo errado. Ou pelo menos, você provavelmente está fazendo isso de maneira ineficiente.

Mover objetos em uma cena pode e deve geralmente ser feito alterando a matriz de transformação mundial usada para renderizar esse objeto, não alterando os dados do vértice diretamente. A animação esquelética também possui soluções totalmente na GPU. Objetos decomponíveis podem ser renderizados com matrizes de transformação distintas, de forma que apareçam juntas até precisarem ser decompostas e, em seguida, as matrizes são ajustadas para separá-las conforme desejado. Objetos que não são visíveis ou não gerados não precisam ser renderizados, mesmo que seus dados de vértice estejam no cartão de um quadro anterior - eles não precisam que seus buffers sejam destruídos / recriados toda vez que sua visibilidade for alterada.

Você pode me ajudar a entender como tirar praticamente proveito dos VBOs em jogos de computador? Pode haver mais VBOs baseados em vértices (por exemplo, um por um objeto) ou sempre deve haver exatamente exatamente um VBO presente para cada ciclo de desenho?

Você pode ter vários buffers de vértice. Geralmente, você possui um por cada malha / modelo e se refere a essa estrutura de dados de malha / modelo com uma coleção de possivelmente muitos objetos renderizáveis ​​que contêm sua própria matriz de transformação mundial exclusiva. Dessa forma, se você tiver 50 inimigos que usam a mesma malha, precisará dessa malha na memória apenas uma vez. Então você tem 50 estruturas de instância menores e leves que se referem a essa malha e mantêm uma transformação mundial exclusiva usada ao renderizar cada instância.


fonte
+1 para esta resposta detalhada. Vejo que terei que prestar atenção à construção e preparação da cena, para evitar duplicar vértices. Embora esta resposta pareça para mim como Resposta Aceita , esperarei um pouco para ver se recebo respostas mais úteis.
Backai.Satori
3

Você pode ter quantos VBOs quiser. Você também pode ter cada quadro de animação em um VBO ou animação inteira em um VBO. Você também pode usar a animação Por vértice, que é feita com os mesmos dados, mas transformada em vertex shader (programa).

Se você mudar de posição, rotação ou escala do objeto, ele não mudará o VBO, apenas a matriz de transformação.

Portanto, se você tiver memória suficiente, poderá transferir todos os seus dados para a memória gráfica na fase de inicialização.

zacharmarz
fonte
+1 para esta resposta. Estou estudando alguns materiais agora, mas sua resposta me indicou a direção certa. Obrigado.
Backai.Satori
"animação por vértice" geralmente não significa que a lógica da animação é feita em um sombreador, apenas que cada vértice anima - o que é quase sempre o caso. Você queria fazer a distinção entre animação de quadro-chave baseada em vértices (onde cada quadro de animação é uma cópia completa da malha e você mistura entre eles) e animação esquelética (onde os vértices são ponderados para uma hierarquia óssea simples e animada)? Ambos podem ser feitos na CPU ou na GPU.