Summoners War: Chronicles US(WW) e KR da Com2uS utilizam exclusivamente Vulkan para renderização no Android, com melhorias de até 30% de desempenho.
A Vulkan é uma API moderna de gráficos 3D multiplataforma projetada para minimizar a abstração entre o hardware gráfico do dispositivo e o jogo. O Vulkan tem menor sobrecarga de CPU em comparação com o OpenGL ES, e o Vulkan oferece uma variedade mais ampla de recursos.
![](https://developer.android.com/static/images/cards/distribute/stories/com2us_game.png?authuser=0000&hl=pt-br)
Recursos de renderização
A Com2uS desenvolveu recursos avançados de renderização para Summoners War: Chronicles, incluindo:
- Sistema personalizado de renderização adiada com seleção de luz pré-renderização e até 16 luzes ativas no tronco de visualização simultaneamente.
- Método de criação de renderização indireta (chamado
Clay
) para desenhar várias malhas, materiais e texturas de uma só vez - Uso extensivo de sombreadores de computação para tarefas de pré-renderização
- Capacidade de ajustar dinamicamente a renderização de sombras ativas e os efeitos de pós-processamento com base no movimento da câmera, nas opções gráficas e no desempenho no tempo de execução.
Acomodações de hardware móvel
O Summoners War: Chronicles usa o mesmo renderizador para dispositivos Android, computadores pessoais e consoles de jogos dedicados. Para ter o desempenho ideal em hardware para dispositivos móveis, a Com2uS ajustou as configurações de renderização, incluindo profundidade e densidade de desenho. Para acomodar determinados dispositivos executados no Android 11 (nível 30 da API) e versões anteriores, a Com2uS criou versões alternativas de alguns sombreadores e usou contagens de instância reduzidas. O Summoners War: Chronicles também usa recursos de desempenho adaptável no Android para ajustar dinamicamente as opções gráficas em resposta às condições térmicas do dispositivo.
Justificativa apenas do Vulkan
A Com2uS usou o Vulkan exclusivamente para Summoners War: Chronicles por vários motivos:
- Os requisitos mínimos de dispositivo estão excluídos de dispositivos mais antigos e menos potentes sem suporte a Vulkan (link em inglês).
- Os recursos exigidos pelo mecanismo do Unity (link em inglês) do pipeline de renderização integrado (BiRP) estão disponíveis apenas no back-end do Vulkan do jogo.
- A implementação de recursos de renderização usando a saída do sombreador de computação e os objetos de buffer de armazenamento do sombreador (SSBOs, na sigla em inglês) pode ser feita no Vulkan, mas não no OpenGL ES.
Cargas de trabalho de computação
O Summoners War: Chronicles executa um trabalho significativo de sombreador de computação para produzir dados para renderização. Os sombreadores de computação são usados para:
- Seleção de objetos
- Inspeção de colisão
- Tarefas de animação
- Geração de dados de renderização indireta
Os dados de computação resultantes são gravados nos objetos RWBuffer do mecanismo do Unity. Para ter o desempenho ideal, o Summoners War: Chronicles executa todos os jobs de computação com um único envio, o que requer o uso de vários RWBuffers simultaneamente. Essa abordagem só era possível usando o Vulkan, já que o back-end do OpenGL ES do Unity BiRP oferece suporte apenas ao uso de um único RWBuffer por vez.
Os conjuntos de dados gerados para renderização geralmente são maiores que os limites de tamanho do dispositivo para objetos de buffer uniformes (UBOs, na sigla em inglês). Em vez disso, o Summoners War: Chronicles usa objetos de buffer de armazenamento do sombreador (SSBOs, na sigla em inglês), que têm limites de capacidade maiores. No entanto, a vinculação de SSBOs a operações de estágio de vértice requer compatibilidade com SSBO somente leitura. O OpenGL ES só oferece suporte a SSBOs de leitura e gravação, enquanto o Vulkan pode marcar SSBOs como somente leitura.
Renderização instanciada indireta com a argila
Para o Summoners War: Chronicles, a Com2uS desenvolveu um método para agrupar vários materiais, malhas e texturas em uma única chamada de desenho. A Com2uS chama esse sistema de Clay (link em inglês). O Clay melhora o desempenho do jogo em 30% como resultado da redução significativa das chamadas de desenho.
A argila começa durante a fase de separação e colisão com a criação de uma lista de objetos renderizáveis compatíveis. Em seguida, a argila gera informações de renderização para cada objeto identificado em SSBOs. Esse processo é realizado com sombreadores de computação, que permitem o uso de renderização instanciada indireta usando a função DrawMeshInstancedIndirect do renderizador do Unity. Com a renderização indireta, as informações da instância e os parâmetros de contagem de instâncias são gerados diretamente na GPU. Ao desenhar objetos, em vez de vincular uma malha de objetos tradicional, o Clay vincula uma malha de cone como mostrado na imagem:
![](https://developer.android.com/static/images/cards/distribute/stories/com2us_cone.png?authuser=0000&hl=pt-br)
Em seguida, a argila transforma a malha do cone no sombreador de vértice usando um SSBO vinculado dos dados de transformação de vértice gerados pelos sombreadores de computação. Vincular SSBOs ao estágio de vértice requer o uso do Vulkan. A argila pode usar vários cones transformados para renderizar um único objeto. A complexidade do objeto determina o número de cones.
![](https://developer.android.com/static/images/cards/distribute/stories/com2us_cone_usage.png?authuser=0000&hl=pt-br)
Os dados do Material Design para objetos são agrupados em outro buffer gerado pelos sombreadores de computação. O buffer está vinculado ao sombreador de fragmento. As texturas dos objetos que estão sendo desenhados são configuradas em uma matriz de textura. Os índices de matriz para as texturas de um objeto são incluídos nos dados do material do objeto. Em circunstâncias ideais, o Clare pode renderizar com um máximo de sete chamadas de desenho:
- Objetos estáticos
- Objetos animados
- Sombras (quatro iterações)
- Efeitos
Unity e Vulkan
O Summoners War: Chronicles demonstra que a combinação poderosa do mecanismo de jogo do Unity e da API gráfica Vulkan permite que os desenvolvedores levem gráficos avançados com qualidade de console para dispositivos Android.