Probability Sampling
メニューパス : Operator > Logic > Probability Sampling
Probability Sampling Operator は、ウェイトがケース選択の確立を制御する、switch/case 演算の一種を実行します。すべてのウェイトが等しい場合、この Operator は様々な出力値の一様分布を行います。

Operator 設定
| 設定 | 説明 |
|---|---|
| Integrated Random | (Inspector) Operator が乱数を生成するか、代わりにカスタムの乱数の入力を可能にするかを、指定します。 |
| Seed | 乱数の範囲を定義します。詳細については、Random Number を参照してください。 この設定は、Integrated Random を有効にしたときのみ表示されます。 |
| Constant | 生成された乱数が定数かどうかを特定します。詳細については、Random Number を参照してください。 この設定は、Integrated Random を有効にしたときのみ表示されます。 |
| Entry Count | テストするケース数です。最大値は 32 です。 |
Operator プロパティ
| Input | Type | 説明 |
|---|---|---|
| Weight 0 | float | 最初の値のウェイトです。他のウェイトと比べてこの値が大きいほど、Operator が最初の値を選択する確率が高まります。 |
| Value 0 | 設定可能 | Operator が Weight 0 を選択した場合に、出力する値です。 |
| Weight 1 | float | 2 番目の値のウェイトです。他のウェイトと比べてこの値が大きいほど、Operator が 2 番目の値を選択する確率が高まります。 |
| Value 1 | 設定可能 | Operator が Weight 1 を選択した場合に、出力する値です。 |
| Weight N | float | 他のケースを見るには、Entry Count を増やします。 |
| Value N | 設定可能 | 他のケースを見るには、Entry Count を増やします。 |
| Rand | float | Operator がウェイトから値を選択する際に使う値です。これは 0 から 1 の間になります。このプロパティは、Integrated Random を無効にしたときのみ表示されます。 |
| Hash | uint | Operator が一定のランダム値を作成する際に使う値です。このプロパティは、Constant を有効にしたときのみ表示されます。 |
| Output | Type | 説明 |
|---|---|---|
| Output | 設定可能 | 該当するケースエントリーが Input 値に等しい場合の値か、もしくは該当するものがなければ Default になります。 |
Operator 設定
ノードの設定は、ノードのヘッダーにある cog アイコンをクリックすると表示されます。
| プロパティ | 説明 |
|---|---|
| Type | この Operator が使う値の型です。このプロパティがサポートする型のリストについては、利用できる型 を参照してください。 |
利用できる型
Input 値と Output ポートには、以下の型を使うことができます。
- Bool
- int
- Uint
- float
- Vector2
- Vector3
- Vector4
- Gradient
- AnimationCurve
- Matrix
- OrientedBox
- Color
- Direction
- Position
- Vector
- Transform
- Circle
- ArcCircle
- Sphere
- ArcSphere
- AABox
- Plane
- Cylinder
- Cone
- ArcCone
- Torus
- ArcTorus
- Line
- Flipbook
- Camera
このリストには、生成された HLSL コードのローカル変数として割り当てることができないため、バッファまたはテクスチャに関連する型は含まれていません。
詳細
このサンプルコードは、この Operator の内部アルゴリズムを示しています。
//Input
float[] weight = { 0.2f, 1.2f, 0.7f };
char[] values = { 'a', 'b', 'c' };
//高さのプレフィックス合計を計算します
float[] prefixSumOfWeight = new float[height.Length];
prefixSumOfHeight[0] = weight[0];
for (int i = 1; i < weight.Length; ++i)
prefixSumOfHeight[i] = weight[i] + weight[i - 1];
//ランダムな数を選びます [0, sum of all height]
var rand = Random.Range(0.0f, weight[weight.Length - 1]);
//確率標本抽出を評価します
char r = 'z';
for (int i = 0; i < weight.Length; ++i)
{
if (rand < prefixSumOfWeight[i] || i == weight.Length - 1)
{
r = values[i];
break;
}
}
//出力します
Debug.Log("Result : " + r.ToString());