Houdini Complex Scene: Antique Bookshelf

This project is a great opportunity for me to get hands-on experience with the workflow in Houdini and experiment with its proceduralism and dynamic systems. I decided to create a scene of an antique bookshelf full of books. RBD simulations are used in order to construct the collision between books and the shelf and to randomize the placement of books on the shelf. Lightings are established using mainly the instanced geometry lights and point lights, which are for simulating the candle flame. All aspects were accomplished in Houdini.

Final Renders
cam1_finala.png
cam2_finaln.png
References

- style images obtained from internet -

Ref_bookshelf.png
Ref_bookshelf1.jpg
Scene Setup & Overview
scene_setup.png

Rendering Statistics

 

Houdini Version: 18.0.287

Renderer: Mantra

Average render time: 1h 10 min

Image resolution: HD 1280 x 720px

Lights: 1 environment light,

            13 instanced geometry lights,

            13 instanced point lights                         

,

Sampling

 

Noise level: 0.01

Pixel samples: 5 x 5

Min/max rays: 8 / 16

Diffuse quality: 1.2

SSS quality: 1.2

Reflection quality: 1.2

Procedural Modeling

I started the scene by procedurally modeling the bookshelf. This parameter interface was created to control the shape and layout of the bookshelf and books, including the overall width, height and depth of the bookshelf, the numbers of its horizontal layers, the numbers of its vertical columns, as well as the amount of books on each shelf. 

bookshelf_2.gif
bookshelf_tool.png
Placing the Books: Rigid Body Dynamics

RBD was used in order to simulate the collision of books and the bookshelf in a physically correct way. By giving forces in different directions, the books not only collide with the bookshelf and actually sit on it, but also lean to each other and have a random titled angle, which adds a more natural and realistic look to the placement.

rbd_collision.gif

Here are some important parameters:

屏幕截图(616).png
屏幕截图(615).png
Texturing the Books: Randomize Texture

I created 4 different versions of book cover textures and randomly applied them to the books, by using two Attribute Randomize nodes. They allowed me to randomize the size and cover texture of each book based on its point location. I could also determine how many types of textures being used in the scene.

bookcover_beauty.png

Diffuse maps

bookcover_normal.png

Normal maps

bookcover_disp.png

Displacement maps

random_materials.png

Randomize material node

random_size.png

Randomize size node

Building the Candles

The candle model consists of three parts: the flame, the wax body, and the metal candle hold. In the beginning, I wanted to use pyro for making the flame, but later on decided to use geometry light shader because the flame is not a hero object in my scene, and geometry light is good enough to replicate the effects.

 

To model the candle hold, I used two different methods. The first one was using L system (following this tutorial here). I manually defined several curve sections and duplicated each section based on the portion I give to it until it got the specific curve shape that I wanted. And the second one is to simply create a line and polywire it, and then use a point wrangle node to control its thickness.

candle.png
Lsystem.png
line_wrangle.png

To model the candle holder

Method 1: L-system shape generation

Method 2: Point wrangle for shape and thickness

Lighting the Scene

Lightings are established using mainly the instanced geometry lights and point lights, which are for simulating the candle flame. I also used an environment light to illuminate the overall space.

屏幕截图(622).png
instance_light.gif