Brasileiro na Unity 3D Dinamarca: Entrevista com Felipe Lira

Em Carreira, Game Dev por Jonathan Maia

Turma, é com muita alegria que inicio aqui no Blog Eu na TI uma série de entrevistas com brasileiros da área de Tecnologia que estão arrebentando na iniciativa privada ou pública. O objetivo é mostrar para a turma que está iniciando a carreira que existem muitas possibilidades, no Brasil ou fora dele, para quem trabalha com TI. 🙂

Nós brasileiros podemos SIM competir de igual para igual com profissionais do mundo inteiro. Como prova disso, tenho vários amigos e conhecidos brasileiros trabalhando na Amazon, HP, Booking, em projetos da Nasa, revolucionando o setor público e muito mais. 

Para nossa primeira entrevista, convidei um grande amigo, Felipe Lira: nos formamos na mesma turma de Computação na Universidade Federal do Ceará (em 2008) e já jogamos muito Soldat e Frets on FireO Felipe é um profissional extremamente gabaritado da área de desenvolvimento de games e computação gráfica. Atualmente, ele trabalha como Graphics programmer na Unity Copenhagem (Dinamarca).

Felipe Lira

Felipe Lira

Para quem não conhece, a Unity é uma das engines gráficas mais utilizadas no mundo, rodando em 2.4 bilhões de dispositivos, com quase 800 milhões de usuários. É muita gente!!! Quer conhecer o pode da Unity? Dá uma olhadinha no Adam, feito com Unity (coloque o vídeo em alta resolução e aprecie):

Falando um pouco sobre a experiência profissional do Felipe Lira, ela já passou pelo Black River Studios (Samsung), onde trabalhou extensivamente com realidade virtual (GearVR), pela Tectoy, pelo Zeebo (console brasileiro que nasceu na TecToy e recebeu investimentos da Qualcomm), já teve iniciativas no desenvolvimento de games cristãos pela Ramvs Games, já foi expositor na E3 pela Samsung, palestrou na Unite Boston 2015 sobre otimização de games e muito mais. 

No decorrer da entrevista você verá algumas imagens dos produtos criados pelas equipes por onde o Felipe passou.

Felipe, muito obrigado por aceitar participar dessa entrevista. Inicialmente, queria te parabenizar pela bela trajetória profissional que você tem construído. Desde a época de faculdade, você sempre esteve envolvido em grupos de estudos e pesquisa sobre computação gráfica, ou seja, já são quase 14 anos de investimento na área. Para os leitores que desejam seguir essa linha de atuação, desenvolvimento de jogos, computação gráfica, quais são suas principais recomendações?

Oi Jonathan, obrigado pelo convite e pela oportunidade. Minha recomendação para quem deseja seguir a carreira como programador de games é ter uma boa formação em Ciências da Computação ou em cursos similares. Esse é o requisito de boa parte das empresas, tanto no Brasil como fora.

O segundo passo é criar pelo menos 1 ou 2 games do início ao fim para demonstrar conhecimento em engines como Unity e Unreal, que são as mais usadas na indústria e comuns como requisitos para as empresas de games.

Por fim, fazer um bom networking, participando de uma gamejam ou de eventos relevantes na indústria, como o BIG (Brazil´s Independent Games Festival), e se engajando em comunidades locais ou virtuais de desenvolvedores.

Minha recomendação para Computação Gráfica é aprender uma API gráfica. WebGL é uma bem popular e usada em muitos cursos atuais devido à sua simplicidade. Porém, APIs mais modernas como Vulkan ou DirectX são importantes para se especializar na área.

É importante também aprender um pouco sobre o pipeline gráfico das GPUs, modelos de iluminação e teoria de cor. Todos esses assuntos são abordados neste livro, que eu considero um dos mais completos (e introdutórios) para Computação Gráfica. O autor também possui um site com referências para diversos conteúdos.

Por fim, dúvidas são comuns quando se está aprendendo qualquer tecnologia nova. O stackexchange contém uma infinidade de conteúdos e uma comunidade muito ativa sobre essas áreas, além de ser um excelente lugar para tirar dúvidas. (gamedev, computação gráfica)

Álgebra linear, cálculo, física, métodos numéricos e otimização são algumas disciplinas vistas em diversas graduações de Computação, mas que muitos alunos acabam “ignorando” por não serem apresentados a muitas de suas aplicações práticas. Qual a importância desses fundamentos teóricos nas suas atividades do dia a dia? 

Computação Gráfica é basicamente matemática aplicada:  todas as áreas que você citou são aplicadas em games. Desde 2002, as GPUs (Unidades de Processamento Gráfico) possuem a capacidade de estágios programados através de shaders.

Existem ferramentas, como o ShaderToy, que possibilitam que pessoas sem nenhum conhecimento em APIs gráficas ou em Computação Gráfica criem imagens fantásticas apenas utilizando matemática: “Pintando com matemática”, como alguns chamam.

Muitas dessas técnicas utilizam como base uma técnica simples de raymarching e signed distance functions. Apenas para dar alguns exemplos (com código fonte!) do que se pode conseguir: renderizar oceanos, vidro, terrenos e nuvens, tutorial de como renderizar olhos foto-realísticos. Claro, esses exemplos são um pouco mais avançados, mas estudando é possível chegar lá.

Eu gostaria que a próxima geração de professores de matemática e de áreas similares se atualizassem e ensinassem matemática de uma forma prática. É muito fácil aplicar quase qualquer técnica matemática usando o ShaderToy: noções básicas de programação e matemática são suficientes.

Rococo VR (GearVR) - Quando Felipe estava no Black River Studios da Samsumg

Rococo VR (GearVR) – Quando Felipe estava no Black River Studios da Samsumg

Além dos conhecimentos diretamente relacionados à computação gráfica, quais outras ferramentas ou técnicas de desenvolvimento você julga imprescindíveis?

Existem dois conceitos fundamentais que eu gostaria de ter aprendido na faculdade, mas não tive a oportunidade:

1) Data Oriented Design (DOD): o acesso à memória é caro e preparar a estrutura de dados para que o seu algoritmo acesse a memória de uma forma eficiente é fundamental para a otimização. Na Unity, temos um foco muito grande em otimização: programar pensando em otimizar o acesso ao cache é fundamental. Eu fiz algumas provas para entrar na Unity e, na última, já aqui em Copenhagen, o teste era sobre DOD.

2) Parallel Programming: nos tempos atuais, tanto a CPU quanto a GPU possuem múltiplos cores. Para extrair o máximo do hardware é fundamental aprender programação paralela. De alguns anos pra cá, grande parte do esforço de otimização da Unity foi distribuir o “trabalho” da main thread para jobs em worked threads.

Algo a falar sobre versionamento, agile e testes automatizados?

Vou focar nos testes automatizados, pois acredito ser o tema menos abordado.

A Unity possui cerca de 1.400 colaboradores, a maioria desenvolvedores, que comitam diariamente em uma base de mais de 3 milhões de linhas de código para 27 plataformas diferentes.

Como garantir que uma alteração não quebrou uma funcionalidade ou fez uma plataforma para de compilar? A Unity tem uma build-farm que dispara builds e testes e ninguém consegue introduzir uma linha de código no branch principal de desenvolvimento sem que 1) O código tenha passado por um review de várias pessoas 2) o seu código compile em todas as plataformas e passe em um conjunto mínimo de testes.

Os tipos de testes são unitários, de integração (onde é possível rodar a engine em background, em linha de comando e carregar cenas),  gráficos e de regressão de performance.

Os testes gráficos comparam o resultado da renderização de uma imagem com uma imagem de referência, que foi previamente gerada pela mesma máquina. Eles são executados em máquinas específicas, com uma GPU e driver específico, para não causar diferenças. Atualmente, temos pouco mais de 600 testes gráficos. Alguns rodam em apenas um conjunto de plataformas e APIs gráficas, outros rodam em quase todas as combinações possíveis.

Os testes de regressão de performance comparam se o tempo levado para executar uma tarefa não aumentou com o novo código.

A Unity suporta mais de 20 ambientes de desenvolvimento (Android, IOS, C#, consoles) e, em uma de suas postagens recentes, você mencionou que no processo de verificação do código todos Warnings (mensagens de aviso) são tratados como erros. Esses fatos estão intimamente relacionados. Você poderia nos explicar o porquê ?

Ao compilar um código, o compilador pode gerar avisos que indicam que algum trecho pode conter um problema. São coisas como redefinição de símbolos, variáveis declaradas mas não inicializadas, blocos condicionais vazios (você por engano colocou um ‘;’ logo depois da declaração de um ‘if’), entre outras.

Os warnings emitem uma mensagem, mas, por padrão, não falham a compilação. Alguns desses warning são inofensivos, mas outros são de suma importância para evitar problemas. É possível, no entanto, dizer ao compilador que os warnings devem ser tratados como erros.

Pela minha experiência, é extremamente recomendado fazer isso, pois força o desenvolvedor a olhar todos os warnings.  

A Unity usa alguns softwares licenciados de terceiros. Na postagem em questão, eu estava atualizando um desses softwares que é compilado a partir do código fonte ao invés de ser distribuído através de bibliotecas pré-compiladas. No meu computador estava tudo certo, porém, ao compilar em outras plataformas, a compilação falhou por vários motivos. Um deles era por causa de warnings que indicavam erros.  

Game Band of Heroes - Quando Felipe passou pela Mobjoy games em Campinas

Game Band of Heroes – Quando Felipe passou pela Mobjoy games em Campinas

A Unity é a Jerusalém ou Meca dos graphics programmers. Quais são suas atividades na Unity?

Eu trabalho como parte do time de Graphics Foundation.

Uma das coisas que estamos adicionando suporte na Unity é para que os desenvolvedores possam escrever em C# como a Unity deve renderizar um frame. Chamamos essa funcionalidade de Scriptable Render Pipeline. Eu estou trabalhando nesse pipeline para dispositivos móveis e também sou responsável pelo sistema de occlusão.

Cada time define a sua metodologia de trabalho. No meu time, temos sprints de 3 semanas e 1 de bugfixing. Os bugs na Unity são definidos através de um sistema de user pain. Eles recebem uma nota de acordo com vários critérios e essa nota define o quão prejudicial um bug é para o usuário (e a prioridade que ele tem). 

Como é o ambiente de trabalho por aí?

O ambiente de trabalho é bem descontraído. Os horários são flexíveis e também é possível trabalhar de casa alguns dias. O contrato padrão na Dinamarca é de 37.5h semanais, mas não temos nenhum controle de horas. Na prática, o controle é feito por produtividade.

Contanto que você entregue o que prometeu na sprint: tudo bem.

A cultura na Dinamarca é de empresas horizontais. O CTO da empresa fica em uma sala ao lado da minha, junto com outros developers. O acesso a qualquer um é livre e todos têm liberdade para discutir, sugerir e discordar com quem quer que seja.

A maior cobrança vem da parte dos usuários da ferramenta. Eles são de fato pra quem trabalhamos e os nossos chefes.

A empresa tem um refeitório que disponibiliza café da manhã e almoço. Além disso, tem comida e bebida liberada durante o dia (frutas, chips, barras de cereais, café, chocolate, refrigerante, cerveja, etc). Também é possível comprar o jantar. Todas as sextas temos um bar: nos juntamos pra conversar, comer e beber.

Existem também pequenas apresentações internas feitas por um de nós para outras equipes sobre qualquer assunto que dominamos. Algumas vezes vêm palestrantes de universidades falar sobre ciência ou outros assuntos. Uma vez por mês, temos uma reunião geral sobre o progresso da empresa.

Game Praise Club - Quando Felipe passou e co-fundou a Ramvs Game

Game Praise Club – Quando Felipe passou e co-fundou a Ramvs Game

A E3 é o mega evento mundial que atrai a atenção dos amantes de games. A Unite da Unity também é um super evento para desenvolvedores. Conta um pouco como foi a experiência de palestrar na Unite Boston e ser expositor na E3.

Na época que eu palestrei na Unite eu estava trabalhando na Samsung. A Samsung, como patrocinadora do evento, tinha direito a 2 palestras. Uma semana antes do evento, entraram em contato comigo porque o time da Samsung UK não ia mais fazer a palestra e eu acabei preparando uma. O evento é bem maior que eu imaginava. Tem desenvolvedores do mundo todo. Foram três dias de conferência.

Os dois primeiros eu fiquei no stand da nossa equipe apresentando o game que estávamos lançando e, no último dia, eu apresentei a palestra. Foi interessante que a minha palestra foi uma das últimas do evento e, enquanto eu estava no stand, ia fazendo a “propaganda” pras pessoas aparecerem.

Foi bastante gratificante: muitas pessoas foram e reconheci algumas pessoas com quem tinha falado antes. Algumas semanas depois eu recebi um email da Unity com a avaliação dos usuários e os comentários. Fiquei muito feliz pois a recepção foi ótima! Se alguém tiver interesse em ver, segue a apresentação:

Durante a E3 2016, a Samsung estava como expositora e eu fui convidado para representar o time de games e fazer parcerias. Dividi meu tempo entre ficar no stand da Samsung (fazendo networking com pessoas que podiam nos ajudar e tendo algumas reuniões com o pessoal da Oculus e Vive pra conversar sobre o lançamento do game) e procurar outros parceiros.

Claro, entre uma reunião e outra, fui conhecer o evento. A E3 é um evento bem focado em negócios. As empresas estão anunciando seus novos produtos. Existem também várias salas de reuniões em diversos pavilhões para desenvolvedores se encontrarem com publishers e fazerem parcerias.

Até o ano passado, o evento era exclusivo para a imprensa e profissionais da indústria. Esse ano, foi aberto para o público em geral. Foi uma experiência bem cansativa, mas muito produtiva.

Quais são os blogs, canais de notícias, listas de e-mail ou grupos da área de computação gráfica que você costuma acompanhar e recomendaria aos nossos leitores? Compartilha aqui com o pessoal.

Na minha opinião, o Twitter é o melhor lugar para se conectar e saber sobe o que está acontecendo no mundo dos games e computação gráfica. Os desenvolvedores estão constantemente colocando links para os seus blogs e papers e compartilhando ideias dos seus trabalhos. Antigamente, eu tinha um leitor com vários blogs sobre o assunto. Hoje em dia, só uso o Twitter.

Aqui vão algumas pessoas para seguir na área: @ID_AA_Carmack, @tom_forsyth, @Reedbeta, @g_truc, @aras_p, @McNopper, @_kzr, @robertcupisz, @baldurk. Eu descobri a vaga que apliquei para Unity pelo twitter, através do @SebLagarde. Claro, se quiserem me seguir também, é só clicar @phi_lira.

Pra quem se interessou pelo assunto de shaders e matemática, O Inigo Quilez é ex-Pixar e ex-Oculus e tem um canal fantástico no youtube sobre o tema.

A língua inglesa é uma competência obrigatória para quem deseja seguir nessa área de atuação? Como você avalia o mercado brasileiro para profissionais de desenvolvimento de games ?

Não diria obrigatória, mas vai abrir portas e acesso a conteúdos que não temos em português. Por exemplo, eu tentei procurar um tutorial de ShaderToy em português e não achei. Na Samsung, saber inglês era requisito da vaga.

Atualmente, existem poucas empresas grandes na área de games no Brasil. A maioria das empresas são startups. O mercado é novo, mas está crescendo bastante. Como os games são vendidos fora, a crise não está afetando o setor de games.

Os profissionais são multidisciplinares. Temos artistas, programadores, produtores, designers, profissionais de controle de qualidade. É uma experiência muito enriquecedora trabalhar com games. Criei muitos amigos.

Imagino que deva ser muito legal ver o pessoal se divertindo com os jogos que você participou do desenvolvimento. Qual foi sua experiência mais gratificante nesse sentido?

A experiência mais gratificante foi trabalhar em um jogo por mais ou menos um ano e, depois de lançarmos, a equipe sentou pra jogá-lo. Geralmente, a gente cansa do jogo e acaba não jogando os jogos que desenvolvemos. Esse jogo era um futebol meio zoeira, estilo Mário kart.

Os gráficos não eram lá grande coisa (foi feito para o Zeebo, que era um pouco melhor que um PS one), mas ficou bem divertido.

Game Zeebo F.C Super League - Quando Felipe passou pelo Zeebo

Game Zeebo F.C Super League – Quando Felipe passou pelo Zeebo

Na Computação e TI temos uma infinidade de possibilidades e escolhas. Tem algum assunto específico que está na sua fila de aprendizado? Talvez, algo até fora da computação gráfica.  

É tanta opção que é até difícil de escolher: todas são igualmente desafiadoras. Recentemente, eu tenho muito interesse pela área de Deep Learning. Acredito que é uma área bem quente para os próximos anos e que vai abrir muitas vagas.

Quando você trabalhou no Black River Studios (Samsung), você participou e liderou alguns projetos de realidade virtual com o GearVR, incluindo o Finding Monsters. Quais as perspectivas de crescimento você vê para esse setor? 

Existem algumas pessoas ainda céticas quanto à Realidade Virtual. O motivo é que não é a primeira vez que essa tecnologia tenta se popularizar. Na minha opinião, desta vez, temos todos o requisitos para que a tecnologia se popularize e a previsão é que vai atingir seu potencial em 2019: o mundo de VR vai ser tão grande quanto a própria Internet.

Game Finding Monsters - Quando Felipe estava no Black River Studios da Samsumg

Game Finding Monsters – Quando Felipe estava no Black River Studios da Samsumg

Felipe, mais uma vez, gostaria de agradecer imensamente sua gentileza. Tem alguma mensagem adicional que você gostaria deixar para os leitores do Blog Eu na TI e para os colegas brasileiros que desejam seguir carreira em computação gráfica ?

Eu que agradeço pela oportunidade, Jonathan.

A minha dica é que, independente da área que você escolha, o importante mesmo é ter dedicação. Se esforce para aprender o suficiente a ponto de conseguir ensinar o seu trabalho pra alguém de forma simples. Uma entrevista de emprego nada mais é que isso: alguém te perguntando sobre um tema que você deve demonstrar domínio.

Vá além do que o seu curso de graduação oferece ou ofereceu. Vivemos em uma época em que o acesso à informação é muito fácil. É possível assistir um curso de cálculo do MIT gratuitamente pelo youtube, ou complementar o seu conhecimento com cursos adicionais como Khan Academy, edX, Coursera e muitos outros.

Se você achou a área de computação gráfica interessante, mas acha matemática muito difícil, dê uma chance para aprender. Eu não sou gênio em matemática, sei o que sei porque uso repetidamente.

Até o meu 3º ano do ensino médio, eu não sabia nada de matemática: lembro de perguntar ao professor o que era “perpendicular” no enunciado do problema. No vestibular eu fui muito bem em todas as disciplinas e tive um desempenho horrível em matemática e física, entrei quase nas últimas vagas.

Fui aprendendo um dia de cada vez, e continuo aprendendo. Na vida, nós podemos perder muitas coisas, mas o conhecimento é algo que ninguém nunca vai tirar de você.

Conclusão

E ai, turma??!!! Fantástico, ein?? Uma riqueza de referências e dicas. 

Espero que essa entrevista com o Felipe tenha inspirado você: invista na sua carreira e você pode chegar longe! 

Espero que tenha gostado. 🙂 Compartilhe essa entrevista nas suas redes sociais e com seus colegas da TI: ela vale a leitura. Deixe nos comentários suas opiniões.

Em breve, mais conteúdos de qualidade para você aqui no Blog Eu na TI, o seu Blog sobre Tecnologia da Informação.

Curta nossas páginas nas redes sociais para acompanhar novas postagens.

Um forte abraço e até mais.

Comentários

  1. Pingback: As mais populares ferramentas para desenvolvimento multiplataforma

Deixe uma resposta