Well my interim measure blew out. By my calculations for a single 1024*1024 32bit texture with 6 faces and 5 mipmaps around 34Mb is used by each texture.
I guess you can retain tileability by writing some kind of shader that perform the mapping transformation of the texture in real-time instead beforehand like inside of Blender.
Unless I am missing something obvious this can't be done - textures get "ripped up diagonally" when trying to map to a cube. An attempt to explain this with ASCII is below. Each side is numbered. For a "2D tileable" texture sides 1, 3 should be seamless and so should sides 2, 4.
Look carefully at the sides that meet at each corner for each face. There doesn't seem to be any way other to map faces that touch seamlessly.
Code: Select all
+--2--+
| |
| |
4 UP 3
| |
| |
+--4--+--1--+--3--+
| | | |
| | | |
3 LF 2 FR 4 RT 1
| | | |
| | | |
+--1--+--3--+--2--+
| |
| |
1 DN 2
| |
| |
+--4--+
| |
| |
3 BK 1
| |
| |
+--2--+
I'm currently looking at generating 3D 64*64*64 pixel perlin textures for various noise types (fBm noise, abs noise, turbulence, veins, ...). These should be around 1.2Mb each at 32 bits with 5 mip maps.
From the 3D textures I should then be able to retrieve samples from each texture by sampling adjacent integer part of a given u, v, w coordinate point (+1, 0, -1 in 3D) where (u, v, w) range (0..64, 0..64, 0..64) and lerping the fractional part. This is effectively how classic perlin noise does gradient lookups. Using this method textures can be sampled in 3D and should scale nicely.
Materials could be created by sampling, colorizing and mixing various noise types - the Blender material node editor is a very good starting point for designing procedural textures.
Getting all this to work properly (let alone at animation frame rates) is non trivial. If anyone has any other ideas I would appreciate the feedback.