Click Here to view all the amazing entries to Rookie Awards 2024
Student Demo Projects / 3D Generalist - Asset Artist
Share  

Student Demo Projects / 3D Generalist - Asset Artist

Marc Peskoller
by MarcPeskoller on 31 May 2024 for Rookie Awards 2024

Hey! :-) I'm Marc, an aspiring 3D Generalist and recent graduate of PIXL VISN Media Arts Academy. This is my Student Demo Projects collection, showcasing my skills in 3D and asset creation. Each project reflects the diverse challenges and creative solutions I encountered. Enjoy exploring my work!

16 506 6
Round of applause for our sponsors

Project 01. - Gauntlet Fighter

I couldn't say no when my project lead Calvin Gotta and my fellow students Carlos Eulen, Lisa Maria Zeuge and Debora Hirsch asked me during my studies if I would like to collaborate with them on a short film set in the Star Wars universe. We needed two important assets for this project and one of them was the Gauntlet Fighter. As I wanted to create an asset for my first demo project, which involves certain technical difficulties, this challenge came at just the right time.

I would like to make it clear right from the start that only the Gauntlet Fighter was created by me for this project. In relation to the hero images above, the compositing, lighting & rendering was done by Calvin Gotta, the animation by Lisa Maria Zeuge, the cave environment by Debora Hirsch and rigging by Carlos Eulen.

Breakdown Modeling

Part 01. References

Many know the game, first look for references so you know what you actually need to get started. For me it was important to find different references from different versions of the starfighter, because the goal was not to copy a reference 1 to 1, but to create a version from both worlds. By both worlds I mean the base shape of the ship from Star Wars The Clone Wars and the details from Star Wars The Mandalorian. This gave me some creative freedom, to reinterpret the shapes of the ship. Below you can see the two most important references in large format.

Part 02. Blueprints & Blockout

I imported blueprints I found online into Maya's orthographic views and created a bounding box to determine the correct dimensions and proportions of the space fighter. 

Then I modeled using various methods, such as box and polymodeling, until I had solid basic shapes. I already had the moving parts in mind and always had to check if they would fit well into the main mesh. Then I focused on the panels, using a double bevel method to keep the spacing between the panels exactly the same. At the end of the blocking phase, all remaining edges were beveled.

Part 03. Functional Hydraulic Parts & Rigging

After the first blockout phase, I focused on the hydraulic parts to pass the asset in the pipeline as quickly as possible to a student colleague (Carlos Eulen) who took over the rigging. We encountered a few problems and both experienced once again what it is like to work in a functioning pipeline. For example, parts such as the pistons of the landing foot and the hydraulics inside the thrusters had to be readjusted during rigging. This process was sometimes very time consuming, but the end result was definitely worth it!

Part 04. Detail Parts

Now that the rigging could continue without any problems, I concentrated on the visual details. These pieces didn't need to be functional, they just needed to look good, so I took inspiration from various Star Wars spaceships and let my visual creativity run wild. However, I stuck very closely to the detailed reference of the Gauntlet Fighter from Star Wars The Mandalorian. The great thing about this ship was that I only had to model the details for the wings on one top side and later duplicate them and transfer them to the other side. To avoid spending ages on the UV unwrapping at the end, I unwrapped them for each small part immediately after modelling.

Breakdown Texturing

My goal for this asset was to create a realistically textured version of the starfighter from Star Wars the Clone Wars (red paint job). At the same time, we needed a "clean" and a sandy version for our short film, so I had to plan two different texture versions.

 

Part 01. UVs

Due to the enormous size of the object (65 metres long), I needed an appropriate texel density so that the textures would not look too low-resolution at close range. However, I decided to use 78 UDIMs so that the whole thing wouldn't get out of hand. I created a UV layout for the main body and for the small parts of the upper side of one wing. Only then did I copy the modeled details of the top of the wing onto the underside of the wing. This allowed me to easily move the copied UVs of the underside detail parts in the UV editor without having to recreate the layout for the underside detail parts. I then duplicated the first finished wing to the other side and moved the duplicated UVs again to save myself work. The UVs were sorted by material and body part and labeled accordingly so that I wouldn't lose track of them during the texturing process in Mari.

Part 02. Dismantling 

Before I could even think about texturing, I had to take the asset apart completely in a new scene and arrange the hydraulic parts individually so that I could then bake and texture them properly. After the dismantling phase, I exported the asset subdivided & non subdivided in order to save some performance for more computationally intensive tasks in Mari.

Part 03. Baking & Custom Stencils

I imported the asset into Adobe Substance Painter to bake utility/mesh maps and some breakup maps. Then I started looking for more suitable breakup maps that I could use as templates for hand-painted scratch/dust/dirty breakups. For the larger decals, I also created my own stencils in Photoshop. Once I had all texture maps together, I created my Mari project and imported the asset and all the associated maps into Mari.

Part 04. Mari Node Graph Overview & Custom Material

The following image shows the entire project node graph in Mari. At the top you can see the mesh maps from Substance Painter and the additional geo-bakes from Mari. In the second row are the main isolation masks that define where each material is located, and directly below are all the breakup maps that I was able to reuse for different materials. For all mesh maps and isolation masks, I used teleport nodes to be able to reach them in every level of the node graph. At the bottom is the main texture pipeline, which contains all the overlapping materials from left to right and their breakup masks.

I created a custom material node for the different materials, which I then just had to copy for each new material. Each material contains a channel for base color, metallicity, roughness, normal, bump and displacement. This workflow allowed me to keep my node graph smaller and clearer. I could then display the most important channels directly in the node properties using the group node knobs. 

Part 05. Material Structure

The following image shows how I constructed a material. The corresponding material is connected to other materials via a multi-channel merge node. It is important to pay attention to the order in which the materials lie on top of each other. The area in which the material is to be located is defined via a teleport node that is connected to the main isolation mask. Several break up masks are then multiplied into the main isolation mask in order to break up the corresponding material at certain points. For my workflow, this means that I usually work with inverted breakup masks to get more consistency in my node graph. At the end of each mask chain as well as each channel (base color, roughness, etc.) I used bake points to save my project from sudden program crashes.

The following process view shows the mask strand of the material just shown and how the break up slowly builds up node by node.

Part 06. Output Channels and Export 

I created a corresponding output channel for each texture map. I combined the black and white channels such as roughness, metallicity and bump into the individual RGB channels using a vector combine node in order to keep the texture files smaller and to have a better overview of the shader later on.

Part 07. Final Result 

"Clean" Texture

Beauty - Base Color - Roughness - Metalness - Normal

Sandy Texture

Beauty - Base Color - Roughness - Metalness - Normal

Conclusion

First of all, I'm super happy that I was able to take on this challenge. During the creation process I was able to learn a lot and put my modeling and texturing skills to the test. Especially designing, modeling and integrating the hydraulic parts was a big challenge for me.

I would have liked to have had more time for texturing to give some parts even more attention to detail. Nevertheless, I had to stop at a certain point to have time for more demo projects. Would I build and texture the asset in the same way again? I can't answer that with a clear yes or no. On the one hand, I learnt a lot, but on the other hand, the asset was far too big and complex for our demo time. If I were back at the beginning of my demo time, I would rather model something smaller to have more time for texturing the details.

Project 02. - Porsche 911 GT3 Cup (992) 2021

I am and always have been a big fan of cars. Growing up with a father who worked for GM and brought home V8 muscle cars every weekend was heaven on earth for an 8 year old kid. Now, as a grown man, building my own car in 3D was a no-brainer for me. At the same time, it is the perfect hardsurface asset for me, which brings with it certain technical difficulties. Many people may argue that a car is boring and that many people model cars for their demo reels, but for me it was a conscious decision and I really enjoyed the process from start to finish. And in my opinion, that's the most important thing about a good portfolio piece.... the passion behind it!

Breakdown Modeling

Part 01. References & Blueprints

I started this project by searching for enough references, that would cover all parts I would like to include in the model. Since I also wanted to include the interior as well, this step took me way longer than for the fighter. After I found a decent amount of references and blueprints, I started to search for the correct dimensions of the car (bodyparts, rims wheels etc.). 

Part 02. Modelling Wheels

Before I started blocking the main shape of the body, I modeled the wheels with real dimensions I found online. Since rims always repeat in shape, I started by modeling only 1/5 of them so that I could create the rest of the wheel by duplicate special. I personally found modeling the brake calipers to be the most difficult part of the whole car. Nevertheless, I am very happy with the result! Next time I would probably use a CAD program to achieve such shapes and then retypologize the modeled part in Maya.

Part 03. Blockout

Stage 01. Curves

Once I had everything together, I imported the blueprints as well as my already modeled wheels into Maya and started with a first blockout. This time I took a different approach and started my blockout with curves, using Maya's Bezier Curve tool. This was important to me as I wanted to model something that existed in real life and had very specific dimensions and shapes. This method allowed me to better visualize the shape and polyflow, which saved me a lot of time down the road.

Stage 02. Single Mesh Blockout

Once I was happy with my curve blockout, I started with the polygon blockout, following the curves exactly in terms of polyflow. This allowed me to build everything from a single mesh and later cut out pieces that fit perfectly against the main mesh. The edges were also pre-planned so that I could easily create the panels from them later on. Since a car is mostly symmetrical, I only had to model half of the car and then simply duplicate and mirror it. 

Stage 03. Exterior Details / Panels

For me, this is the most satisfying phase of modelling. To see that you have planned perfectly and that you can cut out the detail parts and the panels perfectly from the main mesh. At the same time, many things come together in this phase that make the asset look almost finished. 

Before I cut out the details, I often go and pre-visualise this by detaching the edges and displaying them in bold with border edges. 

I use a double bevel method for the panels, working with absolute values to keep the distances between all panels exactly the same. 

Stage 04. Interior Blockout

After the exterior was mostly finished, I created a first blockout for the interior. I used a pre saved copy of the single mesh blockout from Stage 02. as a basis so that the interior would fit perfectly with the exterior. To do this, I gave the mesh a certain thickness inwards and then deleted all the faces on the outside. From there I formed the mesh into a first interior blockout.

Now that I had a first interior version, I loaded a rigged human character into my scene and placed it in the car to have an appropriate size reference for the interior detail parts. 

Stage 05. Interior Details

As I had picked out all the references at the beginning, I was able to continue directly with the interior details such as the seat, steering wheel and dashboard. Here, too, I looked at the original dimensions of the individual parts and compared them with my human reference while modeling. I used a separate scene for modeling each part so that the main scene remains clearer. I later realised that I had made a mistake when modelling the window seal, which I later corrected when texturing.

Part 04. Bevelling & Final Model

After I had finished modelling all the parts and made a copy of each, all the necessary edges were bevelled. The final model was exported to a new scene in which I could then prepare the UVs.

Breakdown Texturing

My goal for this asset was to recreate the original paintwork of the Porsche 992 Cup. I wanted to texture the car as if it had already done a few laps on the racetrack to increase the difficulty of the texturing.

Part 01. UV's

This time I took a different approach to the UV layout and sorted the UVs by parts that belong together. Despite the decent labelling, I wouldn't do it this way next time, but sort the parts by material as I did with the Gauntlet Fighter. This has the advantage that you are faster when creating the main isolation masks in Mari.

I opted for a higher texel density for the wheels as I wanted to get closer to them in my presentation. 

Part 02. Dismantling 

Same procedure as in Project 01, the asset was first completely dismantled in a new scene. Then I exported the asset subdivided and non subdivided for Mari and Substance Painter.

Part 03. Baking & Custom Maps

I imported the asset into Substance Painter to bake my mesh maps for Mari. Then I researched the logos I would need and created the decals I couldn't find in Photoshop. I also created a custom tileable image of the race tracks that I could use for the extraordinary paint job. 

To keep it organised, I sorted all the maps into a folder structure.

Part 04. Mari Node Graph Overview 

The following image shows the entire project node graph in Mari. At the top you can see the mesh maps from Substance Painter and the additional geo-bakes from Mari. In the second row are the main isolation masks that define where each material is located, and directly below are all the breakup maps that I was able to reuse for different materials. For all mesh maps and isolation masks, I used teleport nodes to be able to reach them in every level of the node graph. At the bottom is the main texture pipeline, which contains all the overlapping materials from left to right and their breakup masks.

I won't go into detail here, because the structure of the Mari project file is exactly the same as for the Gauntlet Fighter. Here are a few screenshots from Mari of the isolation masks and an example of the structure of a material.

The only difference with this project is that it was much more complex, as I had considerably more materials to texture. 

Part 05. Mari Texturing Stages

Stage 01.

Solid base with minor breakup + first decals.

Stage 02.

Adding more dirt/wear breakup + extra decals like barcodes & handwritten tire labelling.

Stage 03.

Adding soot, fixing normal values and bad looking breakup.

Stage 04.

Adding a normal effect to the race track decals underneath the clear coat + adding a subtle thin film effect on the glass that is changing based on the camera viewing angle.

Part 06. Porsche Shader / Maya Shading 

For the shading in Maya, I exported custom masks from Mari for the windows, the exhaust and the carbon parts. This allowed me to create a thin film effect on the glass using a facing ration based on the camera viewing angle. I did the same with the exhaust, leaving out the facing ratio. This allowed me to give the exhaust a little more realism with a heated metal effect. As I could not match the normal strength of the carbon materials in Mari, I simply created a second normal pipe for this material, which was defined by the mask previously exported from Mari. 

Part 07. Final Result Texturing

I really enjoyed texturing this asset, even though it felt like it was a never ending story. I learnt a lot about normal map stacking and how to create realistic looking materials. Especially the car paint itself was quite hard to match, but I'm super happy with the end result.

Below some turntables of the beauty render as well as the different texture maps.

Beauty

Base Color

Roughness

Metalness

Clearcoat

Clearcoat Roughness

Bump

Breakdown Presentation

For the presentation of the Porsche, I decided on a pit lane environment, as this would show the car to its best advantage.

Part 01. Blockout

Once I had decided on a particular pit lane and lighting mood based on references, I created a first blockout with primitive 3D objects.

I imported the Porsche as a reference and placed it where I wanted it. Then I created my first static cameras to define my image section. After that, I knew which assets I really needed to model or search for.

Part 02. Realistic Moving Cameras / Unreal Engine

After the rough blockout and my camera perspectives were set, I imported my entire blockout including the main asset and cameras into the Unreal Engine. In Unreal I use the Virtual Camera plugin, which was connected to my smartphone via a live link. This allowed me to transfer the movements I made with my smartphone to my cameras in Unreal Engine. I then imported my keyframed cameras from Unreal Engine into Maya to use them as render cameras.

Part 03. Texturing Assets in Substance Painter / Shading

After I had finished modelling some objects such as the garages and fences and placed some Kitbash objects in my scene, I textured my self-modelled objects in Substance Painter.

Assets that were further away from the camera were shaded in Maya procedurally. 

Part 04. Basic Lighting

To get a better idea of what my textures would look like, I created an initial lighting setup, which was later adjusted again. This step also prepared me for one of the main features of my presentation, the ground shader. 

Part 05. Procedural Ground Shader

As the name suggests, the ground shader was created entirely procedurally in Maya's Hypershade, using tileable images from the Quixel Bridge as the basis and for the projections.

In the following overview of the ground shader, the projections are at the top of the hypershade from left to right. The row of nodes below is the base color pipe. One row below is the roughness pipe and finally the normal pipe. At the bottom left are the two base textures, which in turn are blended together by the masks to the right. 

Let's break this down. These are the two main textures that should be mixed together so that the floor texture does not look repetitive. Each texture contains a channel for base color, AO and normal. These channels are plugged into the base shader and mixed using a mask (solid fractal), which in turn is connected to a projection handle. The projection handle allows you to dynamically adjust the mask at any time (resize and move).

Now to the projections (side stripes / asphalt cracks etc.). These are now placed over the base textures as follows. The individual projection (base color, roughness etc.) channels are each plugged into a projection node. These are upstream connected to a projection handle, which has the advantage that you can place it visually in the scene without having to use manual xyz coordinates. From the projection nodes, the respective channel now moves downstream to the corresponding channel pipe (base color, roughness, normal) into which it is then merged.

For the last step we need a dynamic mask to control the puddles (roughness and normal values). Again I added a projection handle to a solid fractal node, which is downstream plugged into the roughness and normal strenght as a mask. The projection handle also gives me here the advantage of being able to scale or move the puddles at any time. 

Final Shader 

Beauty - Base Color - Roughness - Normal

Breakdown Compositing

In order to have as much freedom as possible in the compositing process, I opted for a very split back to beauty process. This allowed me to separate the light from the texture, which enabled me to intervene more in the post processing using Nuke.

Comp Overview

Part 01. Back To Beauty

Let's take a closer look. In the picture below you can see the back to beauty. For each channel, the individual light groups have been divided by the channel-specific albedo to create more options for post processing.

Part 02. Global Adjustments

After the back to beauty, all adjustments were rendered first. This was followed by basic adjustments such as black levels, colour adjustments and sharpening. As I unfortunately had some very visible fireflies in my renders, I painted them out manually with the clone stamp tool. 

Part 03. Shot Specific Fixes 

The next adjustment was shot specific, as I unfortunately had a render error in my dashboard texture. To fix this, I searched for a still image where the texture looked right and created a 3D projection setup with my render camera and dashboard geometry.

Part 04. Individual Light Glow

Instead of just slapping a global glow over the image, I built different masks to glow specific areas of the image differently. 

Part 05. Lens Effects 

In the last and for me personally most beautiful step, all lens effects such as chromatic aberration, halation, defocus etc. were applied to the renderings. Although it makes no sense from a lighting point of view to have a lens flare in this shot, I decided to integrate one to make the shot look a little more dynamic. 

Compositing End Result 

The first process view shows the raw render and the Back to Beauty adjustments. The 2nd process view shows all the above listed steps starting from Back To Beauty until the lens effects.

Raw Render - BTB

BTB - Global Adjustments - Shot Fixes - Light Glow - Lens Effects 

Final Renders 

Conclusion

This project allowed me to deepen my knowledge of how to pre plan a hardsurface model in order to create further details based on the base mesh during the modelling process. This has the advantage that most of the modelled details are perfectly aligned, which is a prerequisite for the subsequent animation and simulation. 

Texturing this asset helped me to create even more complex and realistic looking materials. Subsequent editing of the textures in Maya's Hypershade using custom exported masks helped me explore the possibilities of shading even further.

Thank you!

I would like to thank everyone who took the time to browse through my entry and wish all participants the best of luck!

Special thanks to my fellow students Carlos Eulen, Leo Matull, Lisa Maria Zeuge, Debora Hirsch, Emilio Lingg and Luise Rolle for the good project collaboration, feedback and/or help along the way!

I would also like to thank my project leaders and/or mentors Calvin Gotta, Tom Herzig, Giorgio Lorenzetti, Fabrizio Meli and Yannick Lorvo for their guidance and teaching during my studies. I am very grateful for what I have learnt from you!

Always happy to connect with new people, so if you like, feel free to add me on Linkedin or Artstation


Comments (6)