Is there a way to pack seamless textures?

Hi there! Now that i’m a lot into texture packing in a 4x4 grid to optimize and better organize my effects, i was guessing if there is a way to pack seamless textures, like trails or so.

For what i tried, if I pack a seamless texture it will show a line in the adiacent quads.

To better understand what i mean here’s a quick example:

With a seamless texture touching the upper border and the lower border of his quad, when i emit some particles using one of the red-marked quads, i have a section of the seamless texture emitting with them.

Thanks for the clarification! :slight_smile:

Someone more technical could probably give you a better answer, but I think you’ll always run into issues with your edge pixels from compression and texture mip from the engine. The only way to avoid that is to turn off mipping and set your texture in engine to uncompressed, which you would not want to do in an actual production setting.

For seamless tiling textures, I pack mine into the RGB color channels, and then pick the channel I want in the engine. @Bruno posted a cool way to randomly pick a color channel as well Efficient way to randomly pick a color channel in materials?
I’m not sure what engine you’re using, but if you need it, here’s the HueShift material function expanded

1 Like

Unless you’ru up to some bizzare dilation and re-tiling in pixel shader trickery - you’re down to 2 options:

  1. Channel packing: as long as your textures are monochromatic - you can pack them into RGBA channels, an tiling will work just fine. But you will run into compression problems, since DXT does not compress RGB channels separately.

  2. Array textures: https://www.khronos.org/opengl/wiki/Array_Texture
    This is a far better solution, but only if your engine AND target platform supports it. Essentialy it’s a 3D texture, where every layer is a separate 2D texture.

There is also a 3rd solution: if you only need you textures to tile in one direction - you can just combine them into an atlas, keeping the texture seams aligned with image edges.

1 Like

Check this out:

1 Like

You can get away with it for certain things, but it’s project dependent and not a best practice. In this instance, splitting a 256 texture into 4 tiles, to use for seamless tiling noise, would get you terrible results even if it was vector art. You’re just not going to get the value range or detail you want from a 64x64 texture. I think there’s technical ramifications for setting a texture to No Mip and for Uncompressed as well, involving how Unreal handles those textures and how system hardware handles them.

1 Like

Talk to your technical artist really. Uncompressed textures are used for things such as vertex animation textures, LUTs and others. Check which texture formats your target platform supports

I’m not disagreeing with you here, I’m well aware that uncompressed, smaller resolution textures, depending on the content, can look much better. I’m just not aware of which platform you’re working on, and there’s a bunch of platforms I haven’t shipped games in, therefore your tech artist would be a great person to get good info from, that actually applies to your project

1 Like

Some of our environment artists have been looking into the process explained in that Shaderbits article you posted, for certain things. I just think for particle systems it’s a lot of extra instruction counts to currently be production-viable. So for a portfolio piece, it probably wouldn’t hurt Zemasu much. I’m definitely soaking up all the technical related info I can from our tech artist, programmers and more senior artists

Wow! there is a lot! Thanks to all who answered this question, it came out a great topic