A few observations on utilising PBR Textures

These just a few thoughts from my working with NwN EE’s new(ish) texture maps. These are my own opinions - feel free to disagree. I am only dealing here with maps generated from a starting image, not those generated from a higher detail model. These comments mostly deal with PBR maps when used for tilesets.

Let’s get this out of the way first. If you are adding PBR maps to existing textures (so far, I’ve only done this with tilesets), PBR maps are not (in most cases) a magic bullet that will elevate the visuals of the game to the same level as a 2021 Blockbuster. The effect, in most cases anyway, is subtle and really only add lumps and bumps to the surface. There are a couple of exceptions here. The first are where glow maps are used. For D20 modern this is a boon. You can now have glowing switches and screens. It could also be useful for naturally luminescent plants and fungi. The other exception is that you can control how reflective a surface is. In other words, you can now have matt, silk, gloss, metallic looking materials where without these maps you were limited to just matt, now you have a variable range of reflectivity.

This next thing should be blindingly obvious. As a general rule, the better quality and higher detailed a starting image the better the result will be. There are going to be exceptions to this but I, for one, cannot tell you why these exceptions occur.

Related to that is image size. Again, as a general rule for (tilesets anyway), don’t use a texture that is less than 128 pixels on its smallest size and absolutely don’t use anything smaller than 128 x 128 pixels. I’ve tried this with existing 64x64 textures and it just doesn’t work. They would seem to be too small to produce meaningful results. As a general rule, 512x512 is a good size (for tilesets) but if you can use bigger, please do so especially where the PC is in a tight enclosed space such as small tunnels, pipes and sewers. This is because of aliasing and pixilation. A texture without the extra maps may look fine in game but when you add the maps it would seem that they tend to emphasize the individual pixels especially with small textures.

On the other hand, don’t go overboard on the size of your initial texture. It is all down to context. If it is intended that the PC is going to be observed from a distance, there is every chance that your hyper detailed, super-sized (even 2k is probably overkill) texture(s) won’t make a blind bit of difference. Another thing is floor textures. This is down to the angle at which light in-game strikes the surface. Think about this for a moment. In a dark area a PC will usually be carrying a torch or using a light spell. Both light sources will be above the PC’s head creating a steep angle for the light to travel. This may show off reflective surfaces but is hardly conducive to creating the shadows at floor level to show off the new lumps and bumps.

Things that probably won’t work. Either in your own tileset or other peoples, you may come across effects textures such as water, dust and reflections. Don’t bother adding PBR maps for these as there is a good chance they just won’t work or they may even make those textures look worse.

Resizing textures. I haven’t tried any of the AI texture resizers so can’t comment on these. I have on the other hand used “conventional” resizing provided by programs such as the Gimp. These can work surprisingly well as long as you don’t go above a doubling of the height and width of your original texture. Remember though, these won’t add extra detail except perhaps anti-aliasing to (at least) parts of the texture. If you do go down this route, you will almost certainly need to use a “sharpen” filter afterwards.

Final thoughts/conclusion. If you are going to add PBR maps to an existing texture the results can be variable ranging from “Wow” down to “I can’t see any difference”. It’s (mostly) down to the texture(s) you start with. If, on the other hand, you are making a new tileset I hope my above observations are useful to you.

Lastly, and FWIW, I have tried PBR on some old placeables textures of mine (from a particular ccc) and it worked too damn well, taking visual chunks out of the wood texture (no textures were harmed as part of the experiment :smile_cat:). With the tool I use to generate the maps, this would be fixable if I could have been bothered to do so. Maybe another time.

Comments? Questions?


Very interesting observations!

On the topic of upscaling, I’ve been working on resizing with AI programs and I find that it works quite well. The main issue for me is that I’m new to making custom content so there’s been a bit of a learning curve. I have some advice though based on my experience with resizing existing content. My main hurdle has been implementing textures in game due to my inexperience.

-I find the best program for this is ESRGAN, as it is free, and provides the most customization because there are many AI models for whatever you need.
-The resizing can add details, but it’s best to pick a model that was trained using textures similar to the ones you are resizing.
-Current AI programs to add texture maps have not had good results for me
-I found that using AI programs trained for upscaling Skyrim textures work especially well.
-The programs do a decent job of resizing even small textures because if it has been trained on similar textures, such as clothing and armor, it is able to basically guess what it should look like if it were larger. So, for example, I resized cloak textures and it made detailed decorative embroidery.

Also another interesting thing I’ve discovered. I’ve been experimenting with adding PBR textures to PLT textures. What I’ve discovered is that as far as I can tell some of the info in the wiki is incorrect as of the current version.

The wiki says that for PLTs you must leave texture 0 as null, and then ensure that the filename of the PLT is the same as the MTR, and then it will detect the PLT. However, when I did that I got weird models with all the maps except the PLT. I solved it by changing texture 0 to the filename of the PLT.

However, I also encountered another issue when trying to use a new PLT (Such as an upscaled one). Of course, I may just not understand how to do overrides well yet. As far as I can tell, the models load the old texture, regardless of if you made a hak or override with the same file name for the texture (And sometimes a completely different texture), or a MTR file. So far the only fix I’ve found is to import the uncompiled model into blender, tell it to load a material texture with the same name as the PLT, then export it to replace the old file. I might also try changing the file names for the new PLT, then using an MTR file that has texture 0 as the new PLT, it would be a lot faster.