2
\$\begingroup\$

I have this material of a rocky wall. At far it seems okay, but often when walking close by it's obvious that the texture actually has not enough resolution and seems way too blurry.

Far: https://imgur.com/a/LsczzhF

Close: https://imgur.com/a/gcJMQUe

I remember some techniques used in Serious Sam 1 game, where they added some kind of noise layer on the textures which managed to give impression of better detailed textures.

How can I achieve effect of a super high resolution texture when player looks closer?

In game engine I'm using I can use/write shaders, materials next passes, etc.

I though about using triplanar normal textures blending, also with albedo textures blending too. With the help of triplanar texture coordinates I can use small seamless detailed textures that can blend with the original texture, but I lack knowledge of algorithms for blending normal maps, albedo textures without distorting them.

\$\endgroup\$
3
  • \$\begingroup\$ Levels of detail? \$\endgroup\$
    – Cei
    Jun 17 at 21:15
  • 2
    \$\begingroup\$ Have you looked into applying a detail map? \$\endgroup\$
    – DMGregory
    Jun 17 at 21:22
  • \$\begingroup\$ @DMGregory could you please elaborate more? How it can be done? \$\endgroup\$
    – idchlife
    Jun 18 at 13:32

2 Answers 2

3
\$\begingroup\$

This is usually solved using detail maps. (See e.g. Unity's documentation about the technique here)

For this you make a tiling texture with fine-scale detail, either as an albedo (surface colour) or normal map, or both. This could be random noise for a rough sandy surface, or fractal cracks and pitting for rock or crystal, scuffs for metal, thread weaves for fabric, pores for skin, etc.

You choose this texture so it has no large-scale variation: when crunched down to a smaller mipmap, it blurs out to an average grey (or average blue for a normal map - meaning no left/right/up/down bias). In signal processing terms, we take a "high pass" to the texture and keep only the higher-frequency components. Your main textures will provide the low frequencies, and this will fill in the high frequencies they're missing above their texture resolution.

In your shader, you multiply your usual UV coordinates by some number larger than one when sampling this detail map, so that it tiles multiple times for each repeat of your main texture (and crucially so that its texels appear smaller/finer than your main texture's texels). Then mix the detail sample into the regular albedo colour or normal direction of your surface at that point.

When you're far away from the surface, this fine detail blurs out to nothing, thanks to the averaged-out mips, and you see your original designed surface appearance as-is. You can even use a shader branch or LoD version of the model to skip the detail map code beyond a certain distance. As you get closer, the fine detail in the detail map starts to show up, and helps break up the texture filtering artifacts you see in the main map, making it appear as though the texture is much more detailed than it is.

\$\endgroup\$
0
\$\begingroup\$

The texture you showed is simply too small. If it would be in 4K you would be able to get really close and still have the illusion of detail. The minimum is now (2023) anything that can be called "HD" (Ca. 2K).

\$\endgroup\$
2
  • 1
    \$\begingroup\$ "The minimum is anything 'HD' (Ca. 2K)." Are there any reliable sources supporting this statement? \$\endgroup\$
    – liggiorgio
    Jun 18 at 8:27
  • \$\begingroup\$ This texture is 4k. The wall is just... Long and big. 4k is not enough for it for detail and I'm afraid I can't make 8k/16k texture cause it would fry my PC :D \$\endgroup\$
    – idchlife
    Jun 18 at 13:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .