Computação Gráfica: mudanças entre as edições

De Pontão Nós Digitais
Ir para navegaçãoIr para pesquisar
(versao inicial da pagina de computacao grafica)
 
 
(57 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
Esta é a pagina principal de um curso de computação gráfica ministrado em 2013/2 no [http://pt.wikipedia.org/wiki/IPRJ IPRJ]/[http://pt.wikipedia.org/wiki/IPRJ UERJ], de utilidade geral para a formacao de programadores de nivel intermediario e avancado.
Esta é a pagina principal de um curso de computação gráfica ministrado em 2013/2 no [http://pt.wikipedia.org/wiki/IPRJ IPRJ]/[http://pt.wikipedia.org/wiki/IPRJ UERJ], de utilidade geral para a formacao de programadores de nivel intermediario e avancado para desenvolvimento de software multimídia, videogames, interfaces gráficas, dentre outros.
 
[[Imagem:FeedOldGames.png|right|550px]]


== Informacoes gerais ==
== Informacoes gerais ==
* Instrutor: prof. [http://www.lems.brown.edu/~rfabbri Ricardo Fabbri], Ph.D.
* Instrutor: prof. [http://www.lems.brown.edu/~rfabbri Ricardo Fabbri], Ph.D.
* Periodo: 2o. Semestre de 2013, voltado ao 10o. periodo de Engenharia da Computacao
* Periodo: 2o. Semestre de 2013, voltado ao 10o. periodo de Engenharia da Computacao
* Tercas 4pm-6:45pm e Quartas Quartas 11:30am-2:10pm, sala xx e Lab Inf xx
* Tercas 4pm-6:45pm e Quartas 11:30am-2:10pm, sala 211; Lab Inf 309 Tercas e 307 Quartas


=== Pre-requisitos ===
=== Pre-requisitos ===
O aluno deverá saber conceitos básicos de programação e conseguir aprender linguagens rapidamente sob demanda durante o curso.
O aluno deverá saber conceitos básicos de programação e conseguir aprender linguagens rapidamente sob demanda durante o curso.
Experiência prévia com programação orientada a objetos desejável, bem como conhecimento de álgebra linear.
Experiência prévia com programação orientada a objetos desejável, bem como conhecimento de álgebra linear. A linguagem padrao utilizada sera o Python,
sendo C/C++, java e outros tambem utilizados eventualmente.
* '''Tutorial de Python''' da Kitware e Google[http://midas3.kitware.com/midas/folder/5741]
** Slides extremamente uteis para aprender python cientifico rapidamente
** Boa visao geral do Python cientifico, iPython, PyLab, NumPy, SciPy, Spyder
** Complementos ao final com processamento de imagens e processamento paralelo
** Baixe o arquivo tutorial_slides.pdf[http://midas3.kitware.com/midas/folder/5741]


== Conteudo aproximado ==
== Conteudo aproximado ==
 
* Modelagem e conceitos de computacao grafica no software [[Blender]] (tarefa 1)
* Programacao em Python (incluindo OpenGL) usando a API do [[Blender]] (tarefa 2)
* Game engines: projeto e uso
** Transformacoes geometricas, cameras
* Cor, Luz, modelos de transporte de fotons, fotometria, percepcao
* Renderizacao estilizada / non-photorealistic rendering - NPR
* Renderizacao em paralelo com GPU, threads e distribuida (uso e ideias basicas)
* Itens do livro do Van Dam de acordo com necessidade dos projetos


== Recursos principais ==
== Recursos principais ==
Linha 18: Linha 33:
=== Bibliografia ===
=== Bibliografia ===
* Biblia do Van Dam: "Computer Graphics: Principles and Practice", 3rd. edition, 2013.
* Biblia do Van Dam: "Computer Graphics: Principles and Practice", 3rd. edition, 2013.
http://www-fp.pearsonhighered.com/assets/hip/images/bigcovers/0321399528.jpg
* Dupla de livros do Velho, Gomes, Souza e outros:
** [http://www.amazon.com/Design-Implementation-3D-Graphics-Systems/dp/1466571217/ref=pd_bxgy_b_img_y  "Computer Graphics: Theory and Practice"]
** [http://www.amazon.com/gp/product/1568815808/ref=s9_simh_gw_p14_d0_i2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=1D4AXWG0RBPK2XMQQSYX&pf_rd_t=101&pf_rd_p=1630083502&pf_rd_i=507846 "Design and Implementation of 3D Graphics Systems"]
** Ainda nao explorei muito esses livros, mas sao muito importantes
http://ecx.images-amazon.com/images/I/51jtxqKEy7L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg
=== Aulas ===
Toda aula inicia com um video curto inspirador sobre CG
* Intro & Historia da CG
** Video do sketchpad, blender demo run 2013, etc.
* Transformacoes de objetos e sistemas de coordenadas (ate 2/Out/13)
** Matrizes de rotacao, coordenadas homogeneas e outras transformacoes
** Modelo geometrico de cameras como sequencia de transformacoes
** O material foi quase igual ao de [[Algebra Linear Numerica]],  porem voltado `a tarefa 1 e ao final das [http://www.lems.brown.edu/~rfabbri/stuff/fabbri-coordinate_changes.pdf notas], em que os calculos e notacao tiveram que ser refeitos para se adequar a rotacoes em torno de eixos arbitrarios usando apenas matrizes.
* [http://wiki.nosdigitais.teia.org.br/Computa%C3%A7%C3%A3o_Gr%C3%A1fica#Pre-requisitos Revisao de python]
* CG 2D e 3D com OpenGL - aula grande! ([http://www.lems.brown.edu/~rfabbri/stuff/graphics-course/aula-cg.pdf pdf] | [http://www.lems.brown.edu/~rfabbri/stuff/graphics-course/aula-cg.key keynote])
* Resumo de programacao blender com python e apresentacao de projetos (5/Nov/13)
* Cores, Iluminacao, Percepcao ([http://www.lems.brown.edu/~rfabbri/stuff/graphics-course/aula-percepcao-cor.pdf pdf] | [http://www.lems.brown.edu/~rfabbri/stuff/graphics-course/aula-percepcao-keynote.zip keynote]) - mais de 100MB
** Visao geral dos conceitos de cor e como podem ser aplicados `a CG (6/Nov/13)
** Aprofundamento: colorimetria, fotometria, iluminacao avancada
** Calibracao de cores, white balance, filtros, codificacao de imagens 3D, highlights, fenomenos naturais de cor (27/Nov/13)
** Leitura - Sobre temperatura de luzes que nao emitem como corpo negro [http://lowel.com/edu/color_temperature_and_rendering_demystified.html]
** Leitura interessante - a cor media das estrelas do universo [http://www.pha.jhu.edu/~kgb/cosspec/]
* Modelo de geracao de imagens RAW/JPEG em cameras reais para renderizacao realistica: [http://vision.middlebury.edu/color/ Estudo de Zickler et. al.] (10/Dez/13)
* Medindo luz - fluxo de energia em renderizacao, radiancia, irradiancia, funcao plenoptica - Cap 26.7 do livro (11/Dez/13)
* '''(em andamento)'''


== Recursos adicionais ==
== Recursos adicionais ==
* Material online do curso do Van Dam na Brown: http://cs.brown.edu/courses/cs123/
* Curso do Van Dam na Brown: http://cs.brown.edu/courses/cs123/
* [[Material online do Curso de computacao paralela do IPRJ|PP]]
* [[PP|Curso de Computacao Paralela do]] [http://pt.wikipedia.org/wiki/IPRJ IPRJ]: incluindo CUDA
* [[ALN|Curso de Álgebra Linear Numérica do]] [http://pt.wikipedia.org/wiki/IPRJ IPRJ]: muitos conceitos úteis para computação gráfica
* [[VC|Curso de Visao Computacional do]] [http://pt.wikipedia.org/wiki/IPRJ IPRJ]: computacao grafica inversa, tecnologia do kinect, wii, [[PS3Eye]], etc.
* [[PT|Curso de Teoria dos Padroes do]] [http://pt.wikipedia.org/wiki/IPRJ IPRJ]: aprendizagem de maquina, tecnicas estocasticas, vertente importante de Visao Computacional


=== Provas ===
=== Provas ===
* P1: terca-feira 3/Dez/2013 [http://wiki.nosdigitais.teia.org.br/images/c/c2/Prova-cg-2013.pdf (pdf)]
* Pf/Sub:


== Tarefas ==
== Tarefas ==
=== Tarefa 1: intro a blender - modelagem simples de um mascote do IPRJ ===
=== Tarefa 1: intro ao blender - modelagem simples de um mascote do IPRJ ===
* Desenhar e modelar um mascote do IPRJ no blender usando apenas cubos e esferas simples
* Desenhar e modelar um mascote do IPRJ no blender usando apenas cubos e esferas simples
* Data de entrega: 1/Out/2013
* Data de entrega: 1/Out/2013
=== Tarefa 2: Girando Câmeras em Python ===
Objetivo: Simular uma camera girando em torno de um objeto, usando a API Python do Blender.
A rotacao deve ser em torno de um eixo arbitrario. Sugiro os seguintes passos
# Realizar a rotacao de um objeto simples (cubo) em torno da origem no plano x-y, tomando o eixo z como eixo de rotacao. Aprenda como rotacoes estao representadas no Blender.
# Realizar a rotacao de um objeto simples em torno de um centro e eixo arbitrario.
# Realizar agora a rotacao de uma camera em torno do eixo z no plano x-y em torno da origem. Aprenda como cameras sao representadas no Blender. Elas usam a regra da mao direita? E o eixo z aponta para a cena ou contra a cena (z negativo)?
# Realizar a rotacao de uma camera em torno de um eixo arbitrario. O usuario devera especificar o passo de rotacao em graus e o numero de passos no programa python, de preferencia em uma janela. Voce pode animar a camera ou entao simplesmente gerar varias copias da camera inicial.
# Renderize uma animacao com uma camera girando em torno de um objeto. Mostre a matriz de rotacao.
# Renderize a mesma animacao, agora com a camera fixa e o objeto girando no sentido contrario. Mostre a matriz de rotacao.
* Entrega do projeto:
** Programa com README explicando como foi feito e mostrando como ficou a geometria.
** Apresentacao: ha duas alternativas, apresentar em aula para todos, ou enviar um video para o professor gravando a tela do seu computador:
*** Apresentacao de 10min.
*** Se preferir, grave um video do programa funcionando em cada um dos passos acima. Utilize um programa para gravar a tela, no linux [http://wiki.nosdigitais.teia.org.br/Screencast#Currently_Best_Screencasting_Workflow_from_LabMacambiras.sf.net]. Dessa forma voce sera dispensado da apresentacao.
* Data de entrega: 29/Outubro '''--> adiado 1 semana para 5/Novembro'''
=== Tarefa 3: Splines, Animacao, e Efeitos 3D ===
* [https://github.com/rfabbri/fabbri-graphics-course/blob/master/lab2/lab2-computer_graphics-fabbri-2013.pdf?raw=true Enunciado]
* ''Data de entrega:'' terca-feira 26/Nov/2013 ate a meia-noite. Atrasos serao aceitos, porem somente com reducao na nota.
* Uma versao mais elaborada deste trabalho pode ser entregue opcionalmente como projeto final. Porem o basico de todos os itens devera ser entregue na data pois valera como nota de tarefa tambem.
==== Instrucao para Submissao ====
* Enviar um arquivo zipado com tudo (scripts, apresentacao, relatorio/readme, etc) por email, no formato:
<sobrenome>-<nome>-computacao-grafica-<ano>-tarefa<numero_tarefa>.zip
* Regra para apresentacao ou screencast similarmente `a tarefa anterior
* ''Relatorio em pdf'': Alem do README, explique o conteudo (como funciona, processo de desenvolvimento, teoria de cada efeito) em um relatorio. ''Divida as tarefas entre seus colegas do grupo!''
* Grupos de no max. 3 pessoas.
==== Ideias de efeitos ====
Renderizacao de linhas e NPR (non-photorealistic rendering) com [http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Freestyle freestyle]
* https://www.google.com.br/search?q=freestyle+blender
http://wiki.blender.org/uploads/thumb/6/6d/Manual-2.6-Render-Freestyle-Demo-Line_Demo.png/600px-Manual-2.6-Render-Freestyle-Demo-Line_Demo.png
==== Renderizacao Distribuida ====
* No IPRJ temos um cluster disponivel aos alunos para renderizacao paralela em alta resolucao
** Disponivel aos alunos estao os seguintes recursos do cluster: 4 nós, cada um com dois processadores de 6 núcleos dual thread, dando 24 threads por nó - um total de 96 threads. Cada nó possui 16 GB de RAM e 4 placas de rede gigabit lan. Dois dos 4 nós possuem '''placa NVidia Tesla M2075''' com 448 cores / 6GB RAM / 1 Tflops (precisão simples) ou 515 Gflops (precisão dupla), totalizando quase 1000 cuda cores com 12 GB RAM. A servidora de arquivos trabalha em redundância RAID 6 com 3 TBytes livres. Rodando no momento Opensuse 12.2.
* Cada grupo de alunos elege um representante responsavel pela renderizacao, que seja usuario de Linux
* Renderizacao distribuida bem-sucedida em full HD vai valer ate '''1 ponto adicional na media''' do grupo


=== Projetos ===
=== Projetos ===
# Ideia '''default''': Gerar uma animacao de alguns minutos com alta qualidade.
## Interessante: explorar freestyle non-photorealistic rendering http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.67/FreeStyle
# Ideia: Propor um projeto de sua preferencia
# Ideia: Melhorar algum projeto de iniciacao cientifica
# Ideia: interatividade com superficies no Scilab, aplicado a processamento de dados de corrosao do prof. Ivan, de amplo interesse de entidades como a petrobras.


== Criterio de Avaliacao ==
== Criterio de Avaliacao ==
(under construction)
* Trabalhos: 70% da media
* Trabalhos: 70% da media
* Uma prova apenas
* Sera dado maior peso aos trabalhos mais complexos
* '''Bonus:''' top 2 projetos terao +3 pontos na media (caso atingirem um alto nivel)


[[Category:IPRJ]] [[Category:Lab Macambira]]
[[Category:IPRJ]] [[Category:Lab Macambira]]

Edição atual tal como às 05h36min de 4 de fevereiro de 2014

Esta é a pagina principal de um curso de computação gráfica ministrado em 2013/2 no IPRJ/UERJ, de utilidade geral para a formacao de programadores de nivel intermediario e avancado para desenvolvimento de software multimídia, videogames, interfaces gráficas, dentre outros.

FeedOldGames.png

Informacoes gerais

  • Instrutor: prof. Ricardo Fabbri, Ph.D.
  • Periodo: 2o. Semestre de 2013, voltado ao 10o. periodo de Engenharia da Computacao
  • Tercas 4pm-6:45pm e Quartas 11:30am-2:10pm, sala 211; Lab Inf 309 Tercas e 307 Quartas

Pre-requisitos

O aluno deverá saber conceitos básicos de programação e conseguir aprender linguagens rapidamente sob demanda durante o curso. Experiência prévia com programação orientada a objetos desejável, bem como conhecimento de álgebra linear. A linguagem padrao utilizada sera o Python, sendo C/C++, java e outros tambem utilizados eventualmente.

  • Tutorial de Python da Kitware e Google[1]
    • Slides extremamente uteis para aprender python cientifico rapidamente
    • Boa visao geral do Python cientifico, iPython, PyLab, NumPy, SciPy, Spyder
    • Complementos ao final com processamento de imagens e processamento paralelo
    • Baixe o arquivo tutorial_slides.pdf[2]

Conteudo aproximado

  • Modelagem e conceitos de computacao grafica no software Blender (tarefa 1)
  • Programacao em Python (incluindo OpenGL) usando a API do Blender (tarefa 2)
  • Game engines: projeto e uso
    • Transformacoes geometricas, cameras
  • Cor, Luz, modelos de transporte de fotons, fotometria, percepcao
  • Renderizacao estilizada / non-photorealistic rendering - NPR
  • Renderizacao em paralelo com GPU, threads e distribuida (uso e ideias basicas)
  • Itens do livro do Van Dam de acordo com necessidade dos projetos

Recursos principais

Bibliografia

  • Biblia do Van Dam: "Computer Graphics: Principles and Practice", 3rd. edition, 2013.

0321399528.jpg

51jtxqKEy7L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg

Aulas

Toda aula inicia com um video curto inspirador sobre CG

  • Intro & Historia da CG
    • Video do sketchpad, blender demo run 2013, etc.
  • Transformacoes de objetos e sistemas de coordenadas (ate 2/Out/13)
    • Matrizes de rotacao, coordenadas homogeneas e outras transformacoes
    • Modelo geometrico de cameras como sequencia de transformacoes
    • O material foi quase igual ao de Algebra Linear Numerica, porem voltado `a tarefa 1 e ao final das notas, em que os calculos e notacao tiveram que ser refeitos para se adequar a rotacoes em torno de eixos arbitrarios usando apenas matrizes.
  • Revisao de python
  • CG 2D e 3D com OpenGL - aula grande! (pdf | keynote)
  • Resumo de programacao blender com python e apresentacao de projetos (5/Nov/13)
  • Cores, Iluminacao, Percepcao (pdf | keynote) - mais de 100MB
    • Visao geral dos conceitos de cor e como podem ser aplicados `a CG (6/Nov/13)
    • Aprofundamento: colorimetria, fotometria, iluminacao avancada
    • Calibracao de cores, white balance, filtros, codificacao de imagens 3D, highlights, fenomenos naturais de cor (27/Nov/13)
    • Leitura - Sobre temperatura de luzes que nao emitem como corpo negro [3]
    • Leitura interessante - a cor media das estrelas do universo [4]
  • Modelo de geracao de imagens RAW/JPEG em cameras reais para renderizacao realistica: Estudo de Zickler et. al. (10/Dez/13)
  • Medindo luz - fluxo de energia em renderizacao, radiancia, irradiancia, funcao plenoptica - Cap 26.7 do livro (11/Dez/13)
  • (em andamento)

Recursos adicionais

Provas

  • P1: terca-feira 3/Dez/2013 (pdf)
  • Pf/Sub:

Tarefas

Tarefa 1: intro ao blender - modelagem simples de um mascote do IPRJ

  • Desenhar e modelar um mascote do IPRJ no blender usando apenas cubos e esferas simples
  • Data de entrega: 1/Out/2013


Tarefa 2: Girando Câmeras em Python

Objetivo: Simular uma camera girando em torno de um objeto, usando a API Python do Blender. A rotacao deve ser em torno de um eixo arbitrario. Sugiro os seguintes passos

  1. Realizar a rotacao de um objeto simples (cubo) em torno da origem no plano x-y, tomando o eixo z como eixo de rotacao. Aprenda como rotacoes estao representadas no Blender.
  2. Realizar a rotacao de um objeto simples em torno de um centro e eixo arbitrario.
  3. Realizar agora a rotacao de uma camera em torno do eixo z no plano x-y em torno da origem. Aprenda como cameras sao representadas no Blender. Elas usam a regra da mao direita? E o eixo z aponta para a cena ou contra a cena (z negativo)?
  4. Realizar a rotacao de uma camera em torno de um eixo arbitrario. O usuario devera especificar o passo de rotacao em graus e o numero de passos no programa python, de preferencia em uma janela. Voce pode animar a camera ou entao simplesmente gerar varias copias da camera inicial.
  5. Renderize uma animacao com uma camera girando em torno de um objeto. Mostre a matriz de rotacao.
  6. Renderize a mesma animacao, agora com a camera fixa e o objeto girando no sentido contrario. Mostre a matriz de rotacao.
  • Entrega do projeto:
    • Programa com README explicando como foi feito e mostrando como ficou a geometria.
    • Apresentacao: ha duas alternativas, apresentar em aula para todos, ou enviar um video para o professor gravando a tela do seu computador:
      • Apresentacao de 10min.
      • Se preferir, grave um video do programa funcionando em cada um dos passos acima. Utilize um programa para gravar a tela, no linux [5]. Dessa forma voce sera dispensado da apresentacao.
  • Data de entrega: 29/Outubro --> adiado 1 semana para 5/Novembro

Tarefa 3: Splines, Animacao, e Efeitos 3D

  • Enunciado
  • Data de entrega: terca-feira 26/Nov/2013 ate a meia-noite. Atrasos serao aceitos, porem somente com reducao na nota.
  • Uma versao mais elaborada deste trabalho pode ser entregue opcionalmente como projeto final. Porem o basico de todos os itens devera ser entregue na data pois valera como nota de tarefa tambem.

Instrucao para Submissao

  • Enviar um arquivo zipado com tudo (scripts, apresentacao, relatorio/readme, etc) por email, no formato:
<sobrenome>-<nome>-computacao-grafica-<ano>-tarefa<numero_tarefa>.zip
  • Regra para apresentacao ou screencast similarmente `a tarefa anterior
  • Relatorio em pdf: Alem do README, explique o conteudo (como funciona, processo de desenvolvimento, teoria de cada efeito) em um relatorio. Divida as tarefas entre seus colegas do grupo!
  • Grupos de no max. 3 pessoas.

Ideias de efeitos

Renderizacao de linhas e NPR (non-photorealistic rendering) com freestyle

600px-Manual-2.6-Render-Freestyle-Demo-Line_Demo.png

Renderizacao Distribuida

  • No IPRJ temos um cluster disponivel aos alunos para renderizacao paralela em alta resolucao
    • Disponivel aos alunos estao os seguintes recursos do cluster: 4 nós, cada um com dois processadores de 6 núcleos dual thread, dando 24 threads por nó - um total de 96 threads. Cada nó possui 16 GB de RAM e 4 placas de rede gigabit lan. Dois dos 4 nós possuem placa NVidia Tesla M2075 com 448 cores / 6GB RAM / 1 Tflops (precisão simples) ou 515 Gflops (precisão dupla), totalizando quase 1000 cuda cores com 12 GB RAM. A servidora de arquivos trabalha em redundância RAID 6 com 3 TBytes livres. Rodando no momento Opensuse 12.2.
  • Cada grupo de alunos elege um representante responsavel pela renderizacao, que seja usuario de Linux
  • Renderizacao distribuida bem-sucedida em full HD vai valer ate 1 ponto adicional na media do grupo

Projetos

  1. Ideia default: Gerar uma animacao de alguns minutos com alta qualidade.
    1. Interessante: explorar freestyle non-photorealistic rendering http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.67/FreeStyle
  2. Ideia: Propor um projeto de sua preferencia
  3. Ideia: Melhorar algum projeto de iniciacao cientifica
  4. Ideia: interatividade com superficies no Scilab, aplicado a processamento de dados de corrosao do prof. Ivan, de amplo interesse de entidades como a petrobras.

Criterio de Avaliacao

  • Trabalhos: 70% da media
  • Uma prova apenas
  • Sera dado maior peso aos trabalhos mais complexos
  • Bonus: top 2 projetos terao +3 pontos na media (caso atingirem um alto nivel)