Brickworks

A procedural brick wall generation pipeline

chavin_so_good_bricks.png

Chavín de Huantar Inspired Temple. Bricks generated using the Brickworks Visualization Tool.

 

Brickworks

Brickworks is a procedural tool for brick wall generation. It takes geometry and a number of artist-defined brick pattern parameters as inputs and outputs either geometry with bricks applied to the walls or a brick material with these wall patterns as an input.

This approach has the advantage of realistic corner behaviour as shown in [Fig. 1].

Brick Pattern Generation

Brickworks allows the artist to tweak overall patterns with simple parameters.

The artist can generate complex row patterns using ramps, and vary those patterns based on gaussian randomness. The artist can additionally change spacing and the behavior of stones on the outer corners of the geometry.

A visualization step allows artists to first view their patterns before using them to drive materials. Visualization options such as extrude depth, randomness, color variation, and bevel can help the user understand the final look and feel [Fig. 2].

Fig 1: Brick corner behavior.

patterns.jpg

Fig 2: Brick generation visualization outputs

How does it Work?

 
 
1_Rows.png

Rows

Users can first generate rows via number of rows, height ramps, and gaussian-based offsets to add variation. Heights are proportional to the input geometry specified by the user. Pattern generation is done on a per-wall basis to handle cornerstones.

2_Cols.png

Columns

Users can then specify columns similar to rows. They can also manipulate number of columns per height unit, offsets, and cornerstone behavior. The column generator detects outer corners and can create alternating divisions that “extend” the brick out from the previous wall. This is a major strength of this context-aware procedural approach.

3_Planes.png

Planes

Brick planes are translated to the centroids points with packed height and width information. This step is where the artist could go in and modify details by hand if necessary to create unique sections that stand out from the pattern.

4_Vis.png

Visualization

A visualization helps the artist get a sense for how the walls will look. Extruded brick planes are placed on the wall according to the previously generated patterns, and users can specify options such as color variation, extrude variation, and bevels.

Maps.png

Materials

After brick patterns are specified by the user, the geometry is unwrapped and 2D maps are generated and projected into maps containing brick IDs, slope gradient variations, and row heights.

The procedural material generation takes these maps as inputs and outputs color, height, roughness, and normal maps for realistic brick materials.

5_Final.png

Assignments

The geometry and generated maps are split up into square chunks to which the material is applied. The geometry is then rewrapped for a final brick wall. The output can be rendered in Houdini, or these textures can be packed and exported to be used in any other graphics engine.

Behind the Scenes

 
 
network_highlevel.png

High Level Network

This project has been separated into three high-level components: Brick_Generator, Mat_Generator, and Mat_Assigner.

  • The Brick_Generator subnetworks handle the pattern generation and visualization.

  • Mat_Generator unwraps the geometry, ray-traces it into 2D maps, and prepares texture compositing. The RenderMats subnetwork tells MatGen which textures to render and store.

  • Mat_Assigner breaks the textures and geometry into chunks, and connects them with automatically generated materials.

  • Each of these high level networks contain dozens of subnetworks using Vex and Python Code as well as various Houdini Surface operators to modify geometry and pass data.

material_net.png

Procedural Material Compositing

This compositing graph creates the brick materials shown above. It follows a similar flow to materials made in Substance Designer:

  • Input maps are fetched of brick IDs, slopes, and height masks, and seamless noises are generated matching the maps’ resolutions.

  • The noises are used in conjunction with input maps and various input processing techniques to output rough, height, normal, and color textures.

Material_Caching.png

Texture Caching

Materials are cached to reduce the memory cost and prevent constant updating. The user can “render” specific maps independently. This can speed up the process if the user wants to focus on changes to specific maps such as the color.

 
Previous
Previous

Sketch 2 Tilemap

Next
Next

VR Lab Room Model