Huge Textures!

Hi all!

on a project im working on, we ultimately could use one 12k texture on a single mesh… 16 bits per channel… I know how crazy this sounds… the workflow for such a thing is just insane… patching up 4k tiles is working fine but is not really elegant for texture artists.

on my gForce 7800 the max texture resolution is 4096… I ve noticed that 3d package tend to support texture over that size… but most of the time resulting in undesired effects… in xsi or maya for instance there is no warning like texture size not support… but instead… the api ray trace fine but do not render correctly in real time viewport… hang for long period of time… freeze completely, crash and any combination of those… obviously, developers did not consider this madness…

I im curious… what kind of approach I should take to handle huge texture in my engine!?

thx

I im curious… what kind of approach I should take to handle huge texture in my engine!?
Don’t. Tell your artists that they can’t have 12k textures, that it’s a basic limitation of the hardware, and that it is on them to work within that limitation as best they can.

You could use virtual texture mapping. Or if it’s for terrain, clipmapping (MegaTexture! :slight_smile: .

The hardware’s texture size limitation isn’t stopping John Carmack so it shouldn’t stop anyone else. :slight_smile:

There are a few methods, none of them work in all situations or at full preformance, but that is just the tradeoff you have to do.

  1. split the image into several 2048x2048 textures and then stich them together in a shader.

  2. split the mesh up in several bit’s where you can, and then use separate textures to texture it.

3.Mega textures, basically you use a 1024x1024 texture that repeats several times across the texture and then replace small bit’s of it as you move along it, but this only works on terrain meshes, however this is fast and the texture size can be allmost infinite.
If you are using it to do non realtime rendering then you could adapt this for all types of meshes.
But it is going to be slow

  1. dynamicly adjust the texture size acording to the distance the mesh is going to be rendered at.
    With those texture sizes a lot of textels are going to waste, so it’s ok to reduce the texture size, especially when the renderer automatically does this trough mipmapping.

  2. make them smaller, can you really defend those texture sizes, does it really increase the quality of the picture, a PS2 can only have 768kb woth of textures, and still it can produce good quality pictures.
    You can have at least 200MB worth of textures, imagine what you can do if you really tried.

About xsi, maya ,max, lightwave.
They use another way of accessing textures, in theory they can have any size as long as it fit’s on your harddrive (but it is slower than with harware).
Hardware have an upper limit, though in theory it could be a lot larger.
Hardware also have the advantage of being amazingly fast.

Thx for the inputs.

Well, the actual idea is this:

We are working on Imax cg characters… one of them has 67 meters long… can you guess what it is? :slight_smile: one texture per mesh, per character…. texture size as been set to be between 8k to 24k… we are currently testing to output the final render from 3k and blow it to 4k… but still, I cant really negotiate this for now… Tell me about it, this is pure madness.

However, the main idea is to make the model viewable through a real-time engine for art direction and client s approval instead of doing countless claustrophobic turntables… even more, insert the viewer in our pipeline for texture artists to get a realtime feedback of their work as they go along the texturing process.

About xsi, maya ,max, lightwave.
They use another way of accessing textures, in theory they can have any size as long as it fit’s on your harddrive (but it is slower than with harware).
We discuss this morning… and as far as I can tell… the only software that can visualize 8k texture in real-time and up is Cinema4D (body paint module)… xsi and maya manage to load 8k textures with some hocus pocus workaround but display them at 2k… only way to see a full result is to render via ray trace (mental ray in our case). no need to say that it takes awhile to work this way. Cinema4D win the race, but I have no idea how they do it!

  1. split the image into several 2048x2048 textures and then stitch them together in a shader.
    Interesting… how would this be done? I Just cant figure this out. The general idea is to make this transparent for the artists… and deal with huge textures internally.

This is not a life or death situation, but im concern about it and I think it could be a nice path to explore!

Thx again

Well the basic method is that you constantly have 2(or more depending on the texture size) large textures loaded, then sample from all of them as needed and do all the filtering in the shader, it’s a bit complicated and a bit of a time sink.

Using texture sizes above the hardware limitation is hard, the best way is really to slap your artists silly and force them to conform to the limitations, trust me, they will get around it(they just won’t like it).

I think he’s trying to make a slick asset pipeline between the artists and the final Imax ultra high resolution render without making the artists scale the textures down just for the preview stage.
Have you heard of image robot?

I think he’s trying to make a slick asset pipeline between the artists and the final Imax ultra high resolution render without making the artists scale the textures down just for the preview stage.
yes, something like this!

http://www.aptrio.com/Multimedia/Image-Editing/image-robot-english-12721.html

what about it?

I’m saying you’ve got to bite the bullet and use imagerobot to batch scale all your textures down into a ‘draft’ texture folder which your realtime renderer uses.