This repo is an implementation of Masonry Shell Structures with Discrete Equivalence Classes [Chen et al. 2023]. Commercial licensing is available upon request. If you have any problems when using this code, you can contact me any time through 1998rlchen@gmail.com.
If you make use of this repo in your scientific work, please cite our paper. For your convenience, you can use the following bibtex snippet:
@article {Chen-2023-TileableShell,
author = {Rulin Chen and Pengyun Qiu and Peng Song and Bailin Deng and Ziqi Wang and Ying He},
title = {Masonry Shell Structures with Discrete Equivalence Classes},
journal = {ACM Transactions on Graphics (SIGGRAPH 2023)},
volume = {42},
number = {4},
year = {2023}}
- About
- Getting Started
- GUI Interface
- Create a Masonry Shell Structures with Discrete Equivalence Classes!
- Authors
- Acknowledgments
This repo presents a computational approach to design masonry shell structures with discrete equivalence classes. We implemented our computational design tool in C++ and libigl [Jacobson et al. 2018] on a desktop computer with 3.6 GHz 8-Core Intel processor and 16 GB RAM.
Our code can be ran on MacOS and Unbuntu (Linux) system. First clone the repository, run CMake to generate Makefiles or CMake/Visual Studio project files, and the rest should just work automatically.
- MacOS and Ubuntu(Linux):
$ cd [current folder path]
$ mkdir build
$ cd build
$ cmake ..
$ make -j 16
The integer following make -j is the number of threads supported by your CPU architecture. Replace it with your optimal value.
Please note that the code has been tested on Ubuntu environment (Thanks Vincent Nivoliers!). The instructions below are specifically for an Ubuntu-based container.
To compile the code in the Ubuntu environment, the following packages were required:
libboost-filesystem-devlibboost-thread-devlibgmp-devlibmpfr-devlibglfw3-devlibxinerama-devlibxi-dev
After compilation, an additional package was needed to load the remeshed mesh:
zenity
Ensure all these dependencies are installed to avoid any issues during the build and execution phases.
- Windows: our code can be run on VM16 + Ubuntu 20.04 environment.
The control panel is shown below. There are 4 components in the control panel: Status Bar, Import & Remesh, Mesh Optimization and Render Control.
-
ModelDisplay the imported surface name.TileDisplay the imported tile pattern name.Tile NumberDisplay the number of tiles after remeshing.Unique PolygonDisplay the number of polygon templates.Unique BlockDisplay the number of block templates.Avg Contact Angle Error,Avg Overlap RatioandAvg Gap Ratioare three error metrics defined in Section 3 of our paper. These metric values will be updated after creating a shell structure successfully by clickingCreate Shellbutton. -
Our algorithm mainly supports the polygonal architecture surface with open boundary. Here we provide two types of input modes:
- Obtain the base mesh by parameterizing the surface using the as-rigid-as-possible (ARAP) algorithm [Liu et al. 2008] and then mapping a 2D tessellation with convex polygons onto the surface. This process can be done by using the following group of buttons. You can find the input surfaces and tile patterns in /data/Model and /data/TilePattern, respectively.
ScalarSpecify the scalar of the input tile pattern. Users can use keyboardMandNto scale up / down the tile pattern interactively.RotAngleSpecify the rotation angle of the input tile pattern. Users can use keyboardUandIto rotate the tile pattern interactively.ReadLoad the input surface.TextureLoad the input tile pattern.RemeshMap the 2D tile pattern to input surface using ARAP initialization.- We can directly load the remeshed input surface using
Load Remeshed Mesh. You can find the example remeshed polygonal surfaces in /data/Model_remeshed.
Load Remeshed MeshLoad the remeshed input mesh. -
Edge KSpecify the target cluster number of edge length.Dihedral KSpecify the target cluster number of dihedral angle.Mini Block ClusterSpecify the threshold to define if the block cluster is considered to be merged.Target Block ClusterSpecify the threshold to stop the block cluster merging operation.ThicknessSpecify the thickness of each shell block.Opt SurfaceOptimize surface to reach lower number of polygon templates.Opt Cutting PlaneOptimize cutting plane to reach lower number of shell block templates.Create ShellCreate shell structure based on given thickness.Save ShellSave optimzied shell structure data. -
Control the object visualization state.
These instructions gives an example to you of how to use our code to generate a masonry shell structures with discrete equivalence classes.
Import a Hyperbolic.obj file and 4^4_7200.obj by clicking read and texture button, respectively. Here we support two kinds of input mode: read and texture for remeshing models here OR Load Remeshed Mesh for load your own remeshed models. Set Scalar as 5.0 and RotAngle as -15. Then click the remesh button to get a remeshed surface.
Set the Edge K as 2 and Dihedral K as 4, click the Opt Surface button to optimize surface first.
Set the Mini Block Cluster as 10 and Target Block Cluster as 1. Set Thickness as 0.08. Click the Opt CuttingPlane button to start cutting plane optimization. Then click the Create Shell button to create shell structures with given thickness.
Lastly, you can click Save Shell to save the related data and .obj files that can be used for fabrication. Here we suggest to use MeshLab to view the generated .obj files.
We thank the reviewers for their valuable comments, and Zebin Chen for helping on preparing some 3D surface models and renderings. This work was supported by the SUTD grant RS-INSUR-00027, the Ministry of Education, Singapore, under its Academic Research Fund Grants (RG20/20 & MOE-T2EP20220-0014), and the Royal Society (IES\R3\193208).





