This work has stemmed from Bobs genius idea of using ATI’s trueform technology to improve the smoothness of the 3D models in the game. The problem with this technique is that it is sadly limited to a relatively small number of graphics cards. So I am in the process of making a software equivalent.
I would just like to quickly point out that this does *not* make Bob’s efforts redundant, my solution is almost certainly slower and takes up more memory, this is simply a limitation of having to do it in software unlike Bob’s version, which if I understand correctly is all done in the graphics card. Also my solution is less accurate, mainly because my simple solution seems to do the trick nicely anyway, this could be changed but at the cost of loading time. Those of you able to take advantage of Bob’s true ATI hardware solution will likely get a better result.
OK, so my version is not quite finished yet, I’ve been developing it in a little glut shell to allow me to get it right before I have to figure out how to stuff it into the FS2 loading code. There’s a big problem with seams at the moment, I’m fairly sure I can fix that up, but you’ll just have to ignore that for now. Feel free to have a look.
* exe post delayed until I find somewhere to upload it *
It works by subdividing all polys in the object then using the normals to determine if each new vertex is on a curve or a straight and repositions it accordingly. The old vertices stay as they are so the shape can’t change too dramatically. This does mean more polys, no getting around it. It will run slower. People who cant get good frame rates will want to keep this feature off. It will come with at least two detail levels.
I’d just like to point out that I am also working on other stuff to try and speed stuff up as well as new features to slow it down. My new D3D particle code seems to run a bit faster and I’m going to try to get an old low memory graphics card off ebay and use that to help me pinpoint bottlenecks and ease them if possible. Anyway back to trueform, I guess it should have a different name for my version, falseform perhaps or I could be cheeky and call it rtform. I guess I can worry about that when its finished.
So visually the difference is not huge but I find it worthwhile, I don’t have the hardware to run Bob’s version so I have no idea how they compare. Please remember this is a general solution and only uses the object data that is there already. How it acts with an object depends on how the normals were set when the model was made. Sometimes it may choose to curve bits you that would probably look better straight, however this is matter perception which means I cant code a solution.
I think the key is for model makes to have a play and see how it works and remember what they have learnt when setting normals. Of course the paradox is that if you are making a new model you will probably be using so many polys that using trueform on it isn’t necessary.
This leads to the interesting problem of how to select which models to trueform, if a user has new and old models using the same levels of trueform on all could lead to them being detailed beyond need which would slow the game down for no good reason. Checking by poly count isn’t a great idea since the number of polys in a massive warship is much higher than that of the low poly objects like cargo boxes.
So if anyone has any ideas how the code should decide which objects to trueform and which to not post this thread. A list of object names to check against is an undesirable solution. I don’t suppose there is some magic way to identify volition models from custom ones?