Check out this in-depth making-of the Best of Week 48/2016 – “Nuremberg Bathroom” work by Mohammadreza Mohseni from Vivid Visual Studio. This was done using 3dsmax, Corona Renderer and a bit of MAXScript too. Enjoy!
My name is Mohammadreza Mohseni. I am the Co-Founder of Vivid Visual Studio in Iran, and I am a certified architect with a Masters in Architecture.
Additionally, I have over ten years experience in architectural visualization and architectural photography, and I hope you enjoy reading this making-of article.
Clients’ behavior and their interaction with artists is the axiom that can make the job pleasant and can lead an artist to create extraordinary artwork (besides the technical and artistic capability of the artist).
In this project, the client did not limit me, and she was open to my recommendations about the design, colors, harmony, materials selection and lighting design in the process.
When dealing with a confined space such as a bathroom, there is no other choice except focusing on the details! It is a laborious and time-consuming process to cover all aspects of the project, such as lighting, materials, and modeling.
So, before we begin the walk-through, please keep in mind that adding lots of detail was my priority.
For this project, the client sent me a 2D CAD file, plus some reference photos to act as inspiration. You can see the references below (the inspiration photos are from the houzz.com mobile app).
I used Subdivision Surface Modeling for the hard surfaces objects… that is, almost everything in this scene! A few models are from 3dsky.org and Evermotion.
To control the resolution of the models in each camera shot, based on how much detail I needed for that particular shot, I changed the OpenSubdiv Render Iterations parameter using values between 2 (for objects that were further away) and 4 (for objects that were seen in close up).
You can see below how the Render Iterations affects the smoothness of the model.
To control the Render Iterations efficiently, I wrote a simple script to quickly change this setting for all objects in the scene, or for the objects which were currently selected.
You can find this script below for you to use.
Control OpenSubdiv Render Iterations Script
Run the MAXScript Listener (F11) and then copy and paste the script that I wrote, replacing X at the end of the script with the number you want for the Render Iterations parameter.
TIP : Be aware changing the resolution of a model will affect render times.
To run on all objects in the scene.
for i in objects where ((finditem (for m in i.modifiers collect classOf m) OpenSubdiv) != 0) do (for m in i.modifiers where (classOf m == OpenSubdiv) do (m.useRenderIterations = true; m.renderIterations = X))
And to run on only currently selected objects.
for i in getcurrentselection() where ((finditem (for m in i.modifiers collect classOf m) OpenSubdiv) != 0) do (for m in i.modifiers where (classOf m == OpenSubdiv) do (m.useRenderIterations = true; m.renderIterations = X ))
Below, you can see wireframes of several of the camera angles. I adjusted the amount of subdivision based on how much detail I needed in any given shot.
Camera & Compositions
I used the golden ratio as a guideline to compose my camera shots. You can see it below, overlaid on the renders.
Finding the right camera settings is easy if you have a background in photography (like me), and it will take a less than a minute to set your camera exposure triangle for your lighting scenario.
Even if you don’t have experience with photography, it is not a big hassle – you can use one of my scripts called “DSLR Exposure (EV-LV Method)” to help you set your camera. The script supports the Corona Camera Modifier, as well as other camera types, and you can download it here.
TIP : If your priority is DOF, use AV mode; if your priority is Motion Blur, use TV mode.
Now we will begin focusing on the details, aiming to keep it simple but realistic. One of the ways to make your lighting realistic is by using an HDRI.
Using an HDRI will help you create realistic, natural lighting, with variations in ease.
You can, of course, use other methods, such as using a Corona Renderer Sky (which is fantastic) and get a pretty damn good result, but I usually go for the HDRI approach.
Note: be aware that using a Color Correction map will increase the render time.
Then just drop that Color Correction node into the Corona Renderer Scene Environment.
After setting up the environmental lighting, it’s was time to set up the artificial light.
I aimed for a desaturated atmosphere, but I did not want my materials to look pale, mainly because most of the materials have a kind of gray tone in general. So, I decided to create a chromatic contrast in my lighting by using the complementary color of the environmental light. I saturated it quite a lot to make it more attractive to my client’s eyes.
All the artificial lights have the same setup, with variations of intensity. You can see their positions in the pictures above, and below you can see the light settings I used.
TIP : The diffuse light boxes have frosted glass in front of them. Even those below the console or those below the edge of the tub have it. This is to help make the lights look more realistic.
For the switches and socket lights I have used a Corona Light Material with a very basic setup:
After setting up our lighting, it is time to begin the fun part that is material creation!
Tip : Don’t use a pre-made or converted material as is! Be sure to adapt it to your needs and make it look awesome!
I have used the Complex Fresnel plugin by Siger Studio (it’s free) to create a more realistic shader. To use the Complex Fresnel shader, disable the Corona Renderer Fresnel by setting the Fresnel IOR to 999 in the Corona Material.
For the Glossiness, I have used a composite of several maps. You can see the setup in the picture below.
If you do not want heavy scratches, it is straightforward to modify it. Just play with the opacity of the scratch map layers in the properties of the Composite map node, and you will be able to get the result you are aiming for.
Clear Glass :
Simple easy… check it out below.
Frosted Glass :
Simple easy… check it out below.
Using this setup will give you a realistic result, but it does come with a price. Rendering will be slower, mainly because I have used this kind of glass in front of my diffuse lights to get a more realistic result.
Be aware of what you are looking for, whether it is a super detailed image or low render times. Details require more time invested in the scene creation and rendering!
TIP : If you want a tint of color on the glass edges, you need to model the glass correctly and in full detail. You won’t get a beautiful result using a simple plane and a glass material!
I did a little bit of tone mapping and adjusted the exposure by +1, or in some images by as much as +2 stops if needed.
Then I added glare and bloom using ArionFX.
Corona Renderer has its lens effects, and they are fantastic, but after some testing, I liked the result of ArionFX for this particular set of images.
I then introduced more contrast to the images and added sharpness using the Unsharp Mask filter, and the final images are ready!
A pretty straightforward and simple procedure. You can see the layers in Photoshop below.
And you can see the post-production steps in the image below as well.
And that completes the project!
Here are some of the final renders :
You can see the complete set of images over at Behance.
Thank you for reading, and I hope you found some useful tips here, and that you find the scripts useful!
Co-Founder / Vivid Visual Studio
Instagram : https://www.instagram.com/mohseni.mr/
Email : [email protected]
Vivid Visual Studio : https://vividvisual.studio