threedee.io is a procedural 3D modeler where you teach our software how to build something through a parameterized instruction pipeline that puts you in complete control. As a result, you can build infinite versions of the same building and, perhaps more importantly, you can build them anywhere.
By starting with an initial geometry (think of the plot for a building) and applying successive transformations, you achieve the 3D model you are looking for. The transformations are a simple and most of them allow for variations and/or constraints. Every model then can be rendered in many different ways, all of them accurately representing your wishes. Read our Modeling guide for more information.
threedee.io consists of two main screens:
This page allows you to manage your high level assets: functions, materials, and even other projects. The reference section shows highlights and points of interest.
This page works in a single "mode" depending on your selection:
When clicking the settings buttons (9), a dialog will appear asking for the local folder where your files will be stored. You may maintain as many different folders in whatever hierarchy you want. You also have a history of those folders saved.
Projects are the collections of files that make up your 3D models. When in project mode, you may create, delete, clone, import and export your projects. You may also launch the editor for any particular project and, on the full version of the software, produce as many variations of the building as needed.
Create a project by clicking on the plus icon and entering a name for it in the subsequent dialog. The new project will be immediately opened for edition.
Projects are imported as a .3de file. To import click on the chevron icon to open the file import dialog pictured below. Select your file and click OK.
Click on the central area of any project project tile such as the one shown as (3) in the reference section.
Batch rendering is the process by which variations of a threedee model are produced. The resulting models will be produced in standard fbx format and be available as soon as produced. See Batch Results.
Click on the play icon on a project's tile in order to render multiple variations. Doing so opens the batch render dialog:
how many physical threads are to be used when rendering, the more the quicker the rendering will get done. You must me cautious not setting this number too high or the computer's performance may downgrade.
To access the results of a batch rendering operation click the folder icon on a project's tile to open the results dialog:
By default, threedee produces ngons as its output, most likely quads. This selector will allow for different triangulations. The options are:
Texture Mapping is a process where threedee is still underdeveloped, offering only a home-brewed mapping method called "unfold". To map specific materials and for general info see: Texture Mapping. In this case, any material without mapping will use the values provided. The orientation value is described in the texture mapping section.
Functions are user defined tools that can be reused in any project, imagine a door or a window that you can paste on any rectangle on your model. The management mode show functions that are available to all projects.
Functions are imported as a .3df file. To import click on the chevron icon to open the file import dialog pictured below. Select your file and click OK.
You may export functions individually by using the export action shown as (4) in the Reference section. Also, you can export several functions at a time by clicking its header to make it selected as shown as (1) in the Reference section and clicking the download button . You will be prompted for a file name for your function pack.
Materials provide you with a way to color your geometries. You can use our simple material system and let us generate, for you, an infinite variety of possible materials. This whole process is encompassed in a style which is inspired by styles found in CSS (cascading style sheets).
A style pairs a name (class, in css), such as "glass" with several materials. When an style is applied to a particular variation, a single random material is chosen for each class and applied into any geometry with said class. This ensures you get a 3d model with distinct materials. All materials in a single style should match among themselves so each combination is appropriate (or good looking) for any variation. You will end up with several styles that can be applied to any model that matches your naming convention.
The simple material system uniquely enables you to work with your favorite material system, such as 3D Studio Max, Unity, etc, rather than forcing to you to learn yet another proprietary material system. You'll find there is always enough information to allow you to integrate your favorite supported rendering back-end.
Create a material by clicking on the plus icon , selecting "Material" on the context menu that pops. The material dialog will appear:
Create a material by clicking on the plus icon , selecting "Style" on the context menu that pops. The style dialog will appear:
Material are imported as a .3dm file. To import click on the chevron icon to open the file import dialog pictured below. Select your file and click OK.
The threedee.io editor manages the complex graph of information that makes a threedee model. As a procedural modeler, the editor manages all the metadata associated with the "procedure" of creating 3D structures. Simplistically, we can separate this metadata in code and assets. The code is a graph of geometric operations that progressively transform an initial geometry into a complex 3D model. These operations also use one or more assets. Additionally, a function can import several other helper functions and use them freely in their code. Together, this graph and the assets make up a function.
Because of the open-ended definition of a function, you can also use a project to serve as a function in another project or function.
For example, if you have created a model for a specific type of window you have in mind then that is not enough to be a project by itself. That said, it's very likely you would also want to use that again for a different project. You can create this window as a function and share it between many models (and team mates!) to avoid duplicating the effort of creating a window. In addition, if the window itself changes you can come back integrate the new function in to your models.
The editor is organized in the traditional 3 pane layout. All assets are managed by an asset tree located to the left (6), a main editor in the middle (5) and a context dependent editor pane to the right (7). A toolbar on top (4) offers context aware actions for the current selection.
The editor also provides a workflow and remembers how you get to each page, returning from where you came. For instance, a user might need to edit an asset whose editor will appear in the main area. This new editor is stacked on top of the existing one and, once closed, will return the user to the previous task.
See the following topics for more detailed explanations:
The asset panel manages the artifacts needed for the code to properly execute. The assets are organized in a tree structure represented visually as an "accordion" where clicking a tab opens its contents. The open tabs, such as the labels tab opened in the reference, provide common mechanisms to manage the particular asset. They can be added using the button (7), the name of the asset is displayed in (5) and a set of actions (6). For more in-depth management, (8) open a separate dialog.
Also common among assets is a mechanism of hiding assets without deleting them in order to keep the work space clean. Most assets are never deleted and can be restored to the asset tree from the configuration dialog. To hide an asset click on its "eye" action.
The following assets are available:
Each threedee model is unique, controlled by an initial drawing (called sketch, or function input) and a seed, which is a number controlling the generation of random numbers for a particular variation. A consequence of this is that a variation you might like while rendering may be lost. In the rendering window, seed variations can be saved as the "default" or be create as a new variation in the asset tree.
Some other variations can be produced with new sketches, where a more nuanced drawing can be specified and then used in the batch render dialog.
Labels are a fundamental part in threedee. For anything to work the system must know what is what, for instance, when ready to populate a façade, the system must know which faces are intended to be a façade. Therefore, faces and edges must be tagged with a correct label.
Label assignment can happen in many ways depending on the instruction that produces the geometry. For instance, when extruding profiles, each profile segment can be assigned a label so every face produced by that segment carries such label. On drawing editors the "assign" action is used to tag the current selection with the corresponding label.
In many cases, the system would automatically assign predefined labels to edges, such labels are: north south east and west. There is nothing special about these labels, they are simply provided to avoid repetition and to communicate among functions.
Profiles are used as part of the extrude instruction and create volume from flat faces. Profiles are open curves describing a path that segments follow to form volumes. Each profile segment will create a quad in 3d space that will be tag with a particular label. The use also may define the labels for each of the 4 edges on that quad, by default those edges are labeled with the default labels NSEW.
Profile segments can be controlled using variables, for instance, the height of all segments marked as "first floor" can equal the value a variable. In such case, not only several profiles can be guaranteed to end at the same point, but that point can be changed changed by the end user without having modify the profile.
The direction of the profile in the editor determines the shape of the extrusion. Profiles going to the right will produce geometry moving "out" of the original segment. In other words, the geometry would grow wider. Profiles moving to the left will shrink the extrusion often to the point of collapsing it. Imagine a simple house roof. Conversely, profiles going "up" in the y axis will create positive volume and negative profiles will move inwards, such as in a swimming pool.
Overhangs, defined as profiles which segments move both up and down are not yet supported.
Functions are the basic unit of execution in threedee and are detail in Modeling. The relevant part is that any function can contain several others as assets. You may think of these assets as user defined tools where its users only provide the input geometry and just need to invoke. Think, for instance, about a "pool" function that creates a swimming pool, any user of that function will create, somewhere in its model, a rectangular space and then use the asset function as another instruction.
The function in the asset list can be internal or imported. Internal functions are created with the Convert to Function feature on the function editor. Imported functions can be obtained from other users or projects, these will not be editable.
Materials provide color information on geometric primitives. A reference can be found in Materials. Material packs can be imported from other projects as asset packs. As discussed in the reference, material assets include styles, which are named collections of materials intended to control the material set randomly applied to a rendering without modifying the function that created said rendering.
The configuration dialog is used to manage all the assets (as opposed to only the visible ones in the asset tree). As depicted below as (1), all of the assets are accessible through the dialog. Make sure to click (2) for assets not fitting the tab control.
All tabs present a list of assets each with a list of actions (3). Such actions include show/hide, clone and in certain cases remove. Marked as (4) is the name of the asset, which can be edited to rename the asset.
Basic rendering configuration:
While the Asset Panel manages assets, code is managed using the function editor. The code is organized as a connected graph of instructions, each represented as a visual node (1). Each node contains inputs (2) and outputs (3) through which geometry moves until all reachable instructions are executed and the result is the function's resulting geometry.
The following topics will be discussed in following sections:
The function editor tried to follow standard procedure regarding its mechanics, the concept of a node with inputs and outputs is fairly common. The following sub sections illustrate these mechanisms. It is worth noting that to be executed, nodes must be somehow connected to the input node, normally as a path of other nodes. Nodes that are not connected and hence will not be executed will be displayed transparent for ease of inspection.
To create an instruction drag an output connector into any space empty space in the canvas where you want the new instruction to appear. The menu depicted as (4) will appear, select the instruction you want created from the list. Alternatively, a sub-menu (5) will provide access to all registered functions (6).
Any chain of instructions can be made into a function. This is important because several operations need to be performed often and can be complex. A function allows to reuse the same code over and over again and reduces the complexity of your models.
To create a function select the nodes intended to be part of it. Remember that clicking a node while the SHIFT key is pressed will selected all nodes connected to it going forward. Once selected, right click the selection for its context menu and click "Convert To Function".
The nodes you intend to convert to functions will, more likely than not, reference assets in the asset tree. These will be transferred into the new function and the dialog pictured below will appear. In the Metadata tab (1, not shown) you may name the function. The rest of the tabs (2 will display particular assets that are being transferred by their names (3.
For each of these assets three transferring options are provided (4:
You may use the traditional CTRL+C, CTRL+V keys to copy and paste nodes and selection of nodes. You may copy nodes among different functions and in such case, the assets referenced by the nodes in the clipboard will be copied into the target function.
The render editor is where modeling results are seen. It is recommended while modeling that results are consulted often as it makes it easier to correct mistakes. This editor consists on a large 3d viewer 5 showing the results of the current rendering or the previous one. A toolbar provides several and a right pane provides information and extra tools. Since rendering is a progressive operations, the results will be updated as they are calculated.
The render editor is extremely useful tracking labels as controlled by the view mode toolbar. Selected faces will show not only their labels as its color but the labels of its edges as colored cylinders. Additional information for the current selection is updated on the right pane.
The viewer controls are:
The following topics will be discussed in following sections:
This toolbar implements some common operations of threedee editor: close the editor and save the rendering state. Note that saving in the case applies to the variation being rendered. When a user uses the another button thus generating a new variation he or she will have the option of keeping the original or choosing the current with the first two buttons. Subsequent renderings will remember the choice.
A third button will keep the current seed and instead save the current rendering as a variation in the asset panel.
This toolbar contains a single button and it changes the current seed, triggering a new render. A seed is a number that, together with a polygonal input, identify a single variation. This is the coolest button in all the app.
This toolbar controls the shading of the polygons displayed on the editor. It allows three modes:
This pane (6, 7, 8) provides additional information about the rendering process and the user's selection. A info pane (6) will display stats once the rendering is finished. Note that this stats will differ from the production model. A selection pane (7) tracks the current selection, displaying labels and length when edges are selected. When faces are, it allos to chance either the material or the material class directly.
Lastly, a results pane (8) display a list of all executed instructions. For each instruction, an icon and a name are displayed along with a mini-toolbar that displays potential errors, allows to hide/show the instruction's geometry and locates the instruction in the Function Editor, respectively.
Functions are the central unit of processing in threedee. As in any procedural 3d modeler, the idea is to describe how a model is built instead of actually building the model out of vertices, edges and faces. A threedee function is a combination of assets and code whose job is to transform an input (often a plain drawing) into the desired 3d model.
For instance, the process of building a simple house can be described as: start with a plot, make some cuts to it to define the living spaces (yard, main house, chimney, backyard), then raise the walls and finally build the roof. The interesting part is that once you teach the software how to build a house it then can build it for any plot at all. See the tutorial for an example of such a house.
Each step (or instruction) builds on the results of the previous one. In threedee, we represent instructions as visual nodes (see Function Editor) each with inputs and outputs. Those are connected to each other forming the instruction graph whose execution builds procedural 3d models. At the root of such graph is an special instruction "input" which receives the initial geometry (the plot in the house example) and from there on, any instructions whose input is fulfilled gets executed.
Then there is the issue of correctness. A house is not good when the main door looks at the backyard. And since we can work with any arbitrary input, we must enforce rules to ensure that the final product makes sense. We call our technique "constrained sketches", where the word sketches is used to signify that whatever the user draws is just an idea of the actual geometry that will be processed. Therefore the user must specify the conditions for any input to be suitable for a particular function. A house can not be built on a plot that is just a few centimeters in size.
Finally, the objective of a procedural modeler is to be able to generate different variations of a single structure. We must produce models that are not only correct, but unique and visually distinct. threedee offers a wide array of randomization:
In the rest of this page we will present a step by step tutorial, but for more in-depth information you can check this links:
For this tutorial we will build the house with chimney used to illustrate threedee on the introduction page. This example presents the user with the simple loop used anywhere in modeling: Cut/Select/Extrude. The combination of these three instructions will provide most of the static modeling in threedee. Download the tutorial from here: https://github.com/xkp/threedee-doc/wiki/files/Chimney.3de.
1- Every new project in threedee starts with an input instruction. This provide the starting point for your model.
2- Double click the input to edit the initial drawing and click the "compass" toolbar button (1) and then choose an appropriate size for your initial rectangle (2). Remember this is only a sketch, what is important here is that everything ought to be named. For convenience, we start with a compass, which assigns standard labels to the appropriate segments.
3- Save by pressing CTRL+S or by pressing the save button in the toolbar
1- We will separate spaces by applying a Cut operation. Cuts perform successive partitions of planar spaces.
2- Double click the newly created instruction to edit. And start with a similar compass, you will notice you can not change the drawing anymore. No worries, this is just a sketch. Drag a line from anywhere left of the side segment marked as west (dark green) to the right of the east segment.
Congratulations, you have created your first cut! For whatever input your function receives the system will perform that cut from west to east. But this will hardly be enough to support arbitrary inputs, as you can see on the right, we have added facts (constraints) into the cut. So no matter the input, the cut 0 will be parallel to the south side and keep a suitable distance, that also may change.
3- Repeat the process until all the spaces you want are present in the drawing. Then tag the areas by creating the appropriate labels: lawn, backyard, house and chimney. The end result would look like this:
1- Now that we have a 2d blueprint of the house we to turn it 3d. This is accomplished by creating the appropriate profiles and assigning them to specific segments in the cut. You will create 3 profiles: front (1), back (2) and chimney (3) that look like this:
2- Still on the cut editor (and the bullets refer to its drawing), assign the profiles to the appropriate segments as follows: assign the front profile to segment (1), back to (3) and chimney to (3) and (4).
Once we have a correct blueprint, it is often the case we would like to apply different transformations to different spaces. We might want to build a fence for the backyard and so on. The select instruction is used to filter labeled faces so the user can apply the appropriate transformations:
1- Create a Select instruction and add the labels we are concerned with:
2- make sure your model now looks like this
Even though we have assigned elevation to our faces, the model is still 2d. We must perform extrusions for both the house and the chimney. These instructions will not need further configuration since the elevation is already baked into its input.
1- Connect extrusion instructions to both the chimney and house so your model now looks like:
So far we've seen the fir iteration of the cut-select-extrude cycle. And so far we've produced a coarse mesh of the house we intend to build. To continue adding detail you need to continue executing CSE cycles on the resulting faces until you achieve the required level of detail.
Naturally it is not always necessary to execute the full cycle, in our closing example we will add a hole in the chimney. In this case a select is not needed since we can directly obtain the the top face of the chimney extrude (its cap face) and we will forgo the cut since we only need to inset the face. No profiles are needed, either, since we will apply an straight extrude with a negative amount:
In this page we will provide a brief introduction of each of each of threedee's instructions and supporting examples. For more information on how instructions are used and relate to each other, see Modeling. There are two types of instructions: those who produce new geometry (cut, extrude, inset) and those who control the flow the of geometry executing a model (select, choose, if).
A cut instruction will make consecutive partitions to a planar face. Each cut will be applied in order and by matching its source and target. So it is important the input faces and the cut itself is properly labeled. In addition to source and target segment constraints, each cut and the segments it produces can be further constrained in order to maintain the correctness of the results.
Each cut starts with a drawing that sketches the input that is expected. Each segment in this drawing is called a "base" and a name is automatically assigned to it. This name, together with the name of the cuts and its resulting segments will be used to reference the segment when assigning facts (constraints) to it or any other segments. See the Tutorial for simple usage.
The naming convention is: The bases (1) are named base_#, the cuts (2) Cut_#Cut, the resulting segments (3) Cut#_(Source|Target)(L|R) and segments that are opposite to an already created one (4) will append "Opp" to the original segment name. Every cut creates 4 resulting segments and whether these segments are left, right, source or target depends on the direction the cut was made.
We use the term fact instead of constraint because ours also include post-solution transformations that are only applied when a all constraints are met. The term means "should this instruction succeed, all listed facts will be true". We place facts on one or more segments and allow them a number of parameters.
There are families of facts and we offer aliases for specific cases. For instance, a fact in the distance family contains a range [min, max]. For convenience we offer a "Exact Distance" fact that has only one parameter and corresponds to the case where min equals max. The following facts are available although not for each type of segment (base, cuts or cut results):
Often when dealing with arbitrary inputs, a modeler would like to fill spaces with as many cuts as possible. Imagine a space to be filled with windows, as the input grow in width more and more windows are needed. The cut instruction allows for terminal cuts (those whose left and right spaces contain no more cuts) to be repeat cuts.
Repeat cuts try to accommodate several spaces on any input. In particular, the input space is divided between the source and the target segments. We can distribute three types of repeat spaces: primary, secondary and margin. Each with potential moving ranges. The repeat operation has 2 modes:
When using this mode, the system will try to fit a fixed number of cuts regardless of the input size. It will still try to separate the primary spaces by a certain amount and any remaining space will be added to the beginning and end (margin) spaces. This is not of common use, but we've provided an example here.
When using this mode, the system will try to fit a variable number of cuts of variable lengths. The modeler will be in control of how the space is divided. The following dialog provides those options and n example can be found here.
The select instruction will filter and re-route an input geometry into several outputs allowing custom processing for different spaces. The select instruction works has several modes of filtering.
This is the most common mode and therefore the default one. The select instruction will take an arbitrary geometry and will filter it by label producing as many outputs as labels the user specify. Each result face set can be processed separately. An example can be found here.
This mode allows the user to filter geometric primitives based on their characteristics. So far we can filter based on specific edges on a face. We can request the existence of edges of specific sizes and of certain topology. Under this mode, input will be filtered out of 2 outputs: "output" and "else", that contains the primitives that match and those who doesn't, respectively. You can find and example here.
This mode allows the user to filter geometric primitives into a set containing a certain amount of primitives and the rest. Which primitives go into each set is selected randomly. Under this mode, input will be filtered out of 2 outputs: "output" and "else" each representing the corresponding set. You can find and example here.
The extrude instruction generates 3d volumes out of planar surfaces. It does so by "growing" a linear path (profile) per segment in the input face. The system will coordinate the extrusion for every segment and the collisions between them.
It is important to notice that currently profiles must be y-monotonic, i.e. each segment distance to the origin must be larger or equal than the previous segment. This applies to negative profiles as well, which are perfectly legal as long as they don't contain overhangs.
Extrude has three modes (1) that determine how to select the profiles for each segment:
Each segment will be extruded by the profile specified by its label. Note that for each profile a label is created of the same name. A minimal example here. This is the most common operation and therefore the default.
All segments will be extruded by the specified profile. A minimal example here.
All profiles will be vertical, topping up at the specified amount. The height of the extrusion can be controlled by range or by variable. This is the simplest form of the instruction.
Oftentimes its undesirable to extrude 2 segments that are opposite, this might create internal coplanar faces. For such scenarios, a merge option (2) is provided. By selecting "yes" to the merge operation only the perimeter of a group of faces will be extruded.
The inset instruction will take a planar surface and create a new geometry at which center is a scaled version of the original face (referred as result) and a quad for each segment filling up the remaining space (sides). Another way to look at it is: each segment is pushed inwards to create the result. The amount of the inset is a random positive number between value (1) and range (2).
Insets are especially useful when dealing with complex geometry. An example can be found here.
When an inset receives multiple adjacent inputs, the merge option (3) allows the user to forgo internal edges and only apply the inset operation to the perimeter of the input.
The choice instruction will randomly distribute its input among a list of choices. There are two modes: the default where the same random choice is applied to each input face and one where each input is redirected to a random choice. In the second case, potentially every choice may "fire" while in the default behavior just one choice does.
The merge instruction is multi-faceted: it can be used to repair, join or reattach geometry depends on the chosen method. It is important to know that in thredee, as geometry goes through multiple operations it detaches from its neighbors. In other words, connectivity is lost which might be important at some point in the future. Also, undesirable topologies may appear from time to time such as vertices too close to each other or duplicated. Use a merge instruction in these cases.
Merge has three modes (1) that determine the operations performed on the input geometry:
All overlapping edges will be joined in a single, connected geometry. This method offers options to join vertices and colineal segments. When joining vertices, all vertices that are very close to another one will be fused into a single vertex whenever possible. One important use of merge is the transfer of opposite labels. When assigning opposite labels (say, on a cut), the original neighbors edges that did not participate in the cut will not receive the proper label, a merge operation will join both geometries and restore the label.
All interior edges (i.e those who are not borders) will be simplified, by default this operation does not respect labels but an option is provided to do so. Colineal edges, either pre-existing or created by the operation can be removed if the user chooses so.
This is simply a way to merge edges and faces at the same time.
A rename instruction will return the same geometry in its input with new labels. The label selector in (1) will cause all faces to have the selected label. The label selector in (2) will do the same but for edges. If finer control is needed, any source label may be turned into a target label (3).
It is possible to assign one of multiples labels to a single source. To achieve this simply specify the same source multiple times with different targets. By doing so for every input face or label tagged with a the source label, a random target label will be chosen. An example of this can be found here.
threedee gives modelers the ability to provide different sets of operations for different levels of detail. It does so by simply re-directing the flow of geometry depending on the globally selected level of detail. Imagine, for instance, the modeler has 3 versions of the same window, all with different levels of complexity. Using a log instruction with each of the windows linked to its appropriate lod it will guarantee that rendering on any user specified lod will produce the right level of complexity.
An if instruction will redirect the flow of geometry to with its "then" or "else" connectors based on the value of a variable. This is useful when creating functions and willing to allow consumers of the function to control boolean features. For instance, the function could expose a "build fence" variable so the end user may decide whether to include a fence or not in its models. Currently, a value of 0 for the variable means "false" and everything else is true.
The if instruction is useful to provide users of functions control over features instead of random selection. An example can be found here.
The loop instruction introduces to threedee the concept of recursion. Although it is rarely used, it provides the only mechanism to act over geometry that was created in the same instruction. This is achieved using a "loop function" connected to the loop output of the instruction, this function will be called repeatedly with either the original input of the instruction or the result of the previous iteration of the loop function.
The loop function will have 2 outputs: the regular output and a second one called "loop". All geometry going through the regular output will be accumulated and returned by the loop instruction output whereas the results going through the "loop" output will be used as input for the next iteration.
The instruction will complete when the loop function returns no results or when the maximum number of iterations (1) is reached.
Texture mapping is the process of assigning planar coordinates to 3d geometry in order to accommodate textures. This is a vital process in creating realistic models. Threedee has been designed to support many methods of uv mapping, but currently only offers a single method of texture mapping. Our road map includes adding more mapping techniques.
Texture mapping is applied at the material level, as each material may decide its mapping technique or its orientation. Assigning mapping is done in the edit material dialog:
The home brewed unfold mapping is designed for planar surfaces and aims at maintaining continuity and orientation. It "walks" connected faces propagating the previous uvs whenever possible. Assumes tiling textures and allows for scaling.
In this page you will find an incomplete and ever growing list of examples to help you master threedee techniques.
|A simple house model showing the Cut-Select-Extrude cycle.|
|A repeat cut that will only have 2 primary faces no matter its size. Start and end distances are shown in green while secondary distance is dark blue.|
|A repeat cut that will adjust to its size. Start and end distances are shown in green while secondary distance is dark blue.|
|A select operation that finds the largest spaces available by looking for large edges labeled "east". An extrude is added at the end in order to verify the selection.|
|A select operation that chooses one face randomly and redirects the rest through the else connector. Two extrudes were added at the end in order to verify the selection. Press "another" several times to see it vary.|
|An extrude operation based on a single profile.|
|An extrude operation mixing 2 profiles.|
|An extrude operation merging separate faces.|
|An inset operation over an irregular geometry.|
|A simple choice between up and down.|
|Multiple up or down random choices on a grid.|
|An rename operation randomly renaming multiple faces.|
|Merging faces divided by a cut.|
|Merging separate cuts with opposite labels.|
|Merging separate extrudes to form a roof.|
|A function controlling whether to create tall or short structures.|
|A recursive random quad subdivision up to 5 levels.|