With both GMax and FSDS3 now using MakeMDL to create the scenery MDL object, you would expect that the resulting code of these objects would be very similar, but while testing the output of both programs with some of my tools, it appears that this is not really the case.
Let me start by saying that I do not want to compare the features of GMax and FSDS3 here. Some users prefer the user interface of FSDS3, while others like the one of GMax. I want to discuss the differences in the code of the objects that are generated in the end.
As you might have guessed from my introduction, the created MDL files by GMax and FSDS are not as similiar as I had expected. Although there are some options on the MakeMDL GUI, it seems that not all logic to optimize the object is in MakeMDL itself. The tool that creates the X file for MakeMDL has to do part of the logic as well. So let me give you a few examples of differences.
When you create different objects in one scene, but they all use the same texture, GMax will optimize all these polygons into one list and thus only set that texture once. FSDS3 on the other hand does not do that and will set the texture again for each object (even though it might still be the active texture).
Another example is when you move an object in the design program. In GMax objects this movement will be taken into account when calculating the vertex list, while FSDS3 does use the vertices relative to the local object of that part. So an actual translation command is used in the MDL object to move it to the correct location again.
It looks to me as the GMax X files have been optimized better. Applying transformations that are static into the vertex coordinates seems a useful way to take as much calculations away from the scenery engine as possible. And sorting polygons on the material or texture used, also seems a logical way to keep the amount of state changes as low as possible.
As most of my tools have been develloped and tested using GMax output files, it seems I will have some nice challenges to fix some bugs with FSDS3 objects and make the code general enough to read any MDL object.