White Balance Node | Package Manager UI website
docs.unity3d.com
    Show / Hide Table of Contents

    White Balance Node

    Description

    Adjusts the temperature and tint of input In by the amount of inputs Temperature and Tint respectively. Temperature has the effect of shifting the values towards yellow or blue. Tint has the effect of shifting towards pink or green.

    Ports

    Name Direction Type Binding Description
    In Input Vector 3 None Input value
    Temperature Input Vector 1 None Temperature offset value
    Tint Input Vector 1 None Tint offset value
    Out Output Vector 3 None Output value

    Generated Code Example

    The following example code represents one possible outcome of this node.

    void Unity_WhiteBalance_float(float3 In, float Temperature, float Tint, out float3 Out)
    {
        // Range ~[-1.67;1.67] works best
        float t1 = Temperature * 10 / 6;
        float t2 = Tint * 10 / 6;
    
        // Get the CIE xy chromaticity of the reference white point.
        // Note: 0.31271 = x value on the D65 white point
        float x = 0.31271 - t1 * (t1 < 0 ? 0.1 : 0.05);
        float standardIlluminantY = 2.87 * x - 3 * x * x - 0.27509507;
        float y = standardIlluminantY + t2 * 0.05;
    
        // Calculate the coefficients in the LMS space.
        float3 w1 = float3(0.949237, 1.03542, 1.08728); // D65 white point
    
        // CIExyToLMS
        float Y = 1;
        float X = Y * x / y;
        float Z = Y * (1 - x - y) / y;
        float L = 0.7328 * X + 0.4296 * Y - 0.1624 * Z;
        float M = -0.7036 * X + 1.6975 * Y + 0.0061 * Z;
        float S = 0.0030 * X + 0.0136 * Y + 0.9834 * Z;
        float3 w2 = float3(L, M, S);
    
        float3 balance = float3(w1.x / w2.x, w1.y / w2.y, w1.z / w2.z);
    
        float3x3 LIN_2_LMS_MAT = {
            3.90405e-1, 5.49941e-1, 8.92632e-3,
            7.08416e-2, 9.63172e-1, 1.35775e-3,
            2.31082e-2, 1.28021e-1, 9.36245e-1
        };
    
        float3x3 LMS_2_LIN_MAT = {
            2.85847e+0, -1.62879e+0, -2.48910e-2,
            -2.10182e-1,  1.15820e+0,  3.24281e-4,
            -4.18120e-2, -1.18169e-1,  1.06867e+0
        };
    
        float3 lms = mul(LIN_2_LMS_MAT, In);
        lms *= balance;
        Out = mul(LMS_2_LIN_MAT, lms);
    }
    
    Back to top Copyright © 2015-2018 Unity
    Generated by DocFX