January 2010 – January 2011
Homestyler was an Autodesk Labs project (known as project Dragonfly) trying to create an extremely easy to use interior design application entirely web based.
For Homestyler I developed the rendering pipeline and the content creation tools used in house and by the 3rd party contractors working for manufacturers who wanted to showcase their products in our catalog.
Homestyler is a “2 and half D” product. It works in Plan view (2D) but also allows you to preview the rooms you created and decorated using catalog objects (chairs, sofas, beds, etc.) in an axonometric view.
That view can be rotated, and is constructed by drawing 2D pre-rendered views of the objects in the correct back-to-front order.
To achieve that, every object in the catalog had to be rendered as a full set of 360 axonometric views (1 degree incremental rotation each) plus the orthographic views.
When I Joined the Team
As the Homestyler content engineer left abruptly, I was dragged into the team and given the task to improve the rendering pipeline and prepare it for the product commercial release.
To understand the scope of the rendering tasks, think that each object needed 371 renderings. The catalog started with a few hundred objects, but the goal was to grow considerably. And at the beginning, each object was a separate 3ds Max file.
The plan was to group object into large scenes, use extensive instancing, and automate all possible tasks.
Imagine that a basic beds set had 1200 objects. There were 4 sets of beds, hundreds of doors, thousands of cabinets, and it just kept growing.
I needed to come up with a solution that would cover a much larger catalog of objects, but also simplify the process and remove a lot of the restrictions imposed on the content creators.
The image quality also needed to be improved, despite the expected increase in rendering time.
The solution was to create a set of rendering and content creation tools that allowed the content creators to easily manage large sets of objects and queue them for rendering.
The rendering was then processed by a small private render farm with minimum supervision and with the ability to recover from any failure.
Photorealism and Rendering Improvements
A second iteration of the tools also exported a copy of every object with higher quality materials for the photorealistic images rendered by the Homestyler snapshot feature.
Because of the vastly different look requirements for the axonometric renderings and the photorealistic ones, a tool allowed multiple material sets and was able to switch between them as required.
A final step I took to improve performances even more was to optimize rendering by avoid the overhead of rendering 360 individual rotated views.
To accomplish that I created a mental ray lens shader that rendered all the 360 views in a single image that was then sliced up.
Depending on the object, the rendering was 5 to 10 times faster.
Homestyler Tools Features
- Automatic instancing and renaming for easy variations creation
- Flexible objects assembly techniques to allow for possible animations and very complex structures
- Automatic Materials conversion from older or other materials types than the ones supported
- Complete material sets management to allow different materials for the 2D views quality and the photorealistic version
- Automatic splitting of large objects sets
- Render quick quality assurance images
- Re-render failed objects/images only
- Choice of renderer and lighting set-ups
Because of the high number of objects needed to satisfy combinations of products, I experimented with a way to rendered products that are placed inside others (sinks, fireplaces, wall ovens…).
The solution was not too complex, but integrating it into the actual product was. Also, as future plans were discussed, other ideas could have made this technique unnecessary.
Amazon EC2 version
After the toolset was completed and was being used by the 3rd party contractors to create the new content, I had some time to explore even better ways to render all those images.
I took a look at the Amazon Web Services and planned to make an even better network rendering solution.
In a couple of months I learned enough of Java and the Amazon EC2 APIs to create a fully automated prototype of the rendering farm, adding also some monitoring and auto scaling tools.
The prototype was presented to the team and management, and was good enough to be actually used in production. But at that time it was decided that the rendering was to become responsibility of the contractors and manufacturers, lifting that weight off Autodesk and our team.