Old Bookshelf (Procedural)

by Lucas Knepper in Modifier Setups


To use the bookshelf in your own project, I recommend appending the collection called "bookshelf" from the downloadable file into your project file. This way the handles used for manipulating the shelf's shape, the wood-material and the book variations will automatically be imported along with an object carrying the main Geometry Node tree. The books-collection containing the various book models can be made invisible with the checkbox as it's only there to be instanced.

The bulk of the customization options can be found under the modifier tab of the properties panel with the bookshelf selected. I recommend playing around with the parameters to get a feel for their effects. If the performance is bad, try setting the notch_frequency parameter to 0.0 as mentioned in the FAQ. Here's a list of roughly what every parameter does:

  • handle_01 and handle_02 should hold the two objects which mark the edges of the shelf. Those must each have a single edge which is aligned with the local z-axis of the object as their mesh for the setup to work. They should only be rotated in object mode.
  • board_count defines the amount of horizontal shelves.
  • shelf_depth defines the depth of the bookshelf.
  • board_thickness defines the thickness of the shelf boards as well as the boards at the side of the shelf.
  • backboard_thickness defines the thickness of the board closing the shelf at the back. If this parameter is set to 0.0, the board will be removed altogether, allowing you to look through the books.
  • vertical_margin defines the offset the lowest shelf has from the ground and the highest has from the top.
  • board_inset defines how far the shelves are inset in comparison to the side planks.
  • board_resolution defines the density of the geometry of the planks. This becomes particularly relevant with extreme twisting of the boards. Note that the parameter is in terms of distance between neighbouring edge loops. The smaller the value this parameter is set to, the more finely subdivided the geometry.
  • board_material needs to hold the material, you want the boards of the shelf to have. When using your own material for this, have a look at the entry about the Output Attributes further down this list.
  • books should hold the collection which contains the various book models that will be scattered on the shelves. If you want to make your own books, make sure that they measure 1 by 2 by 2 units with their origin sitting at the base of the bounding box, in the middle of the edge opposite from the book's spine. They should also sit at the world origin with their spines pointing in the y-direction. The book models will be automatically squashed and stretched to create variations.
  • book_thickness defines the mean thickness of the books placed on the shelves as well as those scattered in stacks.
  • book_thickness_deviation defines how much the thickness of the books may randomly vary. It is given as a proportion of book_thickness.
  • book_height_gap defines the mean amount of space that should exist between the top of the books and the shelf above.
  • book_height_gap_deviation defines how much that gap may randomly vary. It is given as a proportion of book_height_gap.
  • book_depth_gap defines the mean amount of space that should exist between the front of the books and the shelf's edge.
  • book_depth_gap_deviation defines how much that gap may randomly vary. It is given as a proportion of book_depth_gap.
  • slant_frequency defines what amount of books should be leaning. Set to 0.0, all books will be packed tightly and orderly. Turned up, clusters of books will lean on their neighbours.
  • slant_amount defines how much those books should be leaning.
  • notch_frequency controls how many dents and notches appear in the edges of the planks. Set to 0.0, there will be no blemishes in the planks. This can be relevant to performance and should be turned up to the desired value after all other parameters have been set as desired.
  • notch_size defines how big these dents and notches should be.
  • stack_frequency defines how common the occurrence of book stacks should be on the shelves.
  • stack_cutoff allows you to restrict how close to one end of the shelf stacks should generate, as stacks can sometimes clip through the side of the shelf when generated to close to it. If that happens, carefully turn this parameter down.
  • stack_disorder defines how neatly the books should be stacked and how uniform they should be in their dimensions.
  • invert can only be set to 0 or 1. Toggling this will make the bookshelf face in the opposite direction.
  • Seed is the seed to all (pseudo-)random values of the node tree. Flip trough the seeds to find different random generations of the shelf you may prefer or to get rid of weird constellations of books.
  • Output Attributes > grain_rotation is an output from the node tree that is relevant for the texture mapping of the material applied to the planks. It allows things like the grain of a wood texture to run along the planks as you'd expect. To use it in your shader the shelf object must have in it's Object Data Properties a per vertex vector attribute. The name of that attribute can then be entered in the grain_rotation field under Output Attributes of the Geometry Nodes-modifier as well as an attribute node in the shader editor. The vector output of that node will then provide, in the different channels, gradients running along the different edges of the planks.
Sales 70+
Customer Ratings 2
Average Rating
Dev Fund Contributor
Published over 1 year ago
Blender Version 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 4.0
License Royalty Free
Have questions before purchasing?

Contact the Creator with your questions right now.

Login to Message