viernes, 21 de junio de 2019

Solo se que se muy poco

Hace ya más de 13 años que "doy clases" en la universidad. Empecé como ayudante cuando era alumno y de a poco creo que fui creciendo. Hasta ahora formalmente siempre era JTP/ayudante de otros titulares. Este año, cuando empiece "Computación Gráfica", será la 1era vez que estaré como máximo responsable de una materia.

Estoy en la cátedra desde hace varias cursadas, y el titular anterior nos daba muchísima participación, así que podría decir que estoy preparado. Además, él había pensado y repensado mucho el armado de la materia, no era solo seguir un libro, así que parto de una muy buena base como para lograr un dictado más que decente. Peeeero....


A diferencia de las materias de programación, la computación gráfica no es exactamente lo que hago y uso todos los días (sí la parte de geometría computacional, pero no tanto la puramente gráfica). De hecho, solo he usado OpenGL 1.x (API obsoleta y deprecada desde hace mil años), y para cosas muy simples (como los diagramas de PSeInt). Mi conocimiento de OpenGL moderno es puramente teórico, y el de  DirectX o alguna otra API alternativa casi nulo. De igual modo, con las técnicas de renderizado avanzado, toco mayormente de oído.


Lo que los alumnos imaginan cuando empezamos a hablar de CG (imagen del juego F1 2017),
vs.
lo que realmente hacemos en clases (no es broma, la 2da es de un trabajo práctico de la materia).

Hay dos excusas: a) lo que enseñamos en la materia es muy básico (no se puede llegar tan lejos en solo un cuatrimestre); y b) hacemos énfasis en lo fundamental, lo conceptual, la API gráfica no es mucho más que un mal necesario para poder llevar eso a la práctica. Y creo que así está bien, sería un error pensarlo distinto en una ingeniería. Sin embargo, ¿alcanza con saber solo un poco más que el alumno? ¿aporta significativamente saber mucho más de lo necesario?

En las materias de programación, donde enseñamos cosas todavía mucho más simples y básicas (están en 1er y 2do año);  me doy cuenta que saber mucho más de lo que enseño, y tener experiencia real con ese extra, me ayuda a elegir y valorar mejor los contenidos (aún los básicos), me da más recursos a la hora de presentarlos, motivarlos, justificarlos, etc. En gráfica no tengo ese plus. Y no es lo mismo limitarse a explicar una unidad ya definida; que diseñar la materia. Así que me puse a trabajar para tratar de compensarlo.


Por un lado, retomando la idea del post anterior y de las lecturas de las vacaciones, me leí (mayormente, me falta un poquito) el "Real-time Rendering" (de Akenine-Möller et al). El titular anterior lo había comprado para la cátedra luego de leer muy buenas críticas, y cuando llegó dijo "es una $½&@#!".

Desde lo didáctico, tenía toda la razón. Es un libro complejo, que ahonda en detalles avanzados y ahorra demasiado en conceptos básicos. No sirve en absoluto para un estudiante, no como material de base para un primer curso como este. Otros autores, como Hearn y Baker, Angel, o Foley y van Danme hacen un mejor trabajo en este sentido.

Sin embargo, la clave está en que este no es un libro pensado para un estudiante. Es para encontrar un buen pantallazo de todo lo que sigue, lo complicado, lo "real", lo que efectivamente se usa en la industria. Casi enciclopédico, pero organizado, filtrado, con ejemplos, etc; y con referencias a los papers originales para llegar a todos los detalles. Como una especie de "handbook". En fin, para lo que yo quería, fue realmente genial, creo que me sirvió de mucho, y ahora entiendo por qué lo recomiendan tanto.


Por otro lado, como para no quedarme solo en lecturas y teoría, también encaré un proyecto práctico: aprender Vulkan y hacer algo "serio" con eso. Es mucho más interesante para comentar, pero este post ya se hizo largo, así que lo dejo para la próxima.

No hay comentarios:

Publicar un comentario