domingo, 30 de março de 2014

O Post Em Que o Marcus Deixa Claro Que Não Veio Pra Holanda Só Para Beber

/* pergunta para pensar enquanto lê o texto, especialmente voltada para os amigos artistas e curiosos: quantos pontos de fuga pode ter um desenho com perspectiva? */

      Aqui na Rijksuniversitei Groningen (apenas RUG, para os íntimos) o ano letivo é dividido em dois semestres e cada semestre é dividido em dois períodos. A pessoa se matricula em cada período em cadeiras diferentes. Um ponto positivo é que é possível ser muito mais focado no que se está fazendo, e um ponto negativo é que se não houver organização tu acaba se metendo em uma corrida caótica louca contra o relógio.
      Como chegamos um pouco atrasados por causa do visto, uma das disciplinas em que estávamos matriculados nos "recusou", uma vez que os grupos foram definidos no primeiro dia de aula e não estávamos lá para isso. O professor não teve nem pena, nos disse com a simplicidade de uma facada que não seria possível que acompanhássemos as aulas.
      Mas para cada período nos matriculamos em duas cadeiras, como acordado com a CAPES. A cadeira desse período que não recusou nossa participação foi Introdução à Computação Gráfica. Pretendo não aborrecê-los com os detalhes, só o suficiente para mostrar que apesar de parecer que é só desenhar bolas, na real não é só desenhar bolas.
      A cadeira segue o padrão de toda semana ter uma aula e uma sessão de laboratório. Em cada sessão de laboratório é lançada uma proposta de trabalho que deve ser entregue até a próxima sessão de laboratório e feita em dupla. No total foram 6 trabalhos nesse período.
      Três destes trabalhos foram baseados em OpenGL, que pessoalmente eu ainda não aprendi a gostar, mas é extremamente útil e dá resultados que em geral são no mínimo tão bons quanto os gráficos de Counter Strike. Os outros três trabalhos são implementar por partes um Raytracer, um approach de gerar imagens que simula (prepare-se para ser mindblown) os fótons e suas interações com os objetos na cena e o olho do observador. Parece complicado e na verdade é um pouco mesmo. Eu estaria meio ferrado se tivesse que fazer isso sozinho; toda a programação envolvida é bem avançada para mim, mas tenho muita sorte do Alex, minha dupla de trabalho, ser um paladino level 90 em C++.
      Um ponto interessante é que várias daquelas coisas que aprendemos na escola e que pensamos que nunca mais iriamos usar são usadas nesse tipo de aplicação. Saber se um raio que passa pelo olho do observador e por um pixel da tela também passa por uma das esferas da cena (e se o ponto em que esse raio intersecta essa esfera está sendo iluminado pelas luzes da cena) tem tudo a ver com fórmula de Bhaskara e geometria analítica daquelas mais básicas.
      A parte legal do Raytracer é que depois de pronto, fica bastante ““““fácil”””” fazer mudanças que simulem espelhos, bolas de gude, fumaça, etc. No nosso é possível ver sombras e reflexões (e reflexões das reflexões! Potencialmente enlouquecedor e lindo).

Knuffel!

/* resposta à pergunta do início do texto: não é 3! É infinito. Para cada conjunto de linhas paralelas que se quer representar na imagem, haverá um ponto de fuga associado. Isso foi tão surpreendente pra mim quanto quando eu descobri que o som da agulha arranhando o vinil é a música gravada lá; só fui digerir a informação no dia seguinte à aula. */

Pra cada ponto que a visão do observador atinge é calculada a forma como a luz interage com a matéria e qual a cor resultante naquele pixel (segundo o modelo de iluminação de Phong). Aqui ainda sem reflexões nem sombras.
Essa aqui usa um tipo diferente de modelo matemático para a iluminação (Gooch). A linha preta ao redor dos objetos dá um ar de cartoon, né?
So Long, And Thanks For All The Fish! (duas luzes, modelo 3D de golfinhos, textura da Terra, reflexões a dar com pau: arte)

Um comentário: