Recientemente, ha aparecido mucha investigación fantástica sobre renderizado 2D. Peter Kobalicek y Fabian Aizerman están trabajando en
Blend2D : este es uno de los rasterizadores de CPU más rápidos y precisos del mercado, con tecnología innovadora JIT. Patz Walton de Mozilla estudió no uno, sino
tres enfoques diferentes en Pathfinder , que culminó en Pathfinder v3. Raf Levien construyó la
tubería informática utilizando la tecnología descrita en un
artículo científico de Ghana con colegas sobre texturas vectoriales (2014) . Parece que cierto desarrollo de distancia está marcado por campos de distancia:
Adam Simmons y
Sarah Frisken trabajan independientemente aquí.
Uno podría preguntarse: ¿por qué hay tanto ruido alrededor de 2D? No puede ser mucho más difícil que el 3D, ¿verdad? ¡El 3D es una dimensión completamente diferente! Aquí tenemos un trazado de rayos en tiempo real en la nariz con una iluminación precisa, y no puede dominar los gráficos 2D con colores sólidos.
Para aquellos que no están muy versados en los detalles de la GPU moderna, ¡esto es realmente muy sorprendente! Pero los gráficos 2D tienen muchas limitaciones únicas que lo hacen extremadamente difícil. Además, no se presta a la paralelización. Paseemos por el camino histórico que nos trajo hasta aquí.
Despegue PostScript
Al principio había un conspirador. El primer dispositivo gráfico capaz de interactuar con una computadora se llamaba "
plotter " (plotter): uno o más lápices que pueden moverse alrededor del papel. Todo funciona de
acuerdo con el comando de pluma, luego el cabezal de dibujo se mueve de una manera única, posiblemente a lo largo de una curva, y se recibe el comando de pluma . HP, el fabricante de algunos de los primeros plotters, utilizó una variante BÁSICA llamada AGL en la computadora host, que luego envió los comandos del plotter en otro idioma, como
HP-GL . En la década de 1970, los terminales gráficos se volvieron más baratos y populares, comenzando con el
Tektronix 4010 . Mostró la imagen usando un CRT, pero no se deje engañar: esta no es una pantalla de píxeles. Tektronix vino de la industria de los osciloscopios analógicos, y estas máquinas funcionan
controlando el haz de electrones a lo largo de una ruta específica . Por lo tanto, el Tektronix 4010 no tenía salida de píxeles. En su lugar, le enviaste comandos en
modo gráfico simple , que podría dibujar líneas, pero, nuevamente, en el modo "emplumar", "emplumar".
Como en muchas otras áreas, todo cambió la invención de Xerox PARC. Los investigadores comenzaron a desarrollar un nuevo tipo de impresora, más computacionalmente expresiva que un trazador. Esta nueva impresora funcionaba en un pequeño lenguaje de programación completo de Turing apilado similar a Forth, y se llamaba ... ¡
Interpress ! Obviamente, Xerox no pudo encontrarle una aplicación digna, por lo que los inventores abandonaron el barco y fundaron una pequeña startup llamada Adobe. Tomaron Interpress con ellos, y a medida que fueron corregidos y mejorados, cambió más allá del reconocimiento, por lo que le dieron otro nombre: PostScript. Además del dulce y completo lenguaje de pila, el cuarto capítulo de la
Referencia del lenguaje PostScript original describe el Modelo de imagen, que es casi idéntico a las interfaces de programación modernas. El ejemplo 4.1 del manual contiene un código de muestra que se puede traducir casi línea por línea en HTML5 <canvas>.
/box { function box() { newpath ctx.beginPath(); 0 0 moveto ctx.moveTo(0, 0); 0 1 lineto ctx.lineTo(0, 1); 1 1 lineto ctx.lineTo(1, 1); 1 0 lineto ctx.lineTo(1, 0); closepath ctx.closePath(); } def } gsave ctx.save(); 72 72 scale ctx.scale(72, 72); box fill box(); ctx.fill(); 2 2 translate ctx.translate(2, 2); box fill box(); ctx.fill(); grestore ctx.restore();
Esto no es una coincidencia.
Steve Jobs de Apple se reunió con los ingenieros de Interpress durante su visita a PARC. Jobs pensó que el negocio de la impresión sería rentable y trató de comprar Adobe al nacer. Pero Adobe presentó una contraoferta y finalmente vendió a Apple una licencia PostScript de cinco años. El tercer pilar en el plan de Jobs era financiar una pequeña startup, Aldus, que creó una aplicación WYSIWYG para crear documentos PostScript. Se llamaba PageMaker. A principios de 1985, Apple presentó la primera impresora compatible con PostScript, la Apple LaserWriter. La combinación de Macintosh, PageMaker y LaserWriter volcó instantáneamente la industria de la impresión, y la nueva exitosa "publicación de escritorio" fortaleció a PostScript para su lugar en la historia. El principal competidor de Hewlett-Packard finalmente también compró una licencia PostScript para su serie rival de impresoras LaserJet. Esto sucedió en 1991 después de la presión de los consumidores.
PostScript pasó lentamente de un lenguaje de control de impresora a un formato de archivo. Los programadores inteligentes aprendieron cómo se envían los comandos PostScript a la impresora y comenzaron a crear documentos PostScript manualmente agregando cuadros, gráficos y dibujos a sus documentos, mientras que PostScript se usaba para mostrar gráficos. ¡Hay una demanda de gráficos fuera de la impresora! Adobe se dio cuenta de esto y lanzó rápidamente el formato
PostScript encapsulado , que no era más que unos pocos comentarios PostScript especialmente formateados con metadatos sobre el tamaño de la imagen y restricciones en el uso de comandos de impresora, como "alimentación de página". En el mismo 1985, Adobe comenzó a desarrollar Illustrator, una aplicación donde los artistas trabajaban en formato PostScript encapsulado en una interfaz de usuario conveniente. Luego, estos archivos podrían transferirse a un procesador de texto que creó ... documentos PostScript para enviar a impresoras PostScript. El mundo entero ha cambiado a PostScript, y Adobe no podría estar más feliz. Cuando Microsoft estaba trabajando en Windows 1.0 y quería crear su propia API gráfica para desarrolladores, el objetivo principal era hacerlo compatible con las impresoras existentes para que los gráficos enviados a las impresoras fueran tan fáciles como una pantalla. Esta API finalmente se lanzó como
GDI , el componente principal utilizado por todos los ingenieros durante la creciente popularidad de Windows en la década de 1990. Generaciones de programadores de Windows han comenzado a identificar, sin saberlo, gráficos vectoriales 2D con el modelo de imagen PostScript, asegurándolo con este estado de facto.
El único problema importante con PostScript fue su integridad completa: ver la página 86 de un documento significa ejecutar primero el script para las páginas 1-85. Y puede ser lento. Adobe se enteró de esta queja por parte de los usuarios y decidió crear un nuevo formato de documento que no tenía tales restricciones, se llamaba "Formato de documento portátil" o, para abreviar, "PDF". El lenguaje de programación se eliminó, pero la tecnología gráfica siguió siendo la misma. Cita de
las especificaciones PDF, capítulo 2.1, "Modelo de imagen" :
PDF se basa en su capacidad para describir la apariencia de gráficos y tipografía complejos. Esta característica se logra mediante el uso del modelo de imagen de Adobe, la misma presentación de alto nivel e independiente del dispositivo utilizada en el lenguaje de descripción de página PostScript.
Cuando el consorcio W3C consideró a los solicitantes del lenguaje de marcado de gráficos 2D en Internet, Adobe defendió
PGML basado en
XML , que se basaba en el modelo de gráficos PostScript:
PGML debe incluir un modelo de imagen PDF / PostScript para garantizar gráficos 2D escalables que satisfagan las necesidades tanto de los usuarios generales como de los profesionales gráficos.
El formato
VML de la competencia de Microsoft se basó en GDI, que sabemos que se basa en PostScript. Las dos propuestas en competencia, que todavía eran esencialmente PostScript, se fusionaron para que el W3C adoptara el estándar de "gráficos vectoriales escalables" (SVG) que conocemos y amamos hoy.
Incluso si es viejo, no pretendamos que las innovaciones PostScript traídas a este mundo son menos que un milagro tecnológico. La impresora PostScript LaserWriter de Apple era dos veces más potente que la Macintosh que la controlaba, solo para interpretar PostScript y rasterizar rutas de vectores a puntos en papel. Esto puede parecer excesivo, pero si ya compró una impresora de moda con un
láser en su interior, no debería sorprenderse con un procesador costoso. En su primera encarnación, PostScript inventó un modelo de visualización bastante sofisticado con todas las características que damos por sentado hoy. ¿Cuál es la característica más poderosa e impresionante? Fuentes En ese momento, las fuentes se dibujaban a mano con una regla y un transportador y se proyectaban en una película para la
impresión fotoquímica . En 1977, Donald Knut mostró al mundo de lo que era capaz su sistema
METAFONT , que introdujo con el editor de texto TeX, pero no echó raíces. Se requería que el usuario tuviera una descripción matemática de las fuentes usando pinceles y curvas. La mayoría de los desarrolladores de fuentes no querían aprender esto. Y las curvas extrañas con tamaños pequeños se convirtieron en un desastre: las impresoras de esa época no tenían la resolución suficiente, por lo que las letras se confundieron y se fusionaron entre sí. PostScript ha propuesto una nueva solución: un algoritmo para "vincular" esquemas a cuadrículas más gruesas utilizadas por las impresoras. Esto se conoce como ajuste de rejilla. Para evitar demasiada distorsión de la geometría, permitieron que las fuentes establecieran "pistas" sobre qué partes de la geometría son más importantes y qué se debe preservar.
El modelo de negocio original de Adobe era vender esta tecnología de fuentes a los desarrolladores de impresoras y vender a los editores fuentes recreadas especiales con sugerencias adicionales, por lo que Adobe todavía vende sus versiones de
Times y
Futura . Por cierto, esto es posible porque las fuentes, o más formalmente, "auriculares", son una de las
cinco cosas que están explícitamente excluidas de la ley de derechos de autor de los Estados Unidos , ya que originalmente fueron designadas como "demasiado simples o utilitarias para ser un trabajo creativo". En cambio, un
programa digital que reproduce la fuente en la pantalla tiene derechos de autor. Para que las personas no pudieran copiar las fuentes de Adobe y agregar las suyas, el formato de
fuente Tipo 1 fue originalmente propiedad de Adobe y contenía el código para el "cifrado de fuentes". Solo el PostScript de Adobe podía interpretar las fuentes Tipo 1, y solo implementaron una tecnología de sugerencias patentada que ofrece nitidez en tamaños pequeños.
El ajuste de malla, por cierto, se hizo tan popular que cuando Microsoft y Apple se cansaron de pagar las tarifas de licencia de Adobe, inventaron un método alternativo para su
formato de fuente
TrueType alternativo. En lugar de especificar "pistas" declarativas, TrueType le da al autor de la fuente un
lenguaje de pila turing completo para que el autor pueda controlar todos los aspectos del ajuste de la cuadrícula (evitando las patentes de Adobe para pistas declarativas). Durante años, se ha desatado una guerra entre Adobe Type 1 y TrueType, y los desarrolladores de fuentes están atrapados en el medio, dando a los usuarios ambos formatos. Al final, la industria ha llegado a un compromiso:
OpenType . Pero en lugar de determinar de manera realista al ganador, simplemente dejaron caer ambas especificaciones en un formato de archivo. Adobe ahora ganó dinero no vendiendo fuentes Tipo 1, sino de Photoshop e Illustrator, por lo que eliminó la parte de cifrado, refinó el formato e introdujo las fuentes
CFF / Tipo 2, que se incluyeron en OpenType como
una tabla cff . TrueType, por otro lado, se insertó como
glifo y otras tablas. Aunque algo feo, OpenType parecía hacer el trabajo para los usuarios, sobre todo hambrientos: solo requiere que todo el software admita ambos tipos de fuentes, porque OpenType requiere que admita ambos tipos de fuentes.
Por supuesto, nos vemos obligados a preguntar: si no es PostScript, ¿qué hay en su lugar? Otras opciones que vale la pena considerar. El METAFONT mencionado anteriormente no utilizaba rutas de esquema estrictamente definidas (rutas rellenas). En cambio, Knut, de una manera típica, en su artículo
"Tipografía matemática" propuso un concepto matemático para la tipografía, que es "más agradable". Usted especifica varios puntos, y algunos algoritmos encuentran a través de ellos la curva "más agradable" correcta. Puede superponer estos contornos uno encima del otro: defina uno de ellos como una "pluma" y luego "arrastre una pluma" a través de otra línea. Knut, en el fondo, un informático, incluso introdujo la recursividad. Su alumno John Hobby ha desarrollado e implementado algoritmos para
calcular la "curva más agradable" ,
superponiendo rutas anidadas y rasterizando tales curvas . Para obtener información adicional sobre METAFONT, las curvas y la historia de la tipografía en general,
recomiendo encarecidamente el libro
Fonts and Encodings , así como los
artículos de John Hobby .
Afortunadamente, el renovado interés en la investigación de gráficos 2D significó que las estrías de Knut y Hobby no se olvidaron por completo. Aunque definitivamente son abstrusos y poco convencionales, recientemente se dirigieron a
Apple iWork Suite , y son el tipo de spline predeterminado allí.
Despegar triángulos
Sin ir demasiado lejos en la jungla matemática, en un nivel alto, llamamos enfoques
implícitos como curvas de Bezier y splines Hobby
curvas implícitas , porque se indican como una función matemática que genera una curva. Se ven bien en cualquier resolución, lo cual es ideal para imágenes 2D diseñadas para escalar.
Los gráficos 2D soportaron el impulso alrededor de estas curvas implícitas, que son casi obligatorias al modelar glifos. El hardware y el software para calcular estas rutas en tiempo real era costoso, pero la industria de la impresión de gráficos vectoriales recibió un gran impulso, y la mayoría del resto del equipo industrial existente ya era mucho más costoso que una impresora láser con un procesador elegante.
Sin embargo, los gráficos 3D tomaron una ruta completamente diferente. Desde el principio, un enfoque casi universal fue el uso de polígonos (polígonos), que a menudo se
etiquetaban manualmente y se
ingresaban manualmente en la computadora . Sin embargo, este enfoque no era universal. El equivalente 3D de una curva implícita es una
superficie implícita compuesta de primitivas geométricas básicas como esferas, cilindros y cubos. Una esfera ideal con resolución infinita puede representarse mediante una ecuación simple, por lo que
al comienzo del desarrollo del 3D para la geometría, era claramente preferible a los polígonos . Una de las pocas compañías que diseñó gráficos con superficies implícitas fue
MAGI . En combinación con el uso artístico inteligente de las texturas de procedimiento, ganaron un contrato de diseño de bicicletas ligeras de Disney para la película Tron de 1982. Desafortunadamente, este enfoque rápidamente quedó en nada. Gracias a la aceleración de la CPU y al estudio de problemas como "eliminar la superficie oculta", la cantidad de triángulos que se podían mostrar en la escena estaba creciendo rápidamente, y para las formas complejas era mucho más fácil para los artistas pensar en polígonos y vértices en los que se podía hacer clic y arrastrarlos, en lugar de use combinaciones de cubos y cilindros.
Esto no significa que no se utilizaron superficies implícitas en
el proceso de modelado. Técnicas como
el algoritmo Catmell-Clark se convirtieron en un estándar de la industria generalmente aceptado a principios de los años 80, permitiendo a los artistas crear formas geométricas simples, suaves y orgánicas. Aunque hasta principios de la década de 2000, el algoritmo Catell - Clark ni siquiera se definió como una "superficie implícita" que se puede calcular utilizando la ecuación. Luego se consideró como un algoritmo iterativo: una forma de dividir polígonos en aún más polígonos.
Los triángulos invadieron el mundo, seguidos de herramientas para crear contenido 3D. Los nuevos desarrolladores y diseñadores de videojuegos y efectos especiales en películas fueron capacitados exclusivamente en programas de modelado con mallas poligonales, como Maya, 3DS Max y Softimage. Cuando aparecieron los "aceleradores de gráficos 3D" (GPU) en la escena a finales de los 80, se desarrollaron específicamente para acelerar el contenido existente: triángulos. Aunque los primeros proyectos de GPU, como el
NVIDIA NV1 , tenían un soporte de hardware limitado para las curvas, era defectuoso y se eliminó rápidamente de la línea de productos.
Esta cultura se extiende principalmente a lo que vemos hoy. El modelo dominante de imagen 2D PostScript comenzó con un producto que podía mostrar curvas en "tiempo real". Al mismo tiempo, la industria 3D ignoró las curvas con las que era difícil trabajar, y en su lugar confió en soluciones independientes para convertir previamente las curvas en triángulos.
Se devuelven superficies implícitas.
Pero, ¿por qué podrían calcularse las curvas 2D implícitas en tiempo real en una impresora en los años 80, y las mismas curvas 3D implícitas todavía tienen muchos errores a principios de la década de 2000? Bueno, el algoritmo de Catell-Clark es mucho más complicado que la curva de Bezier. Las curvas de Bezier en 3D se conocen como B-splines, y son bien computables, pero existe el inconveniente de que limitan la forma en que se conecta la cuadrícula. Las superficies como Catmell-Clark y NURBS permiten que las redes conectadas arbitrariamente amplíen las capacidades de los artistas, pero esto puede conducir a polinomios de más de cuarto grado, que,
por regla general, no tienen solución analítica . En cambio, obtienes aproximaciones basadas en la separación de polígonos, como se hace en
OpenSubdiv de Pixar. Si alguien encuentra una solución analítica para encontrar las raíces de Catmell: Clark o NURBS, Autodesk le pagará mucho. En comparación con ellos, los triángulos parecen mucho más agradables: solo calcula
tres ecuaciones lineales en un plano , y tienes una respuesta fácil.
... Pero, ¿y si no necesitamos una solución exacta? Esta es exactamente la pregunta que hizo el diseñador gráfico
Iñigo Quilles cuando realizó una investigación sobre superficies implícitas. Solución? Campos de distancia firmados (SDF) En lugar de dar el punto exacto de intersección con la superficie, dicen qué tan lejos estás de ella. Similar a la diferencia entre la integral calculada analíticamente y la integral de Euler, si tiene una distancia al objeto más cercano, puede "marchar" alrededor de la escena, preguntando en cualquier punto dado qué tan lejos está y pasando esta distancia. Tales superficies han dado una nueva vida a la industria a través del demoscene y comunidades como Shadertoy. El truco de la antigua técnica de modelado MAGI nos trae hallazgos increíbles, como Killes '
Surfer Boy , calculado con una precisión infinita como una superficie implícita. No necesita buscar las raíces algebraicas de Surfer Boy, solo siente cómo va la escena.
Por supuesto, el problema es que
solo un genio como Killes puede crear un Surfer Boy. Todavía no hay herramientas para la geometría SDF, todo el código se escribe manualmente. Sin embargo, dado el emocionante renacimiento de las superficies implícitas y las formas naturales de las curvas, ahora hay mucho interés en esta técnica. MediaMolecule
Dreams en PS4 es un kit de creación de contenido basado en una combinación de superficies implícitas. En el
proceso, la mayoría de los gráficos tradicionales se destruyen y se recrean . Este es un enfoque prometedor, y las herramientas son intuitivas e interesantes.
Oculus Medium y
unbound.io también
han realizado una buena investigación sobre este tema. Esta es definitivamente una visión prometedora de cómo podría ser el futuro de los gráficos 3D y las herramientas de próxima generación.
Pero algunos de estos enfoques son menos adecuados para 2D de lo que piensas. En general, las escenas de juegos en 3D, por regla general, materiales y texturas avanzadas, pero pocos cálculos de geometría, como señalan de inmediato muchos críticos y
vendedores de productos cuestionables . Esto significa que necesitamos menos suavizado, porque las siluetas no son tan importantes. Enfoques como 4x MSAA pueden ser adecuados para muchos juegos, pero para fuentes pequeñas con colores sólidos, en lugar de
16 ubicaciones de muestra fijas, calcule el
área exacta debajo de la curva para cada píxel, lo que le dará la resolución que desee.
Girar la pantalla en un juego 3D produce efectos similares a la
supresión sacádica , a medida que el cerebro se reconfigura a un nuevo aspecto. En muchos juegos, esto ayuda a ocultar artefactos en los efectos de procesamiento posterior, como
el suavizado temporal , en el que Dreams y unbound.io dependen en gran medida para obtener un buen rendimiento de la escena. Por el contrario, en una escena 2D típica, no tenemos esta perspectiva de lujo, por lo que intentar usarla hará que los glifos y las formas hiervan y tiemblen con estos artefactos en su totalidad. 2D se ve diferente y las expectativas son más altas. Al hacer zoom, paneo y desplazamiento, la estabilidad es importante.
Ninguno de estos efectos se puede implementar en la GPU, pero muestran una desviación radical del contenido "3D", con diferentes prioridades. En última instancia, la representación de gráficos 2D es complicada porque se trata de formas: letras y símbolos exactos, en lugar de materiales e iluminación, que en su mayoría son sólidos. Como resultado de la evolución, los aceleradores gráficos decidieron no calcular la geometría implícita en tiempo real, como las curvas, sino que se centraron en todo lo que sucede dentro de estas curvas. Quizás si PostScript no hubiera ganado, habríamos tenido un modelo de imagen 2D sin curvas Bezier como requisito principal para el tiempo real.
Quizás en un mundo así, en lugar de triángulos, se utilizarían las mejores representaciones geométricas, herramientas de creación de contenido centradas en splines 3D y GPU compatibles con curvas en tiempo real a nivel de hardware. Al final, siempre es divertido soñar.