利用者:Sobotka/Color Management/Bent Curves

提供: wiki
移動先: 案内検索

Curves

The following is an examination of the Curves UI element and a fundamental problem with the interaction that many people have likely encountered, but may have been unaware of the underlying issue. The issue shares a problem across many UI elements, but this section focuses on Curves and possible solutions.

The Issue

Curves currently take a 1:1 value from the scene referred linear reference space and bend them accordingly. The following issues arise:

  • Imagery based data requires unique curve ranges and mappings. This results in a complete disconnect between what the imager is doing with a curve and the resulting output.
  • Data based manipulations might require linearized curve responses, but allocated over differing ranges.

Example

When manipulating imagery, the imager is presented with the familiar curve image:

Curves Node

The issue is, that while one can unclip the view and scroll around the curve, it still remains exceedingly tricky to adjust proper ranges. Consider under the default sRGB transfer function. Note it is a best case scenario when the scene referred maximum value maps 1:1 with the display referred output transform maximum value:

Curves under sRGB EOTF

Note that in the above image it should be apparent that 20% of the curve allocated to the adjustment region accounts for nearly 50% of the visual result. It is extremely difficult to achieve finely detailed adjustments with this discrepancy. Conversely, approximately 80% of the curve is allocated to adjusting approximately 50% of the output transformed values.

Now consider under an alternate transfer function such as Filmic with a different dynamic range. This exacerbates the already present issue:

Curves under Filmic

Here we can see that roughly 18% of the curve default UI is allocated to 50% of the output image, with the remaining 50% not available immediately for manipulation. The upper end value of 16.291 under the Filmic configuration is well off of the default UI.

Also consider data based ranges where one might need to apply a strictly linear adustment, but to a particular range such as -1.0 to 1.0.

Possible Solution

The Black Level and White Level adjustments do not accomodate for the nonlinear transforms that visual imagery require. The various transforms required for manipulation of imagery and data are many, with new transforms arriving nearly monthly with new cameras and imaging spaces.

Operating in the scene referred linear domain for imagery is critical for proper blending and manipulations. For these sorts of adjustments, a possible solution to the above issues that covers all usage cases is to permit the individual to choose the appropriate transform applicable to their particular task at hand. It should be noted that their task needs are likely to change many times across operations, and therefore having the control on the UI is one of the only plausible solutions:

Curves Solution

This would apply the transform to the curve, and the output mapping would correspond with the curve UI. In this case, all adjustments match the interaction on the curve with the display referred or, in the case of data, transform in question. Under sRGB, the 48% position corresponds with the scene referred value of approximately 0.20 and under Filmic the proper mapping would apply, including the adjustment of the scene referred maximum value mapped correctly to the 1.0 position on the curve UI, as well as any and all linear custom data transform ranges.

It is also a future-friendly solution, allowing implementation of ACES or any forward looking set of transforms.

Implementation

This would ideally be a one way transform on the curve's sampling points to_reference. The default configuration would use the OpenColorIO enforced role "color_picking" to set the default transform listed in the box to start.