From 01a3ca84ff8a2e91fd7efc04585bd8deaf1b1b2a Mon Sep 17 00:00:00 2001 From: John-Paul Smith Date: Tue, 2 Jul 2024 00:40:58 +0100 Subject: [PATCH] Added basic colourspaces instead of roles Basic colour management mode no longer refers to roles and instead uses a small set of OFX-specific colourspace names which should cover most scenarios. These are defined in OCIO using roles for compatibility purposes, but in OFX, the expectation is that these might correspond to any colourspace that has the same encoding. Signed-off-by: John-Paul Smith --- include/ofxColour.h | 20 +- include/ofxColourspaceList.h | 249 ++++++++++++++---- ...dio-config-v2.1.0_aces-v1.3_ocio-v2.3.ocio | 7 +- scripts/genColour | 50 ++-- scripts/genOCIOConfig | 12 +- 5 files changed, 258 insertions(+), 80 deletions(-) diff --git a/include/ofxColour.h b/include/ofxColour.h index ecbc2b34..f773c392 100644 --- a/include/ofxColour.h +++ b/include/ofxColour.h @@ -19,9 +19,9 @@ Contains the API for colourspace data exchange. - Default - kOfxImageEffectPropColourManagementStyleNone - Valid Values - This must be one of - ::kOfxImageEffectPropColourManagementNone - no colour management - - ::kOfxImageEffectPropColourManagementBasic - only roles from ofxColourspaceList.h may be used - - ::kOfxImageEffectPropColourManagementCore - only roles and core colourspaces from ofxColourspaceList.h may be used - - ::kOfxImageEffectPropColourManagementFull - any role or colourspace from ofxColourspaceList.h may be used + - ::kOfxImageEffectPropColourManagementBasic - only basic colourspaces from ofxColourspaceList.h may be used + - ::kOfxImageEffectPropColourManagementCore - only core colourspaces from ofxColourspaceList.h may be used + - ::kOfxImageEffectPropColourManagementFull - any colourspace from ofxColourspaceList.h may be used - ::kOfxImageEffectPropColourManagementOCIO - any OCIO config may be used (implies use of the OCIO library) Hosts should set this property if they will provide colourspace information @@ -103,20 +103,20 @@ must be unset. - Type - string X N - Property Set - clip instance (read only) and ::kOfxImageEffectActionGetClipPreferences action out args property (read/write) - Valid Values - colourspace that is permitted under the style in use. - For Basic, any role from ofxColourspaceList.h. - For Core, any role, or any colourspace from ofxColourspaceList.h where IsCore is true. - For Full, any colourspace or role from ofxColourspaceList.h. + For Basic, any colourspace from ofxColourspaceList.h where IsBasic is true. + For Core, any colourspace from ofxColourspaceList.h where IsCore is true. + For Full, any colourspace from ofxColourspaceList.h. For OCIO, any string acceptable to Config::getColorSpace(). Plug-ins may set this property during kOfxImageEffectActionGetClipPreferences to request images in a colourspace which is convenient for them. The property is an ordered set of colourspace identifiers, which may be any of the names or aliases supported by the colour management style in use. If plug-ins -prefer more esoteric colourspaces, they are encouraged to also include generic -roles as a fallback. For example a colour grading plug-in which supports a -specific camera and expects a log colourspace might list: +prefer more esoteric colourspaces, they are encouraged to also include basic +colourspacesas a fallback. For example a colour grading plug-in which supports +a specific camera and expects a log colourspace might list: -"arri_logc4", "arri_logc3_ei800", "ACEScct", "color_timing" +"arri_logc4", "arri_logc3_ei800", "ACEScct", "ofx_log" The host is free to choose any colourspace from this list, but should favour the first mutually agreeable colourspace, and set kOfxImageClipPropColourspace diff --git a/include/ofxColourspaceList.h b/include/ofxColourspaceList.h index aea37eec..5830ed5b 100644 --- a/include/ofxColourspaceList.h +++ b/include/ofxColourspaceList.h @@ -13,64 +13,63 @@ Contains the list of supported colourspaces. This file was auto-generated by scripts/genColour from openfx-studio-config-v2.1.0_aces-v1.3_ocio-v2.3. */ -/** @brief Roles - generic names for types of colourspace -Use a role when the specific colourspace is not important. -*/ - -/** @brief aces_interchange -Guaranteed to be ACES2065-1. -*/ -#define kOfxColourspaceRoleAcesInterchange "aces_interchange" -/** @brief cie_xyz_d65_interchange -CIE XYZ colorimetry with the neutral axis at D65. -*/ -#define kOfxColourspaceRoleCieXyzD65Interchange "cie_xyz_d65_interchange" +// Basic Colourspaces -/** @brief color_picking -The colourspace to use for colour pickers, typically a display colourspace. +/** @brief ofx_hdr +Any display-referred HDR video such as Rec. 2020 HLG or PQ. */ -#define kOfxColourspaceRoleColorPicking "color_picking" - -/** @brief color_timing -A colourspace suitable for colour grading, typically a log colourspace. +#define kOfxColourspaceOfxHdr "ofx_hdr" +#define kOfxColourspaceOfxHdrLabel "ofx_hdr" +#define kOfxColourspaceOfxHdrEncoding "hdr-video" +#define kOfxColourspaceOfxHdrIsData false +#define kOfxColourspaceOfxHdrIsBasic true +#define kOfxColourspaceOfxHdrIsCore true +#define kOfxColourspaceOfxHdrIsDisplay true + +/** @brief ofx_linear +Any scene-referred linear colourspace. */ -#define kOfxColourspaceRoleColorTiming "color_timing" - -/** @brief compositing_log +#define kOfxColourspaceOfxLinear "ofx_linear" +#define kOfxColourspaceOfxLinearLabel "ofx_linear" +#define kOfxColourspaceOfxLinearEncoding "scene-linear" +#define kOfxColourspaceOfxLinearIsData false +#define kOfxColourspaceOfxLinearIsBasic true +#define kOfxColourspaceOfxLinearIsCore true +#define kOfxColourspaceOfxLinearIsDisplay false + +/** @brief ofx_log Any colourspace with a log transfer function. */ -#define kOfxColourspaceRoleCompositingLog "compositing_log" - -/** @brief data -Image values should not be treated as colour, e.g. motion vectors or masks. Mapped to the raw colourspace. -*/ -#define kOfxColourspaceRoleData "data" - -/** @brief hdr_video -Any display-referred HDR video such as Rec. 2020 HLG or PQ. -*/ -#define kOfxColourspaceRoleHdrVideo "hdr_video" - -/** @brief matte_paint -A colourspace suitable for matte painting. +#define kOfxColourspaceOfxLog "ofx_log" +#define kOfxColourspaceOfxLogLabel "ofx_log" +#define kOfxColourspaceOfxLogEncoding "log" +#define kOfxColourspaceOfxLogIsData false +#define kOfxColourspaceOfxLogIsBasic true +#define kOfxColourspaceOfxLogIsCore true +#define kOfxColourspaceOfxLogIsDisplay false + +/** @brief ofx_raw +Image values should not be treated as colour, e.g. motion vectors or masks. */ -#define kOfxColourspaceRoleMattePaint "matte_paint" - -/** @brief scene_linear -Any scene-referred linear colourspace. -*/ -#define kOfxColourspaceRoleSceneLinear "scene_linear" - -/** @brief sdr_video +#define kOfxColourspaceOfxRaw "ofx_raw" +#define kOfxColourspaceOfxRawLabel "ofx_raw" +#define kOfxColourspaceOfxRawEncoding "" +#define kOfxColourspaceOfxRawIsData true +#define kOfxColourspaceOfxRawIsBasic true +#define kOfxColourspaceOfxRawIsCore true +#define kOfxColourspaceOfxRawIsDisplay false + +/** @brief ofx_sdr Any display-referred SDR video such as Rec. 709. */ -#define kOfxColourspaceRoleSdrVideo "sdr_video" - -/** @brief texture_paint -A colourspace suitable for texture painting, typically sRGB. -*/ -#define kOfxColourspaceRoleTexturePaint "texture_paint" +#define kOfxColourspaceOfxSdr "ofx_sdr" +#define kOfxColourspaceOfxSdrLabel "ofx_sdr" +#define kOfxColourspaceOfxSdrEncoding "sdr-video" +#define kOfxColourspaceOfxSdrIsData false +#define kOfxColourspaceOfxSdrIsBasic true +#define kOfxColourspaceOfxSdrIsCore true +#define kOfxColourspaceOfxSdrIsDisplay true // Core Colourspaces @@ -86,7 +85,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSrgbDisplayLabel "sRGB - Display" #define kOfxColourspaceSrgbDisplayEncoding "sdr-video" #define kOfxColourspaceSrgbDisplayIsData false +#define kOfxColourspaceSrgbDisplayIsBasic false #define kOfxColourspaceSrgbDisplayIsCore true +#define kOfxColourspaceSrgbDisplayIsDisplay true // displayp3_display // Convert CIE XYZ (D65 white) to Apple Display P3 @@ -100,7 +101,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceDisplayp3DisplayLabel "Display P3 - Display" #define kOfxColourspaceDisplayp3DisplayEncoding "sdr-video" #define kOfxColourspaceDisplayp3DisplayIsData false +#define kOfxColourspaceDisplayp3DisplayIsBasic false #define kOfxColourspaceDisplayp3DisplayIsCore true +#define kOfxColourspaceDisplayp3DisplayIsDisplay true // rec1886_rec709_display // Convert CIE XYZ (D65 white) to Rec.1886/Rec.709 (HD video) @@ -114,7 +117,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceRec1886Rec709DisplayLabel "Rec.1886 Rec.709 - Display" #define kOfxColourspaceRec1886Rec709DisplayEncoding "sdr-video" #define kOfxColourspaceRec1886Rec709DisplayIsData false +#define kOfxColourspaceRec1886Rec709DisplayIsBasic false #define kOfxColourspaceRec1886Rec709DisplayIsCore true +#define kOfxColourspaceRec1886Rec709DisplayIsDisplay true // rec1886_rec2020_display // Convert CIE XYZ (D65 white) to Rec.1886/Rec.2020 (UHD video) @@ -128,7 +133,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceRec1886Rec2020DisplayLabel "Rec.1886 Rec.2020 - Display" #define kOfxColourspaceRec1886Rec2020DisplayEncoding "sdr-video" #define kOfxColourspaceRec1886Rec2020DisplayIsData false +#define kOfxColourspaceRec1886Rec2020DisplayIsBasic false #define kOfxColourspaceRec1886Rec2020DisplayIsCore true +#define kOfxColourspaceRec1886Rec2020DisplayIsDisplay true // rec2100_hlg_display // Convert CIE XYZ (D65 white) to Rec.2100-HLG, 1000 nit @@ -140,7 +147,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceRec2100HlgDisplayLabel "Rec.2100-HLG - Display" #define kOfxColourspaceRec2100HlgDisplayEncoding "hdr-video" #define kOfxColourspaceRec2100HlgDisplayIsData false +#define kOfxColourspaceRec2100HlgDisplayIsBasic false #define kOfxColourspaceRec2100HlgDisplayIsCore true +#define kOfxColourspaceRec2100HlgDisplayIsDisplay true // rec2100_pq_display // Convert CIE XYZ (D65 white) to Rec.2100-PQ @@ -156,7 +165,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceRec2100PqDisplayLabel "Rec.2100-PQ - Display" #define kOfxColourspaceRec2100PqDisplayEncoding "hdr-video" #define kOfxColourspaceRec2100PqDisplayIsData false +#define kOfxColourspaceRec2100PqDisplayIsBasic false #define kOfxColourspaceRec2100PqDisplayIsCore true +#define kOfxColourspaceRec2100PqDisplayIsDisplay true // ACES2065-1 // The "Academy Color Encoding System" reference colorspace. @@ -164,7 +175,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceACES20651Label "ACES2065-1" #define kOfxColourspaceACES20651Encoding "scene-linear" #define kOfxColourspaceACES20651IsData false +#define kOfxColourspaceACES20651IsBasic false #define kOfxColourspaceACES20651IsCore true +#define kOfxColourspaceACES20651IsDisplay false // ACEScc // Convert ACEScc to ACES2065-1 @@ -176,7 +189,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceACESccLabel "ACEScc" #define kOfxColourspaceACESccEncoding "log" #define kOfxColourspaceACESccIsData false +#define kOfxColourspaceACESccIsBasic false #define kOfxColourspaceACESccIsCore true +#define kOfxColourspaceACESccIsDisplay false // ACEScct // Convert ACEScct to ACES2065-1 @@ -188,7 +203,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceACEScctLabel "ACEScct" #define kOfxColourspaceACEScctEncoding "log" #define kOfxColourspaceACEScctIsData false +#define kOfxColourspaceACEScctIsBasic false #define kOfxColourspaceACEScctIsCore true +#define kOfxColourspaceACEScctIsDisplay false // ACEScg // Convert ACEScg to ACES2065-1 @@ -200,7 +217,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceACEScgLabel "ACEScg" #define kOfxColourspaceACEScgEncoding "scene-linear" #define kOfxColourspaceACEScgIsData false +#define kOfxColourspaceACEScgIsBasic false #define kOfxColourspaceACEScgIsCore true +#define kOfxColourspaceACEScgIsDisplay false // lin_p3d65 // Convert ACES2065-1 to linear P3 primaries, D65 white point @@ -209,7 +228,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinP3d65Label "Linear P3-D65" #define kOfxColourspaceLinP3d65Encoding "scene-linear" #define kOfxColourspaceLinP3d65IsData false +#define kOfxColourspaceLinP3d65IsBasic false #define kOfxColourspaceLinP3d65IsCore true +#define kOfxColourspaceLinP3d65IsDisplay false // lin_rec2020 // Convert ACES2065-1 to linear Rec.2020 primaries, D65 white point @@ -218,7 +239,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinRec2020Label "Linear Rec.2020" #define kOfxColourspaceLinRec2020Encoding "scene-linear" #define kOfxColourspaceLinRec2020IsData false +#define kOfxColourspaceLinRec2020IsBasic false #define kOfxColourspaceLinRec2020IsCore true +#define kOfxColourspaceLinRec2020IsDisplay false // lin_rec709_srgb // Convert ACES2065-1 to linear Rec.709 primaries, D65 white point @@ -227,7 +250,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinRec709SrgbLabel "Linear Rec.709 (sRGB)" #define kOfxColourspaceLinRec709SrgbEncoding "scene-linear" #define kOfxColourspaceLinRec709SrgbIsData false +#define kOfxColourspaceLinRec709SrgbIsBasic false #define kOfxColourspaceLinRec709SrgbIsCore true +#define kOfxColourspaceLinRec709SrgbIsDisplay false // g18_rec709_tx // Convert ACES2065-1 to 1.8 gamma-corrected Rec.709 primaries, D65 white point @@ -236,7 +261,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceG18Rec709TxLabel "Gamma 1.8 Rec.709 - Texture" #define kOfxColourspaceG18Rec709TxEncoding "sdr-video" #define kOfxColourspaceG18Rec709TxIsData false +#define kOfxColourspaceG18Rec709TxIsBasic false #define kOfxColourspaceG18Rec709TxIsCore true +#define kOfxColourspaceG18Rec709TxIsDisplay false // g22_ap1_tx // Convert ACES2065-1 to 2.2 gamma-corrected AP1 primaries, ACES ~=D60 white point @@ -245,7 +272,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceG22Ap1TxLabel "Gamma 2.2 AP1 - Texture" #define kOfxColourspaceG22Ap1TxEncoding "sdr-video" #define kOfxColourspaceG22Ap1TxIsData false +#define kOfxColourspaceG22Ap1TxIsBasic false #define kOfxColourspaceG22Ap1TxIsCore true +#define kOfxColourspaceG22Ap1TxIsDisplay false // g22_rec709_tx // Convert ACES2065-1 to 2.2 gamma-corrected Rec.709 primaries, D65 white point @@ -254,7 +283,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceG22Rec709TxLabel "Gamma 2.2 Rec.709 - Texture" #define kOfxColourspaceG22Rec709TxEncoding "sdr-video" #define kOfxColourspaceG22Rec709TxIsData false +#define kOfxColourspaceG22Rec709TxIsBasic false #define kOfxColourspaceG22Rec709TxIsCore true +#define kOfxColourspaceG22Rec709TxIsDisplay false // g24_rec709_tx // Convert ACES2065-1 to 2.4 gamma-corrected Rec.709 primaries, D65 white point @@ -263,7 +294,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceG24Rec709TxLabel "Gamma 2.4 Rec.709 - Texture" #define kOfxColourspaceG24Rec709TxEncoding "sdr-video" #define kOfxColourspaceG24Rec709TxIsData false +#define kOfxColourspaceG24Rec709TxIsBasic false #define kOfxColourspaceG24Rec709TxIsCore true +#define kOfxColourspaceG24Rec709TxIsDisplay false // srgb_encoded_ap1_tx // Convert ACES2065-1 to sRGB Encoded AP1 primaries, ACES ~=D60 white point @@ -272,7 +305,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSrgbEncodedAp1TxLabel "sRGB Encoded AP1 - Texture" #define kOfxColourspaceSrgbEncodedAp1TxEncoding "sdr-video" #define kOfxColourspaceSrgbEncodedAp1TxIsData false +#define kOfxColourspaceSrgbEncodedAp1TxIsBasic false #define kOfxColourspaceSrgbEncodedAp1TxIsCore true +#define kOfxColourspaceSrgbEncodedAp1TxIsDisplay false // srgb_tx // Convert ACES2065-1 to sRGB @@ -281,7 +316,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSrgbTxLabel "sRGB - Texture" #define kOfxColourspaceSrgbTxEncoding "sdr-video" #define kOfxColourspaceSrgbTxIsData false +#define kOfxColourspaceSrgbTxIsBasic false #define kOfxColourspaceSrgbTxIsCore true +#define kOfxColourspaceSrgbTxIsDisplay false // Raw // The utility "Raw" colorspace. @@ -289,7 +326,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceRawLabel "Raw" #define kOfxColourspaceRawEncoding "" #define kOfxColourspaceRawIsData true +#define kOfxColourspaceRawIsBasic false #define kOfxColourspaceRawIsCore true +#define kOfxColourspaceRawIsDisplay false // Non-core Colourspaces @@ -299,7 +338,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceCIEXYZD65Label "CIE-XYZ-D65" #define kOfxColourspaceCIEXYZD65Encoding "" #define kOfxColourspaceCIEXYZD65IsData false +#define kOfxColourspaceCIEXYZD65IsBasic false #define kOfxColourspaceCIEXYZD65IsCore false +#define kOfxColourspaceCIEXYZD65IsDisplay true // st2084_p3d65_display // Convert CIE XYZ (D65 white) to ST-2084 (PQ), P3-D65 primaries @@ -317,7 +358,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSt2084P3d65DisplayLabel "ST2084-P3-D65 - Display" #define kOfxColourspaceSt2084P3d65DisplayEncoding "hdr-video" #define kOfxColourspaceSt2084P3d65DisplayIsData false +#define kOfxColourspaceSt2084P3d65DisplayIsBasic false #define kOfxColourspaceSt2084P3d65DisplayIsCore false +#define kOfxColourspaceSt2084P3d65DisplayIsDisplay true // p3d60_display // Convert CIE XYZ (D65 white) to Gamma 2.6, P3-D60 (Bradford adaptation) @@ -329,7 +372,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceP3d60DisplayLabel "P3-D60 - Display" #define kOfxColourspaceP3d60DisplayEncoding "sdr-video" #define kOfxColourspaceP3d60DisplayIsData false +#define kOfxColourspaceP3d60DisplayIsBasic false #define kOfxColourspaceP3d60DisplayIsCore false +#define kOfxColourspaceP3d60DisplayIsDisplay true // p3d65_display // Convert CIE XYZ (D65 white) to Gamma 2.6, P3-D65 @@ -344,7 +389,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceP3d65DisplayLabel "P3-D65 - Display" #define kOfxColourspaceP3d65DisplayEncoding "sdr-video" #define kOfxColourspaceP3d65DisplayIsData false +#define kOfxColourspaceP3d65DisplayIsBasic false #define kOfxColourspaceP3d65DisplayIsCore false +#define kOfxColourspaceP3d65DisplayIsDisplay true // p3_dci_display // Convert CIE XYZ (D65 white) to Gamma 2.6, P3-DCI (DCI white with Bradford adaptation) @@ -358,7 +405,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceP3DciDisplayLabel "P3-DCI - Display" #define kOfxColourspaceP3DciDisplayEncoding "sdr-video" #define kOfxColourspaceP3DciDisplayIsData false +#define kOfxColourspaceP3DciDisplayIsBasic false #define kOfxColourspaceP3DciDisplayIsCore false +#define kOfxColourspaceP3DciDisplayIsDisplay true // ADX10 // Convert ADX10 to ACES2065-1 @@ -367,7 +416,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceADX10Label "ADX10" #define kOfxColourspaceADX10Encoding "log" #define kOfxColourspaceADX10IsData false +#define kOfxColourspaceADX10IsBasic false #define kOfxColourspaceADX10IsCore false +#define kOfxColourspaceADX10IsDisplay false // ADX16 // Convert ADX16 to ACES2065-1 @@ -376,7 +427,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceADX16Label "ADX16" #define kOfxColourspaceADX16Encoding "log" #define kOfxColourspaceADX16IsData false +#define kOfxColourspaceADX16IsBasic false #define kOfxColourspaceADX16IsCore false +#define kOfxColourspaceADX16IsDisplay false // lin_arri_wide_gamut_3 // Convert Linear ARRI Wide Gamut 3 to ACES2065-1 @@ -385,7 +438,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinArriWideGamut3Label "Linear ARRI Wide Gamut 3" #define kOfxColourspaceLinArriWideGamut3Encoding "scene-linear" #define kOfxColourspaceLinArriWideGamut3IsData false +#define kOfxColourspaceLinArriWideGamut3IsBasic false #define kOfxColourspaceLinArriWideGamut3IsCore false +#define kOfxColourspaceLinArriWideGamut3IsDisplay false // arri_logc3_ei800 // Convert ARRI LogC3 (EI800) to ACES2065-1 @@ -399,7 +454,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceArriLogc3Ei800Label "ARRI LogC3 (EI800)" #define kOfxColourspaceArriLogc3Ei800Encoding "log" #define kOfxColourspaceArriLogc3Ei800IsData false +#define kOfxColourspaceArriLogc3Ei800IsBasic false #define kOfxColourspaceArriLogc3Ei800IsCore false +#define kOfxColourspaceArriLogc3Ei800IsDisplay false // lin_arri_wide_gamut_4 // Convert Linear ARRI Wide Gamut 4 to ACES2065-1 @@ -408,7 +465,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinArriWideGamut4Label "Linear ARRI Wide Gamut 4" #define kOfxColourspaceLinArriWideGamut4Encoding "scene-linear" #define kOfxColourspaceLinArriWideGamut4IsData false +#define kOfxColourspaceLinArriWideGamut4IsBasic false #define kOfxColourspaceLinArriWideGamut4IsCore false +#define kOfxColourspaceLinArriWideGamut4IsDisplay false // arri_logc4 // Convert ARRI LogC4 to ACES2065-1 @@ -422,7 +481,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceArriLogc4Label "ARRI LogC4" #define kOfxColourspaceArriLogc4Encoding "log" #define kOfxColourspaceArriLogc4IsData false +#define kOfxColourspaceArriLogc4IsBasic false #define kOfxColourspaceArriLogc4IsCore false +#define kOfxColourspaceArriLogc4IsDisplay false // bmdfilm_widegamut_gen5 // Convert Blackmagic Film Wide Gamut (Gen 5) to ACES2065-1 @@ -436,7 +497,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceBmdfilmWidegamutGen5Label "BMDFilm WideGamut Gen5" #define kOfxColourspaceBmdfilmWidegamutGen5Encoding "log" #define kOfxColourspaceBmdfilmWidegamutGen5IsData false +#define kOfxColourspaceBmdfilmWidegamutGen5IsBasic false #define kOfxColourspaceBmdfilmWidegamutGen5IsCore false +#define kOfxColourspaceBmdfilmWidegamutGen5IsDisplay false // davinci_intermediate_widegamut // Convert DaVinci Intermediate Wide Gamut to ACES2065-1 @@ -446,7 +509,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceDavinciIntermediateWidegamutLabel "DaVinci Intermediate WideGamut" #define kOfxColourspaceDavinciIntermediateWidegamutEncoding "log" #define kOfxColourspaceDavinciIntermediateWidegamutIsData false +#define kOfxColourspaceDavinciIntermediateWidegamutIsBasic false #define kOfxColourspaceDavinciIntermediateWidegamutIsCore false +#define kOfxColourspaceDavinciIntermediateWidegamutIsDisplay false // lin_bmd_widegamut_gen5 // Convert Linear Blackmagic Wide Gamut (Gen 5) to ACES2065-1 @@ -455,7 +520,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinBmdWidegamutGen5Label "Linear BMD WideGamut Gen5" #define kOfxColourspaceLinBmdWidegamutGen5Encoding "scene-linear" #define kOfxColourspaceLinBmdWidegamutGen5IsData false +#define kOfxColourspaceLinBmdWidegamutGen5IsBasic false #define kOfxColourspaceLinBmdWidegamutGen5IsCore false +#define kOfxColourspaceLinBmdWidegamutGen5IsDisplay false // lin_davinci_widegamut // Convert Linear DaVinci Wide Gamut to ACES2065-1 @@ -464,7 +531,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinDavinciWidegamutLabel "Linear DaVinci WideGamut" #define kOfxColourspaceLinDavinciWidegamutEncoding "scene-linear" #define kOfxColourspaceLinDavinciWidegamutIsData false +#define kOfxColourspaceLinDavinciWidegamutIsBasic false #define kOfxColourspaceLinDavinciWidegamutIsCore false +#define kOfxColourspaceLinDavinciWidegamutIsDisplay false // canonlog2_cinemagamut_d55 // Convert Canon Log 2 Cinema Gamut (Daylight) to ACES2065-1 @@ -477,7 +546,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceCanonlog2CinemagamutD55Label "CanonLog2 CinemaGamut D55" #define kOfxColourspaceCanonlog2CinemagamutD55Encoding "log" #define kOfxColourspaceCanonlog2CinemagamutD55IsData false +#define kOfxColourspaceCanonlog2CinemagamutD55IsBasic false #define kOfxColourspaceCanonlog2CinemagamutD55IsCore false +#define kOfxColourspaceCanonlog2CinemagamutD55IsDisplay false // canonlog3_cinemagamut_d55 // Convert Canon Log 3 Cinema Gamut (Daylight) to ACES2065-1 @@ -490,7 +561,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceCanonlog3CinemagamutD55Label "CanonLog3 CinemaGamut D55" #define kOfxColourspaceCanonlog3CinemagamutD55Encoding "log" #define kOfxColourspaceCanonlog3CinemagamutD55IsData false +#define kOfxColourspaceCanonlog3CinemagamutD55IsBasic false #define kOfxColourspaceCanonlog3CinemagamutD55IsCore false +#define kOfxColourspaceCanonlog3CinemagamutD55IsDisplay false // lin_cinemagamut_d55 // Convert Linear Canon Cinema Gamut (Daylight) to ACES2065-1 @@ -499,7 +572,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinCinemagamutD55Label "Linear CinemaGamut D55" #define kOfxColourspaceLinCinemagamutD55Encoding "scene-linear" #define kOfxColourspaceLinCinemagamutD55IsData false +#define kOfxColourspaceLinCinemagamutD55IsBasic false #define kOfxColourspaceLinCinemagamutD55IsCore false +#define kOfxColourspaceLinCinemagamutD55IsDisplay false // lin_vgamut // Convert Linear Panasonic V-Gamut to ACES2065-1 @@ -508,7 +583,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinVgamutLabel "Linear V-Gamut" #define kOfxColourspaceLinVgamutEncoding "scene-linear" #define kOfxColourspaceLinVgamutIsData false +#define kOfxColourspaceLinVgamutIsBasic false #define kOfxColourspaceLinVgamutIsCore false +#define kOfxColourspaceLinVgamutIsDisplay false // vlog_vgamut // Convert Panasonic V-Log - V-Gamut to ACES2065-1 @@ -522,7 +599,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceVlogVgamutLabel "V-Log V-Gamut" #define kOfxColourspaceVlogVgamutEncoding "log" #define kOfxColourspaceVlogVgamutIsData false +#define kOfxColourspaceVlogVgamutIsBasic false #define kOfxColourspaceVlogVgamutIsCore false +#define kOfxColourspaceVlogVgamutIsDisplay false // lin_redwidegamutrgb // Convert Linear REDWideGamutRGB to ACES2065-1 @@ -531,7 +610,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinRedwidegamutrgbLabel "Linear REDWideGamutRGB" #define kOfxColourspaceLinRedwidegamutrgbEncoding "scene-linear" #define kOfxColourspaceLinRedwidegamutrgbIsData false +#define kOfxColourspaceLinRedwidegamutrgbIsBasic false #define kOfxColourspaceLinRedwidegamutrgbIsCore false +#define kOfxColourspaceLinRedwidegamutrgbIsDisplay false // log3g10_redwidegamutrgb // Convert RED Log3G10 REDWideGamutRGB to ACES2065-1 @@ -545,7 +626,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLog3g10RedwidegamutrgbLabel "Log3G10 REDWideGamutRGB" #define kOfxColourspaceLog3g10RedwidegamutrgbEncoding "log" #define kOfxColourspaceLog3g10RedwidegamutrgbIsData false +#define kOfxColourspaceLog3g10RedwidegamutrgbIsBasic false #define kOfxColourspaceLog3g10RedwidegamutrgbIsCore false +#define kOfxColourspaceLog3g10RedwidegamutrgbIsDisplay false // lin_sgamut3 // Convert Linear S-Gamut3 to ACES2065-1 @@ -554,7 +637,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinSgamut3Label "Linear S-Gamut3" #define kOfxColourspaceLinSgamut3Encoding "scene-linear" #define kOfxColourspaceLinSgamut3IsData false +#define kOfxColourspaceLinSgamut3IsBasic false #define kOfxColourspaceLinSgamut3IsCore false +#define kOfxColourspaceLinSgamut3IsDisplay false // lin_sgamut3cine // Convert Linear S-Gamut3.Cine to ACES2065-1 @@ -563,7 +648,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinSgamut3cineLabel "Linear S-Gamut3.Cine" #define kOfxColourspaceLinSgamut3cineEncoding "scene-linear" #define kOfxColourspaceLinSgamut3cineIsData false +#define kOfxColourspaceLinSgamut3cineIsBasic false #define kOfxColourspaceLinSgamut3cineIsCore false +#define kOfxColourspaceLinSgamut3cineIsDisplay false // lin_venice_sgamut3 // Convert Linear Venice S-Gamut3 to ACES2065-1 @@ -572,7 +659,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinVeniceSgamut3Label "Linear Venice S-Gamut3" #define kOfxColourspaceLinVeniceSgamut3Encoding "scene-linear" #define kOfxColourspaceLinVeniceSgamut3IsData false +#define kOfxColourspaceLinVeniceSgamut3IsBasic false #define kOfxColourspaceLinVeniceSgamut3IsCore false +#define kOfxColourspaceLinVeniceSgamut3IsDisplay false // lin_venice_sgamut3cine // Convert Linear Venice S-Gamut3.Cine to ACES2065-1 @@ -581,7 +670,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceLinVeniceSgamut3cineLabel "Linear Venice S-Gamut3.Cine" #define kOfxColourspaceLinVeniceSgamut3cineEncoding "scene-linear" #define kOfxColourspaceLinVeniceSgamut3cineIsData false +#define kOfxColourspaceLinVeniceSgamut3cineIsBasic false #define kOfxColourspaceLinVeniceSgamut3cineIsCore false +#define kOfxColourspaceLinVeniceSgamut3cineIsDisplay false // slog3_sgamut3 // Convert Sony S-Log3 S-Gamut3 to ACES2065-1 @@ -595,7 +686,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSlog3Sgamut3Label "S-Log3 S-Gamut3" #define kOfxColourspaceSlog3Sgamut3Encoding "log" #define kOfxColourspaceSlog3Sgamut3IsData false +#define kOfxColourspaceSlog3Sgamut3IsBasic false #define kOfxColourspaceSlog3Sgamut3IsCore false +#define kOfxColourspaceSlog3Sgamut3IsDisplay false // slog3_sgamut3cine // Convert Sony S-Log3 S-Gamut3.Cine to ACES2065-1 @@ -609,7 +702,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSlog3Sgamut3cineLabel "S-Log3 S-Gamut3.Cine" #define kOfxColourspaceSlog3Sgamut3cineEncoding "log" #define kOfxColourspaceSlog3Sgamut3cineIsData false +#define kOfxColourspaceSlog3Sgamut3cineIsBasic false #define kOfxColourspaceSlog3Sgamut3cineIsCore false +#define kOfxColourspaceSlog3Sgamut3cineIsDisplay false // slog3_venice_sgamut3 // Convert Sony S-Log3 Venice S-Gamut3 to ACES2065-1 @@ -623,7 +718,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSlog3VeniceSgamut3Label "S-Log3 Venice S-Gamut3" #define kOfxColourspaceSlog3VeniceSgamut3Encoding "log" #define kOfxColourspaceSlog3VeniceSgamut3IsData false +#define kOfxColourspaceSlog3VeniceSgamut3IsBasic false #define kOfxColourspaceSlog3VeniceSgamut3IsCore false +#define kOfxColourspaceSlog3VeniceSgamut3IsDisplay false // slog3_venice_sgamut3cine // Convert Sony S-Log3 Venice S-Gamut3.Cine to ACES2065-1 @@ -637,7 +734,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSlog3VeniceSgamut3cineLabel "S-Log3 Venice S-Gamut3.Cine" #define kOfxColourspaceSlog3VeniceSgamut3cineEncoding "log" #define kOfxColourspaceSlog3VeniceSgamut3cineIsData false +#define kOfxColourspaceSlog3VeniceSgamut3cineIsBasic false #define kOfxColourspaceSlog3VeniceSgamut3cineIsCore false +#define kOfxColourspaceSlog3VeniceSgamut3cineIsDisplay false // camera_rec709 // Convert ACES2065-1 to Rec.709 camera OETF Rec.709 primaries, D65 white point @@ -646,7 +745,9 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceCameraRec709Label "Camera Rec.709" #define kOfxColourspaceCameraRec709Encoding "sdr-video" #define kOfxColourspaceCameraRec709IsData false +#define kOfxColourspaceCameraRec709IsBasic false #define kOfxColourspaceCameraRec709IsCore false +#define kOfxColourspaceCameraRec709IsDisplay false // srgb_encoded_p3d65_tx // Convert ACES2065-1 to sRGB Encoded P3-D65 primaries, D65 white point @@ -655,7 +756,57 @@ A colourspace suitable for texture painting, typically sRGB. #define kOfxColourspaceSrgbEncodedP3d65TxLabel "sRGB Encoded P3-D65 - Texture" #define kOfxColourspaceSrgbEncodedP3d65TxEncoding "sdr-video" #define kOfxColourspaceSrgbEncodedP3d65TxIsData false +#define kOfxColourspaceSrgbEncodedP3d65TxIsBasic false #define kOfxColourspaceSrgbEncodedP3d65TxIsCore false +#define kOfxColourspaceSrgbEncodedP3d65TxIsDisplay false + +/** @brief Roles - standard names used for compatibility with common OCIO configs. +*/ + +/** @brief aces_interchange +Guaranteed to be ACES2065-1. +*/ +#define kOfxColourspaceRoleAcesInterchange "aces_interchange" + +/** @brief cie_xyz_d65_interchange +CIE XYZ colorimetry with the neutral axis at D65. +*/ +#define kOfxColourspaceRoleCieXyzD65Interchange "cie_xyz_d65_interchange" + +/** @brief color_picking +The colourspace to use for colour pickers, typically a display colourspace. +*/ +#define kOfxColourspaceRoleColorPicking "color_picking" + +/** @brief color_timing +A colourspace suitable for colour grading, typically a log colourspace. +*/ +#define kOfxColourspaceRoleColorTiming "color_timing" + +/** @brief compositing_log +Any colourspace with a log transfer function. +*/ +#define kOfxColourspaceRoleCompositingLog "compositing_log" + +/** @brief data +Image values should not be treated as colour, e.g. motion vectors or masks. Mapped to the raw colourspace. +*/ +#define kOfxColourspaceRoleData "data" + +/** @brief matte_paint +A colourspace suitable for matte painting. +*/ +#define kOfxColourspaceRoleMattePaint "matte_paint" + +/** @brief scene_linear +Any scene-referred linear colourspace. +*/ +#define kOfxColourspaceRoleSceneLinear "scene_linear" + +/** @brief texture_paint +A colourspace suitable for texture painting, typically sRGB. +*/ +#define kOfxColourspaceRoleTexturePaint "texture_paint" #ifdef __cplusplus } diff --git a/include/openfx-studio-config-v2.1.0_aces-v1.3_ocio-v2.3.ocio b/include/openfx-studio-config-v2.1.0_aces-v1.3_ocio-v2.3.ocio index 24a18e1b..0771baea 100644 --- a/include/openfx-studio-config-v2.1.0_aces-v1.3_ocio-v2.3.ocio +++ b/include/openfx-studio-config-v2.1.0_aces-v1.3_ocio-v2.3.ocio @@ -20,10 +20,13 @@ roles: color_timing: ACEScct compositing_log: ACEScct data: Raw - hdr_video: Rec.2100-HLG - Display matte_paint: ACEScct + ofx_hdr: Rec.2100-HLG - Display + ofx_linear: ACEScg + ofx_log: ACEScct + ofx_raw: Raw + ofx_sdr: Rec.1886 Rec.709 - Display scene_linear: ACEScg - sdr_video: Rec.1886 Rec.709 - Display texture_paint: sRGB - Texture file_rules: diff --git a/scripts/genColour b/scripts/genColour index cd86272d..4eb28c6a 100755 --- a/scripts/genColour +++ b/scripts/genColour @@ -36,16 +36,19 @@ footer = ''' ''' role_docs = { + 'ofx_sdr': 'Any display-referred SDR video such as Rec. 709.', + 'ofx_hdr': 'Any display-referred HDR video such as Rec. 2020 HLG or PQ.', + 'ofx_log': 'Any colourspace with a log transfer function.', + 'ofx_linear': 'Any scene-referred linear colourspace.', + 'ofx_raw': 'Image values should not be treated as colour, e.g. motion vectors or masks.', 'aces_interchange': 'Guaranteed to be ACES2065-1.', 'cie_xyz_d65_interchange': 'CIE XYZ colorimetry with the neutral axis at D65.', 'color_picking': 'The colourspace to use for colour pickers, typically a display colourspace.', 'color_timing': 'A colourspace suitable for colour grading, typically a log colourspace.', 'compositing_log': 'Any colourspace with a log transfer function.', 'data': 'Image values should not be treated as colour, e.g. motion vectors or masks. Mapped to the raw colourspace.', - 'hdr_video': 'Any display-referred HDR video such as Rec. 2020 HLG or PQ.', 'matte_paint': 'A colourspace suitable for matte painting.', 'scene_linear': 'Any scene-referred linear colourspace.', - 'sdr_video': 'Any display-referred SDR video such as Rec. 709.', 'texture_paint': 'A colourspace suitable for texture painting, typically sRGB.' } @@ -66,12 +69,27 @@ def colourspace_short_name(spc): def print_name(name): print(f'{define_base}{camel_name(name)} "{name}"') +def print_metadata(name, label, reference_space, encoding, is_data, is_basic, is_core): + print_string_property(name, 'Label', label) + print_string_property(name, 'Encoding', encoding) + print_bool_property(name, 'Data', is_data) + print_bool_property(name, 'Basic', is_basic) + print_bool_property(name, 'Core', is_core) + print_bool_property(name, 'Display', reference_space == OCIO.ReferenceSpaceType.REFERENCE_SPACE_DISPLAY) + +# Basic colourspaces are actually OCIO roles with additional metadata +def print_basic_colourspace(role): + role_name = role[0] + spc = ofx_config.getColorSpace(role[1]) + print(f'\n/** @brief {role_name}\n{role_docs[role_name]}\n*/') + print_name(role_name) + print_metadata(role_name, role_name, spc.getReferenceSpaceType(), spc.getEncoding(), spc.isData(), True, True) + def print_role(role): role_name = role[0] - colourspace_name = colourspace_short_name(ofx_config.getColorSpace(role[1])) print(f'\n/** @brief {role_name}\n{role_docs[role_name]}\n*/') print(f'{define_base}Role{camel_name(role_name)} "{role_name}"') - + def print_string_property(name, propname, value): print(f'{define_base}{camel_name(name)}{propname} "{value}"') @@ -84,14 +102,14 @@ def print_list(name, list): def print_colourspace(spc, is_core): name = colourspace_short_name(spc) - display_name = spc.getName() + label = spc.getName() print(f'\n// {name}\n//', '\n// '.join(spc.getDescription().split('\n')).replace('\n// \n', '\n')) print_name(name) - print_string_property(name, 'Label', display_name) - print_string_property(name, 'Encoding', spc.getEncoding()) - print_bool_property(name, 'Data', spc.isData()) - print_bool_property(name, 'Core', is_core) + print_metadata(name, label, spc.getReferenceSpaceType(), spc.getEncoding(), spc.isData(), False, is_core) +# OFX-specific set of basic roles +basic_roles = ['ofx_raw', 'ofx_linear', 'ofx_sdr', 'ofx_log', 'ofx_hdr'] + # OFX-specific set of core colourspaces core_spaces = ['srgb_display', 'displayp3_display', 'rec1886_rec709_display', 'ACES2065-1', 'ACEScc', 'ACEScct', @@ -106,12 +124,9 @@ ofx_config = OCIO.GetCurrentConfig() print(Template(header).substitute(config_name=ofx_config.getName())) -print('''/** @brief Roles - generic names for types of colourspace -Use a role when the specific colourspace is not important. -*/''') - -for role in ofx_config.getRoles(): - print_role(role) +print('\n// Basic Colourspaces') +for basic_role in [role for role in ofx_config.getRoles() if role[0] in basic_roles]: + print_basic_colourspace(basic_role) print('\n// Core Colourspaces') for core_spc in [spc for spc in ofx_config.getColorSpaces() if colourspace_short_name(spc) in core_spaces]: @@ -121,4 +136,9 @@ print('\n// Non-core Colourspaces') for other_spc in [spc for spc in ofx_config.getColorSpaces() if colourspace_short_name(spc) not in core_spaces]: print_colourspace(other_spc, False) +print('''\n/** @brief Roles - standard names used for compatibility with common OCIO configs. +*/''') +for role in [role for role in ofx_config.getRoles() if role[0] not in basic_roles]: + print_role(role) + print(footer) diff --git a/scripts/genOCIOConfig b/scripts/genOCIOConfig index 04660899..012f32a4 100755 --- a/scripts/genOCIOConfig +++ b/scripts/genOCIOConfig @@ -15,10 +15,14 @@ ofx_config = OCIO.Config.CreateFromBuiltinConfig('studio-config-v2.1.0_aces-v1.3 srgb_tx = ofx_config.getColorSpace('srgb_tx') srgb_tx.setEncoding('sdr-video') -# Add OFX-specific roles for use in Native mode only. -# The choice of colourspaces for these roles is arbitrary. -ofx_config.setRole('sdr_video', 'rec1886_rec709_display') -ofx_config.setRole('hdr_video', 'rec2100_hlg_display') +# Add OFX-specific roles for use as "basic colourspaces". +# Suitable colourspaces are defined for OCIO compatibility, but a plug-in/host operating +# in basic mode might not be using these exact colourspaces. +ofx_config.setRole('ofx_sdr', 'rec1886_rec709_display') +ofx_config.setRole('ofx_hdr', 'rec2100_hlg_display') +ofx_config.setRole('ofx_log', 'ACEScct') +ofx_config.setRole('ofx_linear', 'ACEScg') +ofx_config.setRole('ofx_raw', 'raw') # Make all colourspaces active, future OCIO configs will also do this ofx_config.setInactiveColorSpaces('')