Claudio Gallego is a 3D artist who has been creating renders for online configuration tools that allow users to view a product with different styles, finishes and environments which they can pick for themselves. These require many tens of thousands of renders to handle all the possible combinations, and we spoke with him to find how he manages these kinds of projects!
Read how Claudio creates the renderings for the configuration tools!
Let’s start with the final product – how many renders go into the final website?
For the billiards tables project, I had to create 26,133 files – that was 22,617 for PNG layers for the main configurator images, and another 3,512 for the 180-turntable images. Those are RGBa PNG files, so mixing them allows more than 2 billion unique possibilities!
Each PNG file represents one choice the user can make, for the billiards table itself (sometimes there are several choices possible for this one), for the playing surface, for the balls, for the options for the table… and all of that has to be done 6 times, once per ambiance / environment!
At the start of the project, I was planning to manage one occurrence of each choice, and to get the ambiance only from a background picture. But early on in production, we saw that the result would not be nice enough because of the perspective and the lighting. So in the end, I had to make 6 full sets of all layers in the different environments.
I had plenty of Excel files to manage all that, plus more than 50 homemade *.bat files for auto-renaming of the rendered files! As you can imagine, I could not afford any heavy Photoshop post-production or grading with so many images, so I had to make the pictures look the way the client wanted directly from the render.
There were some exceptions though: for some of them, I had to manage the shadows of the balls, the shadow of the billiards table on the floor, and the led-lighting by hand, using Photoshop and a couple of scripts made for this.
For ease-of-use by the website coder, I wanted to get the shadows to be part of the PNG RGBa files, but the CoronaShadowCaster could not help because of the fact that all objects were interacting and casting shadows on the playing surface, so things had to act both as a shadow catcher, but also as a shadow caster (for the shadows from the balls, for example).
I would love to have a shadow-oriented exclusion/inclusion system like for the lights, so that I could have the playing surface in ShadowCaster, with only the balls casting shadows on it. For these projects, I rendered a special almost-white picture with invisible-but-GI-involved balls (using the RaySwitch material) and then apply this shadow layer under the balls PNG layer.
After the billards tables project, the same customer asked for a Babyfoot football table configurator (also known as Foosball, or Table Football). This was a smaller project – “only” 18,904 files rendered!
How did you get started in 3D?
A loooooong time ago, I saw TRON at the theater, back in something like 1983-1984… and I knew then that computer graphics were going to be my world!
After some Architectural studies, I went to SupInfoCom (aka Rubika nowadays). It was in its second year of existence back then, and now it is one of the most famous 3D schools. Then I started to work in the 3D market, from small 3D illustrations for local magazines or ads, to Paris for some early CG SFX in feature films and ads. I’ve been to Lyon for Infogrammes (aka Atari now) for some video game experience, then Belgium for Casterman, then back to north of France for family reasons.
After working for several companies, I started my own, Naxos Images. Unfortunately, that went under after 9-11 and the market crash which followed. After that, I started Pole3D, a French 3D school, and then I returned to freelancing so that I don’t have any boss to bother me, other than myself 😉 I also teaching 3D again at MjM Graphic Design, in Lille France.
In parallel with the freelancing work, I started a new company, this time only a small one : just 2 guys, my friend as a salesman, and myself in production. ChromeLight Studio is now 8 years old, and we earn enough money to feed our families while doing what we love!
You can find some of my work on the ChromeLight’s website.
What was the first project like this that you worked on, and how did you end up working on it?
I first created a small test for my friend, so that he could sell the idea, with minimalist html/JS code to make it work. Then I made one for real, for a kitchen-maker company. After that came the billiards project.
How do you set up the different materials?
I had to make smart use of 3ds Max’s Xref scene system – each billiard table model has its own scene, imported into the 6 environments one after the other. Then all the shaders are MultiMaterial ones, with up to 35 matIDs, plus the 4 specials (created using the RaySwitch):
Invisible, invisible but GI, invisible with alpha, and gray128 non visible but GI with alpha. Then I put all objects into some “material” modifier to be animated.
A large Excel file was used to keep track of what rendered frame is what PNG layer; for example, when rendering the balls, the playing surface was gray128, visible, alpha blacked, all the rest of the pool table invisible, and each matID is a different color. Click the image below to see how that Excel file looks!
This system allowed me to start to render a full model at once, from the table, the table feet, the playing surface, the corners, balls, and so on. These were then all renamed using a command-line *.bat file, made from the Excel page.
For the incoming upgrade, I’ve added the queues, with different models, colours and size.
But as the queue is made from several different shaders, some of them using the same color but with different glossiness / bumps, I’ve used Corona’s MultiMap to render all the different colours in a row, as an animation. So the automation here used animated MaterialIDs.
How is the rendering done so that you can swap out the object on the website?
I used the RaySwitch material a lot to get special technical materials, for isolating each part needed for a specific PNG layer, and to have the output PNG already pre-multiplied with alpha.
I preferred not to use Render Selected, to prevent the problem with ‘contours’ around the objects as much as possible – remember, I could not afford any “remove contour” or “remove black contour” option in Photoshop for this many images!
The ShadowCatcher was not used, as I’ve explained before, since I had surfaces that needed to be both rendered, and used as a shadow catcher too.
I also had to use TinyPNG to reduce the size of all the pictures (using a script of course, not one-by-one). This is because even if the PNG is saved as an RGBa, it then contains all the picture information, but only shows pixels where alpha is non-zero. If Autodesk could give us the option to “collapse” the alpha onto the RGB info, then that would be a time saver for this step! Maybe Corona could have it’s own PNG output for that 😉
I would guess there are special naming conventions you have to use for the filenames of the saved renders?
Yes, the names were all made to be logical for the website coding team, because they used the file names for creating the code based on those names. Again, Excel helped a lot here, and some souvenirs from the days of background MS-DOS batch-coding…
How did you first discover Corona Renderer?
After so many years in the market, I thought I was settled on two render engines. Ok, sometimes I tested some new stuff for fun, but it was just for fun.
Then in 2015 I got a large project from a Belgian company, specializing in theme park design. The deal was to model, shade and render as always, but also to sell them my source files so they could use them to render more views.
The guy there had been using Corona since the Alpha, and since he was my customer, he pretty much forced me to use it! At first I was complaining “I don’t want to learn new software, I know enough of them, and I’m too old ;-)” He just looked at me, smiled and told me “Test Corona, you’ll fall in love…”
Now, 2 years after that, I’m using corona for 98% of my projects, with the other 2% being older scenes I have to keep for a returning customer that does not want any change in the upcoming pictures, and does not want me to re-render all from scratch!
As well as that, I’ve now been to Prague for 2 days for the Corona Academy. That was fun; work, rendering tips, nice people… a trip I will always remember!
What makes Corona Renderer your engine of choice for these kinds of projects?
Corona is fast, damn fast, and precise! I’m often involved in archviz projects, and for those Corona lets me render all the passes I need at once, and gives flicker-free, fast and nice images. Also, the material preview is really WYSIWYG! It is compatible with lots of nice materials, from Siger’s to BerconMaps, and Substance.
And, more than all of that, all that I have to manage and think about is only one rendering parameter : the choice between still image or animation! It is a lot easier than other engines that have a lot of parameters I have to worry about.
There are still changes that would benefit me in my work, of course – if alpha could be seen in reflections / refractions for example – but the Corona team is always working on updates and improvements, so we’ll see what the future brings!
Any differences in creating the content for the full 3D environment scenes and the 360 view scenes?
Yes, usually when I render 360 turntables, I just animate the camera – easy. In this case though, I did not use an animated camera, because the animation frames were being used for the output of all the different choices for a model.
So I had to “snapshot-copy” the animated camera, to create 18 cameras, then used the batch render to render everything out 18 times to cover every choice. The big issue there was to rename them afterward, and I ended up with some batch files calling other batch files…
Can you give us a bit of information about how the web page side of this works? Is it custom code?
I did not code the website, another company did : the customer was already working with them. The PNG RGBA layer system that I did code for the minimalist demo was used mostly for understanding the method, then adapted for the website, and the same with the 360 turntable code.
Any “false starts” on your first configurator project, mistakes that you can advise people to avoid?
The key is that you have to think about the project in a global manner, always trying to automate wherever you can, and never do “raw” or “baked-in” things but keep everything as parametric as possible. This way you can find the right method that will suit you / your project.
Also, always imagine that the customer would like to change anything at any part of the process! So parametric, logical, and not in a “raw” manner is the key. Write down the method you used in words, in a txt file… even if you think it is easy and logical now, it will not seem that way when you return to the project some months or years later! After several months, when the customer will ask for more choices / models, then all the information you need will be there, written out and logical, so that you are able to dive into the project again with no pain.
What hardware do you use for rendering?
My workstation is a dual Xeon with 2×14 cores, so that’s 28 cores / 56 threads in total, 64Gb of ram, and a GTX1080. With Corona’s speed and the IR, it is a real pleasure to work with such a beast! I’ll change when AMD’s new fast CPUs come with 4 on a motherboard 😉
I also have a small renderfarm, with 24 dual Xeons with 2×6 cores, but I don’t have enough money for 24 rendernodes Corona licenses, after paying for the render nodes for other engines I use!
Any current or future projects that you are working on?
Rigght now, I’m animating a Japanese-like toilet bowl, with the small water streams that clean it all up – you just never know what you might end up working on 😉 The good news here is that Corona can already render PhoenixFD water simulations…
Thanks for reading!