Distance Estimated 3D Fractals (III): Folding Space The previous posts (part I, part II) introduced the basics of rendering DE (Distance Estimated) systems, but left out one important question: how do we create the distance estimator function? Drawing spheres Remember that a distance estimator is nothing more than a function, that for all points in space returns a length smaller than (or equal to) the distance to the closest object. It is fairly easy to come up with distance estimators for most simple geometric shapes. (1) DE(p) = max(0.0, length(p)-R) // solid sphere, zero interior (2) DE(p) = length(p)-R // solid sphere, negative interior (3) DE(p) = abs(length(p)-R) // hollow sphere shell From the outside all of these look similar. What about the first two? From left to right: Sphere (1), with normal artifacts because the normal was not backstepped. Notice that distance estimation only tells the distance from a point to an object. Combining objects Distance fields have some nice properties. So now we have a way to combine objects.
Generative Art Links Some links to Generative Art, Math & Fractals, and other creative ways of creating computional imagery. The list is not meant to be exhaustive: rather, it is a list of my favorite links. Generative Art Software General-Purpose Software Processing is probably the most used platform for Generative Art. Nodebox – A Python based alternative to Processing. vvvv is “a toolkit for real time video synthesis”. PureData a “real-time graphical dataflow programming environment for audio, video, and graphical processing.” Specific Systems Context Free Art – uses Context Free Design Grammars to generate 2D images. Structure Synth – my own attempt to extend Context Free Art into three dimensions. TopMod3D – “is a free, open source, portable, platform independent topological mesh modeling system that allows users to create high genus 2-manifold meshes”. Ready. K3DSurf – 3D surface generator (for a nice example check out this one by Schmiegl). Fractals and Math Art Software Fragmentarium. GLSL Sandbox by Mr.
Klein bottle Structure of a three-dimensional Klein bottle In mathematics, the Klein bottle /ˈklaɪn/ is an example of a non-orientable surface; informally, it is a surface (a two-dimensional manifold) in which notions of left and right cannot be consistently defined. Other related non-orientable objects include the Möbius strip and the real projective plane. The Klein bottle was first described in 1882 by the German mathematician Felix Klein. Construction This square is a fundamental polygon of the Klein bottle. Note that this is an "abstract" gluing in the sense that trying to realize this in three dimensions results in a self-intersecting Klein bottle. By adding a fourth dimension to the three-dimensional space, the self-intersection can be eliminated. This immersion is useful for visualizing many properties of the Klein bottle. A hand-blown Klein Bottle Dissecting the Klein bottle results in Möbius strips. Properties A mathematician named Klein Thought the Möbius band was divine. Notes
Bonus: Luma Pictures’ new tools for Doctor Strange Doctor Strange has been a huge film for Marvel. To achieve their sections of the film, Luma Pictures developed a set of new tools, including some they will even be sharing with the community. Luma Pictures worked on several key sequences including the opening London sequence and they also booked ended the film with the Dormammu sequence and the Dark realm. London For the London sequence Luma developed a new fractal tool to do volumetric meshing and transforming of the buildings. "With what we needed to do we needed to art direct the speed, the movement and look at all of these 'fractals'," says Cirelli. Luma pictures literally choreographed the fractals, "which is not an easy task." The Mandelboxes are different from Mandleblubs used the film Suicide Squad. "The Mandelbox that we used allowed us to do all the arranging, mirroring and manipulation of the frequency of the volume of the London buildings, along with all the slicing and dicing," explained Cirelli. Vince Cirelli VFX Supervisor
Polygon Triangulation - Graphics Programming and Theory Modern GPUs have an annoying habbit of only liking to draw triangles. Often when using 3D modeling programs or vector-based drawing applications to produce game art, you'll get instead a soup of arbitrary polygons. This is an issue if you plan to rasterize these polygons. Fortunately, polygons can be decomposed into triangles relatively easily.There are many different ways to decompose polygons into triangles. Typically though you only implement an algorithm that's advanced enough to suit your needs. For example, convex polygons are easier to triangulate than concave ones, and polygons with a hole in the middle of it are a little complicated to get right (and are also beyond the scope of this article: I'll be covering ear clipping at the most in this article. For Convex Polygons This one is by far the easiest. For this case, you can pick any vertex in the polygon and create a triangle fan outward. For Concave Polygons This algorithm is called "ear clipping." Here's the algorithm:
Uzumaki 1: Spiral into Horror: Amazon.de: Junji Ito: Bücher SLIDE Language Specification Geometry Nodes The geometry nodes are the leaf nodes of the scene hiearchy which actually contain geometry. The basic object, as defined by the object statement, is a collection of polygons. The other primitive objects defined in SLIDE are the parameterized surfaces: sphere, cylinder, cone, torus, cyclide, bsplinecurve, bezeircurve, polyline, sweep, bsplinepatch, and bezeirpatch. The object differs from these other surface primitives because it is not defined over a rectangular domain in texture space. All geometric nodes may have these fields: Example: primitives.slf The SLIDE file primitives.slf is an interactive demo of all of the SLIDE geometric primitive nodes. object The object statement is used to create general polyhedrons. Example: Tetrahedron, a Simple Polyhedron Normals Normals are attached to faces and points. Example: Normals The manner in which points are shared between faces can lead to some unexpected lighting phenomena. 1. 2. 3. sphere Example: Sphere Patch cylinder cone torus
kottke.org - home of fine hypertext products Torus Written by Paul Bourke May 1990 The torus is perhaps the least used object in real modelling applications but it still appears as a standard form in modelling and rendering packages ahead of far more useful geometric primitives. In any case, given the conventions below, that is, defining the radius (r0) from the center to the middle of the ring of the torus and the radius (r1) of the cross section of ring of the torus. where theta and phi range from 0 to 2pi. The code for generating a facet approximation to a torus as described later involves creating facets with vertices defined by If a facet approximation to a torus is required then a large number of facets are generally necessary to produce a smooth rendered surface. Another approach is to create a torus from a number of spheres which rendering packages often support more efficiently. C Source This C code generated the facet representation shown above, the planar facets are exported in DXF for this example. C source c = 0.5 c = 1.0 c = 1.5
Escher and the Droste effect - Universiteit Leiden When Worlds Collide: Simulating Circle-Circle Collisions - Tuts+ Game Development Tutorial Most collision detection in computer games is done using the AABB technique: very simply, if two rectangles intersect, then a collision has occurred. It's fast, efficient, and incredibly effective – for rectangular objects. But what if we wanted to smash circles together? How do we calculate the collision point, and where do the objects go after? It's not as hard as you might think... Note: Although this tutorial is written using AS3 and Flash, you should be able to use the same techniques and concepts in almost any game development environment. Preview image taken from this classic Psdtuts+ tutorial. I'm going to gloss over this step, because if you can't create basic sprites, the rest of the tutorial is going to be a bit beyond you. Suffice to say, we have a starting point. There is, however, one important thing to note: often, when you create sprites, the top left part is set to the origin (0, 0) and the bottom right is (width, height). So here we go: is much better than And that's it!