ok, we both know how much we like to make fun of your little architecture whatever society u got going on, but some things are actually interesting and worth sharing.
So, since on thursday we decided to play LAG today we share serious knowledge and XP points
——> get them here donks:
Antoni Gaudi was a Spanish Architect know for his eccentrically beautiful fluid forms. libGaudi is a fledgeling subdivision of surface modeling library based on the Doubly Linked Face List data structure. Right now Gaudi is a collection of routines to work with computational geometry, integrating 3D surface modeling and physical systems to solve real and imagined problems. The goal of libGaudi is to develop an easy to use and flexible library for making complex forms and solving complex geometric and fluid dynamic problems. Ultimately its a platform for my education in computational geometry and physical modeling and a way to explore infinite subdivision of surfaces based on tweaking the subdivision rules through simple operations such as twisting vertices, emphasizing edges and physically based surface interactions. Eventually libGaudi will be included in a 3D modeling program.
So what is a Doubly Linked Face List (DLFL)? Its a graph based data structure with embedded faces. Basically meaning that the faces straddle the graph, and the nodes of the graph act as the vertices. This is accomplished by using encoding the faces of the corners seperately from the vertices as a circular linked list. Its quite similar to the DCEL or Doubly Connected Edge List, or Half Edge data structure
What makes the DLFL interesting is the INSERT_EDGE operation. By connecting points together, sequentially you begin to build 2-manifold geometry. For instance, connecting together three points will create a 2-face, or a double sided face. By connecting a third vertex, you create a 3 sided pyramid. This is based on the notion of a graph rotation system, an obscure theorem that describes a 2-manifold geometry based on the ordered rotations of edges around a vertex.
“Currently I have only implemented Catmull-Clark subdivision of surfaces, and some simple modeling primitive operations, but as I progress, I would like to incorporate some concepts from computational geometry, mesh skinning of a three-dimensional graph or lattice data structure, and infinite subdivision based on voxelization of manifold geometry.
A notion I’ve had is to integrate a non-destructive deformation engine and a bones engine into the modeling flow so that 1) Gaudi can construct good topology for deformation and 2) the modeler can test that topology and change the parameters of mesh generation. I think that if the high-resolution detail painting engine has a separate topology from the underlying model then then as long as the underlying topology doesn’t changed too much, then the detail can be remapped pretty easily to the new topology
Additionally, I have been interested in a simplex-lattice modeler based on a simplex data structure. This would more naturally extend to physical modeling, and keeping track of cavities and higher genus structures. A system of keeping track of an object’s hull, based on triangulation, then removing “bad” simplices might yield an interesting modeling interface. Further more the Hull can be independently subdivided to create smooth manifolds. Operations on the Hull, such as vertex insertion, or subdivision could then alter the underlying lattice.”
Skinning takes a graph and produces a 2-manifold skin around the graph. Skinning was produced in order to develop primitive objects for additional modeling operations and for use in animation with a bones system, however the structures it produces are pretty cool themselves.
The manifold is produced by defining a quaternion for each edge in the graph, extruding a shape in the direction of the quaternion, producing a convex hull for each face in the node, then fusing the whole thing together. Future iterations will optionally insert Steiner points at each node to produce more round nodes.
The graph depicted in this image was randomly generated using a spring electric model for layout. Theoretically with proper import bindings any network could be used.
Within the realm of 2-manifold geometry, libGaudi has a growing list of computational geometry and topological operations. If you’re looking for accuracy you’re probably looking for CGAL. If you’re looking for art and graphics, libGaudi is be your thing.
convex hull operation using the Quickhull method (only 75 points, but you get the idea).
Dual of the Convex Hull.
Dual of the Subdivision of the Convex Hull.
Skin of the edge graph of the dual of the subdivision of the Convex Hull.
Voxelization of a 2-manifold object.
In addition to some light computational geometry and algorithmic modeling, libGaudi also exists to prep geometry for fluid simulation. The fluid model is an implementation of the Immersed Boundary Method (IBM). The IBM is the coupling of a particle (Lagrangian) based fluid with a grid based fluid in order to model the interactions soft bodies immersed in a fluid medium. In this case the particle system is based on a linearized mass spring model used for modeling hair. The fluid solver uses a (1,2) projection method coupled with a semi-lagrangian advection step. The solver for the spring system is a conjugate gradient method, and the fluid system uses a multi-grid method based a on red-black gauss-seidel smoother. Domain decomposition and porting to the GPU are in the works.
This image shows a sphere immersed in a stokes fluid with a velocity injected into the sphere. Currently I’m working to simulate flow through a network of arteries, and this model will be coupled with a linear model of blood flow. The immersed boundary method is a little on the leaky side, I’m currently researching methods to improve the relatively primitive model I’ve implemented. And yea, its a little bit ugly right now, but I’m not too interested in making things look pretty yet.