2. Globalcode – Open4education
Quem sou eu
Desenvolvedor de jogos profissional desde 2008
Maior parte da carreira como desenvolvedor mobile
Primeira experiencia desenvolvendo VR em 2014
5. Globalcode – Open4education
Unreal 4
Lançada em 2012
Escolhemos para usar no projeto Dinos do Brasil
por volta de 2013
Iluminação e materiais padrão de qualidade
excelente
6. Globalcode – Open4education
Unreal 4 para GearVR
Escolhemos pela familiaridade com a ferramenta
Várias otimizações mobile que existem na unity
não são implementadas por padrão na Unreal
Mesmo assim entregamos um jogo que teve boa
recepção e, principalmente, pagou seu
desenvolvimento
7. Globalcode – Open4education
GearVR
Headset de realidade virtual da Samsung em
colaboração com a Oculus.
Contém lentes, sensores de movimento, botões e
um trackpad.
O cérebro dele é um Samsung Galaxy compatível.
9. Globalcode – Open4education
GearVR
Um pouco mais que só
uma caixa de plástico
com lentes
Contém um sensor
inercial igual ao do
oculus rift, mais preciso
que o dos celulares
11. Globalcode – Open4education
Jogabilidade
O jogador pode olhar para objetos no mundo virtual
Ele tem acesso a um trackpad
Existe um botão de back que tem uso restrito na plataforma
O usuário pode ter um controle como joypad ou o controle
de movimento(Opcionais)
16. Globalcode – Open4education
Preocupações com a
performance
O gearVR Asynchronous TimeWarp, que rotaciona a
imagem já gerada
Animações e coisas que seguem a cabeça podem ficar
erradas
Bordas pretas
18. Globalcode – Open4education
Preocupações com a
performance
Idealmente você vai
querer rodar usando CPU
level 0, GPU level 0 ou 1
Você quer minimizar a
aparição essa tela ao
lado
19. Globalcode – Open4education
Galaxy S6
Dispositivo mais fraco e mais barato que é
compatível com a versão consumidor do gear VR
Nosso alvo de performance
20. Globalcode – Open4education
Galaxy S6
2 núcleos funcionando em até 1.5 GHz
GPU funcionando em até 544MHz
Vai esquentar em 5 a 10 minutos rodando nessas
frequências
21. Globalcode – Open4education
Perfilando no GearVR
Android device monitor
Stat Unit
stat startfile
(SD/UE4Game/nomeDoJogo/Saved/Profiling/UnrealStats/level/level.ue4st
ats)
As outras opções de stat funcionam, mas custam performance e são
dificeis de ler
22. Globalcode – Open4education
Problemas encontrados
Número de drawcalls
Quantidade de objetos tickando
Mover objetos gerando eventos de overlap
Custo de iluminação
23. Globalcode – Open4education
Drawcall
A engine define uma série de propriedades e a
CPU envia esses dados para a GPU processar
Esses dados vão do jogo para o driver e então para
a GPU
25. Globalcode – Open4education
Drawcalls
A Unreal não agrupa modelos automáticamente
Você pode pedir para seu artista fazer uma mesh
só com tudo
Pode-se usar a função de merge actors
30. Globalcode – Open4education
Tick
No nosso segundo jogo para gear temos muitos
objetos sendo movidos
Cada objeto se movia no seu tick
Criamos gerenciadores para mover todos objetos de
um mesmo tipo
32. Globalcode – Open4education
C++
O gerenciador dos inimigos foi migrado de blueprint
para C++
Isso tirou outros 2ms do tempo de processamento
Essas mudanças fizeram o tempo de
processamento ir de 14ms para 9ms
33. Globalcode – Open4education
Move Overlap
9ms ainda é bastante (Estava esquentando bem
rápido ainda)
Próxima coisa detectada no perfilamento foi o tempo
gasto na hora de mover os volumes de colisão
34. Globalcode – Open4education
Move overlap
Cada objeto movido na cena movia a parte de
fisica deles
Em seguida eram calculados todos os eventos de
colisão e overlap
35. Globalcode – Open4education
Move Overlap
Nosso jogo podia rodar num modelo bem
simplificado de física
Todos os calculos de colisão do gameplay
passaram a ser feitos “na mão”
36. Globalcode – Open4education
Move overlap
Desmarcamos a opção de gerar eventos de
overlap em cada um dos atores da cena de
gameplay
Nosso gamplay passou a custar cerca 6ms
37. Globalcode – Open4education
Nativization
A Unreal tem, desde a versão 4.12, uma opção de
nativizar blueprints
Já tivemos sucesso usando esse recurso num
projeto para pc que estava tendo gargalos de CPU
39. Globalcode – Open4education
Nativization
Movemos os usos de Enums para outras classes e isso
funcionou
Com nativização cortamos mais um pouco mais de um
milisegundo
Provavelmente seria mais se não tivessemos cuidando dos
adversários em c++ seria maior
40. Globalcode – Open4education
Outras coisas
Passamos a mover alguns dos objetos em metade
dos frames
Paramos de mover objetos fora do campo de visão,
aguardando o usuario virar para aplicar todo o
movimento acumulado
41. Globalcode – Open4education
Resultados
No fim de todas essas otimizações nosso jogo
passou a executar o gameplay em menos de 4ms
Bom para manter a taxa de quadros e diminuir o
aquecimento
43. Globalcode – Open4education
Gráficos
Também foi decidido bem cedo no projeto que o
jogador fica parado e o mundo todo anda.
E como é um jogo de desviar de outros carros, é
importante que tais carros se movam na pista
44. Globalcode – Open4education
Gráficos
Isso torna a opção de usar luzes estáticas
calculadas no editor inviaveis para nosso projeto
Tentamos usar luzes estacionárias e dinamicas.
45. Globalcode – Open4education
Gráficos
Na primeira tentativa o jogo estava rodando a menos
de 30fps
Depois de desligadas as sombras a performance
subiu para cerca 45fps
Com mais otimizações conseguimos 50fps
46. Globalcode – Open4education
Gráficos
Mas o jogo precisa rodar a 60fps
Desistimos de usar a iluminação da Unreal e
resolvemos fazer nosso próprio modelo
Nos inspiramos em assets do Robot Recall
54. Globalcode – Open4education
Gráficos
Se sua cena for mais parada use luzes estáticas
Para objetos pouco dinâmicos marque a opção
Escolha bem o tamanho dos lightmaps