A Conversation about Texture Scaling and PBR Maps (aka Fancy Maps)

Since October 2022, I’ve been doing a lot of work with textures - upscaling and generating PBR (fancy) maps. Over the time, I’ve made quite a few observations about how different texture scales look in the game.

In general terms, the game ships with what I’ll arbitrarily call Half-K textures; that is, textures that are generally 512x512 or smaller. Firstly, any texture less than 256x256 in size should probably upscaled to at least that size (or some dimensional variant thereof - the smallest axis of the texture is 256 pixels). Although small, these textures don’t look too bad on most resolutions.

Using 1K textures (textures that are 1024x1024 or some multiple thereof maximum - 512x1024, etc.) really gains you nothing over Half-K textures. The models look the same as if you used 512x512 as your base size).

The next size is 2K or 2048x2048 as the base size. At this size, you start to see visual improvements in the models and the hits to performance are negligible. Details tend to be much crisper, especially if using PBR maps generated from this scale.

The final size is 4K or 4096x4096 as the base size. At this size, you see enormous visual improvements, especially if using PBR maps, but at the expense of performance. The greatest performance hit is with PLT textures. The more parts-based creatures on the screen at the same time, the harder the performance hit.

All that said, there is one major thing you can do to mitigate performance issues: generate your normal and spec maps from whatever texture base size you’re using - 1K or 2K or 4K - and then reduce them at least one size step downward. So, if using 4K diffuse maps, you can use 1K or 2K normal and spec maps.

If you’re still taking a performance hit, reduce ALL the textures down another size step until you reach a point where the performance hit is negligible. OH, and do use DDS textures, not TGA, and do use NWN Crunch to compress them.

These are just my observations and I’m by no means an expert. Thus, I’d love to hear anyone else’s observations or opinions.

2 Likes

[edit]
This is in no way a criticism, just providing some technical info pertinent to the subject.

Some valid points but also some misconceptions. All too often I see “HD Texture upgrade” packs posted, for any number of games, that go crazy and upscale 256x256 textures to 4k+. In many cases it’s just resized and sharpened, in every case it looks objectively worse than the original textures.

The key is pixel density, a 4k texture is wasted on something like a stein but on a terrain mesh it vastly improves the visual fidelity. For things like heads, 1024x1024 is typically more than enough if the texture is well made. For armors, particularly armors with intricate designs, 2048x2048 is acceptable but about the maximum I would shoot for. A crisp, well painted 256x256 texture on a small object will often actually look better than a larger texture, no matter how detailed. The game engine can only render so many pixels on the screen at any one time owing to your resolution. So if you play at say 1024x768 (just for the example), there is absolutely 0 point in any texture on an object being larger than 512x512, the object would be filling more than a third of the screen before you started to see a pixel for pixel rendering. Understanding the correlation between the resolution being used to play the game and the maximum number of pixels in any given screen helps tremendously when determining optimum texture sizes for both performance and fidelity. The only things that fall outside of this rule are things like terrain and large palceables that don’t fit in a single frame.

With terrains typically you don’t need super high res textures thanks to texture blending and such, a smaller texture can be “painted” onto the terrain in patches blended with other smaller maps. For these blend maps, yet again you don’t typically want to go larger than about 1024x1024, particularly on older games, even NWN EE with it’s engine upgrades. Now if you have a single texture for say a grassy field, you are entering into megatexture territory, not something many older engines support.

For NWN and even NWN EE I wouldn’t bother with anything over 1024x1024 for character parts and models. A well made texture that has crisp details and defined edges + a quality normal map will look as good, if not better than any upscaled 2048x2048 texture. AI upscaling is a huge help and a vast improvement on the old method of resizing and sharpening but even it can’t compete with a properly made texture at the resolution intended.

So for performance, assess the maximum amount of screen real-estate an object will occupy and roughly how many pixels that represents. For wrapped textures, like an arm part, double that amount and round up to the nearest multiple (256, 512, 1024, 2048 etc) and you should be golden. It doesn’t have to be exact, just a guestimate is fine but it will save on a lot of needless pixel density that will never actually be seen. While 4k is fairly common these days I would shoot for a 1440p resolution when considering these values. It will still look good at a 4k resolution but won’t be a massive waste at 1080p.

This is paraphrasing things I have heard over the years from various devs, some of it may even be outdated by now but given NWN EE isn’t a current gen game, it should still mostly hold true.

I hope this is useful info :slight_smile:

1 Like

A simple example to help visualize the wall of text above:

A texture of a leaf. Lets assume the player will be playing at a 4k resolution, 3840 x 2160, even if the leaf were to fill the entire screen you would not see every pixel of a 4096x4096 texture.

The closer you get your texture resolution to a 1 to 1 ratio at the objects typical viewing distance to the pixel density of your frame resolution (1080p, 1440p, 4k etc) the crisper and cleaner the texture will look. Just like when you try to play a game at 720p on a native 1080p monitor, if the game has to down-sample, you lose fidelity. 720p on a native 720p display will look far better than 720p on a 1080p display. 1 to 1 or as close as you can get to it because anything over is wasted.

2 Likes

Thanks for the great post @Xaltar . I know I have a lot of misconceptions about fancy maps and figured it was time to start a conversation before my misconceptions become “set in stone” so to speak.

I always use cupscale for regular textures and the PLT-Tools by @merricksdad for upscaling PLT textures. For the project I’m currently working on, I’ve decided to cap the size for the PLT textures at 512 pixels, as I’ve found no gain whatsoever in using textures larger than that.

I’m primarily a tileset and placeable guy and tend to prefer 512x512 for that work; again, as I’ve found little gain using larger textures. Personally, I’d much rather use lower res pbr maps and get some improved definition than use large pbr maps and tank my performance.

Hopefully some other people will chime in with their thoughts/discoveries.

2 Likes

Happy to share what I know :slight_smile:

A lot of what I shared is easily testable, as you already noted, in a lot of cases anything larger than 512 offers limited to no benefit. The trunk of a tree however, given it’s large size will likely benefit from even a 2k map. The key to a beautifully detailed, low performance cost map/tileset is to find the balance of what benefits from more resolution and what doesn’t. I hope my examples help figure that out.

Happy modding :smiley: