3D Rendering at Wayfair

Wayfair uses 3D modeling in place of traditional photography to generate 2D images for thousands of products.

In place of the physical entailments of traditional photography, we create models using Autodesk’s 3DS Max. Models are submitted to a QA tool we built where analysts can communicate with modelers to ensure each model is an accurate representation of the product. To perform this quality check and to verify the dimensions, we render out a set of images so we can see the product from several angles.

3D Renderings of a Sofa

An example set of images rendered from a 3D model in our QA tool

Beginning Automation with Distributed Rendering

Once confident that we have accurate models we can then use them in different scenes to create realistic 2D rendered images. To support rendering, we initially built an infrastructure consisting of two sets of servers, render heads and render farm nodes. The render heads were created with the purpose of opening 3DS Max and setting up the models and cameras. The farm nodes were dedicated to doing the CPU-intensive, computationally complex part of the rendering process.

Early render farm infrastructure

Our infrastructure consisted of render head servers opening 3DS Max and sending renders to farm node servers

Distributed rendering

Distributed rendering: each square at the left represents one unit of work sent to a farm node

 

Using a Queue Manager

Basic distributed rendering was a good early solution, but it was difficult to scale. 3DS Max has a built-in render queue manager called Backburner that solves this problem. Using Backburner, rendering is sent from the render head to the queue manager rather than directly to the farm nodes, and the queue manager handles the distribution of work to the farm nodes.

Rendering infrastructure with a queue manager

The rendering infrastructure after adopting a queue manager

By switching to Backburner, time spent on render heads was optimized because they didn’t have to wait for the farm nodes to finish rendering and our farm nodes were better utilized because they didn’t need to be idle when the render heads were idle or setting up the model and the camera angles in 3DS Max.

CPU utilization before

CPU Utilization with distributed rendering

CPU utilization after

CPU Utilization with Backburner: our farm nodes were kept nearer to 100% utilization

Though Backburner helped prepare us to scale up the throughput on our platform, it wasn’t a perfect solution. We began to notice that renders frequently failed, but when we retried them, most succeeded. We didn’t find a magic solution to this instability, so we worked around it by automatically retrying renders that failed up to four times, assuming that if it didn’t work after that, there was actually something wrong with the model.

In order to continue to scale we started evaluating other render management systems. We are at the forefront using photo realistic rendering to help sell furniture and home decor.  Fortunately we are not at the forefront of figuring out distributed rendering and complex job management.  The entertainment industry has been investing into systems to improve rendering of movie frames for years.  Today there are a variety of software and cloud based render management solutions that we can take advantage of.

 

Never Done

In addition to using our existing farm, we plan to utilize cloud computers to help out our in-house servers. When we have a large backlog of models to process, we’ll be able to spin up as many cloud machines as we need, burn through the queue, and tear down the machines when the queue is empty again.

Our 3D rendering platform is a living system, constantly evolving to stay one step ahead of increasing demand. As we continue to ramp up production of imagery from 3D models, we will continue to adapt new technologies and ideas to maximize stability, efficiency, speed, and capacity.