Growing Pains


It's been a bout two weeks since my last post, but I've been hammering away at the project in Unreal Engine. There have been a few bumps in the road along the way, as expected.

I have faced performance issues from the beginning, and some of my choices have ended up compounding those issues, which again is not exactly unexpected. My first attempt at creating something that resembled a "large open world" (stop me if you hear this one a lot) pretty much turned into a slide show when I added foliage to it.

When I reduced the scope of my foliage down to a size that won't cause a meltdown, I found that my LOD shifts were exceedingly jarring at that moment where foliage switched to a billboard. I later learned that you can help mitigate this by lightening the billboard texture, because for some bizarre reason the billboard texture is considerably darker than the one for higher levels of detail. This is an extremely common problem, with an extremely common cause, and a fairly easy fix. My LOD's quit working, however, after I did some tweaking, so I might have to reimport the megascans into the project to correct it, as I no longer get billboards at any distance, and putting the settings back to the default won't bring them back. I broke billboards, and I can't fix them!

Next I moved onto world partition as a way to lighten the load. I converted my map into a world partition map, ran it in the editor... and promptly fell right through the world. I have contemplated if raising the player a few feet off the ground would give the partition time to load before the player collided with the ground, but instead I just reverted to before I made that change, and started a fresh new map.

After moving to world partition, I have been plagued with texture streaming issues, sometimes to the point where the ground beneath my feet just becomes a blurry mess until I stop and let it catch up. Adding foliage made it much worse, and foliage caused some fairly extreme and highly distracting levels of tearing to occur. The only fix for this seemed to be adding a console command to my level Blueprint to enable vsync. I'm not a fan of this hack, as it created a hard maximum FPS of 60, but the tearing was beyond horrifying to witness, indeed worse than any in game tearing I had ever experienced before.

Enabling distance based culling for my foliage was very helpful in getting framerates to a respectable level, and I also made the decision to reduce the "minimum" LOD of foliage above 0, which is actually the highest level of detail, because the camera wasn't actually going to be close enough to it ever to really benefit from LOD 0, and it would save thousands, or even millions of polygons. While this helped me nail down a truly rock solid 60 FPS on my desktop, with that regrettable vsync limit in place, it still only got me up to about 12 FPS on my laptop with Iris Xe graphics.

I have some innovative ideas in mind to further optimize my maps. I'll also be devoting some serious thinking time to the perceived value of "large open worlds", and also just how much value foliage is contributing to my "world". I'm hoping to keep the foliage, but if it needs to be sacrificed, so be it.

I also managed to stretch my project to the limits of the shenanigans that Github will tolerate, and so I had to migrate to Perforce. I setup a custom server for it, with Ubuntu, but Ubuntu's installer made some "interesting" (pronounced bad) choices for how to automatically partition it, which cut my available space for repos in half, and I didn't notice what it had done until after I moved my project into it. My guess is that it created one of those trendy "home" partitions that I have absolutely no use at all for in this specific use case, and that ate half of the space. There is an actual partition that has all of the space allocated, but there's some shady virtual shenanigans that obscure what's what on top of it all, and "/" is definitely only showing half of it in df, as is Perforce's admin tool.

I'm beginning to suspect that my first test build will wildly exceed itch.io's rather paltry 1 GB file upload limit, considering the current version is now 3.6 GB uncompressed. My Perforce repo was sitting at 20 GB before I had made my first change to commit, so things are balooning in size at an exponential rate. This is all without having added enemy NPC's or combat yet. There certainly isn't 20 GB of real substance in that repo, so this extra cruft feels like some digital "dark matter" that Unreal has padded my project with.

I'm still cranky about moving my development system to Windows for the move to Unreal Engine 5.3, and I'm wondering "how bad could it be?" to get Unreal working on Linux instead. It's a distraction playing out in my head. I also sometimes watch the dev logs for Road To Vostock, and wonder if I needed to switch to Unreal at all. He's using 4.1.1 stable, and not complaining about the bugs I was running into on 4.2.

As I said, though, I do have a plan to get this thing back on track, and to get back to having at least as much working again as I had with my old Godot 2D build. Maybe even a little bit more than that.

So things have been... interesting.

Get Action RPG Prototype

Leave a comment

Log in with itch.io to leave a comment.