colour.models.log_encoding_Log3G10#

colour.models.log_encoding_Log3G10(x: ArrayLike, method: Literal['v1', 'v2', 'v3'] | str = 'v3') NDArrayFloat[source]#

Define the Log3G10 log encoding curve / opto-electronic transfer function.

Parameters:
  • x (ArrayLike) – Linear data \(x\).

  • method (Literal['v1', 'v2', 'v3'] | str) – Computation method.

Returns:

Non-linear data \(y\).

Return type:

numpy.ndarray

Notes

Domain

Scale - Reference

Scale - 1

x

[0, 1]

[0, 1]

Range

Scale - Reference

Scale - 1

y

[0, 1]

[0, 1]

  • The Log3G10 v1 log encoding curve is the one used in REDCINE-X Beta 42. Resolve 12.5.2 also uses the v1 curve. RED is planning to use the Log3G10 v2 log encoding curve in the release version of the RED SDK.

  • The intent of the Log3G10 v1 log encoding curve is that zero maps to zero, 0.18 maps to 1/3, and 10 stops above 0.18 maps to 1.0. The name indicates this in a similar way to the naming conventions of Sony HyperGamma curves.

    The constants used in the functions do not in fact quite hit these values, but rather than use corrected constants, the functions here use the official RED values, in order to match the output of the RED SDK.

    For those interested, solving for constants which exactly hit 1/3 and 1.0 yields the following values:

    B = 25 * (np.sqrt(4093.0) - 3) / 9
    A = 1 / np.log10(B * 184.32 + 1)
    

    where the function takes the form:

    Log3G10(x) = A * np.log10(B * x + 1)
    

    Similarly for Log3G12, the values which hit exactly 1/3 and 1.0 are:

    B = 25 * (np.sqrt(16381.0) - 3) / 9
    A = 1 / np.log10(B * 737.28 + 1)
    

References

[Nat16], [REDDCinema17]

Examples

>>> log_encoding_Log3G10(0.0)  
0.09155148...
>>> log_encoding_Log3G10(0.18, method="v1")  
0.3333336...