docs.unity3d.com
    目次を表示する/隠す

    Hue ノード

    説明

    入力 In の色相を入力 Offset の値で調整します。、Offset の単位はパラメーター Range で設定できます。Offset の設定範囲は、単位を Degrees に設定した場合は -180 から 180、Radians に設定した場合は -Pi から Pi になります。

    ポート

    Name Direction タイプ バインディング 説明
    In 入力 Vector 3 なし 入力値
    Offset 入力 Vector 1 なし 色相を補正する量
    Out 出力 Vector 3 なし 出力値

    制御

    Name タイプ オプション 説明
    Range ドロップダウン Degrees、Radians 入力 Offset に使用する単位

    生成されるコードの例

    以下のサンプルコードは、Base モード毎に、このノードの出力の一例を示したものです。

    Degrees

    void Unity_Hue_Degrees_float(float3 In, float Offset, out float3 Out)
    {
        float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
        float4 P = lerp(float4(In.bg, K.wz), float4(In.gb, K.xy), step(In.b, In.g));
        float4 Q = lerp(float4(P.xyw, In.r), float4(In.r, P.yzx), step(P.x, In.r));
        float D = Q.x - min(Q.w, Q.y);
        float E = 1e-10;
        float3 hsv = float3(abs(Q.z + (Q.w - Q.y)/(6.0 * D + E)), D / (Q.x + E), Q.x);
    
        float hue = hsv.x + Offset / 360;
        hsv.x = (hue < 0)
                ? hue + 1
                : (hue > 1)
                    ? hue - 1
                    : hue;
    
        float4 K2 = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
        float3 P2 = abs(frac(hsv.xxx + K2.xyz) * 6.0 - K2.www);
        Out = hsv.z * lerp(K2.xxx, saturate(P2 - K2.xxx), hsv.y);
    }
    

    Radians

    void Unity_Hue_Radians_float(float3 In, float Offset, out float3 Out)
    {
        float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
        float4 P = lerp(float4(In.bg, K.wz), float4(In.gb, K.xy), step(In.b, In.g));
        float4 Q = lerp(float4(P.xyw, In.r), float4(In.r, P.yzx), step(P.x, In.r));
        float D = Q.x - min(Q.w, Q.y);
        float E = 1e-10;
        float3 hsv = float3(abs(Q.z + (Q.w - Q.y)/(6.0 * D + E)), D / (Q.x + E), Q.x);
    
        float hue = hsv.x + Offset;
        hsv.x = (hue < 0)
                ? hue + 1
                : (hue > 1)
                    ? hue - 1
                    : hue;
    
        // HSV to RGB
        float4 K2 = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
        float3 P2 = abs(frac(hsv.xxx + K2.xyz) * 6.0 - K2.www);
        Out = hsv.z * lerp(K2.xxx, saturate(P2 - K2.xxx), hsv.y);
    }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)