Jump to content
  • Advertisement
  • 08/18/19 03:25 AM

    How to Create a Realistic Formula 1 car in 3D

    Visual Arts

    adityarajani

    In this article, 3D Environment Artist Aditya Rajani goes in-depth in how he created a Ferrari Formula 1 car in 3D using Maya and Quixel. He shared insights on how to avoid some common mistakes while modeling and texturing and achieve realistic results.

    Background

    Aditya Rajani is a widely renowned 3D Environment Artist who has made significant contributions to numerous award-winning video games and applications for virtual reality (VR), console and mobile platforms with companies including Warner Bros. Games, Survios, and Ten O’ Six Productions. His work can be seen on some of the most critically acclaimed releases like CREED: Rise to Glory, a 2019 nominee for the VR Awards “Game of the Year”. He also lent his talents to the upcoming pirate simulator Battlewake for PlayStation VR, Oculus Rift and HTC VIVE. Other major achievements of Mr. Rajani include his work with Tiered World Studios on a STEM- themed mobile education application for children. As one of the project’s Lead 3D Artist and Designers, Rajani helped bring to life the characters and environment integral to the game which introduces young learners to art, innovation and entrepreneurship.

    Breakdown

    Step 1: References

    Formula 1 car is a complex machine. The sheer technical aspect of constructing a Formula 1 car is immense. Weight Distribution, Aerodynamics, Engine Power, Hydraulics, Downforce - all these factors change the complexion of the game. And so, to build a Formula 1 car in 3D, collecting reference images is key. It comprises of so many little parts, that having a few good reference images can really help push the realism further.

    concept.thumb.jpg.1eac64da2e3dbc48aa987180d7d402f2.jpg

    There are several websites where you can grab reference images from - google, pinterest and most important - blueprints.com. To match the photorealistic aspect of a real F1 car, having orthographic views of a previous model is extremely important. With the help of the front, top and side view images, you can trace the car with the exact size and scale just like a real-world car.

    Front_View_resized.thumb.jpg.3191fd5ac6b062b1e89a9245f705d908.jpg

    Side_View.thumb.jpg.bfa9ba23b17bcdb9c384b50821a6f248.jpg

    Step 2: Modeling/UV unwrapping

    Once you match the overall size and shape with the references, then you can start adding more details to the model by way of subD modeling i.e, by adding subdivisions/edge loops. It's important to stress that by adding too many unnecessary edge loops, the model can become quite high poly fairly quickly and practically unusable. One quick tip that I wanted to share is that with models like cars or other vehicles and weapons, there are so many little objects and keeping track of them can be a bit of a headache. Naming them appropriately can go a long way in saving you time later down the line. It's fair to assume that naming objects is something that can be completely overlooked while modeling or grouping objects, but by developing a habit to name those, it'll save you precious time which can be focused on other tasks. It's also important to plan ahead by looking at textures before you add details. In this case, since the car had different colors on the same part of the mesh (red/white patches), I made the faces/edges follow the color pattern so I can quickly mask it by assigning a material ID to it. Little things like these will save you a lot of time and often times, fixing it later will cost you more time and effort than recreating it so having that awareness can help you grow as an artist.

    body_COLOR.thumb.png.6ba918a3a4e7dbdf459f577dd389fe9b.png

    seat_COLOR.thumb.png.2003b372543c7b13aa0de6151a52d3d6.png

    Step 3: Texturing

    Texturing is the most fun part for me. It's like a puzzle - trying to piece everything together. An average looking model can look great with the help of awesome textures but a great looking model can get ruined by mediocre looking textures. Establishing proper surface depth of materials is extremely important as it's the first thing people see when they look at a model. Adding small surface details like roughness variation, grunge, dirt, oil leaks, grease etc. can convey a lot of information and storytelling like how old a model is, what type of environment it was exposed to, whether that place is old or new, what type of weather an object went through etc. By adding details via textures, these questions can be answered automatically and gives the environment/object strong personality.

    For texturing this car, I used a combination of Quixel Suite and Substance Painter. I feel like both tools can be used to your advantage. Since there were a lot of sponsor logos that I had to put on, Substance Painter was the superior choice because of its easy interface. Quixel had a lot of good metal smart materials in their library at the time so I used it for texturing the main body. When using logos, it's important to make sure that the resolution is set to very high (at least 600 dpi), else the edges might appear jagged and can look very ugly.

    836771247_logossheetall-in-one.jpg.28f7fda65358a3fffa9a0e9c00d5d30a.jpg

    For adding normal wear and tear to a model in Substance Painter, smart masks can be a great starting point but it's important to not rely on them too much. It can look really robotic and rigid. For adding things like rust, studying an object that you're making can be really beneficial too. For example, if you're making a helmet, find reference images of a helmet exposed to natural surroundings and study the effects it has on it. If it's a place where it rains a lot, and the helmet was lying on the ground for years, then it's going to have even more wear and tear than usual. Pay close attention to the direction of the rust and try to replicate that on your 3D object.

    Step 4: Rendering

    Lighting and Rendering plays a vital role in presentation. It's essential to spend enough time presenting your work on your portfolio by choosing different camera angles that are pleasing to the eye. With the help of Marmoset Toolbag, it takes only a few mins to present high quality work thanks to its real-time rendering capabilities. For this project, I'm just using one directional light and an HDRI. For post-processing, I played around with Brightness, Contrast, Exposure and Gamma values until I was happy with the result. Showcasing how your model looks under different lighting conditions is also a good idea. Turntables can be quite effective in presenting the models in real-time. Breaking down your render shots shows an insight into your process and highlights different stages of production. It's always good to post different types of screenshots like AO only, Grayscale only and Wireframe to break it down further.

    001.thumb.jpg.36837d978373e13a99a2298e0551b78b.jpg

    003.thumb.jpg.ffe61f6b316faa9b9ec97c60c5819e08.jpg

    002.thumb.jpg.5b7810a122e1191a5bdac1909de56918.jpg

    004.thumb.jpg.39374aa27100758e6b7007c641872b9e.jpg

     



      Report Article


    User Feedback

    Create an account or sign in to leave a review

    You need to be a member in order to leave a review

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

    There are no reviews to display.


  • Advertisement
  • Game Developer Survey

    completed-task.png

    We are looking for qualified game developers to participate in a 10-minute online survey. Qualified participants will be offered a $15 incentive for your time and insights. Click here to start!

    Take me to the survey!

  • Advertisement
  • Latest Featured Articles

  • Featured Blogs

  • Advertisement
  • Popular Now

  • Similar Content

    • By bandages
      So, in real life, incoming dot normal at the silhouette is always 0.  With smooth shaded meshes, it never is, not naturally, not outside of contrived situations.  (Not with flat shaded meshes either, I guess.)
      And incoming dot normal is one of the bedrocks of CG.  Probably the equal of 4x4 matrix multiplication.  Problems with silhouette normals show up in Fresnel, in diffuse lighting, in environment mapping....  everywhere.  But I can't really find anybody talking about it.  (Maybe I'm not Googling the right terms.)
      Obviously, the problem decreases as poly count goes up, eventually reaching a point where it's dwarfed by other silhouette problems (like translucency or micro-occlusion) that CG doesn't handle well either.  But, if I'm reasoning correctly, normal maps don't improve the problem-- they're as likely to exacerbate it as improve it, and the exacerbations are, aesthetically speaking, probably worse than the improvements are better.
      I've tried playing with crude fixes-- basically, rotating normals toward incoming by a percentage, or of course clamping incoming dot normal (like we all have to do) to prevent it from bending behind the mesh.  Nothing I've tried looks good.  I suppose the best option might be to rotate normals to perpendicular to incoming at the silhouette and then interpolate to the nearest inflection point  of something like screen space depth to preserve curvature, but the math for how to do that is beyond me, and I'm not sure it would look any better.  Or maybe, instead, somehow, adjust the drawn silhouette to match the silhouette defined by incoming dot normal?  Not even sure how that would work, not if the normal was pointing away from incoming.
      I don't know-- is this a solvable problem?  Has anyone tried other stuff and given up, pursued anything that was promising but too expensive, anything like that?  Are there any papers I'm missing?  It's really surprising to me that I can't find anyone else talking about this.
      (Apologies if I chose the wrong subforum for this.  I considered art forums, but I felt that people frequenting the programming forums would have more to say on the subject.)
    • By vinibiavatti
      Hi there! I have one issue for now. I'm creating a RayCasting application, and for my floor and ceiling I'm trying to use Mode7 for rendering (I think this is easier to understand). but, I cant align the RayCasting walls with the mode7 floor. I use a rotate matrix to make the rotation of floor. Do you know what a need to think in the implementation to fix that? Or do you know if there is some tutorial explaining about it? Thanks!!! (Check the image below for understand)

      Here is my mode7 code:
      function mode7() { let _x = 0; let _y = 0; let z = 0; let sin = Math.sin(degreeToRadians(data.player.angle)); let cos = Math.cos(degreeToRadians(data.player.angle)); for(let y = data.projection.halfHeight; y < data.projection.height; y++) { for(let x = 0; x < data.projection.width; x++) { _x = ((data.projection.width - x) * cos) - (x * sin); _y = ((data.projection.width - x) * sin) + (x * cos); _x /= z; _y /= z; if(_y < 0) _y *= -1; if(_x < 0) _x *= -1; _y *= 8.0; _x *= 8.0; _y %= data.floorTextures[0].height; _x %= data.floorTextures[0].width; screenContext.fillStyle = data.floorTextures[0].data[Math.floor(_x) + Math.floor(_y) * data.floorTextures[0].width]; screenContext.fillRect(x, y, 1, 1); } z += 1; } }  
    • By DiligentDev
      The latest release of Diligent Engine combines a number of recent updates (Vulkan on iOS, GLTF2.0 support, shadows), significantly improves performance of OpenGL backend, updates API, adds integration with Dear Imgui and implements new samples and tutorials. Some of the new features in this release:
      GLTF2.0 support (loader, PBR renderer and sample viewer) Shadowing Component and Shadows Sample Integration with Dear Imgui library and Dear Imgui demo Tutorial13 - Shadow Map Tutorial14 - Compute Shader Tutorial15 - Multiple Windows Check it out on GitHub.
        
       
       
    • By neiji93
      how is the BSDF function used in the kajiya rendering équations ? We know that path tracing proivde an analytical solution and we saw the BSDF function at first time in the path tracing algorithm. After that, is there a way to use mutliple BSDF function in a full rendering process ? If you have some links to any books or website, please share it !
    • By Data7 Games
      Project Name: Rift One
      Role Required**: (Language - C#)
      - Dedicated Unity Programmers
      My Role: Project Lead
      Previous Projects: N/A
      Team Size: 6
      Project Length: n/a
      Compensation: Rev-share until we get funding.
      Responsibilities: 
      - Must know Unity. 
      - Must Know How Gitlab & Sourcetree work
      - Advanced Programming.
      - Friendly and chilled
      Project Description: An Sci-Fi FPS based in a alien world, where you, mark maxin are forced to enter a portal that transports you to another world.
      **Contact**: please Email us at data7games@gmail.com
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!