Loading

The Alison August SALE! 🎉 25% Off PDF Certs & Diplomas!📜 Ends in : : :

Claim Your Discount!

Module 1: Representación de objetos y transformaciones de modelado

Study Reminders
Support
Text Version

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Hola y bienvenidos a la conferencia número 9 en el curso Gráficos Informáticos. Estamos discutiendo las etapas de la tubería gráfica. Como usted puede recordar, hay 5 etapas amplias, la primera etapa es la representación del objeto, y actualmente estamos discutiendo sobre la técnica de la representación del objeto.
Por lo tanto, ese será el tema de nuestra discusión de hoy, los métodos de particionamiento del espacio.
Ahora, cuando hablamos de la partición del espacio, ¿a qué nos referimos? Como su nombre indica, el particionamiento del espacio se refiere a la representación de un objeto en términos del espacio 3D que ocupa. El espacio se define por sus límites y representamos el espacio o el volumen que está encerrado por los límites en lugar de los límites, que hemos visto en las conferencias anteriores.
Ahora, hay un concepto importante en las técnicas de particionamiento del espacio, esto se llama voxels. Usted ha oído hablar de pixels, hemos mencionado este término antes. Esta es la unidad de pantalla más pequeña. Y en una pantalla de visualización, suponemos que hay una cuadrícula de píxeles. Del mismo modo, voxel es básicamente la contraparte 3D del concepto de pixel. Voxel es la unidad de representación más pequeña en un espacio 3D. Se puede suponer que cualquier espacio 3D tiene una cuadrícula de voxel.
Al igual que una cuadrícula de píxeles, podemos crear o asumir que existe una cuadrícula de voxel para representar un espacio 3D. Así, pixel grid es para espacio 2D, voxel grid es para espacio 3D. Y voxel, como tal vez obvio, es la forma más sencilla de representar objetos 3D.
Ahora, cuando hablamos de voxels, nos referimos esencialmente a cubos de tamaño típicamente uniformes o paralelepípedos. Así, esencialmente, una rejilla de cubos de tamaño uniforme o paralelepípedos que son nuestra rejilla de voxel. Ahora, en cada cuadrícula, cada elemento voxel de la cuadrícula suele llevar varias informaciones. ¿Cuáles son esas informaciones? La intensidad en esa región 3D en particular, la temperatura de esa región y así sucesivamente. Y esta información realmente ayuda en la descripción exclusiva de la escena 3D. Por lo tanto, esencialmente los voxels están teniendo atributos que son información característica para el objeto en particular en la escena.
Usando voxels, podemos aplicar varias técnicas para representar objetos. Una de estas técnicas es el método Octree. ¿Qué es este método? Como el nombre indica, es una especie de representación de árboles, ahora vamos a tratar de entender lo que es este árbol. Por lo tanto, esencialmente se refiere a un método para crear una rejilla de voxel, pero en la forma de un árbol.
Por lo tanto, en este método, la entrada es una región 3D. Ahora, dividimos este espacio de entrada en 8 subregiones, y luego cada subregión a su vez se divide de nuevo en 8 subregiones. Por lo tanto, esencialmente esto es un paso recursivo y esta recurrencia continúa hasta que llegamos a algún tamaño uniforme preestablecido de las subregiones. Ahora, este tamaño puede ser definido por el usuario, por ejemplo, un cubo de unidad. Por lo tanto, cuando vemos que nuestra división conduce a regiones de tamaño de cubo de unidad, entonces paramos allí, un ejemplo se muestra en esta figura de la mano derecha.
Por lo tanto, esta es nuestra región 3D inicial. Ahora, como pueden ver, hemos creado 8 sub regiones de aquí, esto es 1, 2, 3, 4, 5, 6, 7 y 8, entonces cada una de estas sub regiones se dividen aún más en 8 sub regiones como aquí como se puede ver en esta división, de nuevo hay 8 sub regiones 1, 2, 3, 4, 5, 6, 7, 8. Del mismo modo, también aquí, dividimos y todas las demás subregiones también podemos dividir.
Ahora, ¿cuál es la salida de esta recurrencia? Crea un árbol. Por lo tanto, tenemos un nodo raíz. Para cada nodo raíz, hemos creado 8 nodos hijo de aquí a aquí. Ahora, para cada nodo hijo, de nuevo estamos creando 8 nodos hijo y este proceso continúa. Por lo tanto, esencialmente esto conduce a un árbol. Dado que cada nodo tiene 8 hijos, lo llamamos octree y los nodos de hoja de este árbol representan el espacio 3D. Por lo tanto, todos los nodos intermedios son representaciones intermedias, no representan el objeto final, a nivel de hoja se representa el objeto final. Recuerde aquí que junto con el espacio los atributos o la información característica también se almacena en el nivel de nodo de hoja.
Por lo tanto, para representar diferentes objetos, podemos asociar propiedades únicas a esos nodos de hoja o voxels, las propiedades como el color, la densidad, la temperatura y así sucesivamente, esa es la idea básica. Por lo tanto, se nos da espacio en 3D, el espacio que dividimos en 8 regiones y continuamos esta división, cada subregión se divide más en 8 sub regiones y así sucesivamente. Continuamos esta división de manera recursiva hasta que alcancemos el nivel de voxel o los cubos de tamaño uniforme. Y este proceso crea un árbol; cada nodo de este árbol tiene 8 hijos, por lo que el árbol se denomina octree.
El nivel de hoja contiene los voxels son la representación del objeto 3D y la información característica como el color, la densidad, la temperatura y así sucesivamente están asociados con cada voxel en este árbol para identificar de manera única los objetos. Octree es uno de los diversos métodos donde se utiliza el espacio para representar los objetos. Otro método popular se llama BSP o el método BSP.
Ahora, BSP representa la partición de espacio binario y el método es el método de particionamiento de espacio binario. Entonces, ¿qué hace? En el octree, hemos hecho alguna partición recursiva del espacio. En el árbol BSP, seguimos una recurrencia similar que se nos da un espacio lo dividimos en el subespacio y luego dividimos el subespacio de nuevo y continuamos hasta que se cumpla alguna condición.
Sin embargo, en lugar de dividir un espacio en 8 subespacios como lo hemos hecho en el caso de octree, aquí lo que hacemos lo dividimos en 2 espacios o subespacios en cada paso recursivo. Por lo tanto, en el caso del octreo, estamos dividiendo la región en 8 sub-regiones, en el caso del árbol BSP, estamos dividiendo la región en 2 sub-regiones, es por eso que se llama partición de espacio binario. Ahora bien, ¿cómo dividimos? Usamos aviones. Por lo tanto, se nos da una región que asumimos que los aviones están disponibles para dividir la región en subregiones. Pero estos planos no necesitan ser paralelos a los planos formados por los ejes XY, YZ o ZX. Pueden ser planos de cualquier orientación. Por supuesto, si estamos teniendo paralelos a los planos formados por el eje principal entonces es más fácil de implementar, de lo contrario tenemos que hacer cálculos adicionales.
Veamos un ejemplo. Supongamos que se nos da esta región 3D y vamos a representarla en la forma de un árbol BSP. Entonces, nuestro nodo raíz es todo el objeto, entonces hemos usado un plano este para dividirlo en dos regiones, la región izquierda D y la región derecha C. Izquierda con respecto al plano y derecha con respecto al plano, subregión izquierda y sub región derecha. Entonces hemos usado otro avión aquí para dividir B en dos sub regiones D y E. Entonces, entonces eventualmente lo que obtuvimos? El objeto se representa en términos de tres subregiones D, E y C.
Por lo tanto, estos tres a nivel de hoja representan el objeto. Y de nuevo como en caso de octree, podemos asociar propiedades únicas con cada una de estas subregiones para identificar de forma exclusiva el objeto. Ahora, aquí hemos usado dos planos que son ortogonales entre sí, son planos ortogonales, pero es decir, como ya hemos visto antes, eso no es un requisito estricto. Los planos de cualquier orientación pueden utilizarse para dividir las regiones en dos subregiones.
Así que, aquí en lugar de estos planos ortogonales, podríamos haber utilizado cualquier plano de cualquier orientación para dividirlo en dos regiones, dos subregiones que es la formulación más general para la creación de árboles BSP. Pero, como he dicho, si estamos usando aviones que no son paralelos a los planos formados por el eje principal, entonces pueden ser necesarios cálculos adicionales para procesar la representación. Veamos un ejemplo más para la creación de árboles BSP, cómo podemos crear, cómo podemos escribir un algoritmo para la creación de una representación.
Considere esta figura, aquí queremos representar este círculo, esto es por supuesto una figura bidimensional, no es un objeto 3D, pero este objeto 2D queremos representar este círculo que es tener el centro en Pm y radio r. Por lo tanto, queremos representarlo utilizando el árbol BSP.
¿Cómo podemos hacer eso? Así que toma como entrada la región circundante R que es el cuadrado representado por los cuatro vértices o los puntos de esquina P 1, P 2, P 3 y P 4 y el círculo está dentro de esta región. Por lo tanto, cuando estamos representando el círculo, estamos representando esencialmente esta región con algunas regiones que son parte del círculo que tiene características únicas del círculo. ¿Cómo podemos hacer eso?
Por lo tanto, particionaremos la región en 4 subregiones. Por lo tanto, primero dividimos en 2 subregiones, después cada una de estas dos subregiones nos dividimos en otras 2 subregiones y así sucesivamente. Por lo tanto, sólo por simplicidad estamos combinando estos pasos aquí y afirmando que lo estamos dividiendo en 4 subregiones. Y aquí estamos usando líneas paralelas a los ejes.
Usando esa idea, ¿qué podemos hacer? Podemos escribir un algoritmo para una función crear a BSP donde R es la región de entrada. Ahora, utilizaremos R para crear un nodo, luego de R creará 4 regiones uniendo los puntos medios de los lados del cuadrado, esto es lo mismo que aplicar las técnicas de particionado espaciado binario en varios pasos. Al igual que en este caso, primero creamos 2, luego para cada uno de estos dos crear dos más y en realidad estamos combinando estos pasos aquí en esta línea.
Ahora, para cada una de estas subregiones aquí en este nodo de hoja de esta figura, si el tamaño de esta subregión, suponga que esta región se divide en 4 subregiones, por lo que estamos considerando esto. Ahora, si el tamaño de la subregión es una unidad cuadrada, donde estamos asumiendo que un píxel se representa como una unidad cuadrada. Entonces vamos al siguiente paso que es si la distancia entre los centros de la región original R y la subregión que estamos considerando actualmente es menor o igual al radio del círculo, entonces esta sub región es parte del círculo.
Por lo tanto, lo agregamos como un nodo de hoja al árbol BSP y lo marcamos como 'dentro'. De lo contrario, lo marcamos como 'fuera', aunque lo añadimos como parte del árbol BSP. Ahora, si el tamaño no es la unidad cuadrada, es decir, no hemos alcanzado la condición de terminación de la recurrencia. Por lo tanto, para cada nodo realizamos la función de nuevo, es decir, llamamos a la función nuevamente mencionada en estos 2 pasos. Por lo tanto, al final de la misma obtenemos un árbol, donde los nodos de hoja representan la región de base, la región original dividida en subregiones.
Ahora, algunas de estas subregiones están marcadas como dentro de este objeto en particular, dentro de la plaza. Mientras que, otros están marcados como fuera. Así que, de ese árbol, obtenemos una representación de la plaza. Hasta ahora tan bueno. Ahora, ¿cuál es el problema? ¿Existe algún problema con este enfoque de particionamiento de espacio?
Un problema puede ser muy obvio para usted por ahora, es decir, que se requiere memoria grande para almacenar esta información de la cuadrícula de voxel. Por lo tanto, estamos creando árbol donde los nodos de hoja representan la cuadrícula y si estamos particionando uniformemente, entonces habrá un gran número de voxels y requerimos una cantidad significativa de espacio de memoria para almacenar la información de voxel. El problema viene porque estamos dividiendo el espacio en voxels de tamaño uniforme independientemente de las propiedades del espacio.
Como hemos visto en el ejemplo anterior, la región R es una región grande, dentro de esto, el círculo ocupa un área pequeña, pero estamos dividiendo la región en subregiones de tamaño uniforme y muchas sub regiones pueden estar fuera del círculo. Por lo tanto, si usted quiere representar el círculo, no es necesario representar las regiones que están fuera del círculo que realmente desperdicia algún espacio de memoria. Por lo tanto, si tenemos algún método para evitar estos desperdicios, entonces por supuesto que sería útil.
Entonces, ¿qué queremos? Si una determinada región en el espacio tiene las mismas propiedades en todas partes, entonces lo ideal es que no lo dividamos más. Porque incluso si dividimos lo que consigamos, obtendremos la misma propiedad. En cambio, lo que hacemos, todavía lo dividimos en voxels, aunque cada voxel contiene los mismos atributos, porque la región más amplia o la región más amplia en el espacio tiene la misma propiedad en todas partes.
Por lo tanto, en realidad podemos ahorrar, esto es que hay un error tipográfico aquí, es seguro, podemos ahorrar memoria utilizando esta idea de particionado no uniforme. Por lo tanto, antes estamos hablando de dividir una región en voxels de tamaño uniforme. Ahora, estamos hablando de una partición de espacio no uniforme. ¿Qué es eso? Es decir, en lugar de usar muchos voxels para representar una región homogénea que es una región donde la propiedad es la misma en todas partes utilizamos una sola unidad. Por lo tanto, no dividimos más esa región, en cambio toda la región está representada como una sola unidad.
¿Cómo podemos hacer eso? Una forma es modificar el método octree. Ahora, antes teníamos 8 niños fijos para cada nodo porque dividíamos la región en 8 subregiones independientemente de la propiedad de la región. Ahora, ¿qué podemos hacer? O dividimos o no dividimos. Por lo tanto, si una subregión tiene la misma propiedad en todas partes, entonces no lo dividimos. Por lo tanto, ese nodo no tendrá hijos ni 0 hijos. Pero si no es así, entonces lo dividimos en 8 subregiones u 8 niños.
Así que ahora, en el método de octree revisado, lo que tendremos 0 u 8 niños para cada nodo, que no fue el caso antes. Así, antes estábamos consiguiendo 8 hijos por cada nodo, nodo intermedio, ahora obtendremos 0 u 8 hijos por cada nodo intermedio dependiendo de la propiedad de ese espacio representado por el nodo.
El procedimiento de recursión, por supuesto, permanecerá, el procedimiento de recurrencia seguirá siendo el mismo. Pero en cada paso de la recurrencia, comprobaremos si los atributos de un espacio son iguales en todas partes. Si ese es el caso, entonces no lo dividimos más. Por lo tanto, no vamos a volver a la división recursiva para esa región en particular.
La representación de BSP también sufre del mismo problema si vamos por una partición uniforme.
Y para evitar eso, podemos ir por un método revisado o un método refinado en el que podemos dividir la región en dos subregiones si las subregiones están teniendo diferentes propiedades en diferentes lugares o no dividimos. Por lo tanto, los nodos intermedios tendrán 0 o 2 hijos similares al método de octree revisado. Entonces, lo que hemos aprendido es que la unidad básica de representación será voxel. Ahora, usando voxel podemos dividir un espacio 3D dado para representar el objeto contenido en ese espacio de dos maneras, una es una división uniforme.
Ahora, cuando vamos a una división uniforme, obtendremos un tipo de árbol en particular si estamos siguiendo el método de octree o un tipo de árbol en particular si estamos siguiendo el método BSP. En el método del octreo, si vamos por una división uniforme, entonces tendremos 8 hijos por cada nodo. En el método BSP, obtendremos dos hijos para cada nodo. Ahora, si la región que estamos dividiendo está teniendo el mismo atributo o las mismas propiedades en todas partes, entonces será un desperdicio de memoria dividir esa región en subregiones y almacenar la información.
En cambio, no necesitamos dividirlo más. Por lo tanto, en el caso del método octree, lo modificamos para el particionamiento no uniforme imponiendo el hecho de que un nodo puede tener 0 u 8 hijos. Del mismo modo, en un método BSP revisado, podemos modificar imponiendo el hecho de que cada nodo intermedio puede tener 0 o 2 hijos.
Hay otro método de particionamiento de espacio conocido como CSG. ¿Qué significa?
Representa una geometría sólida constructiva. Por lo tanto, este es otro método para la representación de espacio de objetos. Ahora, en caso de octreo o BSP lo que hemos visto? Hemos visto que estas representaciones se basan en la división del espacio. Entonces, se nos da un espacio y lo estamos dividiendo en subespacios. ¿En comparación con eso, en caso de CSG lo que tenemos? En realidad se basa en unir espacios, justo lo contrario de lo que hacemos en métodos BSP u octree. Por lo tanto, en el caso de CSG confiamos en la unión de espacios para representar objetos. Intentemos entender esto con respecto a un ejemplo.
Considere este objeto, este aspecto es bastante complejo. Sin embargo, cuando estamos utilizando CSG o método de geometría sólida constructiva, podemos representarlo como una unión de algunas otras formas. Así que, empezamos aquí a este nivel, aquí tenemos esta forma, esta forma, esta forma y esta forma, así que 4 formas están ahí. Ahora, combinamos estas 2 formas para conseguir una forma y combinamos estas 2 formas aquí para conseguir esta forma. Ahora, estas 2 formas se combinan además para obtener esta forma general.
Así que, aquí empezamos con el conjunto de formas primitivas o formas básicas, entonces aplicamos un conjunto de operadores booleanos, a saber, unión, intersección, diferencia, etc. que se definen sobre este conjunto de formas primitivas para obtener nuevas formas. Al igual que aquí en estas 2 formas, aplicamos un operador booleano para obtener una nueva forma y este proceso continúa hasta obtener la forma deseada aquí. Por lo tanto, los operadores pueden ser aplicados jerárquicamente. Así que, desde este nivel llegamos hasta este nivel, desde este nivel llegamos hasta este nivel, en cada nivel aplicamos los operadores booleanos.
Así que es una aplicación jerárquica de los operadores. Así, en otras palabras, tenemos un conjunto de formas primitivas definidas y un conjunto de operadores booleanos en esas formas también definidas. Ahora, aplicamos a los operadores en las formas para obtener nuevas formas y aplicamos a los operadores jerárquicamente hasta obtener la forma deseada, hasta que somos capaces de representar la forma deseada. Entonces, ¿cuál es la representación? La representación es esencialmente las formas primitivas y los operadores booleanos aplicados de una manera jerárquica, por lo que esa es la representación.
Así que, eso es en resumen, de lo que se trata esta geometría sólida constructiva. Ahora, resumimos lo que hemos aprendido hasta ahora.
Hoy y en pocas conferencias anteriores hemos aprendido varias técnicas de representación, que es la primera etapa de la tubería. Presentación de límites incluyendo splines, representación de espacio y también tiene una visión general de otras representaciones. Ahora, hay muchas técnicas como hemos visto hasta ahora. Una pregunta es ¿qué técnica utilizar y cuándo? Esa es una pregunta que siempre se enfrenta a un desarrollador de sistemas gráficos. ¿Qué técnica se debe utilizar y en qué situación? ¿Qué guía ese proceso de toma de decisiones?
Ahora, es posible que deseemos tener una representación más realista. Claramente, las técnicas avanzadas serían útiles pero técnicas avanzadas como los sistemas de partículas pueden no ser siempre posibles porque requieren muchos recursos computacionales que pueden no estar disponibles en todos los sistemas gráficos. Por lo tanto, cada técnica viene con un costo y hay un tradeoff, qué técnica utilizar en qué situación.
Ahora, este coste puede ser requisito de cálculo o almacenamiento o ambos y dependiendo del recurso disponible, tenemos que tomar la decisión. Si estamos teniendo un recurso muy inferior entonces no podemos pensar en técnicas avanzadas de modelado, entonces puede que tengamos que perder algo de realismo y tener que conformarnos con unas escenas o imágenes menos realistas.
Por ejemplo, supongamos que queremos representar las costas en una escena. Entonces, ¿qué es lo deseable? Las líneas costeras son típicamente estructuras de auto-repetición y la representación fractal es muy buena para tales formas. Por lo tanto, lo ideal sería utilizar la representación fractal para tener una costa realista exhibida. Pero puede que no sea posible si estamos considerando una plataforma móvil con procesador de almacenamiento limitado y batería porque la representación fractal tiene un costo computacional adicional que puede no ser soportado en dispositivos móviles de gama baja.
Así que, en ese caso, es posible que tengamos que utilizar algún método más sencillo. Por lo tanto, estamos perdiendo aquí algo, el efecto realista, pero ganamos algo que es una aproximación de trabajo. Por lo tanto, tales compensaciones son muy parte del proceso de toma de decisiones, equilibrando esas compensaciones.
Otra consideración tal vez alivia la manipulación. Así que, cuando estamos creando animación, esta consideración es muy útil y se vuelve importante. Ahora, como dijimos cada representación tiene sus propios métodos, algoritmos propios, proceso propio. Las fases posteriores de la interconexión deben procesar estas representaciones para llevar a cabo las operaciones que forman parte de las etapas posteriores. Por lo tanto, eso requiere manipulación de las representaciones.
Ahora, si requiere mucho tiempo para manipular, por ejemplo, girar un objeto, cambiar 10 objetos horizontal o verticalmente, escalar hacia arriba o hacia abajo un objeto o clip, proyectar o realizar mejor en la eliminación de la superficie, etc. estos son parte de otras etapas de la tubería. Vamos a discutir sobre las etapas en detalles más adelante. Ahora, si se requiere mucho tiempo para realizar estas operaciones, para los objetos que están representados de una manera particular, la calidad de la animación puede ser reducida. Por lo tanto, en tales casos, deberíamos buscar tipos más simples.
Por lo tanto, esta es otra consideración que se debe tener en cuenta al elegir un modelo particular de representación que sea facilidad de manipulación. Por lo tanto, si estamos teniendo dispositivos de gama baja, sistemas de gráficos de gama baja, entonces no es recomendable ir para técnicas de representación avanzada que requieren muchas manipulaciones más tarde, sobre todo en el contexto de la animación.
La tercera consideración es la facilidad de adquisición de datos. Por ejemplo, la representación de la lista de vértices para una superficie curvada utilizando una malla requiere que se especifique un gran número de vértices. Ahora, consideramos la representación spline. En ese caso, requerimos menos puntos de control para representar la misma curva. Así que, claramente aquí, representar una curva usando malla implica más esfuerzo para adquirir datos, mientras que representar la misma curva con una spline implica menos esfuerzo para adquirir datos. Por lo tanto, a veces estas facilidad de adquisición de datos puede ser un factor decisivo. Dependiendo del diseñador del sistema gráfico, un método particular puede ser la elección de dónde los datos pueden ser adquiridos fácilmente.
Por lo tanto, hay varias compensaciones que tenemos que equilibrar y tenemos que decidir cuáles son esos recursos de compensación disponibles, la naturaleza de las interacciones, los recursos en términos de plataforma de computación, la naturaleza de la interacción en términos de nuestro nivel de comodidad con el suministro de gran cantidad de datos y también efecto, si queremos un efecto muy realista o estamos buscando alguna aproximación teniendo en cuenta la falta de recursos.
Por lo tanto, dependiendo de estas amplias 3 consideraciones, tenemos que elegir una técnica de modelado particular. Así que, con esto, hemos llegado a un final de nuestra discusión en la primera etapa de la interconexión de gráficos que es la representación de objetos.