Just wanted to let you know that this procedure works really fine. I 
extended it a bit to be able to use ZBrush/Mudbox style udims as well. 
Thanks again.

Am Montag, 2. Februar 2015 21:11:19 UTC+1 schrieb Larry Gritz:
>
> (CC'ing osl-dev because the fun part of this is on the OSL side.) 
>
>
> On Feb 2, 2015, at 11:52 AM, haggi krey <[email protected] <javascript:>> 
> wrote: 
>
> > I am reading image files with OIIO in my texure system. 
> > Is it possible to use udim tiled textures from Mari, Mudbox or Zbrush 
> with OIIO? 
> > And if yes, how? Do I have to implement the reading of the correct file 
> name by myself in my texture file osl shader or are there any helpful 
> procedures in OIIO? 
>
>
> You need to generate the texture name based on the coordinates: 
>
>         umap = int(s); 
>         vmap = int(t); 
>         udim = 1001 + 10*vmap + umap; 
>         filename = format ("%s%04d.tx", basename, udim); 
>
>         look up texture (filename, s-umap, t-vmap, ...) 
>
> or, if your v's are all upside down, then 1.0 - (t-vmap). 
>
> BUT... if you are using this from OSL (I'm presuming, because I see you on 
> the mail list there frequently), the repeated calls to create strings on 
> every shade will be a bottleneck. But there's a special trick to make it 
> super fast and fully constant folded! 
>
>
> shader 
> udimtexture (string basename = "", 
>           float s = 0 [[int lockgeom = 0]], 
>           float t = 0 [[int lockgeom = 0]], 
>           output color Cout = 0) 
> { 
> #define NAME(i) format("%s%d.tx",basename,i+1001) 
> #define TENNAMES(j) 
>  NAME(10*j+0),NAME(10*j+1),NAME(10*j+2),NAME(10*j+3),NAME(10*j+4), \ 
>                     
> NAME(10*j+5),NAME(10*j+6),NAME(10*j+7),NAME(10*j+8),NAME(10*j+9) 
> #define TENROWS     
> TENNAMES(0),TENNAMES(1),TENNAMES(2),TENNAMES(3),TENNAMES(4), \ 
>                     
> TENNAMES(5),TENNAMES(6),TENNAMES(7),TENNAMES(8),TENNAMES(9) 
>
>     string filenames[100] = { TENROWS }; 
>     // The magic here is that the 'format' calls, since their parameters 
> in this 
>     // macro expansion are all constant, will be constant-folded at 
> runtime, and thus 
>     // the entire filenames[] array will become just constant memory that 
> is initialized 
>     // just once, NOT every time the shader executes. 
>     // NOTE: if you expect more than 10 rows in v, adjust the above as 
> needed. 
>
> #undef NAME 
> #undef TENNAME 
> #undef TENROW 
>
>     int umap = int(s); 
>     int vmap = int(t); 
>     int udim = 1001 + 10*vmap + umap; 
>     string filename = filenames[udim];   // MAGIC! just an array lookup, 
> no format calls 
>     Cout = texture (filename, s-umap, 1.0 - (t-vmap)); 
> } 
>
>
>
>
>
> -- 
> Larry Gritz 
> [email protected] <javascript:> 
>
>
>
>
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to