Slide 1

Slide 1 text

iOS 3D Desenvolvimento de Aplicações 3D para iOS Nilson Souto - xissburg

Slide 2

Slide 2 text

Conteúdo • Pra que 3D? • Como renderizar gráficos 3D • Criação de conteúdo 3D • Engines 3D para iOS

Slide 3

Slide 3 text

Pra que 3D? • Flexibilidade • Liberdade • Imersão • Realismo • Visualização de dados

Slide 4

Slide 4 text

Como renderizar em 3D • Utilizamos o OpenGL ES para desenhar objetos 3D • Desenhamos malhas de triângulos em 3 dimensões • Podemos projetar uma imagem sobre a malha, conhecida como textura • Vertex Shaders podem deformar a malha na GPU • Fragment Shaders nos permite obter efeitos de materiais e iluminação

Slide 5

Slide 5 text

Criação de conteúdo 3D • Podemos criar objetos 3D utilizando editores como 3dsMax, Maya, Blender, ZBrush, Softimage, etc • Em geral, o objeto é composto de uma malha de triângulos e uma ou mais texturas

Slide 6

Slide 6 text

Criação de conteúdo 3D • Malhas deformáveis como personagens devem usar um esqueleto para fazer a deformação em um Vertex Shader • Um Fragment Shader pode ser usado para obter um efeito realista das propriedades ópticas do material do qual o objeto é composto • Em seguida um exemplo dos passos...

Slide 7

Slide 7 text

Criação de conteúdo 3D Arte conceitual

Slide 8

Slide 8 text

Criação de conteúdo 3D Arte conceitual

Slide 9

Slide 9 text

Criação de conteúdo 3D Modelo base para esculpir

Slide 10

Slide 10 text

Criação de conteúdo 3D Escultura pronta, feita no ZBrush

Slide 11

Slide 11 text

Criação de conteúdo 3D Detalhes da escultura

Slide 12

Slide 12 text

Criação de conteúdo 3D Malha low-poly

Slide 13

Slide 13 text

Criação de conteúdo 3D Texturas: occlusion, diffuse, gloss, normal, specular, oppacity

Slide 14

Slide 14 text

Criação de conteúdo 3D Modelo final

Slide 15

Slide 15 text

Criação de conteúdo 3D Modelo final

Slide 16

Slide 16 text

Engines 3D • Unity3D • cocos3d • iSGL • NinevehGL

Slide 17

Slide 17 text

Unity3D • Possui um editor de cenas • Faz o desenvolvedor se focar na lógica de sua aplicação • Programação de comportamento de entidades em javascript e C# • Difícil integração com UIKit

Slide 18

Slide 18 text

Unity3D

Slide 19

Slide 19 text

cocos3d • Extensão 3D do cocos2d • Fácil de aprender para quem já conhece o cocos2d • Suporta Collada e PowerVR POD • Feito sobre OpenGL ES 1.1, portanto não suporta shaders, por enquanto

Slide 20

Slide 20 text

iSGL3D • Suporte a shaders • Suporte nativo ao Bullet Physics Engine • Suporta apenas PowerVR POD • Arquitetura interessante, projeto bastante promissor • Licença MIT

Slide 21

Slide 21 text

NinevehGL • Tem como princípio a simplicidade • Ainda em versão beta • Versão 1.0.0 free e open-source deve estar disponível no fim deste ano

Slide 22

Slide 22 text

NinevehGL - (void)loadView { ! NGLView *nglView = [[NGLView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; ! nglView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; ! nglView.delegate = self; ! ! self.view = nglView; }

Slide 23

Slide 23 text

NinevehGL - (void)viewDidLoad { ! [super viewDidLoad]; ! ! NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys: ! ! ! ! ! ! ! kNGLMeshCentralizeYes, kNGLMeshKeyCentralize, ! ! ! ! ! ! ! @"0.3", kNGLMeshKeyNormalize, ! ! ! ! ! ! ! nil]; ! ! _mesh = [[NGLMesh alloc] initWithFile:@"cube.obj" settings:settings delegate:nil]; ! ! _camera = [[NGLCamera alloc] initWithMeshes:_mesh, nil]; ! [_camera autoAdjustToScreen:YES animated:YES]; ! ! [[NGLDebug debugMonitor] startWithView:(NGLView *)self.view]; }

Slide 24

Slide 24 text

NinevehGL - (void)drawView { _mesh.rotateY += 2.0f; _mesh.rotateX -= 0.5f; ! [_camera drawCamera]; }

Slide 25

Slide 25 text

NinevehGL

Slide 26

Slide 26 text

Conclusão • Para se ter os benefícios do 3D em tempo-real é necessário um esforço maior • Atualmente existem diversos bons engines 3D para iOS • Porém, dependendo do caso, pode ser melhor utilizar OpenGL ES puro