Ian Tan told us about the working process behind the Ferrari 330 P4 project, talked about collecting different kinds of references, and shared a detailed breakdown of the composition.
Hi everyone, my name is Ian Tan and I’m a 21-year-old freelance 3D Artist and Designer based in Singapore. I specialize in the creation of hard-surface models and designs for commercials and VFX.
I got my diploma in Animation in 2020. After that, I took various freelance projects here and there. I have created hero models for projects such as the Razer DeathAdder 2 and Razer Viper Mini commercials while doing work for Masonry Studios. I am currently working as a freelance designer and modeler for a few upcoming NFT projects.
I have spent a lot of my free time improving my skills by self-studying and seeking out feedback otherwise.
My fascination with mechanical objects began early, I remember sketching robots and making an AK47 and a bow out of Lego when I was young.
It’s only in the past year or so that I got into automobiles. Something about the way the smooth flowing lines and plane changes on a car body masking the complicated inner-workings to create a masterpiece of art and engineering really sits well with me.
I set out to recreate the historical Ferrari 330 P4 and its internal pieces in CG. I wanted to understand the inner workings of a combustion engine automobile and improve my modeling, texturing, and set dressing skills at the same time. Knowing more about automobiles also feeds into my designs.
The Ferrari 330 P4 was a legendary line of vehicles, part of an intense rivalry with Ford’s GT40. The P4 got 1st, 2nd, and 3rd places in the 1967 24 Hours of Daytona in counter to Ford’s 1st, 2nd, and 3rd finishers in the 1966 24 Hours of Le Mans. The P4 has also been called the most beautiful vehicle ever made.
I modeled the vehicle in Maya and Fusion 360, textured it in Substance 3D Painter, and rendered it using Arnold.
Here’s what sort of images I searched for in the creation of this project.
Images to look for (modeling).
Images to look for (texturing).
I think it’s important to first come up with a backstory by asking yourself questions of what the object has been through. Did it just complete a 24-Hour race? Is it brand new from the factory? Where has it been? Any specific details it would have? This will facilitate the search for more relevant references and make the textures more interesting overall.
I started modeling by setting up the blueprint images and drawing NURBS curves to match the contours of the vehicle. At this point, I also used the photographs collected to reference where the peaks and valleys of the various plane changes were.
After the curves were in place, I created a plane and snapped it to the curves created. I created a low poly yet accurate representation of the vehicle using the curves as a guide at this point. I was constantly making sure the surfaces looked good and accurate when viewed in 3D. I paid close attention to the size of the fillets and the bevels in place.
I smoothed the mesh and then added details after settling on the major form changes of the vehicle. A good rule of thumb is to only smooth as much as the detail requires. Keeping topology as low as possible at this stage will allow you to make form changes quickly and without much hassle.
With modeling tire and wheel rims, it’s all about finding the repeating pattern, modeling it once, and duplicating it around. I often used duplicate special with instances selected in Maya while modeling.
Andreas Ezelius has a great series on YouTube explaining his process of modeling cars with curves and modeling wheels, which goes into a lot more detail.
I decided early on that I would potentially show close-up shots of the headlights, wheels, the rear components, the steering wheel, and the fire extinguisher, so I paid extra attention when modeling to make sure all the fillets/bevels were accurate, all the details were in place and also added slight imperfections to the mesh during the modeling process.
After I modeled the body panels, the exterior glass parts, and the wheels, I looked at the specific part in one of the breakaway views and looked for it on the internet to try to figure out what it is and what it does. And then, through that, I got a complete picture of how everything fits together.
YouTube channels Engineering Explained, Donut Media, The Engineering Mindset, the HowACarWorks website, Wikipedia, sites of various car manufacturers like Porsche have been instrumental in improving my understanding of how vehicles work.
This is not an extensive resource by any means and only covers the main components and their basic functions. More research is required to derive more complete understanding of automobiles.
I used UDIMs for this project and separated the tiles according to their relative positions. Objects in the middle group were in their own rows, objects on the left and right were on other rows. I decided on this over separating the UV tiles by materials because it would make it easier to split texturing into different painter files and tackle each region as its own little project. This is the process Jay Machado taught in his Hard-Surface Modeling course on CGMA.
I used the backstory created for texturing to guide my thought process. I also logically broke down the materials into the layers used. For example, for the car paint, the base layer would be aluminum, followed by a layer of primer, then the car paint and a layer of clear coat. Breakup in the form of sand, dirt, and dead bugs came after that. I then attempted to recreate each of these layers using references to help with specifics. Here’s a rough breakdown I made before texturing.
To start the texturing process, I used 3D scans from Quixel Megascans or photographs as a base before adding layers of color, roughness, and height breakup on top and creating a smart material to be used throughout the project. Some examples are shown below.
I also made use of stencils to add specific breakup patterns to parts of the vehicle. For example, on the front of the vehicle, since I wanted the vehicle to look like it has been driven for a couple of days, I painted on bugs splattered across the front, as per Arvid Schneider's suggestion. I found images of splattered bugs on cars on the internet, created a black and white mask out of them, and used it as a stencil to add breakup to the front regions in Substance 3D Painter.
Jason Ord has a fantastic tutorial on ArtStation, where he shows how he uses stencils in his texturing workflow.
Texturing is definitely not a one-and-done process. It requires many passes going between Substance 3D Painter and the render engine. So it’s important to have high iteration speed (fast render settings or real-time applications) as well as critical feedback (from yourself or others) so you can get through the phase where everything looks bad quickly. The Pareto Principle comes into play here. Spend 20% of the time getting to 80% of the result, and the remaining 80% of time finessing the textures so that it looks as good as possible.
I also received feedback from Kirill Chepizhko about the scale of my textures being too large and too intense, which made me realize that paying attention to the scale of details is super important for making an object look realistic and of the correct size.
For my lighting setup while texturing, I used the same HDRI in Arnold as I used in Substance 3D Painter.
When lighting your final images, it’s paramount to consider what your intention is with each image. Is it to showcase the entire object? Is there a specific area you wish to highlight? Then consider how you can execute that with the variety of lighting tools at your disposal. For these renders, I really wanted to show off the forms of the car. Therefore, I tried to make sure the forms were easy to read, plane changes were evident, and that regions of the car were neither too bright nor too dark.
For the final lighting, I opted to place the vehicle in a CG version of the Batcave from Nolan's Batman trilogy (don’t ask why). The CG environment helped get some nice reflections onto the car, and reflections of the ceiling tiles of the car body inadvertently helped create guiding lines, which in turn helped to guide the eye between the front and the back of the vehicle. I also made sure to brighten the wheel rims to get a nice metallic sparkle in the renders.
During compositing, I like to work with Photoshop’s Camera Raw Filter to tweak values, add vignettes, brighten regions to bring attention to, and darken regions to detract attention from. Again, carefully consider what’s important to show in the image and make use of value to help you to achieve that. Final touches in the form of LUTs, Depth of Field, Lens Distortion, Chromatic Aberration, and Film Grain were added after that.
Alex Senechal has a great tutorial on the fundamentals of lighting and compositing, which helped me view lighting in a more methodical manner.
I’m no expert at composition by any means, but here’s a breakdown of one of my final renders' composition to give you an insight into my thought process.
When creating personal projects, pushing at least one aspect of it further than I have ever gone, learning new tools and skills in the process has helped me improve my work over time. Also, having people better than you who can give you feedback has been tremendous in opening my eyes to avenues in which my work can be improved. You will be surprised who you can reach if you just ask nicely.
I also think that there’s an important distinction that can be made for personal projects. Smaller scale, higher volume projects can allow one to rapidly improve a certain skill, putting the reps in to make it truly intuitive. Larger scale, lower volume projects can be good as portfolio pieces, bringing all the practice you have done together into one complete piece.
The 3D model of the Ferrari can be downloaded on my Gumroad for free.
I would like to thank Arti and the 80 Level team for the opportunity to work on this article.
Big thanks to Ong Jun An for assistance with the UVs of the internals, Andreas Ezelius for the inspiration, Michael Wilde, Arvid Schneider, Kirill Chepizhko, Steffen Hampel, Ivan Lim, and many others for their invaluable feedback.