It's (finally) time for another status update. The new client is actually mostly working at this point. Since the last update, most of the things I've been doing is converting lots of small things here and there, too numerous and piecewise insignificant to list, but the last "block" of things I've completed is all the "custom" graphics for various different objects, like cow textures, barterstand items, display signs, tracking effects, smoke, drug effects and all those various little miscellaneous things.
I think the only real things that are missing at this point are instanced rendering and shadows, and out of those I'm currently working on instancing. I expect shadow rendering to be a fairly small thing (given that it uses much of the very same infrastructure that click-testing does). I'm only saving it for last to see whether it can properly re-use the same instancing data as the primary rendering uses. Instancing is certainly the bigger sub-project of the two, but it's coming along.
Technically, it should actually be possible to start testing the client publicly at this point, since instancing is really only a performance optimization (albeit a very important one), but setting up a public testing environment is not completely trivial since it requires a separate set of resources (with differing versions). It has to be done sooner or later, of course, since the client will have to be tested before switching to it entirely. I'm just waiting with that until the real work is done. The "future work" part of the OP still remains, though.
Time-wise, since everything seems to be almost complete, I actually don't expect it to take all that much longer. I'm sure there will be bugs aplenty to fix once public testing starts, but unless there are any
really hard-to-fix ones (here's to hoping there aren't), I'd expect the new client to be done and in use before summer is over, hopefully sooner rather than later.
Performance-wise, it's actually looking somewhat better than expected. It is, of course, hard to test actual realistic situations (so perhaps I shouldn't be counting my chickens before they hatch, and such), and the lack of instancing and shadows also makes it hard to compare to the current client, but as intended, the "actual client rendering" (as defined in the OP) has been pretty much removed as a bottleneck. More surprisingly though, the OpenGL dispatch performance also seems to have improved somewhat significantly (30% faster in one recent test, when compared to the current client with shadows turned off), and that's despite the current lack of instancing. I'm honestly not sure why that even is, but it might be related to the OpenGL backend having more information to order rendering more intelligently. I expect the "vertex-data atlasing" mentioned in the OP to improve it further. Experimentally, I've also tried parallelizing per-tick work over several cores, which does seem to cause a somewhat significant improvement when there are many animated objects being rendered at once, but also has a not insignificant amount of overhead, so there is probably some kind of balance to be struck for when to use it, and I'm not yet entirely sure where that balance lies.
Since the new client isn't really intended to look different in any way, screenshots don't really say a whole lot, but I thought I'd include one anyway if only because it makes the post look more significant:
- ss.jpeg (633.67 KiB) Viewed 1184 times
I guess the stats look a bit different.