VirtualWorlds: Roteiro de estudos

Há alguns anos (desde 1988, pelo menos) apaixonei-me pela Computação Gráfica. Eu e meu amigo MaRZ chegamos até a comprar o primeiro livro que tive na área, nessa época, quando fazíamos o curso de Instrumentação Industrial, no SENAI/ES. De lá pra cá muita coisa mudou: O antigo GKS (Graphical Kernel System) deu lugar ao OpenGL (Open Graphics Library), coisas como z-buffering eram impensáveis, na época, para computadores pessoais. Texturas também… Em 1993 o jogo DOOM, desenvolvido por John Carmack, da Id Software, mudou a forma como pensamos em jogos e, recentemente (há uns 5 anos) venho tentando acompanhar tudo o que posso relacionado com o desenvolvimento de aplicações em 3D.

Resolvi, há 2 anos, iniciar um projeto com base numa idéia não tão original… Um amigo têm “contatos” com vários empresários da área imobiliária por aqui, em minha cidade (Vitória/ES). “Que tal desenvolver um framework que permita aos clientes dessas empresas ‘passearem’ pelos imóveis, em tempo real?”. Confesso que tive essa idéia depois de uma imersão no jogo Half-Life, dado o realismo de algumas das cenas!

Enumerei algumas coisas que sabia que precisava estudar para levar o projeto adiante. Na lista abaixo vocês podem ver alguns desses itens, marcados com ×, para aqueles que ainda não cheguei lá, , para aqueles que já entendi e já tenho algum código implementado, ±, para aqueles que ainda estou “mais ou menos” ou quase chegando lá, e ?, para aqueles que ainda não sei se são realmente necessários:

– Matemática vetorial e matricial;
 – Geometria no espaço R3 (triângulos, planos, volumes, elipsóides, etc);
 – Particionamento espacial (BSPs);
 – Iluminação (OpenGL);
 – Aplicação de texturas e “misturas” (blending);
 – Determinação de visibilidade;
 – Programação em multiprocessamento usando pthreads;
 – Uso de Streamming SIMD Extensions (SSE);
 – Leitura de modelos, aplicação de texturas e seus materiais (via Wavefront OBJ file);
 – Áudio 3D via OpenAL;
? – Particionamento espacial (Octrees);
? – Uso de BSPs para audio (obstáculos causando reverberação, ecos, ruídos, atenuações, etc);
± – Balanceamento de árvores binárias;
± – Gerenciamento de cenas (scene graph management);
± – Iluminação dinâmica (com multi-texturas);
± – Programação em multiprocessamento usando OpenMP;
± – GUI mesclada com OpenGL;
× – Modelamento (Blender);
× – Inteligência Artificial (para Games);
× – Mapeamento de normais (bump mapping);
× – Mapeamento de sombras (shadow mapping);
× – Soft shadows (penumbras);
× – Radiosidade;
× – Ray Tracing;
× – Programação em multiprocessamento usando a GPU (preferência pelo OpenCL);
× – Leitura de cenas, mapas, modelos, aplicação de texturas e seus materiais (via COLLADA);
× – Realismo através de efeitos físicos, atmosféricos e outros efeitos especiais;

Essa é uma lista resumida do que pude pensar nos minutos que gastei escrevendo esse post. Cada item desses apresenta uma dezena de sub-itens. Por exemplo, embora eu tenha “dominado” o conceito e a implementação de BSPs, ainda me faltam alguns detalhes sobre usos além da determinação de visibilidade (line of sight determination, por exemplo)…

Vocês podem notar que ainda tenho um longo (e põe longo nisso) período de estudos para atingir o objetivo que me impus. Mas o caminho é divertido!

Coloquei essa lista para que você, que porventura também goste de CGI, tenha uma idéia de um roteiro a seguir em seus estudos… A lista também está ai para vocês terem uma idéia do que pretendo postar por aqui a respeito do projeto, se houver interesse.

Deixe um comentário