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

    Voronoi ノード

    説明

    入力 UV に基づいて、ボロノイノイズ (Worley ノイズ) を生成します。ボロノイノイズは各点のピクセルとラティスとの間の距離を計算することで生成されます。これらの点を入力 Angle Offset によって制御される疑似乱数でオフセットすることで、セルのクラスターの生成が可能になります。セルのスケールと結果のノイズは入力 Cell Density によって制御されます。出力 Cells にはセルの RAW データが含まれます。

    ポート

    Name Direction タイプ バインディング 説明
    UV 入力 Vector 2 UV 入力 UV 値
    Angle Offset 入力 Vector 1 なし 点のオフセット値
    Cell Density 入力 Vector 1 なし 生成されるセルの密度
    Out 出力 Vector 1 なし 出力されるノイズの値
    Cells 出力 Vector 1 なし セルの RAW データ

    生成されるコードの例

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

    inline float2 unity_voronoi_noise_randomVector (float2 UV, float offset)
    {
        float2x2 m = float2x2(15.27, 47.63, 99.41, 89.98);
        UV = frac(sin(mul(UV, m)) * 46839.32);
        return float2(sin(UV.y*+offset)*0.5+0.5, cos(UV.x*offset)*0.5+0.5);
    }
    
    void Unity_Voronoi_float(float2 UV, float AngleOffset, float CellDensity, out float Out, out float Cells)
    {
        float2 g = floor(UV * CellDensity);
        float2 f = frac(UV * CellDensity);
        float t = 8.0;
        float3 res = float3(8.0, 0.0, 0.0);
    
        for(int y=-1; y<=1; y++)
        {
            for(int x=-1; x<=1; x++)
            {
                float2 lattice = float2(x,y);
                float2 offset = unity_voronoi_noise_randomVector(lattice + g, AngleOffset);
                float d = distance(lattice + offset, f);
                if(d < res.x)
                {
                    res = float3(d, offset.x, offset.y);
                    Out = res.x;
                    Cells = res.y;
                }
            }
        }
    }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)