La geometría sólida constructiva ( CSG ; anteriormente llamada geometría sólida binaria computacional ) es una técnica utilizada en el modelado de sólidos . La geometría sólida constructiva permite a un modelador crear una superficie u objeto complejo usando operadores booleanos para combinar objetos más simples, [1] potencialmente generando objetos visualmente complejos al combinar algunos primitivos. [2] [3]
En gráficos por computadora en 3D y CAD , CSG se usa a menudo en el modelado de procedimientos . La CSG también se puede realizar en mallas poligonales y puede ser o no procedimental y / o paramétrica.
Contraste CSG con modelado de malla poligonal y modelado de caja .
Funcionamiento
Los objetos sólidos más simples utilizados para la representación se denominan primitivas . Normalmente son los objetos de forma simple: cuboides , cilindros , prismas , pirámides , esferas , conos . [1] El conjunto de primitivas permitidas está limitado por cada paquete de software. Algunos paquetes de software permiten CSG en objetos curvos, mientras que otros paquetes no.
Un objeto se construye a partir de primitivas mediante operaciones permitidas , que suelen ser operaciones booleanas sobre conjuntos : unión , intersección y diferencia , así como transformaciones geométricas de esos conjuntos. [1]
Normalmente, una primitiva puede describirse mediante un procedimiento que acepta cierto número de parámetros ; por ejemplo, una esfera puede describirse por las coordenadas de su punto central, junto con un valor de radio. Estas primitivas se pueden combinar en objetos compuestos usando operaciones como estas:
Unión
Fusión de dos objetos en unoDiferencia
Resta de un objeto de otro
Porción de intersección común a ambos objetos
Combinando estas operaciones elementales, es posible construir objetos de alta complejidad a partir de simples.
trazado de rayos
La renderización de geometría sólida constructiva es particularmente sencilla cuando se realiza el trazado de rayos . Los trazadores de rayos intersecan un rayo con las dos primitivas sobre las que se está operando, aplican el operador a los intervalos de intersección a lo largo del rayo 1D y luego toman el punto más cercano a la cámara a lo largo del rayo como resultado.
Aplicaciones
La geometría sólida constructiva (CSG) tiene varios usos prácticos. Se utiliza en casos donde se desean objetos geométricos simples, [ cita requerida ] o donde la precisión matemática es importante. [4] Casi todos los paquetes CAD de ingeniería usan CSG (donde puede ser útil para representar cortes de herramientas y características donde las piezas deben encajar).
El motor de Quake y Unreal Engine tanto el uso de este sistema, al igual que Hammer (el nativo motor Source editor de niveles), y Torque Game Engine / Torque Game Engine avanzada . CSG es popular porque un modelador puede usar un conjunto de objetos relativamente simples para crear una geometría muy complicada. [3] Cuando CSG es de procedimiento o paramétrico, el usuario puede revisar su geometría compleja cambiando la posición de los objetos o cambiando la operación booleana utilizada para combinar esos objetos.
Una de las ventajas de CSG es que puede asegurar fácilmente que los objetos sean "sólidos" o impermeables si todas las formas primitivas son impermeables. [5] Esto puede ser importante para algunas aplicaciones de computación de ingeniería o fabricación. En comparación, al crear geometría basada en representaciones de límites , se requieren datos topológicos adicionales o se deben realizar verificaciones de coherencia para asegurar que la descripción de límites dada especifica un objeto sólido válido. [1]
Una propiedad conveniente de las formas CSG es que es fácil clasificar puntos arbitrarios dentro o fuera de la forma creada por CSG. El punto simplemente se clasifica frente a todas las primitivas subyacentes y se evalúa la expresión booleana resultante. [6] Esta es una calidad deseable para algunas aplicaciones como el trazado de rayos . [6]
Conversión de mallas a CSG
Dado que los modelos CSG se parametrizan por construcción, a menudo son favorables a las mallas habituales cuando se trata de aplicaciones en las que el objetivo es fabricar modelos personalizados. Para tales aplicaciones, puede ser interesante convertir mallas ya existentes en árboles CSG. Este problema de convertir automáticamente mallas en árboles CSG se denomina CSG inverso .
Se requiere que un árbol CSG resultante ocupe el mismo volumen en el espacio 3D que la malla de entrada mientras tenga un número mínimo de nodos. Se prefieren soluciones simples para garantizar que el modelo resultante sea fácil de editar. Resolver este problema es un desafío debido al gran espacio de búsqueda que debe explorarse. Combina parámetros continuos como la dimensión y el tamaño de las formas primitivas y parámetros discretos como los operadores booleanos utilizados para construir el árbol CSG final.
Los métodos deductivos resuelven este problema construyendo un conjunto de medios espacios que describen el interior de la geometría. Estos medios espacios se utilizan para describir primitivas que se pueden combinar para obtener el modelo final. [7]
Otro enfoque desacopla la detección de formas primitivas y el cálculo del árbol CSG que define el modelo final. Este enfoque aprovecha la capacidad de las herramientas modernas de síntesis de programas para encontrar un árbol CSG con una complejidad mínima. [8]
También hay enfoques que utilizan algoritmos genéticos para optimizar iterativamente una forma inicial hacia la forma de la malla deseada. [9]
Aplicaciones notables con soporte CSG
Software y lenguajes de modelado genéricos
- HyperFun
- Plasma
Trazado de rayos y transporte de partículas
- FotoRederHombre Realista
- POV-Ray
Diseño asistido por ordenador
- AutoCAD
- Inventor de Autodesk
- Autodesk Fusion 360
- BRL-CAD
- CATIA
- FreeCAD
- NX CAD
- SolveSpace
- Onshape
- OpenSCAD
- PTC Creo Parametric (anteriormente conocido como Pro / Engineer )
- Realsoft 3D
- Rinoceronte
- SelfCAD
- Borde sólido
- Trabajo solido
- Tinkercad
- Vectorworks
Juego de azar
- Sueños
- Godot [10]
- GtkRadiant
- Unity , a través de complementos gratuitos o de pago de Unity Asset Store .
- IrrealEd
- Editor de martillo de válvula
- Roblox
Otros
- 3Delight
- Aqsis (a partir de la versión 0.6.0) [11]
- Blender : principalmente un editor de malla de superficie, pero capaz de CSG simple usando metaobjetos y usando el modificador booleano en objetos de malla.
- Clara.io
- Geant4
- MCNP
- SketchUp
Referencias
- ^ a b c d Foley, James D. (1996), "12.7 Geometría sólida constructiva", Gráficos por computadora: Principios y práctica , Addison-Wesley Professional, págs. 557–558, ISBN 9780201848403 CS1 maint: parámetro desalentado ( enlace ),
- ^ Roth, Scott (1982). "Ray Casting para modelar sólidos". Procesamiento de imágenes y gráficos por computadora . 18 (2): 109-144. doi : 10.1016 / 0146-664X (82) 90169-1 .
- ^ a b Bloomenthal, Jules; Bajaj, Chandrajit (1997), "5.2.5 Intersección con árboles CSG", Introducción a las superficies implícitas , Morgan Kaufmann, págs. 178–180, ISBN 9781558602335.
- ^ Foley (1996) , p. 559.
- ^ van Rossen, Sander; Baranowski, Matthew (2011), "Geometría sólida constructiva en tiempo real", en Ansari, Marwan (ed.), Herramientas de desarrollo de juegos , CRC Press, págs. 79–96, ISBN 9781439867723.
- ^ a b Glassner, Andrew S. (1989), Introducción al trazado de rayos , Morgan Kaufmann, p. 80, ISBN 9780122861604.
- ^ Buchele, Suzanne F .; Crawford, Richard H. (2004). "Construcción de árbol de geometría sólida constructiva semiespacio tridimensional a partir de representaciones de límites implícitas". Diseño asistido por computadora . 36 (11): 1063–1073. doi : 10.1016 / j.cad.2004.01.006 .
- ^ Du, Tao; Inala, Jeevana Priya; Pu, Yewen; Spielberg, Andrew; Schulz, Adriana; Rus, Daniela; Solar-Lezama, Armando; Matusik, Wojciech (2018). "InverseCSG: conversión automática de modelos 3D a árboles CSG" . ACM Trans. Graph . doi : 10.1145 / 3272127.3275006 .
- ^ Fayolle, Pierre-Alain; Pasko, Alexander A. (2016). "Un enfoque evolutivo para la extracción de árboles de construcción de objetos de nubes de puntos 3D" (PDF) . Diseño asistido por computadora . 74 : 1-17. doi : 10.1016 / j.cad.2016.01.001 .
- ^ Motor Godot - Godot recibe soporte de CSG
- ^ Gregory, Paul (12 de febrero de 2002). "Lanzamiento mayor" . Consultado el 20 de mayo de 2020 , a través de SourceForge.