Isso geralmente acontece na GPU, mas existem desvantagens para ambos e cabe a você decidir qual funcionará melhor para você.
Fazer a manipulação na GPU significa que você só precisa enviar os dados da malha uma vez; basta enviar as transformações da matriz para deformar. Isso é ótimo porque reduz bastante a largura de banda necessária entre CPU-> GPU. Isso também significa que você pode carregar apenas uma cópia da malha na GPU e aplicar transformações para muitas instâncias diferentes da malha. No entanto, é mais difícil ter colisões "precisas de malha". Como as transformações são feitas na GPU, você não as tem disponíveis para teste na CPU.
Fazer a manipulação na CPU significa que você tem acesso à malha transformada. Você pode acessar tudo o que precisa saber sobre isso. No entanto, isso significa que você precisa carregar toda essa malha na GPU em cada quadro. Isso também significa que você precisa fazer upload de uma malha transformada para cada instância dessa malha. Em resumo, aqui está uma lista exaustiva de prós e contras.
Prós para GPU
- Carregue os dados da malha uma vez
- Transforme-o para várias instâncias
- Só precisa enviar as transformações matriciais
- A GPU é muito boa em paralelizar esses tipos de coisas
Contras para GPU
- Malhas transformadas não estão disponíveis para teste na CPU
Prós para CPU
- As malhas transformadas estão disponíveis para testes de colisão e qualquer outra coisa necessária.
Contras para CPU
- Necessidade de carregar toda a malha transformada em cada quadro
- É necessário fazer upload de uma malha inteira para cada instância da malha
No entanto, existem maneiras de contornar os contras da GPU.
- Não tenha colisões precisas de malha . Use algo "próximo o suficiente", como uma caixa delimitadora para toda a malha ou tenha caixas delimitadoras para cada osso da malha. A seguir, use as transformações da GPU para a malha e as transformações da CPU para as caixas delimitadoras alinhadas ao eixo que representam a malha. Você pode obter limites ainda mais precisos usando não-AABBs.
- Transforme uma cópia da malha na CPU se, e somente se, forem necessárias colisões precisas na malha . Depois que uma colisão de caixa delimitadora retornar verdadeira, transforme uma malha para corresponder às transformações na GPU e verifique as colisões para obter dados de colisão mais precisos.
Em suma, presumo que você possa ver por que é mais comum transformar na GPU