Thanks for the feedback. Yes, my initial stab is leaning toward <UDIM> with 
offset 1001 and 10-wide, and <u> <v> with 0-offset and <U> <V> with 1-offset. 
If any other cases come up in practice, we can extend the syntax to handle 
other offsets or widths, but for now I think it's best to keep it simple and 
not over-engineer a solution to a problem that does not exist in practice.

I'm making progress on this, and should have an initial review for comment soon.

        -- lg


> On Jun 2, 2016, at 12:19 AM, Michel Lerenard <[email protected]> wrote:
> 
> Same here. 
> We have UDIM hardcoded to 10 and U/V offset chosen depending on 
> low/uppercase, ie 0 or 1 and never got any complaint/request to support more.
> 
> On 06/02/2016 12:27 AM, Deke Kincaid wrote:
>> Mari used to do this when it was an in house tool but as commercial software 
>> it has always been limited to 10 UDIM's across.
>> 
>> On Wed, Jun 1, 2016 at 2:12 PM, Larry Gritz <[email protected] 
>> <mailto:[email protected]>> wrote:
>> In practice, does anybody use UDIM with width other than 10? Or u & v tiles 
>> with offset other than 0 or 1?
>> 
>> 
>>> On Jun 1, 2016, at 12:13 PM, Ramon Montoya Vozmediano <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> We are interested in testing it!
>>> 
>>> The Arnold and MtoA usage is the following:
>>> <UDIM:width> or <udim:width> : default width is 10
>>> output: "%04d"
>>> 
>>> <tile:offset> : mudbox (default offset 1)
>>> output: "_%d_%d"
>>> 
>>> <utile:offset>, <vtile:offset> : default offset is 1
>>> output: "%d"
>>> 
>>> <u:offset>, <v:offset> : default offset is 0
>>> output: "%d"
>>> 
>>> <U:offset>, <V:offset> : default offset is 1
>>> output: "%d"
>>> Those have accrued with time and might be in need of some cleanup. But I 
>>> have seen variable widths for UDIMs.
>>> 
>>> 
>>> 
>>> A related issue is token replacement in general: in many systems it's 
>>> possible to specify a texture name based on some user data attached to the 
>>> geometry being shaded:
>>> 
>>> "crowd_body_<user_attribute:variantID>_<udim>.tx"
>>> 
>>> where for each render object you have a user defined string (or numeric) 
>>> attribute indicating its texture variant.
>>> 
>>> Because dealing with token replacement like that one shares some of the 
>>> work required for tiles it's interesting to at least consider what would be 
>>> needed from OIIO to handle the general case.
>>> 
>>> It would involve letting user code resolve certain tokens with user defined 
>>> callbacks and pointers to data (a token replacement closure).
>>> 
>>> So a sketch for a more generic approach: before starting to use textures 
>>> client code would register token resolvers:
>>> 
>>> std::string CustomTokenResolver(std::string &token_data, void *caller_data)
>>> { /* use caller_data to resolve our token */ };
>>> 
>>> ...
>>> OIIO::RegisterCustomTokenResolver("user_attribute", CustomTokenResolver);
>>> ...
>>> 
>>> 
>>> And when evaluating textures it would pass along some data to be used by 
>>> the resolver if needed:
>>> 
>>> void *caller_data_for_resolver = (void *)data;
>>> ...
>>> my_texture_lookup = OIIO::texture(handle, u, v, ...., 
>>> caller_data_for_resolver);
>>> 
>>> 
>>> Best,
>>> 
>>> 
>>> r
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Wed, Jun 1, 2016 at 12:29 AM, Michel Lerenard <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> Yes.
>>> 
>>> Mudbox and Zbrush support individual tags like you said, meaning they could 
>>> be far from each other (like foo_<u>_bar_<v>.tx), but they tags are almost 
>>> always right next to each other(foobar_<u>_<v>.tx), in which case having a 
>>> single <uvtile> tag is easier (foobar_<uvtile>.tx).
>>> 
>>> To be able to cover all cases, I support all three tags: <u>, <v>, 
>>> <uvtile>, low and high case.
>>> 
>>> 
>>> On 05/31/2016 09:09 PM, Larry Gritz wrote:
>>>> OK, so the generalized rule is:
>>>> 
>>>> <u>  -->  "%d", int(u)
>>>> <v>  -->  "%d", int(v)
>>>> <U> -->  "%d", int(u)+1
>>>> <V> -->  "%d", int(v)+1
>>>> <UDIM> -->  "%04d", int(u%10) + 10*int(v)/10 + 1
>>>> 
>>>> That should cover all the bases of known apps we're concerned about?
>>>> 
>>>> 
>>>>> On May 31, 2016, at 11:58 AM, Deke Kincaid < 
>>>>> <mailto:[email protected]>[email protected] 
>>>>> <mailto:[email protected]>> wrote:
>>>>> 
>>>>> Maya added native optional UDIM/UVTILE and Zbrush methods in the read 
>>>>> node about 3 years ago.
>>>>> 
>>>>>  
>>>>> <https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/Maya/files/GUID-132520C0-F1DF-4C74-B8C1-D89154ADFBDB-htm.html>https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/Maya/files/GUID-132520C0-F1DF-4C74-B8C1-D89154ADFBDB-htm.html
>>>>>  
>>>>> <https://knowledge.autodesk.com/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/ENU/Maya/files/GUID-132520C0-F1DF-4C74-B8C1-D89154ADFBDB-htm.html>
>>>>> 
>>>>> 0-based (Zbrush) - u<u>_v<v>
>>>>> 1-based (Mudbox) - u<U>_v<V>
>>>>> UDIM (Mari) - <UDIM> 
>>>>> 
>>>>> On Tue, May 31, 2016 at 11:44 AM, Stephen Parker < 
>>>>> <mailto:[email protected]>[email protected] 
>>>>> <mailto:[email protected]>> wrote:
>>>>> tl;dr - support both udim and uvtile
>>>>> 
>>>>> V-Ray supports both <UDIM> and <UVTILE> and those are the exact tags used 
>>>>> in the filename for string replacement. At Digital Domain, they 
>>>>> exclusively use <UVTILE> as it plays nicer with animated texture 
>>>>> sequences. At some point, Maya only allowed you to overload one padded 
>>>>> sequence token between two dot's (.). So the file names for <UVTILE> 
>>>>> would look like this:
>>>>> 
>>>>> "brick_red_u1_v1.exr" 
>>>>> 
>>>>> and if it were an animated texture:
>>>>> 
>>>>>  "sign_neon_u1_v1.0001.exr".
>>>>> 
>>>>> To be clear, the format string is "_u%d_v%d" and tiles start at 1.
>>>>> 
>>>>> Mari's convention for animated textures was to prepend the file name with 
>>>>> padded numbers: "####sign_neon.1001.exr" (which didn't play nice with 
>>>>> Maya's texture file node and it's convention for animated sequences) and 
>>>>> was also not easy to look at on disk in a directory structure for obvious 
>>>>> sorting issues.
>>>>> 
>>>>> I wouldn't impose any constraints from tile to tile unless it's a really 
>>>>> big burden to support. For example, anything that isn't specified on the 
>>>>> file read node representing the virtual texture, should be permitted to 
>>>>> vary to whatever extent you can reasonably support. Ideally, you wouldn't 
>>>>> have to ... but, vfx. :)
>>>>> 
>>>>> -steve
>>>>> 
>>>>> 
>>>>> 
>>>>> On Tue, May 31, 2016 at 8:35 AM, Larry Gritz < 
>>>>> <mailto:[email protected]>[email protected] 
>>>>> <mailto:[email protected]>> wrote:
>>>>> Thanks, that's really helpful!
>>>>> 
>>>>> Yes, and I should have mentioned in my original email -- if there is an 
>>>>> application that has already added UDIM support that is widely used or 
>>>>> that you like its conventions, please point it out and I'll try to use 
>>>>> the same notation (if there is any consensus among such apps).
>>>>> 
>>>>> Michel, I'm happy to support the Mudbox tiling as well, can you outline 
>>>>> how it is different?
>>>>> 
>>>>> 
>>>>> 
>>>>> > On May 31, 2016, at 2:51 AM, Michel Lerenard < 
>>>>> > <mailto:[email protected]>[email protected] 
>>>>> > <mailto:[email protected]>> wrote:
>>>>> >
>>>>> > Hi,
>>>>> >
>>>>> > I add support for UDIM in Clarisse over the TextureSystem a few years 
>>>>> > ago, I should have a few answers:
>>>>> >
>>>>> > - I used the <UDIM> tag. "%04d" is too generic and may confuse users in 
>>>>> > my opinion, since it could also be a way to specify a frame.  Having an 
>>>>> > explicit tag that stands out is useful. (so we have two tags: <UDIM> 
>>>>> > for Mari and <UVTILE> for Mudbox. )
>>>>> >
>>>>> > - Agree that UDIM is single tile. Tile indice in UDIM is hardcoded in 
>>>>> > Clarisse to  1000 + 10 * V + U + 1. Mari seems to be harcoded as well, 
>>>>> > so unless you have a in house software package that support other 
>>>>> > sizes, I don't think you'll need another line width. We've never had 
>>>>> > any complaint so far.
>>>>> > Per texture option : useless.
>>>>> > At texture system level: why not, it shouldn't make the code much more 
>>>>> > complex.
>>>>> >
>>>>> > - In my implementation, I do not make any assumption on the data: it 
>>>>> > may or may not exist for a UV range, resolution may change, so          
>>>>> >                                                  does AOV/channels. 
>>>>> > It's not the most efficient way to go, but I'm sure that it will work 
>>>>> > every if you mix mipmapped TX files with loads of AOV with simple Jpegs.
>>>>> >
>>>>> > Here are a few thoughts that I'd like to share with you about this 
>>>>> > feature:
>>>>> > - The main issue I have today is being able to use filtering over 
>>>>> > several tiles. I compute the name of the file to evaluate, and offset 
>>>>> > UVs before calling the texture() function, which means that OIIO does 
>>>>> > not know that I'm evaluating UDIM tiles => I can't get any filtering on 
>>>>> > the sides of the tiles, or integrate data over several tiles.  Making 
>>>>> > this work would be awesome.
>>>>> >
>>>>> > - Listing the available tiles for fast access can be easily done. What 
>>>>> > I do is parse the folder, get all files matching the filename and 
>>>>> > create an array to later be able to evaluate a tile without accessing 
>>>>> > its filename. Very efficient especially if you have holes.
>>>>> >
>>>>> > - Do you plan to support Mudbox tiling system as well ? It's not that 
>>>>> > different and is able to handle negative ranges, which is very pratical 
>>>>> > for symmetry.
>>>>> >
>>>>> > - I'm interested in testing it, i'm curious to see if it's faster than 
>>>>> > my implementation, in which case i'd switch.
>>>>> >
>>>>> >
>>>>> > On 05/30/2016 11:41 PM, Larry Gritz wrote:
>>>>> >> I've gotten a few requests lately for direct UDIM support in OIIO 
>>>>> >> (and, transitively, in OSL).
>>>>> >>
>>>>> >> The way I figure this will work is that you pass in the UDIM u and v 
>>>>> >> texture coordinates (which may extend outside [0,1], with each [i,i+1) 
>>>>> >> block indicating a different texture region tile), and for the 
>>>>> >> filename you will give a generic name such as "myfile.<UDIM>.tx". For 
>>>>> >> the particular texture lookup, the u and v will be assessed and the 
>>>>> >> "<UDIM>" will be replaced with the right tile number (let's say "1013" 
>>>>> >> for u=0.25, v=0.12).
>>>>> >>
>>>>> >> Don't worry, I know a way to do this so that there is no actual string 
>>>>> >> searching or construction happening per call. So the expense of this 
>>>>> >> will be very very low.
>>>>> >>
>>>>> >> But I want to make sure everybody is happy with the way of signalling 
>>>>> >> this, so I have a few questions.
>>>>> >>
>>>>> >> * What text should indicate that it's a UDIM texture and which will be 
>>>>> >> substituted with the tile number? "<UDIM>"? "%04d" or some other 
>>>>> >> explicit format indicator? Something else?
>>>>> >>
>>>>> >> * Does everybody agree that UDIM tiles are 1-D (i.e. a single tile 
>>>>> >> number, not a separate u and v tile in the filename), start with 1001, 
>>>>> >> are 4 digits, and always have 10 tiles in the u direction? Can this be 
>>>>> >> hard-coded, or does it need to be an option to the ShadingSystem (that 
>>>>> >> could be overridden on a per-site/per-product basis), or does it need 
>>>>> >> to be something that can be specified separately for every texture?
>>>>> >>
>>>>> >> * Because the filename you pass is "virtual" -- that is, 
>>>>> >> "foo.<UDIM>.tif" doesn't actually exist, it's only turned into a 
>>>>> >> proper existing filename in the midst of a lookup for a particular u,v 
>>>>> >> -- this means that TextureSystem::get_texture_info which lacks uv 
>>>>> >> coordinate parameters must necessarily fail for most queries, since 
>>>>> >> you don't know which individual texture region file should be used. 
>>>>> >> Does that sound reasonable for those queries to fail?
>>>>> >>
>>>>> >> * Are there any properties that you feel strongly should or should not 
>>>>> >> be constrained to be identical for all of the individual region files 
>>>>> >> for one UDIM texture? I assume we want to allow the region tiles to 
>>>>> >> have differing resolutions, say. But should/can we assume that they 
>>>>> >> must all share the same number of channels? Are there any cases I need 
>>>>> >> to be aware of where differences are nonsensical? Any cases where 
>>>>> >> differences are inevitable and I need to ensure that such flexibility 
>>>>> >> is allowed?
>>>>> >>
>>>>> >> Let me know if you have opinions. As well, even if you are fine with 
>>>>> >> the proposal but are keen to try out the UDIM support as soon as it's 
>>>>> >> available, let me know so I can ping you for feedback when it's ready 
>>>>> >> to take for a test drive.
>>>>> >>
>>>>> >>      -- lg
>>>>> >>
>>>>> >>
>>>>> >> --
>>>>> >> Larry Gritz
>>>>> >>  <mailto:[email protected]>[email protected] 
>>>>> >> <mailto:[email protected]>
>>>>> >>
>>>>> >>
>>>>> >> _______________________________________________
>>>>> >> Oiio-dev mailing list
>>>>> >>  <mailto:[email protected]>[email protected] 
>>>>> >> <mailto:[email protected]>
>>>>> >>  
>>>>> >> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>> >>  <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>>>>> >>
>>>>> >
>>>>> > _______________________________________________
>>>>> > Oiio-dev mailing list
>>>>> >  <mailto:[email protected]>[email protected] 
>>>>> > <mailto:[email protected]>
>>>>> >  
>>>>> > <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>> >  <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>>>>> 
>>>>> --
>>>>> Larry Gritz
>>>>>  <mailto:[email protected]>[email protected] 
>>>>> <mailto:[email protected]>
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Oiio-dev mailing list
>>>>>  <mailto:[email protected]>[email protected] 
>>>>> <mailto:[email protected]>
>>>>>  
>>>>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>  <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Oiio-dev mailing list
>>>>>  <mailto:[email protected]>[email protected] 
>>>>> <mailto:[email protected]>
>>>>>  
>>>>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>  <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Oiio-dev mailing list
>>>>>  <mailto:[email protected]>[email protected] 
>>>>> <mailto:[email protected]>
>>>>>  
>>>>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>>  <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>>>> 
>>>> --
>>>> Larry Gritz
>>>> [email protected] <mailto:[email protected]>
>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Oiio-dev mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 
>>>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>>> 
>>> 
>>> _______________________________________________
>>> Oiio-dev mailing list
>>> [email protected] <mailto:[email protected]>
>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 
>>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>>> 
>>> 
>>> _______________________________________________
>>> Oiio-dev mailing list
>>> [email protected] <mailto:[email protected]>
>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 
>>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>> 
>> --
>> Larry Gritz
>> [email protected] <mailto:[email protected]>
>> 
>> 
>> 
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected] <mailto:[email protected]>
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 
>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected] <mailto:[email protected]>
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 
>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
> 
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

--
Larry Gritz
[email protected]


_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to