MAC0499 - Trabalho de Formatura Supervisionado

 

Modelador de Sólidos e Editor de Cenas Tridimensionais

Aluno: Marcelo Kenzo Yamada
Orientador: Prof. João Antonio Zuffo
Co-orientador:
Prof. Marcelo Knörich Zuffo
Supervisor:
Prof. Alfredo Goldman vel Lejbman
Tipo de trabalho: IC


Primeira Parte

Introdução
Natureza da organização e da atividade
Motivação
Objetivos do trabalho
Definição/especificação do problema
Forma de organização da equipe de trabalho e atribuição de responsabilidades
Estimativa inicial de prazos e do andamento do projeto
Atividades realizadas
Métricas post-mortem do andamento do projeto
Tópicos/teorias/sistemas estudados ou desenvolvidos
    Treinamentos
    Ferramentas e técnicas utilizadas
Forma de acompanhamento utilizada pelo gerente/administrador do projeto
Conclusão
Bibliografia utilizada

Segunda Parte

Desafios e frustrações encontrados
Lista das disciplinas cursadas no BCC mais relevantes para o projeto
Interação com membros da equipe que tenham agido como mentores do trabalho
Diferenças notadas entre a forma de cooperação com colegas do BCC nas tarefas em grupo das disciplinas e a forma de trabalho conjunto no laboratório
Se fosse continuar atuando na área do projeto, que passos tomaria para aprimorar os conhecimentos técnicos/metodológicos/comerciais/científicos/etc relevantes para esta atividade





Primeira Parte

Introdução

O trabalho é sobre a IC (iniciação científica) com bolsa do CNPq realizada de maio de 1990 a fevereiro de 1992, no Grupo de Computação Gráfica do LSI (Laboratório de Sistemas Integráveis da Escola Politécnica da Universidade de São Paulo), quando foi desenvolvido um sistema de computação gráfica para a geração de imagens tridimensionais sob a orientação do Professor João Antonio Zuffo e co-orientação do Professor Marcelo K. Zuffo.

Natureza da organização e da atividade

O laboratório faz parte da faculdade de engenharia elétrica da Escola Politécnica da USP, e portanto visa a pesquisa, o desenvolvimento de conhecimento científico, e a preparação e introdução de seus alunos à pesquisa acadêmica. O projeto foi exclusivamente de software, visando a integração com sistemas de hardware que estavam sendo desenvolvidos no laboratório naquela época.

Por se tratar de um projeto exclusivamente de software e desenvolvido a partir do zero não houve dependências significativas por recursos materiais ou resultados externos.

Motivação

A principal motivação para o desenvolvimento de um pacote de software desta natureza era o domínio do código fonte. Na época existiam pacotes prontos para ambientes de ponta (estações gráficas de alto desempenho), entretanto não eram abertos. Estavam sendo desenvolvidos projetos de hardware no laboratório (LSI) sobre paralelização maciça (na época, dezenas de processadores fortemente acoplados), e uma das principais aplicações em mente era a paralelização do processamento de imagens, onde se visava eventualmente alcançar o processamento em tempo real.

Objetivos do trabalho

O objetivo era ter ao final um pacote de software totalmente desenvolvido no laboratório que pudesse ser rapidamente otimizado para diferentes plataformas de hardware, com o intuito de usar o conjunto como demonstração de poder de computação.

Definição/especificação do problema



Forma de organização da equipe de trabalho e atribuição de responsabilidades

O projeto foi desenvolvido individualmente sob a supervisão do co-orientador, o que eliminou diversas dificuldades pertinentes a sincronização de membros da equipe e divergências tanto técnicas como não, e pelo mesmo motivo a distribuição do trabalho foi trivial. Anterior ao início do projeto houveram reuniões onde o co-orientador averiguou a adequação do estagiário ao perfil desejado. O estagiário já estava desenvolvendo por conta própria sistemas semelhantes para uso pessoal, e este sincronismo de interesses foi determinante para o fluxo quase ideal no ritmo de desenvolvimento ao longo de todo o projeto.

Em determinadas ocasiões, entretanto, alguns resultados do trabalho foram postos a prova, quando dados gerados pelo software em desenvolvimento foram usados por outros pesquisadores do laboratório para apresentações em eventos organizados pelo laboratório ou onde o mesmo estava presente, com modelos sendo gerados na hora e alimentados em geradores de imagens de alta definição para demonstração em estandes. Nestas ocasiões a não-conformidade ou não-corretude das saídas geradas seria vergonhosa para o laboratório como um todo.

Estimativa inicial de prazos e do andamento do projeto

Teve-se como meta seguir o seguinte cronograma:



Maio/1990
  • Estudo de bibliografia.
Junho/1990
  • Estudo de bibliografia.
Julho/1990
  • Estudo de bibliografia;
  • Especificação do modelador.
Agosto/1990
  • Implementação do modelador.
Setembro/1990
  • Implementação do modelador.
Outubro/1990
  • Implementação do modelador.
Novembro/1990
  • Implementação do modelador.
Dezembro/1990
  • Testes do modelador e ajustes/correções.
Janeiro/1991
  • Testes do modelador e ajustes/correções.
Fevereiro/1991
  • Confecção de relatórios dos trabalhos realizados em 1990.
Março/1991
  • Estudo de bibliografia.
Abril/1991
  • Estudo de bibliografia;
  • Especificação do editor de cenas;
  • Ajustes na implementação do modelador para acomodar eventuais mudanças.
Maio/1991
  • Implementação do editor de cenas.
Junho/1991
  • Implementação do editor de cenas.
Julho/1991
  • Implementação do editor de cenas.
Agosto/1991
  • Implementação do editor de cenas.
Setembro/1991
  • Implementação do editor de cenas.
Outubro/1991
  • Testes do sistema e ajustes/correções.
Novembro/1991
  • Implementação das funções de animação (possivelmente).
Dezembro/1991
  • Implementação das funções de animação (possivelmente).
Janeiro/1992
  • Implementação das funções de animação (possivelmente);
  • Testes e ajustes/correções.
Fevereiro/1992
  • Confecção de relatórios finais dos trabalhos realizados.


Atividades realizadas

Resumo das atividades realizadas durante o projeto:



Maio/1990
  • Estudo de bibliografia.
Junho/1990
  • Estudo de bibliografia.
Julho/1990
  • Estudo de bibliografia;
  • Especificação do modelador.
Agosto/1990
  • Implementação do modelador.
Setembro/1990
  • Implementação do modelador.
Outubro/1990
  • Implementação do modelador.
Novembro/1990
  • Implementação do modelador.
Dezembro/1990
  • Implementação do modelador.
Janeiro/1991
  • Implementação do modelador;
  • Testes com a geração de imagens renderizadas a partir de sólidos modelados com o sistema KAD (nome dado ao sistema projetado).
Fevereiro/1991
  • Confecção de relatórios dos trabalhos realizados em 1990.
Março/1991
  • Ajustes na implementação do modelador;
  • Especificação do editor de cenas.
Abril/1991
  • Ajustes na implementação do modelador;
  • Especificação do editor de cenas.
Maio/1991
  • Implementação do editor de cenas.
Junho/1991
  • Implementação do editor de cenas.
Julho/1991
  • Implementação do editor de cenas.
Agosto/1991
  • Implementação do editor de cenas.
Setembro/1991
  • Implementação do editor de cenas.
Outubro/1991
  • Testes do sistema e ajustes/correções.
Novembro/1991
  • Estudo de pacotes de modelagem, renderização e animação para o então recém adquirido supercomputador Silicon Graphics (IRIS 4D/480VGX).
Dezembro/1991
  • Estudo de pacotes de modelagem, renderização e animação para o então recém adquirido supercomputador Silicon Graphics (IRIS 4D/480VGX).
Janeiro/1992
  • Estudo de pacotes de modelagem, renderização e animação para o então recém adquirido supercomputador Silicon Graphics (IRIS 4D/480VGX).
Fevereiro/1992
  • Confecção de relatórios finais dos trabalhos realizados.


Métricas post-mortem do andamento do projeto

Como pode-se observar na duas seções anteriores, o cronograma inicial foi seguido praticamente de ponta a ponta. Houve atrasos na fase de implementação do modelador, quando ainda havia menos experiência tanto de programação como em fazer estimativas por parte do desenvolvedor, mas a seqüência do trabalho mostra que essa deficiência foi superada durante o processo.

Por ter cumprido com o cronograma proposto inicialmente até a mudança de foco em novembro de 1991 e ter produzido o pacote com o modelador de sólidos e o editor de cenas dentro do prazo previsto pode-se afirmar que o projeto foi concluído com sucesso.

Tópicos/teorias/sistemas estudados ou desenvolvidos


Treinamentos


Ferramentas e técnicas utilizadas


Forma de acompanhamento utilizada pelo gerente/administrador do projeto

Eram feitas reuniões a cada dois a três meses para que o co-orientador pudesse verificar se o andamento do projeto estava de acordo com o cronograma previsto. Não houveram problemas nem grandes divergências ao longo de todo o processo, e por isso o acompanhamento em si tomou pouco tempo (diversas fatias muito pequenas de tempo). Havia um controle de horas trabalhadas por semana, que era flexível como para todos os demais estagiários do laboratório em função de épocas de provas e finais de semestre. Em épocas de férias escolares ou academicamente menos complicadas ao longo dos semestres era comum se trabalhar bem mais do que o estabelecido, assim como em épocas mais complicadas em termos acadêmicos era comum descontar dessas horas acumuladas para dedicar mais tempo aos estudos universitários, como hoje é conhecido esse sistema em diversas empresas pelo nome de banco de horas.

Conclusão

Ao final do período da IC o software (com exceção do módulo de animação) estava pronto e funcional. Era possível modelar sólidos e compor cenas tridimensionais em wireframe, assim como exportar ambos para programas de visualização existentes nas estações gráficas tanto da Sun como do então recém adquirido supercomputador gráfico da Silicon Graphics. Com a aquisição do supercomputador, os últimos meses da IC foram usados para o estudo e familiarização com este e alguns dos diversos pacotes gráficos disponíveis.

O projeto foi dado como concluído com sucesso, e além da grande quantidade de conhecimento técnico adquirida ao longo do processo houve o aprendizado com a participação em um projeto de maior duração onde é exigido maior grau de planejamento e comprometimento, o convívio com outros membros da comunidade acadêmica de quem muito foi assimilado tanto em conhecimento como em postura e ética de trabalho, pesquisa e atitude, e a obrigatoriedade de prestar contas tanto para superiores como para um órgão financiador.

Sem dúvida foi uma experiência marcante que acrescentou muito à minha bagagem cultural e profissional.

Bibliografia utilizada

FOLE90  Foley, J., A. van Dam, S. Feiner, and J. Hughes, Computer Graphics: Principles and Practice - 2nd ed.




Segunda Parte


Desafios e frustrações encontrados

A maior dificuldade encontrada foi não ter domínio suficiente sobre o projeto antes das fases de codificação. Não foi feito nenhum estudo prévio de como dividir os módulos, apenas foram definidas as funcionalidades desejadas, e a codificação ficou totalmente a cargo do programador. Teria sido consideravelmente mais fácil escrever o código somente após ter especificado todo o problema.

Lista das disciplinas cursadas no BCC mais relevantes para o projeto

Apesar de na época não estar cursando Ciência da Computação e portanto não ter podido tirar proveito das matérias do BCC, é possível listar uma relação de matérias que poderiam ter sido ou mesmo que foram aplicadas no projeto.

MAT-112 - Vetores e Geometria Analítica, atualmente parcialmente englobada em MAT-139 - Álgebra Linear para Computação: Essa disciplina foi fundamental, pois sem ela não seria possível sequer tratar o problema de parametrização e transformações lineares. É a base matemática de todo o projeto.

MAC-332 - Engenharia de Software: Infelizmente muito pouco valorizada por muitos colegas que estudaram comigo no BCC na época em que a cursamos. Na época da IC eu dispunha apenas de alguns dos seus conceitos, e mesmo assim não formalmente. Teria ajudado tremendamente na especificação do cronograma, com menor margem de erro e provavelmente diminuindo também o tempo gasto em codificação. Posteriormente eu aprendi arduamente diversos dos conceitos de Engenharia de Software no mercado de trabalho, e tenho essa matéria como uma das mais importantes do currículo do BCC, já que parece-me que a parte técnica, seja ela matemática ou de codificação, é sempre mais fácil de ser assimilada individualmente, e a importância da parte administrativa e de planejamento de projetos de computação é muitas vezes subestimada.

MAC-211 - Laboratório de Programação I e MAC-242 - Laboratório de Programação II: Por motivos óbvios os laboratórios de programação teriam dado maior experiência e familiaridade com ambientes de programação e compilação que eu não tinha tido prévio contato.

MAC-122 - Princípios de Desenvolvimento de Algoritmos: Foram usadas listas de estruturas (ligadas e duplamente ligadas) e reordenações. Conceitos vistos em MAC-122 teriam diminuído a quantidade de leitura necessária na ocasião.

Apesar de ter usado poucos conceitos dados no BCC para este projeto, é ao meu ver importante salientar que a maioria das matérias obrigatórias do departamento de Computação (MAC) presentes no atual currículo do BCC são importantes para a formação profissional na área para quem não pretende seguir carreira acadêmica. Para o segundo grupo eu imagino que as demais, inclusive dos outros departamentos, devem ser igualmente importantes.

Interação com membros da equipe que tenham agido como mentores do trabalho

O desenvolvimento foi feito por uma equipe de um desenvolvedor apenas, e por isso não houve conflitos ou problemas de interação. Para simplificar ainda mais o andamento do projeto, em praticamente todos os tópicos os orientadores e o orientado tinham posições/visões equivalentes ou muito próximas, e não houve necessidade de intervenção por parte dos primeiros. Havia interação com outros desenvolvedores do mesmo grupo (Grupo de Computação Gráfica) para ajuda mútua, e era comum trocar idéias e sugestões com colegas desenvolvedores. Com isso muitos erros eram descobertos com a ajuda de colegas (multilateral).

Em nenhum momento houve conflito ou atrito com outros membros do grupo.

Diferenças notadas entre a forma de cooperação com colegas do BCC nas tarefas em grupo das disciplinas e a forma de trabalho conjunto no laboratório.

Esse é um ponto fraco na minha forma de trabalhar. Eu sou deficiente em ambientes de grupo. Eu sempre gostei de estudar sozinho, trabalhar sozinho, praticar esportes individuais, em especial esportes que dependem mais do que o normal de concentração e dedicação ao treino. O trabalho no LSI pode ser desenvolvido com certa facilidade porque não era um trabalho em equipe. O software foi desenvolvido por apenas uma pessoa, com a ajuda de colegas de trabalho assim como eu também tive a oportunidade de ajudar a outros. Eu já trabalhei em diversas empresas, e em todas nas quais eu fiz trabalho de desenvolvimento (programação), acabei fazendo sozinho. Dessa forma, ser obrigado a trabalhar em equipe durante o BCC foi uma experiência positiva, já que por conta própria eu não tomaria uma iniciativa dessas.

De uma forma geral eu posso dizer que ficou mais claro ainda aos meus olhos a importância de conceitos de Engenharia de Software. Ferramentas de auxílio para cooeperação em desenvolvimento de código podem ajudar, mas nada comparável ao entrosamento de uma equipe. Se para projetos pequenos como trabalhos escolares é possível resolver impasses apenas com diálogos, isso certamente não é verdade para projetos de grande porte. Planejamento e formas de expressar definições com precisão são fundamentais para o desenvolvimento de trabalhos em equipe.

Se fosse continuar atuando na área do projeto, que passos tomaria para aprimorar os conhecimentos técnicos/metodológicos/comerciais/científicos/etc relevantes para esta atividade

Na época eu mantive contato ainda por um tempo com pesquisadores do laboratório que tinham interesse na mesma área, e mantive ainda por alguns anos as assinaturas de revistas como a Computer e a Computer Graphics and Applications, ambas do IEEE, além de comprar alternadamente exemplares de outras publicações periódicas relacionadas. Eu já possuia os principais livros textos no assunto.

Se fosse voltar para essa área eu com certeza primeiro buscaria contato com pesquisadores que estão envolvidos com o assunto atualmente para saber quais campos de conhecimento eu tenho maior necessidade de atacar primeiro, para ter alguma noção do que está sendo feito e principalmente do que ainda não foi feito. Já se fosse para mudar o enfoque de científico para comercial, além das medidas acima eu entraria em contato com algumas empresas líderes em computação gráfica, como a ILM, por exemplo. Trabalhar em estúdios de cinema para desenvolver novas técnicas de animação/visualização também não está fora das minhas considerações.


2004/12/05 Kenzo Yamada