Making of Urban Apartment by Enrico Cerica
Enrico Cerica published his Urban Apartment personal project renders on the forums a month ago. He made an impressive set using the Octane Render GPU application and I was very intrigued by that. It is not the first time I’ve seen work being done with Octane Render… you all remember Bertrand’s work with it too, but this time Enrico showed us a complete apartment model with lots of modeling and texture detail in it which we all know is an issue with GPU based ray-trace engines due to memory limitations. I asked him to share more information with me about his work and the way he manages his scenes and that turned into this article. Enjoy!
Author : Enrico Cerica
Enrico Cerica is working in the IT field for several years as his main job. 3D is a hobby of his, but he also works as a freelancer and have the chance to do some professional projects from time to time.
I’m pleased to share one of my last personal projects experience with Octane Render from Refractive Software.
My goal was to create a Parisian like apartment with some modern furniture but keeping some “old style” touches like wooden parquet, windows, metal balcony or fireplace.
This is not to be considered as an in-depth Octane Render tutorial, and I will focus on several techniques I used to render indoor images using Octane Render and the Blender to Octane Redner exporter.
I will also talk a bit about the trick I used to improve the production during the export process from Blender to Octane Render.
I mainly used Blender 2.62 for modeling, to create UV maps and for the texturing. I used several modifiers like subdivision, displacement and arrays.
For the carpet I used a displacement map on a subdivided (4x) mesh. As Octane Render doesn’t support displacement yet, the meshes should be displaced in the modeling application before the export process.
I also used displacement for the plaster over the ceiling chandelier.
Displacement is an easy way to avoid the modeling of such complex geometries but it consumes a lot of video ram and I try to limit this to one or two objects in a scene. For the plaster I probably should have backed the texture as a normal map.
I also used Marvelous Designer for modeling quite all the clothes in the scene, like the…
- Bed covers
I finally used a self made blender tree generator script to create the Ficus plant, this is still a blender 2.49 script and I use it to create all my trees.
Except the fireplace which is a mix of several free models, the statue and the shoes, everything else has been modeled by me.
The texturing process is probably the biggest part of this work, mainly for the UV mapping. Some objects are really hard to UV unfold even if Blender provides one of the best UV mapping tools out there.
Most of the textures are self made or grabbed over the CGTextures. I tend to keep them in the highest resolution to be able to make detail shots near elements.
I usually modify the textures to make them tileable and often stitch several images (when provided) to create a none repetitive map… the wooden floors for instance. I also create bump and spec map based on the diffuse map.
Images – all in onE
To reduce the amount of single images required for textures and to limit the impact of the Cuda limitation I simply combine several images in one single big image. I did that for the books and have about 3 big images including each about 30 covers, so with 3 images I can handle about 90 covers.
Ok… this is not an easy task, but it overcomes a GPU / Cuda limitation and save on resources, so once done… it’s very useful.
The hardware configuration I used is as follows :
- Workstation is a 64bit system.
- Processor is an i7 at 2.83Ghz.
- 16 GB of memory are required to fill the 3Gb memory of the video card without paginating, the Octane voxelization process needs much RAM.
- 2 x Gigabyte GTX580 with 3GB VRAM – used for the rendering
- 1 x Asus ENGTX480 with 1.5 GB VRAM – used for the display
Rendering software used
- Octane Render v2.58c
- Blender 2.62 to Octane Render script version 1.16
Octane rendering process
Octane Render provides several rendering engines, Path Tracing and PMC produce the most realistic results as they are physically correct, they handle indirect light, produce caustics and whatever any unbiased render engine would produce.
Direct lighting mode 4 is a bit faster than Path Tracing / PMC and mixes ambient occlusion and indirect lighting controlled by an additional parameter, I often use it as it produces some really nice results comparable to what could be achieved with Path Tracing but faster and in my opinion with better shadows in some conditions, though it is not physically correct and may not handle all physical properties like caustics.
Direct lighting mode 3 is just an ambient occlusion rendering, so no indirect lighting, no caustics but way faster than anything else, a neat image could be rendered in about 5 min and even less where the other engines would require 5 hours!
Other render engines may be useful as they produce a Z depth map, colors Id’s for objects in the scene and even a normal map. Z depth map could be very interesting to control depth of field in post processing, though I didn’t use any of them for this project.
I use to render an image with Path Tracing or PMC using an HDR map for lighting and the same view with direct lighting mode 3 using sun for lighting and mix them during the post processing. For now this is the only way to illuminate a scene with sun over an HDR map, this will be illustrated later on.
Octane Shaders / Materials
My Octane Render shaders are quite simple, I usually don’t use the node system to create them. I let Octane Render create the materials from the MLT file (created during the .OBJ export process) and adjust them to fix specularity and bump values, convert specular to glossy transparency for windows, etc.
I rarely use procedural textures as it’s very hard to get realistic results with them. So all my textured materials are based on image maps.
I tend to use low spec and bump values to avoid too much fireflies, I also often use a mix of diffuse + glossy material for shaders like porcelain or plastics to reduce even more the glossiness. I noticed that in some situation glossy materials tend to become dark, using such mix shader may also help to avoid it.
Mixing material may also be useful when for instance two bump maps are required on the same shader. I used that on the pillows. One bump map to produce additional wrinkles on the edges and another one to produce small wrinkles on the global pillow surface. By the way same result may probably be achieved using two texture nodes on a single material.
Here is the material mix for the pillows:
For the buildings around the scene, I used a cylinder. I first stitched several images grabbed over the great CGTextures site to get an image as large as possible.
I then used this image to map the cylinder, it doesn’t cover the whole cylinder surface but enough to render a 120° view.
To let the sky appearing over the buildings I created an alpha map used to make the sky part of the building environment map transparent.
Windows and walls
Instead of using specular material for windows I rather use glossy material with an opacity factor of 0.1 – 0.2 and a reflectivity of 1.0 This is really useful to reduce the noise and fireflies as glossy transparent material doesn’t produce any caustic, specular material produces caustics and this may generates lot of noise and fireflies in indoor scenes.
Don’t forget to set the alpha shadows to let the light entering in the room through the windows.
Light is the main concern in indoor renderings, all the holes allowing the light to enter are welcome, so don’t hesitate to remove/hide walls when it is possible. For this scene, I split the ceiling in several parts and used one material for each of them, this allows me to make non visible ceiling part transparent (opacity = 0) to let the light entering. The same can be done with walls.
For post processing I mainly use two products, a free version of neat image which helps me to reduce the residual noise and Gimp which is really sufficient for my needs, I use it for mixing process, to adjust colors and lighting curves.
Not much is done other than that…
Here are some final images…
Trick for complex scenes
The scene is quite huge and it was very difficult to manage it in Octane Render for several reasons.
- Big resulting OBJ file which requires a long import / voxelization process.
- Exceeding of video memory limitations.
- Too many images were required to handle all the textures used in the scene considering the Cuda limitation (32 x 8 bit images and 64 x 32 bit images).
- Too much memory used to handle hires images.
Blender interface doesn’t really help to manage complex scenes, layers management is limited, spreading objects in different scenes is not easy or user friendly and by the way it’s impossible to link a scene context to a camera.
As many of the scenes I’m creating have to face those limitations I quickly had to find a way to reduce the amount of exported data from Blender to Octane in a simple and reproducible way. So I developed my own Blender script which helps me to save a scene view after hiding some objects and setting some modifiers like subdivision, arrays or particles system.
For instance, it’s really useless to have a subdivision factor of 3 or 4 on a displaced carpet if this one is so far than those details wouldn’t be perceptible, a factor of 2 or even 1 may be sufficient. Same for particles used for carpets or grass, if for a close-up we need about 30k instances for a carpet, if it is far, 10k or even 5k may do the job.
How does it work?
I select a camera which basically will give me an idea of the overall area I will render. I just hide all non relevant objects, reduce the subdiv’s factor for far objects, same with particle system and once I have the scene layout corresponding to my render area I save this situation under a suggestive name.
I can do that for each view I would like to render and can simply recall this configuration later on without having to redo all the work for hiding and setting objects and modifiers.
I hope you enjoyed this article, and that it gave you a glimpse to what working with Octane Render is like… and what you can achieve with it.
Go ahead and ask away anything you like in the comment section below…