stringtranslate.com

Algoritmo del pintor

Un paisaje fractal que se representa utilizando el algoritmo del pintor en un Amiga

El algoritmo del pintor (también algoritmo de ordenación de profundidad y algoritmo de relleno de prioridad ) es un algoritmo para la determinación de superficies visibles en gráficos de computadora 3D que funciona sobre una base de polígono por polígono en lugar de píxel por píxel , fila por fila o área por área como otros algoritmos de eliminación de superficies ocultas . [1] [2] [3] El algoritmo del pintor crea imágenes ordenando los polígonos dentro de la imagen por su profundidad y colocando cada polígono en orden desde el objeto más lejano al más cercano. [4] [5]

El algoritmo del pintor fue propuesto inicialmente como un método básico para abordar el problema de determinación de superficies ocultas por Martin Newell , Richard Newell y Tom Sancha en 1972, mientras los tres trabajaban en CADCentre . [4] El nombre "algoritmo del pintor" se refiere a la técnica empleada por muchos pintores donde comienzan pintando partes distantes de una escena antes de las partes que están más cerca, cubriendo así algunas áreas de partes distantes. [6] [7] De manera similar, el algoritmo del pintor ordena todos los polígonos en una escena por su profundidad y luego los pinta en este orden, del más lejano al más cercano. [8] Pintará sobre las partes que normalmente no son visibles, resolviendo así el problema de visibilidad, a costa de haber pintado áreas invisibles de objetos distantes. [9] El ordenamiento utilizado por el algoritmo se denomina " orden de profundidad" y no tiene por qué respetar las distancias numéricas a las partes de la escena: la propiedad esencial de este ordenamiento es, más bien, que si un objeto oscurece parte de otro, entonces el primer objeto se pinta después del objeto que oscurece. [9] Por tanto, un ordenamiento válido puede describirse como un ordenamiento topológico de un gráfico acíclico dirigido que representa oclusiones entre objetos. [10]

Primero se pintan las montañas distantes, luego las praderas más cercanas y, por último, se pintan los árboles. Aunque algunos árboles están más alejados del punto de vista que algunas partes de las praderas, el orden (montañas, praderas, árboles) forma un orden de profundidad válido, porque ningún objeto en el orden oscurece ninguna parte de un objeto posterior.

Algoritmo

Conceptualmente el algoritmo de Painter funciona de la siguiente manera:

  1. Ordena cada polígono por profundidad
  2. Coloca cada polígono desde el polígono más lejano hasta el polígono más cercano

Pseudocódigo

Ordena  los polígonos por profundidad para cada  polígono  p : para cada  píxel que p cubre: pinta  p.color en el píxel

Complejidad temporal

La complejidad temporal del algoritmo del pintor depende del algoritmo de ordenamiento utilizado para ordenar los polígonos. Suponiendo un algoritmo de ordenamiento óptimo, el algoritmo del pintor tiene una complejidad en el peor de los casos de O ( n log n + m*n ), donde n es el número de polígonos y m es el número de píxeles que se deben rellenar.

Complejidad espacial

La complejidad espacial del peor caso del algoritmo del pintor es O ( n+m ), donde n es el número de polígonos y m es el número de píxeles a rellenar.

Ventajas

Hay dos requisitos técnicos principales que favorecen el uso del algoritmo del pintor.

Estructura gráfica básica

El algoritmo del pintor no tiene una estructura tan compleja como sus contrapartes de algoritmos de ordenamiento de profundidad. [9] [11] Los componentes como el orden de renderizado basado en la profundidad, tal como lo emplea el algoritmo del pintor, son una de las formas más simples de designar el orden de producción gráfica. [8] Esta simplicidad lo hace útil en escenarios básicos de salida de gráficos de computadora donde será necesario realizar un renderizado poco sofisticado con pocas dificultades. [9]

Eficiencia de la memoria

A principios de los años 70, cuando se desarrolló el algoritmo del pintor, la memoria física era relativamente pequeña. [12] Esto requería que los programas gestionaran la memoria de la manera más eficiente posible para llevar a cabo tareas grandes sin colapsar. El algoritmo del pintor prioriza el uso eficiente de la memoria, pero a expensas de una mayor capacidad de procesamiento, ya que se deben renderizar todas las partes de todas las imágenes. [9]

Limitaciones

Los polígonos superpuestos pueden provocar que el algoritmo falle

El algoritmo puede fallar en algunos casos, incluida la superposición cíclica o la perforación de polígonos.

Superposición cíclica

En el caso de superposición cíclica, como se muestra en la figura de la derecha, los polígonos A, B y C se superponen entre sí de tal manera que es imposible determinar cuál polígono está por encima de los demás. En este caso, los polígonos infractores deben cortarse para permitir la clasificación. [4]

Polígonos perforantes

El caso de polígonos perforados surge cuando un polígono interseca a otro. De manera similar a la superposición cíclica, este problema se puede resolver cortando los polígonos que intersectan. [4]

Eficiencia

En las implementaciones básicas, el algoritmo del pintor puede resultar ineficiente. Obliga al sistema a representar cada punto de cada polígono del conjunto visible, incluso si ese polígono está oculto en la escena final. Esto significa que, en el caso de escenas detalladas, el algoritmo del pintor puede sobrecargar el hardware de la computadora.

Variantes

Algoritmo extendido del pintor

El algoritmo de Newell , propuesto como el algoritmo extendido del algoritmo de Painter, proporciona un método para cortar polígonos cíclicos y perforantes. [4]

Algoritmo del pintor inverso

Otra variante del algoritmo del pintor incluye el algoritmo del pintor inverso . El algoritmo del pintor inverso pinta primero los objetos más cercanos al espectador, con la regla de que la pintura nunca debe aplicarse a partes de la imagen que ya están pintadas (a menos que sean parcialmente transparentes). En un sistema gráfico de computadora, esto puede ser muy eficiente ya que no es necesario calcular los colores (usando iluminación, texturas y demás) para partes de una escena distante que están ocultas por objetos cercanos. Sin embargo, el algoritmo inverso sufre muchos de los mismos problemas que la versión estándar.

Otros algoritmos de gráficos por computadora

Los defectos del algoritmo del pintor llevaron al desarrollo de técnicas de búfer Z , que pueden verse como un desarrollo del algoritmo del pintor al resolver conflictos de profundidad píxel por píxel, reduciendo la necesidad de un orden de renderizado basado en la profundidad. [13] Incluso en tales sistemas, a veces se emplea una variante del algoritmo del pintor. Como las implementaciones del búfer Z generalmente se basan en registros de búfer de profundidad de precisión fija implementados en hardware, existe margen para problemas de visibilidad debido al error de redondeo. Estos son superposiciones o espacios en las uniones entre polígonos. Para evitar esto, algunos motores gráficos implementan "sobrerenderizado", [ cita requerida ] dibujando los bordes afectados de ambos polígonos en el orden dado por el algoritmo del pintor. Esto significa que algunos píxeles en realidad se dibujan dos veces (como en el algoritmo completo del pintor), pero esto sucede solo en pequeñas partes de la imagen y tiene un efecto insignificante en el rendimiento.

Referencias

  1. ^ Appel, Arthur (1968). Morrel, AJH (ed.). "Sobre el cálculo de la ilusión de realidad" (PDF) . Procesamiento de la información, Actas del Congreso IFIP de 1968, Edimburgo, Reino Unido, 5-10 de agosto de 1968, Volumen 2 - Hardware, Aplicaciones : 945–950. Archivado (PDF) desde el original el 20 de julio de 2008.
  2. ^ Romney, Gordon Wilson (1 de septiembre de 1969). «Ensamblaje y renderización de sólidos asistidos por ordenador». Archivado desde el original el 2 de noviembre de 2020. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  3. ^ Gary Scott Watkins. 1970. "Un algoritmo de superficie visible en tiempo real. Tesis doctoral". Universidad de Utah. Número de pedido: AAI7023061.
  4. ^ abcde Newell, ME; Newell, RG; Sancha, TL (1972-08-01). "Una solución al problema de la superficie oculta" (PDF) . Actas de la conferencia anual de la ACM sobre - ACM'72 . ACM '72. Vol. 1. Boston, Massachusetts, EE. UU.: Association for Computing Machinery. págs. 443–450. doi :10.1145/800193.569954. ISBN 978-1-4503-7491-0. S2CID  13829930. Archivado (PDF) del original el 22 de septiembre de 2020.
  5. ^ Bouknight, W. Jack (1970-09-01). "Un procedimiento para la generación de presentaciones de gráficos de computadora tridimensionales en semitonos". Comunicaciones de la ACM . 13 (9): 527–536. doi : 10.1145/362736.362739 . ISSN  0001-0782. S2CID  15941472.
  6. ^ Berland, Dinah (1995). Técnicas de pintura histórica, materiales y prácticas de estudio (PDF) . Instituto Getty de Conservación.
  7. ^ Wylie, Chris; Romney, Gordon; Evans, David; Erdahl, Alan (14 de noviembre de 1967). "Dibujos en perspectiva de semitonos por computadora". Actas de la conferencia conjunta de computadoras de otoño del 14 al 16 de noviembre de 1967 sobre - AFIPS '67 (otoño) . Anaheim, California: Association for Computing Machinery. págs. 49–58. doi :10.1145/1465611.1465619. ISBN 978-1-4503-7896-3. Número de identificación del sujeto  3282975.
  8. ^ ab Desai, Apurva (2008). Gráficos por computadora. PHI Aprendizaje Pvt. Limitado. ISBN limitado 9788120335240.
  9. ^ abcde de Berg, Mark (2008). Geometría computacional (PDF) . Springer. Archivado (PDF) desde el original el 3 de agosto de 2016.
  10. ^ de Berg, Mark (1993). Ray Shooting, Depth Orders and Hidden Surface Removal. Apuntes de clase sobre informática. Vol. 703. Springer. pág. 130. ISBN 9783540570202..
  11. ^ Warnock, John E. (1 de junio de 1969). "Un algoritmo de superficie oculta para imágenes de semitonos generadas por computadora". Archivado desde el original el 8 de noviembre de 2020. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  12. ^ Freiser, M.; Marcus, P. (junio de 1969). "Un estudio de algunas limitaciones físicas de los elementos informáticos". IEEE Transactions on Magnetics . 5 (2): 82–90. Bibcode :1969ITM.....5...82F. doi :10.1109/TMAG.1969.1066403. ISSN  1941-0069.
  13. ^ Nyberg, Daniel (2011). Análisis de dos algoritmos comunes de eliminación de superficies ocultas: el algoritmo de Painter y el almacenamiento en búfer Z.

Enlaces externos