SlideShare una empresa de Scribd logo
1 de 57
Globalcode – Open4education
Desenvolvimento e Otimização de Jogos
para GearVR usando Unreal Engine
Globalcode – Open4education
Quem sou eu
Desenvolvedor de jogos profissional desde 2008
Maior parte da carreira como desenvolvedor mobile
Primeira experiencia desenvolvendo VR em 2014
Globalcode – Open4education
Unreal Engine
GearVR
Jogos para Gear
Otimização
Globalcode – Open4education
Unreal Engine
Criada para o jogo
Unreal de 1998
Atualmente na quarta
versão
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
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
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.
Globalcode – Open4education
GearVR
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
Globalcode – Open4education
GearVR
Um botão de back e
um trackpad
Controles opcionais
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)
Globalcode – Open4education
Pense seu gameplay
Olhar para objetos e interagir usando o trackpad
com um botão
Globalcode – Open4education
Pense seu gameplay
Mexer a cabeça pode ter ação direta no jogo
Mas só orientação.
Globalcode – Open4education
Pense seu gameplay
Apesar de não muito preciso, pode-se usar
gestures no trackpad
Globalcode – Open4education
Preocupações com a
performance
Frame rates muito baixos aumentam o VR
Sickness
Você quer uma experiencia agradavel para seu
jogador
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
Globalcode – Open4education
Preocupações com a
performance
A Oculus vai rejeitar seu aplicativo
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
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
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
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
Globalcode – Open4education
Problemas encontrados
Número de drawcalls
Quantidade de objetos tickando
Mover objetos gerando eventos de overlap
Custo de iluminação
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
Globalcode – Open4education
Drawcalls
Problema muito comum com mobile em geral
Cada mesh/material conta uma draw call
Eviter ter mais que 50 numa mesma cena
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
Globalcode – Open4education
Drawcalls
Evite ter muitos materiais num objeto
Evite ter muitos objetos em cena
Globalcode – Open4education
Drawcalls
Um truque que usamos foi girar a roda dos carros
no vertex shader
Inspirado pelos dirigiveis do robot recall
Globalcode – Open4education
Girando Girando
Globalcode – Open4education
Girando
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
Globalcode – Open4education
Tick
Isso cortou cerca de 3ms do tempo de
processamento do jogo
Ainda não foi suficiente
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
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
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
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”
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
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
Globalcode – Open4education
Nativization
Porém o projeto não estava empacotando usando
essa opção
Descobrimos que isso é causado por tentar usar
Enums na blueprint da fase
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
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
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
Globalcode – Open4education
Gráficos
Queriamos que as missões tivessem horários
variados
Talvez até uma opção do sol ir se pondo durante a
fase
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
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.
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
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
Globalcode – Open4education
Gráficos
Usamos o editor de materiais para calcular a
iluminação
Globalcode – Open4education
Gráficos
Em vários objetos não usamos normal maps e
abusamos do editor de materiais para iluminar por
vertice
Globalcode – Open4education
Gráficos
Globalcode – Open4education
Gráficos
Rodamos o gameplay em modo unlit
Globalcode – Open4education
Gráficos
Nossa draw distance é relativamente pequena
Fizemos os objetos aparecerem de forma suave na
tela
Globalcode – Open4education
Gráficos
Globalcode – Open4education
Gráficos
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
Globalcode – Open4education
Gráficos
Globalcode – Open4education
Gráficos
Globalcode – Open4education
Obrigado!
Dúvidas?
@vvecchi
vinicius@vrmonkey.com.br

Más contenido relacionado

Similar a Desenvolvimento e otimização de jogos para gearvr usando Unreal Engine

TDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seuTDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seuOdair Bonin Borges
 
FLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidFLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidMaurílio Silva
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenziejonathanblacknight
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"Ponce Edition
 
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
TDC2016POA | Trilha Web -  Realidade Virtual com WebVRTDC2016POA | Trilha Web -  Realidade Virtual com WebVR
TDC2016POA | Trilha Web - Realidade Virtual com WebVRtdc-globalcode
 
Testes de escalabilidade usando cloud
Testes de escalabilidade usando cloudTestes de escalabilidade usando cloud
Testes de escalabilidade usando cloudPET Computação
 
Escreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw DayEscreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw DayIntel Software Brasil
 
Desenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanDesenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanTchelinux
 
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...Tchelinux
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcadotdc-globalcode
 
TDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGLTDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGLAndré Curvello
 
Projeto Final de Computação Gráfica 2012 - FCT/UNESP
Projeto Final de Computação Gráfica 2012 - FCT/UNESPProjeto Final de Computação Gráfica 2012 - FCT/UNESP
Projeto Final de Computação Gráfica 2012 - FCT/UNESPErick Santos
 
Sessao 5 - Formação Unity
Sessao 5 - Formação UnitySessao 5 - Formação Unity
Sessao 5 - Formação UnityClara Ferreira
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 

Similar a Desenvolvimento e otimização de jogos para gearvr usando Unreal Engine (20)

TDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seuTDC2015 - Um drone para chamar de seu
TDC2015 - Um drone para chamar de seu
 
FLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidFLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para Android
 
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - MackenzieIntrodução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
Introdução ao desenvolvimento de jogos em OGRE 3D - Mackenzie
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Realidade Aumentada
Realidade AumentadaRealidade Aumentada
Realidade Aumentada
 
Presentation ii
Presentation iiPresentation ii
Presentation ii
 
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
Planejamento de uma Rede para uma Lan House + Custo Benefício..."AMD vs INTEL"
 
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
TDC2016POA | Trilha Web -  Realidade Virtual com WebVRTDC2016POA | Trilha Web -  Realidade Virtual com WebVR
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
 
Testes de escalabilidade usando cloud
Testes de escalabilidade usando cloudTestes de escalabilidade usando cloud
Testes de escalabilidade usando cloud
 
Escreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw DayEscreva sua App Android sem gastar energia - Intel Sw Day
Escreva sua App Android sem gastar energia - Intel Sw Day
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 
Desenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanDesenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael Jeffman
 
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
Desenvolvendo Jogos com PyGame - Rafael Guterres Jeffman - Tchelinux Pelotas ...
 
[Grupo 2] Apresentação II
[Grupo 2] Apresentação II[Grupo 2] Apresentação II
[Grupo 2] Apresentação II
 
TDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux EmbarcadoTDC2016SP - Trilha Linux Embarcado
TDC2016SP - Trilha Linux Embarcado
 
TDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGLTDC2016 - Processamento de Imagem em GPU com OpenGL
TDC2016 - Processamento de Imagem em GPU com OpenGL
 
Projeto Final de Computação Gráfica 2012 - FCT/UNESP
Projeto Final de Computação Gráfica 2012 - FCT/UNESPProjeto Final de Computação Gráfica 2012 - FCT/UNESP
Projeto Final de Computação Gráfica 2012 - FCT/UNESP
 
Sessao 5 - Formação Unity
Sessao 5 - Formação UnitySessao 5 - Formação Unity
Sessao 5 - Formação Unity
 
Unity Sessão 7
Unity  Sessão 7Unity  Sessão 7
Unity Sessão 7
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 

Último

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Último (9)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Desenvolvimento e otimização de jogos para gearvr usando Unreal Engine