1. Hello Guest,

    We wanted to let you know that the NXS17 templates and viewers have been released!

    Grab them HERE
  2. Hello Guest,

    We wanted to let you know that besides the NXS17 templates and viewers, now we have released the NXS17 Mod as well!

    Grab the latest files HERE
  3. Hello Guest,

    We wanted to let you know that we are trying out a new feature at SRD. Your feedback is needed!

    Read more about the chatbox HERE
  4. Hello Guest,

    We are gauging interest in starting an online racing league.

    Please take a moment and give your vote HERE. Thanks!

International Competitive Racing Mod Development Thread

Discussion in 'NR2003 General Discussion' started by Mystical, Nov 16, 2019.

  1. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    Yeah it definitely is coming together quite fast. I'm not cutting any corners or rushing through the process either making sure I add all the features I originally wanted. Every time I get to the compile stage of the script I totally expect massive errors to come back but so far every time I see it applying the bounding boxes as a grey material (expected result in the command prompt) and then the wonderful 'press any key to continue' meaning no errors were found. I then go in the game and its working exactly as I expected.

    I think it really helped me doing that blue box proof of concept car first. I had a clear idea how all the core elements work in a mod so when I started making this one I already know how to do the main stuff and have just stacked on top of that the more complex detailed features. Having a strong 3D and texture background using modern tools has really helped too. I pretty much can be 5 people as one modeling super quick and iterating on changes faster. Also using Jira to track progress and all the elements keeps me on track too, I don't have to remember it all and if bugs come up (which there have been several) I can document the fix and when it comes up again I know what to do.

    When I do make a tutorial for mod making (hopefully) I'd be able to go more in depth how I use my tools to create a mod. Of course I found a process that works for me and everyone is going to have to find what works for them. Someone may not like Affinity Photo for example like I use but regardless as long as the user is comfortable with the tools they use and can get results with it. I hope with my posts its making mod creation less scary and more transparent of how it works, I mean this is my first time going through it and I think its going quite smoothly. I've not quite earned my 'badge' for creating a mod yet, its still an unproven WIP as far as I am concerned. If I can work this fast I have no doubt many others can do it and do it even better than me. Its the same with track creation, you just gotta jump in and start learning and improving your process as you go.
     
    USSTalladega and Gravite like this.
  2. Guitarzan

    Guitarzan Field filler par excellence

    Messages:
    44
    Likes Received:
    66
    This whole thread is so cool Mystical. I would love to see future tutorials, as this might inspire more mod makers. I myself would like to try something along these lines as there doesn't seem to be an early or late 70's mod in the works anywhere. Your progress shows me it might not be the intimidating task that I've feared. Also can this be done efficiently without using a super powerful (and expensive) 3D program? Definitely one of the most interesting threads I've seen in a long time and looking forward to the future progress. Cheers!
     
    Mystical and rob989 like this.
  3. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    All my models were created in Blender 2.8.1 which is a completely free and open source 3D tool. For the texture creation I used a $50 photo editing tool called Affinity Photo which you could swap for either the more expensive subscription fee of Adobe Photoshop or free programs like gimp.

    Alongside those tools for more detail and refinement (though not required) I use 3D Coat for hyper detail on the texture and a faster/more precise UV unwrap solution. In tandem for 3D preview and good renders I use Marmoset Toolbag 3. Neither of these are 'required', I just personally use them becasue they are great tools for me.

    All the tools you need for the actual compiling part to get the mod in NR2003 is provided in The Pits.com editing download (which I've linked several times before). It even includes example scripts. The only tool you'll have to find on your own is 3DS Max 8, a very old version which is only compatible with the PAS plugin.
     
    USSTalladega and Guitarzan like this.
  4. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    Development post #8

    A lot of information in this post. I'll try my best to not turn it into a saga (it took me over 3 hours to write, had to take a day break before finishing it up too lol). I'd say this part in the process will be the most interesting to many seeing as its damage and its visually spectacular in terms of what the player sees. As cars crash and flip over eachother the car itself is transformed from a pristine body to a crumpled up wreck. The cost of getting working damage for a mod is pretty tedious and to make it more realistic looking requires a lot more coding work as well to hook it all up. One fun fact is the above screenshots from my last dev post actually had working damage in the build. I never showed any cars crashing of course but I was working on damage while typing out the LOD post actually.

    The first thing I had to do was take my L1 (Lod 1) body and copy it. I make this copy my new 'damage model'. Before I can make any damage I need to split up the body into more pieces though. Any pieces I want removed after extreme damage or removed by the pit crew these need to be separated from the rest of the body. I've color coded all the separate parts so you can see what it looks like. I also attached the inner shell body to each piece so when they are removed those go with it:

    [​IMG]

    Each piece I had to rename as well to something standard. Every part will need to be referenced in the code several times so it is best to name all the parts something easy to copy and also replace certain keywords for the other damage LODs later on. If you setup clean code and naming conventions it goes a long way when you have to copy/paste multiple lines over and over replacing certain words and dong quick edit to a single piece of the car if a change is made. I do this same practice with my folders and model names when I 3D model in-case I need to pull one out or replace a certain model with an older/newer version.

    While not shown, I copied all the interior pieces as well and renamed them to something damage related as well. Since the car will wreck and pieces come off the interior sections like the rear and engine area will be more visible so its important these follow the damaged body and are not clipping through them.

    Once I have all my new models separated how I like its time to begin applying damage. There are two ways I know of doing this. One way is to copy again my damage meshes and then mess around with the topology on every model making it look damaged. This way I have a damaged piece and a non-damage piece that are the same exact topology. The other way, how Cosmin did it for his mods is using a lattice modifier and using keyframes between a non-damaged and damaged state of the same mesh between frame 0 and frame 1 on the timeline. If find the lattice approach way easier since its a live modifier I can edit and adjust over time.

    To do this I just select my models I wish to be damaged and apply a FFD box modifier in 3ds max to them. I raise the control points up higher so there are a lot more of them as well so you have a cage of points around your model like this:

    [​IMG]

    I'm pretty familiar with lattice effect from when I used to use Maya as my primary 3d application. By moving the control points your mesh pieces will follow them depending on where you push and pull the points. Lattices are a great way to bend, morph, and contort a mesh that would be a lot more difficult to do by manually moving each very by hand. Before I start messing the model up I have to set my keyframe to auto mode and move to frame 1 on the timeline. If I don't then changes will be made to the model on frame 0 and I don't want that. Frame 0 is where the model will retain its original shape and frame 1 is where all the changes to the shape of the meshes will occur. This way I have created a destination between the same mesh. Once I am ready I just move around the model pieces on frame 1 until I have something like this on every part:

    [​IMG]

    I probably made it look simple but it takes some time researching car body damage, being creative in how you want it to look 'crushed', and also double checking no interior parts are clipping through the outer body. I actually ran into a dumb problem as well with 3ds max 8 that wasted nearly a full day where the lattice performance was so slow I couldn't edit much without extreme viewport lag. Since Max 8 is a very old program its not very good using new pc hardware. Thankfully I found the issue and it turned out the viewport renderer had to be set to software mode instead of using direct X 9. I bring this up because many would run into an issue like this and then just say "welp fun while it lasted, guess the program doesn't work, time to give up". You must not do that, look into the program, search for help, look at the tool settings, try different settings, or try alternative tools to get the results you want then import it into the older program version. I had come too far and had the perfect models set up with the lattice ready to edit to just give up and assume there was nothing I could have done about it. I can guarantee in all years of modding some of the biggest roadblocks you hit when making a mod for every game turns out the be the stupidest things that seem impossible to fix but then you find the 'fix' and it is usually some very tiny dumb setting or process and everything becomes unblocked again. I once had a weapon animation issue in Fallout 4 that took me a week to figure out and it turned out to be a single node of the characters hand that I needed to parent to another bone on the skeleton and everything finally worked as expected. All I am trying to say here is if you really care and want to make a mod push through adversity and find a solution or workaround. You'll not only feel great when you get things working but also be more confident and better equipped when the next issue arises and eventually each issue you hit is just going through the motions of mod making.

    Back on topic through once I have the damaged state done I ended up either something like this between both frames:

    [​IMG]

    That is all great but this is just the visual representation of what I want the car to look like as it gets damaged for the mod. Now I have to do the code to tell the game this is what each piece will look like. I also have to signify in the code where each piece belongs and as the car is being contacted by walls and other cars the game knows where the car should start taking damage while also not being damaged in the other sections. Next I have to clarify in the code several parts that I want to fall off from extreme damage or to be eventually removed by the pit crew if the damage is bad enough. If that is not enough I then need to redo the work for all of the other damage LODs as well. To top it off for that extra flair and realism I need to add visual damage like scrapes and tire doughnut marks to the sides of the car so it looks like it actually hit something and paint is worn off. That is not all though, throughout this entire process a lot of crash testing is needed in-game to ensure the parts deform as expected but also performance is retained.

    To start in the code I need to call each mesh from my scene and define what it is. For this example lets use the hood:

    Code:
    
    make0_hood_L1_ud:                     MESH maxCars            make0_hood_L1_d               frame 0
    
    make0_hood_L1_d:                      MESH maxCars            make0_hood_L1_d                frame 1
    
    
    The first line is my non-damaged hood mesh, as it sits frame 0 in my 3ds max timeline. The second line of code is the damaged mesh which sits on frame 1. The same mesh is used twice (hence why you see it referenced in each line of code). Other than the frame difference between each line I call each line a different name for the same mesh. I used 'ud' at the end of the first line (for me its an abbreviation of 'undamaged'). Then for line 2 I add just 'd' at the end (for damaged). You can name your meshes anything you want, I just made it something simple and easy to understand. I Also added in the name the Lod level which in this case is L1 so when I do the other lods I can easily replace L1 with any other lod level.

    Once the meshes are called and I've given them a 'name' the code understands I now have to tell them what this mesh actually is how to be damaged. For that I use a damage morph. The damage morph is a line of code that sets a source mesh (the undamged) to a destination mesh (the damaged one). This way the mesh will transition from undamaged to damaged. Next I need to tell the code this is a hood:

    Code:
    
    L1_make0_hood_damaged:   REGION_MORPH make0_hood_L1_ud        Destination       make0_hood_L1_d    Regions       (hood_bbox    hood_damage    8 0)
    
    
    As you can see in the code above I called this morph L1_make0_hood_damaged for my make 1 body and its at lod level 1. Again, you can name you morphs whatever you want, I highly recommend making them easy to remember and also displaying any vital info (important to you) so you know what you are looking at in the code of your mod so when you see something go wrong in the game you know exactly what line of code in your file might be the culprit. No one else (unless you are on a mod making team) is going to see this code so as long as you know what you are looking at with a quick glance that will suffice. If you can't remember what in your code is "model_660_damage_part_2_section10" because you did poor naming conventions then you are in for a world of hurt and wasting a ton of time. Clean code is just as important as making good models and textures even if no one sees the code.

    After I gave it a name you can see the next section as REGION_MORPH make0_hood_L1_ud Destination make0_hood_L1_d using the region morph I first put my undamaged mesh frame and after the destination put my damaged mesh name. This tells the code that the mesh morph will transition from the ud (undamaged) to the d (damaged) mesh. The last part I have to do is clarify the region this mesh belongs to on the car along with its corresponding bounding box. Regions (hood_bbox hood_damage 8 0) Here I say the region used in parenthesis is my hood bounding box (hood_bbox) and it will go with the hood_damage at 8 0. The numbers at the end are hardcoded and cannot be changed. Every section of the car has a different number code, you can find this along with a full damage tutorial over at The Pits.com. The bounding boxes are literally just cubes in my 3ds scene that encompass each section of the car, they define the region of the different car parts.

    After this the hood will now technically damage as you ram into other cars or walls fast enough. Also if its not damaged enough the pit crew can repair it. Ever been on pit road with your car and noticed the damaged hood slowly start to mold back to a repaired state? That is the damage morph working in real time right in front of you. The game is pretty much telling the hood to go back to its original state until 'repairs' are complete.

    This is not all that is needed for the hood though, we need an extra line of code to now tell it we want this piece (the hood) to not only receive damage but also come off when its gets damaged too much. To do this we need this code next:

    Code:
    
    L1_make0_hood_damaged_removed:   STATE_SWITCH VAR hood_removed ( 0 L1_make0_hood_damaged, 0.9 )
    
    
    Here we create a state switch variable which says to remove the hood section of our damage hood region morph. I gave this line of code the name of L1_make0_hood_damaged_removed while the damage is named L1_make0_hood_damaged without the _removed at the end. So now I have the damage and a removable piece. The 0.9 I believe states when this piece reached .9 damage it will be removable. This number is hardcoded and can't be changed, every removable piece uses 0.9 so its easy to remember. You can make as many (or less) pieces on your mod come off. If for some reason you wanted the entire roof to fall off you could. I kept mine realistic and only made the hood, front, corners, and rear piece fall off. Every other section will just get really damaged but will never come off the car.

    After this its just the same process for every single other piece. For my mod there are 18 separate meshes which equals 36 damaged + undamaged versions between the frame 0 and frame 1 just for LOD 1. So much fun coding is ahead. I pretty much clarified what each piece is, where it belongs on the car, is it removable or not and also what bounding box it belongs with. You can use multiple car sections in a region as well to share between a piece. For example on the rear I can have it take damage from the rend_damage region and the chassis_damage if I want. As long as you set up your regions correctly and it looks good in game its up to you. The main thing you want to avoid is like if your car's hood hits a wall but the rear end never touches it and that section just doesn't morph into a damaged state for no reason.

    After every single piece is clarified you then need to group them into a LOD 1 group just like I would for the non-damaged LODs:

    Code:
    L1_make0_DAM:     GROUP (    lf, rf, rr, lr, flaps_roof_lod, shared_hood_flaps_removed, flaps_deck_lod,
    
                                           L1_make0_hood_damaged,
    
                                           L1_make0_rear_end_damaged,
    
                                           L1_make0_decklid_damaged,
    
                                           L1_make0_front_bumper_damaged,
    
                                           L1_make0_LF_damaged,
    
                                           L1_make0_RF_damaged,
    
                                           L1_make0_LR_damaged,
    
                                           L1_make0_RR_damaged,
    
                                           L1_make0_body_damaged,
    
                                           L1_make0_body_top_damaged,
    
                                           L1_make0_banner_damaged,
    
                                           L1_make0_parts_damaged,
    
                                           L1_make0_engine_damaged,
    
                                           L1_make0_rollcage_damaged,
    
                                           L1_make0_chassis_damaged,
    
                                           L1_make0_windows_damaged,
    
                                           L1_make0_interior_damaged,
    
                                           L1_make0_interior_top_damaged,
    
                                           L1_vis_dmg_left_damaged,
    
                                           L1_vis_dmg_right_damaged,
    
                                           L1_vis_dmg_roof_damaged,
    
                                           L1_vis_dmg_rear_damaged)
    
    
    
                   L1_make0_DAM2:     GROUP (    lf, rf, rr, lr, flaps_roof_lod, shared_hood_flaps_removed, flaps_deck_lod,
    
                                           L1_make0_hood_damaged_removed,
    
                                           L1_make0_rear_end_damaged_removed,
    
                                           L1_make0_decklid_damaged,
    
                                           L1_make0_front_bumper_damaged_removed,
    
                                           L1_make0_LF_damaged_removed,
    
                                           L1_make0_RF_damaged_removed,
    
                                           L1_make0_LR_damaged_removed,
    
                                           L1_make0_RR_damaged_removed,
    
                                           L1_make0_body_damaged,
    
                                           L1_make0_body_top_damaged,
    
                                           L1_make0_banner_damaged,
    
                                           L1_make0_parts_damaged,
    
                                           L1_make0_engine_damaged,
    
                                           L1_make0_rollcage_damaged,
    
                                           L1_make0_chassis_damaged,
    
                                           L1_make0_windows_damaged,
    
                                           L1_make0_interior_damaged,
    
                                           L1_make0_interior_top_damaged,
    
                                           L1_vis_dmg_left_damaged,
    
                                           L1_vis_dmg_right_damaged,
    
                                           L1_vis_dmg_roof_damaged,
    
                                           L1_vis_dmg_rear_damaged_removed)




    You will notice I have 2 similar looking LOD groups. The main difference is the bottom one I have replaced the damaged pieces with their 'removed' variable. This will tell the game if any piece is removed then use this LOD group so the piece will no longer appear in the LOD. If this was not done then when you see AI cars have parts removed they wouldn't actually disappear because they are still using a LOD group that contains the visible mesh still. This same process needs to be done for L3, L5, L7 and L9 lods.


    ///A 'quick' sidestep about LODs for the damaged mod///

    As I mentioned previously LODs still need to be made for the damage pieces. My previous dev post I go over LODs, I do a similar thing where I lower the mesh resolution for each damaged lod state. The main difference with the damage meshes is I keep more parts at farther distances since you will see the inner section more due to damage. Also, these lods need the lattice modifier still applied between frame 0 and 1 so they have damage. Its pretty much a ton of copy and pasting making sure each model is named the same thing except for the lod it signifies. Here are all the lods for damage in my 3ds max scene I had to make. Yes, every single piece had to have a unique name, had to be lowered in resolution for each lod and has the lattice modifier applied:

    [​IMG]

    I couldn't even get a screenshot that fits all of the un-collapsed groups, it only went to L5 before getting cut off but you get the point. This is a LOT of work and this is only for make0 of the mod. I hope this one screenshot really shows you the gravity of the situation when it comes to how much is really needed and what those modders went through when making you a mod. Its honestly boring work for the most part. For you though, when making a mod, boring is good. It means you at least know what to do and that is always a far better situation than being stuck not knowing how to making a mod. Anyways lets get back to where we were now that you know LODs are also a crucial step with the damage meshes as well.

    ///ok back to the code continued///

    Last but not least we have to tell the code where this all fits in after we've done every LOD:

    Code:
    Exterior_make0_DAM:  STATIC_LOD             (    0         L1_make0_DAM,
    
                                                   2.0        L3_make0_DAM,
    
                                                   4.5     L3_make0_DAM,
    
                                                   6.8     L5_make0_DAM,
    
                                                   9.2     L5_make0_DAM,
    
                                                   12.3     L7_make0_DAM,
    
                                                   16.4     L7_make0_DAM,
    
                                                   20.0     L9_make0_DAM,
    
                                                   30.5     L9_make0_DAM,
    
                                                   48.2     Exterior_make0_L11,
    
                                                   70.0    Exterior_make0_L11
    
                                               )
    
               Exterior_make0_DAM2:  STATIC_LOD         (    0         L1_make0_DAM2,
    
                                                   2.0        L3_make0_DAM2,
    
                                                   4.5     L3_make0_DAM2,
    
                                                   6.8     L5_make0_DAM2,
    
                                                   9.2     L5_make0_DAM2,
    
                                                   12.3     L7_make0_DAM2,
    
                                                   16.4     L7_make0_DAM2,
    
                                                   20.0     L9_make0_DAM2,
    
                                                   30.5     L9_make0_DAM2,
    
                                                   48.2     Exterior_make0_L11,
    
                                                   70.0    Exterior_make0_L11
    
                                               )
    Again, we have 2 LOD groups because one contains all the LOD states for each lod level with all the damaged parts. The other contains all the damaged parts with the removed damaged pieces. One thing to point out is I didn't need a L11 for damage because the car is so far away you can't see it anyways so I just used my L11 non-damaged LOD again. This saved a bit of time which was nice. After this we now we contain our LOD groups into the damage state switch variable:

    Code:
    Make0DAM: STATE_SWITCH VAR damaged (0 Exterior_make0, 1 Exterior_make0_DAM, 2 Exterior_make0_DAM2, 2.9)
    This switch tells the game the moment your car hits another car or object hard enough to switch from the undamaged meshes to the damaged. Then if pieces will fall off or are removed by your pit crew to switch to the damaged removed LOD group. If you have ever been racing and tapped a wall slightly but just hard enough to incur damage you might have noticed a slight shift in lighting or mesh shape to the car if you were racing on like the hood cam really close to the car. What you just witnessed was this state switch in action telling the game "ok this joker hit the wall, switch his/her car model from the undamaged version to a damaged one". I remember seeing this as far back as Nascar Racing 2 but until making a mod myself never actually understood what the 'magic' was happening under the hood (no pun intended). Game creation is all about magic really. Its making things appear one way or another and having code create those 'effects' pretty much. This above switch I just need one for now but as I make the bodies for make 1, 2, and 3 I will need a state switch and damage for all of them to group into as well.

    After this we finally reach the final output for our damage and group it to the state switch that tells this game this is our exterior view models when you use the hotkeys in game to switch to anything other than cockpit view. We used the same thing for the non-damaged model except now that I have damage models contained in this exterior view code as well:

    Code:
    
    extViewB:     STATE_SWITCH VAR carMakeIdx (0 Make0DAM, 1 Make0DAM, 2 Make0DAM, 3 Make0DAM, 4)
    
    extView:         GROUP (extViewB)
    
    
    The numbers signify the different car makes. Because I just have one now I've copied my Make0DAm to 1, 2, 3 and 4 car bodies. If I didn't the if you created a car for the other body types no car would appear in the game. As I get the other car bodies in game they will replace the make0 for the other numbered slots.

    Now hold on sunshine, I know what you are thinking: "its time to see that damage in the game!" but not yet. I still have one final thing to do which is create visual damage on the car body so it looks like it has paint scrapes and tire marks. While this isn't required the mod looks so much better and realistic with it and most mods have these included so I'm not about to skip out on that feature. In most people's code from the modders that have shared theirs with me I see they call it 'scrapers'. Scrapers is simply a slight of hand trick where when the mod goes to a damaged state you slip a mesh on the sides, roof, and rear (or wherever else you may want it) to the car. These are just simple mesh planes that will contain a texture that looks like damage. At first these meshes don't appear but as the car gets more damaged and the car body crumples inward more the damaged scrape meshes will appear. Here are the 'scrapers' or as I like to call mine vis_dmg (visual_damage) meshes look like:

    [​IMG]

    As you can see I made one for the sides, roof, and rear of the car. They are just flat plane meshes that I UV unwrapped on a single texture so I can paint the damage effects on them.

    [​IMG]

    To make the textures I just created them from plain layers in affinity photo like I did with most of my textures for this mod. For the paint scratches I painted long paint lines. Then using several filters such as motion blur, displacement, and dust/scratches I gave it that scratched look. For the doughnut marks I made a circle layer and again used several filters to give it that tire mark look. For the extra touch I erased section of it and then duplicated it and rotated it around a bit so there were multiple different looking tire marks. The layer is transparent as well so any sections the scratches and tire marks don't appear you will be able to see the original paint scheme. Without transparency on here is what it looks like applied to the car:

    [​IMG]

    You can see how I have treated my visual damage mesh the same as the car body and applied a lattice to it so it conforms to the shape of the damaged car. This ensures that as the car shape changes from damage the visual damage mesh never appears like its floating away from the car. Also for the rear section since this gets removed I had to also put in the code that this is removable and should go with the rear end when it falls off. If I didn't then you'd see no rear end piece but floating scrapes.

    Thankfully I didn't really run into any major errors when compiling the first time. I hit one snag where I accidentally referenced my visual damage mesh for every lod instead of sharing it for all of them but other than that it went smoothly. Now that it is all done and said its finally time to go in the game and see the results what I am sure you've all been waiting for:



    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    This section of the mod was the part where the code really got heavy. Before adding any damage my code for just one non-damaged body and was a little over 1000 lines. Now that I have damage for that same single body the code is 2600+ lines. Once I add the other bodies in its probably going to be anywhere from 8000 to over 10,000 lines. Along with the code getting larger the list of bugs found also increased:

    [​IMG]

    I've fixed everything at this point minus one little cosmetic deal that isn't that important right now. Still lots of issues and all sorts of different type of issues have arisen already in development. Things may look like they are always going smooth from these posts but there is always something to fix even when making the mod in progress. I have no doubt the list of bugs will increase as I add the 3 other makes in.

    At this point this pretty much concludes make0 for the exterior, it has all the functional workings needed for a 'complete' car in a mod pretty much. The next step that I've already began is modeling the front noses of the 3 other makes and almost starting over the entire process. I'll save the details of the other 3 car makes for another post. This damage one is already so huge.
     
  5. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    Here are all 4 makes showing the nose differences. Let me know what you think:

    [​IMG]

    [​IMG]

    [​IMG]

    The goal is of course to keep them as generic as possible but still retaining somewhat of a different nose shape when compared to each other. While not completely final I'm feeling pretty good about them I think.
     
  6. TChapman500

    TChapman500 Well-Known Member

    Messages:
    205
    Likes Received:
    341
    Impressive.
     
    Mystical likes this.
  7. phantom17

    phantom17 Well-Known Member

    Messages:
    554
    Likes Received:
    889
    really amazing work, and the way you are developing and showing how to is incredible
     
    Mystical likes this.
  8. Smoke14

    Smoke14 NR2003 Painter

    Messages:
    142
    Likes Received:
    228
    Is there a way that you can also remove the fenders so the entire front end is gone? I feel like that's something that's lacking from NR. Even if there isn't a way to do it, this mod still looks amazing.
     
    Mystical likes this.
  9. DaleTona75

    DaleTona75 Unhealthily Obsessed With Backmarkers

    Messages:
    355
    Likes Received:
    451
    I see in an earlier photo of the car without the right front fender, so I think it is part of the mod.
     
    Mystical likes this.
  10. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    Yes like DaleTona75 said the front sides of the fenders fall off too. Your car or an AI car needs to get hit pretty hard from all front angles for the game to calculate and determine they all need to come off under a pit repair. In most cases cars that get hit that hard in the front just are retired from the race with too much damage. It took me quite a few tries to get the whole rear to even come off, you really have to smash into a car lol.
     
    USSTalladega and Smoke14 like this.
  11. Smoke14

    Smoke14 NR2003 Painter

    Messages:
    142
    Likes Received:
    228
    Ok, so it's something within the game and not something you can really change in the mod.
     
  12. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    I think the only way I could make it come of easier it telling the front pieces to belong to another section of the car, that would cause issues with the front taking unreasonable damage though so yeah its more of a game limitation I think.
     
    USSTalladega and Smoke OR like this.
  13. Smoke OR

    Smoke OR Official Toad Hunter.

    Messages:
    824
    Likes Received:
    1,533
    Looking good!
     
    Mystical likes this.
  14. RacerXero84

    RacerXero84 Obnoxious old fart

    Messages:
    3,790
    Likes Received:
    4,847
    After seeing those models... you can bet that I'm putting a Mazda 6 on one of em lol
    I really like the approach taken in terms of open-ended creativity options, IMO that's part of what made the COT mods so much fun: no real restrictions on what you could do template-wise.
     
    Mystical and Skyline like this.
  15. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    Thats the plan. As much as I have plans on how I will paint/use my mod for my own series, for everyone else it'll be up to the community. They will decide how to use it for their own leagues/series and what templates and paint features they include. The next post will show how interchangeable between the 4 makes is when it comes to paint swapping. I've tried my best to make it as easy as possible, though admittedly to set the models up to do this has been a real tough thing to accomplish.
     
    USSTalladega, mtblillie and ERS like this.
  16. ERS

    ERS Well-Known Member

    Messages:
    114
    Likes Received:
    68
    Many thanks for all your hard work and dedication. My objective will be to add some flare to the series, different tires, makes/models ect. Which to be honest, NASCAR should pay attention before it dies completely.
     
  17. Skyline

    Skyline Graphic Designer Skyline Customs

    Messages:
    335
    Likes Received:
    248
  18. ERS

    ERS Well-Known Member

    Messages:
    114
    Likes Received:
    68
    Sounds good. I'm not stuck in the 70's or 80's Nascar, like many my age are, only wanting to see 3 manufacturers. The more there are the better. I just want to see good racing with plenty of passing up front. Nascar has their work cut out for them. I hope they succeed.
     
    USSTalladega, NoahC04 and Skyline like this.
  19. USSTalladega

    USSTalladega Making a comeback!

    Messages:
    4,660
    Likes Received:
    1,502
    I am really liking how this is turning out. Love all the little things you're doing that nobody else has really even attempted before. Stuff like what you've done...what you're doing now...was only a dream 15 years ago.

    That's incredible. - Kyle Petty.
     
    Mystical likes this.
  20. Mystical

    Mystical Always 110%

    Messages:
    4,097
    Likes Received:
    6,140
    Development post #9

    It may seem like I was over the hill with the hardest part of the mod once damage was completed for make0 but this next section, getting the 3 other makes in, was actually a lot of work compared. Once I was 'finished' with make0 the next step is to get the 3 other makes into the game. While I thankfully did not have to start completely over from square 0 it was quite a process to inject the others in. This may be different for other mods depending on how different each body type is but for my mod the main change was just the nose section. Even though it was just a different nose type for each make having to stitch it together with the other existing parts was very tricky. I think @MattyO can attest to this as he was making the new noses for the Xfinity 2019 mod and you all saw how much time and work it was just to 'replace' a few models in an already previous version of the mod.

    The first thing I did was take my make0 model and create a new blender scene, this way I don't have to worry about messing up the original or anything. This make0 mesh is the completed final mesh that is in the game so it has everything: correct topology, UV placement, and LOD1 detail. Since my plan was to only change the nose section it was important I contained or 'quarantined' the rest of the model so I don't move any verts or accidentally delete a section of it. There are multiple ways you can do this. One way is to hide all the faces you don't want edited. However, since I wanted to see the whole body so I could make sure the nose looks good with the rest of the body and flow well I instead sliced off the front like this temporarily:

    [​IMG]

    The nose section was pretty much all separate meshes. Once I had it ready to edit I made 3 copies (one for each of the other makes) and started editing the nose shape. After editing each nose type before I came to the conclusion that it looked good I brought it into 3D Coat and applied some really quick decals to it. This was just a test to ensure that the nose shape indeed worked for the intended manufacturers I was going with:

    [​IMG]

    After doing quick tests on all the new noses the next thing to do was merge the nose pieces back to the bodies so it was one single body mesh again. Here is a quick run down of the differences of each 4 makes and how they look (note some changes were made since my last post on the noses):

    [​IMG]

    make0:
    This is the one you've seen the entire time. It is the template essentially that the other 3 makes were built upon. This nose shape is very neutral in both its curve and shape which will be very friendly to any manufacturer's really that don't have any aggressive nose shape to them. This nose is planned to be used for manufacturers such as Honda (Accord), Chevy (Monte Carlo or Impala), Nissan (Sentra), volkswagen (passat 2020).

    make1:
    This nose is the most hard edged one and works best for manufacturers that are hard edged and flatter. The only defining edges are the lower section but with proper shading it can be made to look like any variation. This nose shares the same splitter shape as make0. This nose is planned to be used for manufacturers such as Dodge (Charger), BMW (M8), Volvo (S60).

    make2:

    This nose is best suited for manufacturers that have a more rounded shape to the grill area. A few changes from the previous screenshots compared to now is the round front was moved outward a bit more. The hard edges were also removed. This was done so the hard edges do not define the grill shape but rather any fake shading will do the trick. This nose shape also has a new splitter shape to fit the new curve of this nose too. This nose is planned to be used for manufacturers such as [Infiniti (Black S), Ford (Fusion), Tesla (Model S).

    make3:

    This nose is the most pointy of them all and also extended out further than the other four. In contrast it also slopes more aggressively than the other 3 too. Compared to my previous screenshots I did a complete remodel of it since I was not quite happy with the first results. The only hard defining edges on this nose are the bumper area to give it a clear divide from the upper and lower grill sections and allow the nose to clearly look more pointy. This nose also like make2 has a new splitter shape to fit the nose too. This is my personal favorite nose as it will be the one to have makes such as Pontiac on it. At long last after years of struggling to fit my Pontiac templates on other mod noses it will be the easiest its ever been with this one. This nose is planned to be used for manufacturers such as Pontiac (G8), Mitsubishi (Lancer/Galant), Toyota (Camry).

    As shown in my quick test screenshot above with minimal effort regardless of the nose shape chosen if the user wants to make a custom manufacturer it will be very easy to do so. No more fighting over hard geometry to fake it. Now you'll be able to apply decals with ease and create that fake shading and highlights to really give it whatever shape you want it to appear as while the underlying geometry of the nose helps give that impression. One last thing I want to mention is I decided to forgo doing a custom bumper design for each one. I like the default lip I had on it already and with proper decals and fake shading/highlights the user will be able to make the bumper appear different.

    Now that I've established the nose shapes and the results this is where the real time consuming and tedious part begins. Since each body has to have its own UV template that can be painted on the goal was to make sure the UV for all 4 makes did not change even a pixel except for the nose and hood areas as those were the only sections that have UV's moved around and would need to be generated again to ensure painting on the mesh would be proper.

    Along with the UV's matching for each template (minus hood and nose variations) I had to recreate the ambient occlusion, shading, and highlights for the nose/hood sections while also erasing the make0 details so they would not overlap. This includes the new wireframe and mask layers for each make as well. To do this multi-step process took a lot of focus, it pretty much feels like doing digital surgery. I always find it easier to create something from nothing but when I have to carefully extract, edit, and replace only certain features of a model or texture it can be very time consuming. It will be different how everyone does something like this but for me and the tools I used here is the quick rundown (this was done for each of the 3 new makes so had to do this process 3 times in a row):
    • take the newly edited body for make and import into 3D Coat, rebuild the UV's for the hood and nose.
    • import the fixed uv make model to my master 3d coat file where all the other model pieces are and align the new nose and hood UV shells to a very similar area that make0 body uses
    • export just the body for the new make in a 3d coat scene and generate/paint shading, highlights, and ambient occlusion
    • using the 3d coat exporter, export the layers and wireframe to a new affinity photo file
    • in affinity photo edit all the new layers trimming and editing it so just the hood and nose sections are left
    • make a copy of my working paint template from make0 for my new make and inject the new shading, highlights, and ambient occlusion
    • stitch together all the layers while removing the hood and nose of make0
    • export the new template to be ready to be used on the new make
    • back in 3D Coat export my final make body to blender
    • in blender cleanup the smoothing groups/hard edges
    • export this file to 3DS Max 8 where my main scene of the mod resides
    • cleanup the model and apply the paintjob material with the new make texture I created
    Once I had completed that multi-step part the new make is in my main 3DS Max scene ready to be worked on for the non-damaged body. This part was pretty much just redoing the same process I have already posted on before. The one main difference was I didn't have to start completely over. Elements like the interior, wheels, working flaps, etc are already done and those are all shared between each make. The only part I had to redo was the exterior body meshes and generate new LODs for each other them. Even this process was faster since I had already validated make0's LODs and what settings I used on the MultiRes modifier. So after a ton of copying and applying all the lods I finally had all 4 makes finished in my 3ds max scene for the non-damaged state:

    [​IMG]

    These are all the folders in my outliner, if I opened them up you'd see hundreds of models for each make and their lods states. As you can see by the image though I've neatly organized them into categories and each model name has been purposefully labeled and named a specific way by what the objects is (hood, rear, body etc) and what lod level it is at (L1, L3, L5, etc). I even grouped all of the SHARED objects per their lod state. These SHARED objects are all of the interior pieces that do not differ between any of the makes. This makes it very easy for me in the code to do fast and easy name replacements. Its up to you when making a mod how you organize and name stuff but you really save a massive amount of time when its organized and you don't have to remember each name in the code manually.

    Once the 3ds scene for non-damage on all 4 makes was completed I exported my scene as a PAS file and prepped my code to inject the 3 other makes for their non-damage states, This part was comically easy becasue like I mentioned I had everything so easily named doing a quick find and replace in my atom text editor meant I could copy my make0's non-damage code, copy it, name it to make1 and paste it into my main code. None of the makes have more or less pieces than each other so they all match in terms of models used per lod level and what the names are. That is the one nice thing about building a stock car mod. Its not like one body will have an extra spoiler or a different window so I can easily reference the objects to a different make by a simple name change in the code. There really isn't much to show/explain code wise becasue its just the same code from my make0 non-damage except its copied 3 extra times and renamed between make0, 1 , 2 and 3 for the different bodies. So for example if I take an excerpt of the LOD1 for make 0:

    Code:
            ############
            #LOD L1    #
            ############
    
            L1_body0:                         MESH maxCars make0_body_L1
            L1_body0_shell:              MESH maxCars make0_inner_shell_L1
            L1_hood0:                         MESH maxcars make0_hood_L1
            L1_hood0_under:            MESH maxcars make0_under_hood_L1
            L1_rear0:                           MESH maxcars make0_rear_L1
            L1_splitter0:                     MESH maxcars make0_splitter_L1
    I can just as easily do a find and replace to make it work for my make1 body now:

    Code:
            ############
            #LOD L1    #
            ############
    
            L1_body1:                         MESH maxCars make1_body_L1
            L1_body1_shell:              MESH maxCars make1_inner_shell_L1
            L1_hood1:                         MESH maxcars make1_hood_L1
            L1_hood1_under:            MESH maxcars make1_under_hood_L1
            L1_rear1:                           MESH maxcars make1_rear_L1
            L1_splitter1:                     MESH maxcars make1_splitter_L1
    I couldn't do this if I had all sort of different names for the different parts. For example if one was named Chevy_hood and another Cvy_rear it would take a lot more work to find and replace all that code and there are a ton of lines and room for error increases. That is why I went with very generic stuff like make0 and numbers since I knew it would easier and faster to replace.

    Once I had all of the makes copied in the code it was time to compile and I'm happy to say on the first try it compiled perfectly with zero errors. The last thing to do was see all 4 makes in the game:

    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

    Admittedly it might be hard to tell from the screenshots due to the distance and body shine the nose shapes but I assure you with the custom manufacturer decals and shading for them it will really show the differences better. For a better demonstration here is a quick gif showing all 4 WIP make templates:

    [​IMG]

    You can see how the nose and hood areas shift but the rest of the template stays perfectly static. This is going to allow painters to do much easier paint transfers between makes. The only areas of re-adjustment would need to be the nose and slight hood re-work. It took a long time to achieve this careful accuracy but it will be worth it when this mod gets into the hands of painters. One last comparison the 3d render of all 4 makes with their textures, this will really show you the changes between them if still not convinced:

    [​IMG]

    At this point the mod includes all 4 makes with no damage and one make with full working damage. The next step is to now copy and break down the 3 new makes for damage and apply the damage morphs to it. It will no doubt but quite the process but after the next large step the mod will finally be in beta phase.
     

Share This Page