Re: Luma attr error checking
Jeremy Selan <jeremy...@...>
I'm currently working on writing a quicktime generator using OpenImageIO,Cool! That sounds like a really good use case. On our medium term list is to build a bridge between OIIO and OCIO, so you can use OIIO's command-line utilities to do color conversions. But I wouldnt want to promise a date for that, and hooking em up yourself shouldnt be too hard. I'd like to check that I'm correctly understanding OpenColorIO's intention.Yes, exactly. The XML configuration file (.ocio) is super light-weight. All the heavy data (1D LUTs, 3D LUTs) are references to other existing files (which remain in their native formats). Also, you don't have to hand- craft the XML. You can use the OCIO API to build configurations, see src/testbed/main.py for an example. There's also talk of making an ocio "bundle" for easy distribution (which would be the .ocio xml file + the luts directory), but I havent tackled this yet. If so, would it be within the scope of the project to build importersVery much so! What LUT formats do you need support for? Let's get em in there. At some point soon I'll add an ocio command-line utility that will do LUT transcoding - which along with support for more luit formats - should be a really popular option. -- Jeremy
|
|
Re: [ocs-dev] Re: Luma attr error checking
Alan Jones <sky...@...>
Hi Jeremy,
On Thu, Aug 5, 2010 at 4:16 PM, Jeremy Selan <jeremy...@gmail.com> wrote: Good catch. I've updated the git repo and the downloads site (Thanks - it's running happily now. Unfortunately, I'm also a bit behind in the publishing the docs. (II'm currently working on writing a quicktime generator using OpenImageIO, OpenColorIO, libquicktime and Qt. I'd like to check that I'm correctly understanding OpenColorIO's intention. Is it intended that it will handle the color transforms and that those transforms will be stored in it's own XML based format? If so, would it be within the scope of the project to build importers and exporters that for various formats? I'm thinking of cases where I want to bring in a LUT to apply to footage or when I want to supply a LUT from OpenImageIO to another application. Of course, in the next few months I'd like the library to be entirelyI can probably throw in with the doxygen style comments - they're pretty easy so if you're cool with me passing some dumb questions (like the ones above) I'd be happy to help out ther. I'd also like to have the color profiles be self documenting. (IThat sounds like a fantastic idea - LUT formats don't seem to have info needed to really know how to use them. Like what stage they're intended for, the direction of the transform, whether the user will want to offset/multiply/whatever afterward. Cheers, Alan.
|
|
Re: Luma attr error checking
Jeremy Selan <jeremy...@...>
Alan,
toggle quoted messageShow quoted text
Good catch. I've updated the git repo and the downloads site ( http://code.google.com/p/opencolorio/downloads/list ) so all the configs will work with the latest trunk release. Unfortunately, I'm also a bit behind in the publishing the docs. (I have a version internally, but they're a but out of date). I'll do my best to repost them all within a day or two. Of course, in the next few months I'd like the library to be entirely self documenting (doxygen), and if anyone would like to help get the ball rolling, i'd be very appreciative. (i'm happy to write them all, I just dont have doxygen formatting / makefile experience). I'd also like to have the color profiles be self documenting. (I picture a command-line tool that will load a config, and generate an html page outlining its use, options, etc). -- Jeremy
On Aug 5, 12:25 pm, Alan Jones <sky...@gmail.com> wrote:
Hi all,
|
|
Luma attr error checking
Alan Jones <sky...@...>
Hi all,
The example config doesn't appear to have the required luma attributes. Could someone let me know what and where they should be? Also is there any documentation around or should I just run doxygen over the source? Cheers, Alan
|
|
Birds of Feather Tomorrow (wed)
Jeremy Selan <jeremy...@...>
It was great seeing some of you at today's Siggraph class!
If anyone is interested in more detailed info (or just wants to say hello in person) we'll be having a BOF tomorrow. Hope to see some of you there! Birds of a Feather : OpenColorIO WEDNESDAY, 28 JULY | 2:30 PM - 3:30 PM | ROOM 506 Cheers, Jeremy
|
|
Re: Supporting 1D luts which are different per channel
Malcolm Humphreys <malcolmh...@...>
Hi Jeremy,
toggle quoted messageShow quoted text
oops never mind looks like it will support it. Yep it all looks ok to me, just really feel like spliting out the non-core stuff into a plugin or similar dir. For now I think nearest iterp is fine as we normally have enough points for 10bits in all channels, we have used Catmull-Rom in the past. As we will be only using this for viewing scene linear it should be ok in the short term. I don't need 4 channel luts, but other people might. .malcolm
On Jul 22, 1:53 am, Jeremy Selan <jeremy...@gmail.com> wrote:
Malcolm,
|
|
Re: [ocs-dev] Unit Tests
Larry Gritz <l...@...>
I've been using that lately on OIIO and OSL, and for our simple needs it works just fine. Also nice because if you're already using Boost for anything else, you can use its unit tests without adding any new dependencies.
-- lg On Jul 21, 2010, at 8:57 AM, Jeremy Selan wrote: Boost sounds great; let's start with that.-- Larry Gritz l...@imageworks.com
|
|
Re: [ocs-dev] Unit Tests
Jeremy Selan <jeremy...@...>
Boost sounds great; let's start with that.
-- Jeremy On Wed, Jul 21, 2010 at 7:31 AM, Bruno Nicoletti <bruno.j....@googlemail.com> wrote: We use boost's unit test suite here as well, a few quibbles but it
|
|
Re: [ocs-dev] Supporting 1D luts which are different per channel
Jeremy Selan <jeremy...@...>
Malcolm,
I believe the 1D lut op does allow for a different number of entries per channel. If we look at src/core/Lut1DOp.h, you'll see the entry for each color channel lut is stored in an individual vector: fv_t luts[3]. So in your loading code (if we hardcoded the sizes used in your example), lut1d->luts[0].resize(11); lut1d->luts[1].resize(6); lut1d->luts[2].resize(6); Does the rest of the Format loading code make sense to you? All your work should be in a single file, a la FileFormat3DL. A few additional questions for you: * Currently, OCIO only support linear and nearest interpolation for 1D luts. If the examples you've given are typical (where the 1d lut is size 6) I couldnt imagine linear interpolation would suffice, and I'd also imagine that the interpolation type chosen would highly influence the resulting image. Does CSP dictate the interpolation type? What type would you prefer? I have no problem adding higher types (cubic, etc) I just hadnt had the need to yet. (Note that the .3dl shaper 1D lut also has this issue (it's often size 17), I just hadnt tackled it yet.) * Do you care about 4 channel luts? (I.e., changing alpha) We've never needed this at SPI, which is why the OCIO currently assumes 3 channels, but if other people think its important for completeness sake Im open to it. -- Jeremy On Wed, Jul 21, 2010 at 6:11 AM, Malcolm Humphreys <malcolmh...@mac.com> wrote: Hi,
|
|
Re: [ocs-dev] Unit Tests
Bruno Nicoletti <bruno.j....@...>
We use boost's unit test suite here as well, a few quibbles but it
toggle quoted messageShow quoted text
works fairly well. b
On 21 July 2010 15:23, Malcolm Humphreys <malcolmh...@mac.com> wrote:
Hi, --
Bruno Nicoletti
|
|
Unit Tests
Malcolm Humphreys <malcolmh...@...>
Hi,
I would like to write tests for the work that I do. What unit test framework are you planning on using, as I guess it adds another dependancy. I have gotten used to using the boost framework but I'm sure you have something else planned. .malcolm
|
|
Supporting 1D luts which are different per channel
Malcolm Humphreys <malcolmh...@...>
Hi,
I started looking at adding csp lut format to ocio. A csp lut allows a 1D prelut with a different number of points per channel. The current Lut1DOp only supports applying the same 1D lut to all channels. I'm wondering if this is something you were thinking of supporting in ocio? --snip-- Access LUT data via a gamma lookup Red channel has gamma 2.0 Green channel has gamma 3.0 but also has fewer points Blue channel has gamma 2.0 but also has fewer points 11 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 0.0 0.01 0.04 0.09 0.16 0.25 0.36 0.49 0.64 0.81 1.0 6 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.008 0.064 0.216 0.512 1.0 6 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.04 0.16 0.36 0.64 1.0 --snip-- .malcolm
|
|
OCIO @ Siggraph
Jeremy Selan <jeremy...@...>
Friends,
So Siggraph is just around the corner, which means OpenColorIO is going public! Both this google group, as well as the git repo are now completely open to all. If you're attending Siggraph, please come check us out: Course: Color Enhancement and Rendering in Film and Game Production TUESDAY, 27 JULY | 9:00 AM - 12:15 PM | ROOM 502 A (my presentation time is tentatively 9:55 - 10:15, a portion of which i'll use to introduce OpenColorIO). Birds of a Feather : OpenColorIO WEDNESDAY, 28 JULY | 2:30 PM - 3:30 PM | ROOM 506 This will be a more informal, in depth look at OCIO and it's roadmap / integration schedule. Imageworks will also have an official OCIO press-release on Monday. If you're not able to make either of these, but are still interested in talking in person, please contact me personally. My schedule is flexible, and I'd love to meet everyone interested in this subject. Also - not related to OCIO - but for those interested in open source projects I'd highly recommend checking out: Panel: Large Steps Toward Open Source THURSDAY, 29 JULY | 9:00 AM - 10:30 AM | ROOM 408 AB The speaker are excellent, representing such graphics projects as OSL, Alembic, OpenEXR, PTex, etc. Cheers, Jeremy
|
|
Re: Dynamic color configuration
srluka <srl...@...>
I view these as two separate problems. One is gathering color
toggle quoted messageShow quoted text
information. The other is performing color transforms. OCIO seems to be focused on the latter. I would like to see the OCIO API stay open enough to where we can use its color transform capability outside the confines of a fixed color pipeline. The hybrid approach Jeremy described may be just what we are looking for. Another thing I would like to maintain the option for, and that was hinted at in Jeremy's first response, is different mappings between color spaces. As an example, when converting two RGB spaces with different white points you have the option of preserving absolute colorimetry or performing some form of chromatic adaptation. With a static configuration, it seems like you have to pick one or the other since each half of the conversion is built into the color space definition. So you either have a chromatically adapted workflow, or you don't. Also, it's a little weird in the sense that the chromatic adaptation (if you were to use it) would have to be already built into each colorspace definition (ICC D50 anyone? or maybe you would prefer ACES D60?) but it may not be explicitly stated. I think this may be problematic so long as the colorspaces define the halfway conversion to the reference ("linear") space. There may need to be some additional option for defining the connection space if we expect to use anything other than a straightforward colorimetric transform.
On Jun 28, 10:44 am, Rod Bogart <bog...@gmail.com> wrote:
Agreed. The issue isn't how to do the conversion, it is how to
|
|
ocio 0.5.9 posted
Jeremy Selan <jeremy...@...>
Version 0.5.9 (June 28 2010):
* Renamed project, classes, namespaces to OpenColorIO (OCIO) * Added single-pixel processor path * Improved python path makefile detection * Continued GPU progress (still under development)
|
|
Re: [ocs-dev] Re: Dynamic color configuration
Rod Bogart <bog...@...>
Agreed. The issue isn't how to do the conversion, it is how to
toggle quoted messageShow quoted text
determine the input arguments. But OCIO has this problem anyway. There is no definition for how a given image can help influence what conversion is used. In a commercial tool, the conversion is chosen by the user, where the list of options is everything in the config. OCIO has routines to do a conversion if the "conversion name" is provided. OCIO could easily have routines to do conversions if the gamma-matrix-gamma is provided. Either way, commercial tools have to decide if the conversion hints come from the user, the filename, the header, the environment, or whatever. RGB
On Sat, Jun 26, 2010 at 5:19 PM, Jeremy Selan <jeremy...@gmail.com> wrote:
I thought of a simpler way to summarize the topic:
|
|
Re: Dynamic color configuration
Jeremy Selan <jeremy...@...>
I thought of a simpler way to summarize the topic:
In dynamic colorspaces, the color transforms are dependent upon a set of potentially changing input arguments. Our ideal solution is one where the input argument handing is standardized so that OCIO can be supported out of the box in commercial tools. But, the logic that interprets input arguments would be structured to allow the use of facility-specific code and conventions. -- Jeremy
|
|
Re: [ocs-dev] Dynamic color configuration
Jeremy Selan <jeremy...@...>
Stefan,
This has been brought up before (previously by Rod), and it's a great question. Thinking out loud... From a purely technological standpoint, the API required to support a dynamic color workflow is basically in place. Colorspaces can be added, deleted, and modified at runtime. The only restriction is that they need unique names, but thats an easy problem solve. (Also left is to expose all of the transforms functions you'll need, but this is easy). But... From a design standpoint this approach would have pipeline implications. Any dynamic colorspace system would likely have custom logic, and I'd have concerns about the portability of such a system. My hope is to have support for OCIO in many applications (either as plugins or natively) right out of the box, and wouldn't want supporting dynamic colorspaces to throw a wrench in this plan. So what are the possible implementations? 1) If you only rely on custom (facility specific) OCIO plugins, you could use the embed the cleverness on your end, and use the existing dynamic colorspace interface to make all the right things happen. But this approach isn't ideal, as it would require each client to have it's own implementation of the clever bits (or link against something that does), and would prevent you from utilizing built-in OCIO support in commercial apps. (Which, if OCIO succeeds, will be really convenient). 2) Put ALL the intelligence in OCIO. Currently, if you have a colorspace, you've got all you need to know about it. But... what if colorspaces could have optional arguments? In your example, you could define a single colorspace that had a section of it that was computed based on the arguments. Chromaticities in, pixel processing out. But this makes writing a generic plugin for OCIO much more difficult. Consider our nuke support. Right now we have nodes that allow for color space conversion in the comp graph, and custom read-write nodes that use our colorspace processing instead of the built-in support. The UI for both cases is essentially a list of strings (the colorspace names) What would a plugin look like that supported dynamic colorspaces arguments? The colorspace conversion node would have to support dynamic parameters, and the artist would need an interface more complicated than a popdown to deal with the (potentially optional) options. (The args data could be endoded into a single string, but this would not make it more artist friendly, probably less so). I know of a few applications that support this level of plugin interface customizability, but not many. Also, the read and write nodes would need to be more complex, as they would be required to parse the file metadata, and populate the colorspace args appropriately. Though this task is not difficult, it is facility convention specific and would require a customized plugin. But we're going to have to tackle this issue anyways. In the current SPI color system, while we don't use dynamic colorspaces (we chose to avoid this for validation reasons), we do use dynamic Display Transforms. Specifically, on visual effects shows, different shot / sequences often have different artistic looks - specified by the DI house - and it's incredibly useful to be able to plug these into our pipeline. In a concrete example, we have Filmlooks that are constant across a show, and ones that aren't. In our image viewer, you can view images with "Film" - a generic look - or "Film Onset", which is a shot varying look that encompasses onset viewing parameters as manipulated by the client. It would be great if we could support both systems (your dynamic colorspaces, and our dynamic viewing luts) with one approach. 3) Why not a hybrid system? For example, I could envision a plug-in system (which I previously denounced in a prior email), whose inputs were a bunch of information (filename, file metadata, all environment variables, etc), and a plugin had the opportunity to interpret this information in a facility specific manner, and return a dynamically constructed colorspace. Because the inputs to the custom logic were on rails, the OCIO plugins could be standardized and have a chance to work right out of the box, but there would also be a customizable API that facility specific code could be written against. And, if you had to send support for any custom part out of house, the dynamic colorspaces could always be 'baked' to a non-plugin ocs system for export. This approach also feels cleaner because it would not require anyone to agree on what the "right" mapping is (across facility, I mean). In your example, what matrix will you use for the transform? It could be a simple chromaticity mapping, but maybe some other facility would need to support different white points, and thus would require a chromic adaptation matrix. Or, maybe you're converting wide gamut P3 to r709, and gamut mapping must be considered... My point is that only *you* know about the exact situational requirements for what transform is most appropriate, so the code turning a set of primaries into an explicit set of image processing operations is must be highly configurable, and will likely be specific to the use cases you find yourself working with. Another point for the hybrid plugin approach. In terms of timeline, we're not quite at the point where I can look at implementing a potential solution. I'm in middle of getting the GPU chunk running, and after that will be paying attention to better default configurations and adding additional client app support. (which should put us near siggraph). But, after that I think it would make sense to open this back up. Is there some sort of really simple solution I'm missing? :) -- Jeremy
|
|
Dynamic color configuration
srluka <srl...@...>
Jeremy, what are your thoughts on supporting a color pipeline that
queries the files and/or workspace for color information and uses that information to define the transformation to the reference space on the fly, as opposed to predefining all spaces in the config.ocs? For example, most of the images we (I) encounter can described by a basic RGB model consisting of a 1d encoding function and 3x3 color matrix. If they are all white-normalized, then the 3x3 matrix reduces to 4 x,y chromaticity pairs (RGBW). If it is possible, I would like to be able to handle all images that fall into this category with a single transformation that takes in a set of image dependent color parameters, as opposed to enumerating every possible case we might encounter in the config.ocs.
|
|
OpenColorIO
Jeremy Selan <jeremy...@...>
The new name is approved, OpenColorIO it is.
Both github and the google group appear to allow project renaming, please email me directly if you can't find the group again. http://groups.google.com/group/ocio-dev/
|
|