확률 샘플링
메뉴 경로: Operator > Logic > Probability Sampling
Probability Sampling 연산자는 가중치가 케이스를 선택할 확률을 제어하는 일종의 switch-case 연산을 수행합니다. 모든 가중치가 동일한 경우 이 연산자는 다양한 출력 값의 균일한 분포를 생성합니다.
연산자 설정
설정 | 설명 |
---|---|
Integrated Random | (인스펙터) 이 연산자가 난수 자체를 생성하는지, 아니면 대신에 커스텀 난수를 입력할 수 있는지 여부를 지정합니다. |
Seed | 난수의 범위를 정의합니다. 자세한 내용은 난수를 참조하십시오. 이 설정은 Integrated Random을 활성화한 경우에만 나타납니다. |
Constant | 생성된 난수가 상수인지 여부를 지정합니다. 자세한 내용은 난수를 참조하십시오. 이 설정은 Integrated Random을 활성화한 경우에만 나타납니다. |
Entry Count | 테스트할 케이스 수입니다. 최대값은 32입니다. |
연산자 프로퍼티
입력 | 타입 | 설명 |
---|---|---|
Weight 0 | float | 첫 번째 값의 가중치입니다. 이 값이 나머지 가중치보다 더 클수록 연산자가 첫 번째 값을 선택할 확률이 더 높습니다. |
Value 0 | 설정 가능 | 연산자가 Weight 0을 선택한 경우 출력할 값입니다. |
Weight 1 | float | 두 번째 값의 가중치입니다. 이 값이 나머지 가중치보다 더 클수록 연산자가 두 번째 값을 선택할 확률이 더 높습니다. |
Value 1 | 설정 가능 | 연산자가 Weight 1을 선택한 경우 출력할 값입니다. |
Weight N | float | 더 많은 케이스를 노출하려면 Entry Count를 늘리십시오. |
Value N | 설정 가능 | 더 많은 케이스를 노출하려면 Entry Count를 늘리십시오. |
Rand | float | 이 연산자가 가중치 중에서 값을 선택하는 데 사용하는 값입니다. 0과 1 사이여야 합니다. 이 프로퍼티는 Integrated Random을 비활성화한 경우에만 나타납니다. |
Hash | uint | 이 연산자가 상수 무작위 값을 만드는 데 사용하는 값입니다. 이 프로퍼티는 Constant를 활성화한 경우에만 나타납니다. |
Output | 타입 | 설명 |
---|---|---|
Output | 설정 가능 | 해당 케이스 엔트리가 Input 값과 같은 경우의 값입니다. 일치하는 항목이 없으면 Default입니다. |
연산자 설정
노드 설정을 보려면 노드의 헤더에 있는 톱니바퀴 아이콘을 클릭하십시오.
프로퍼티 | 설명 |
---|---|
타입 | 이 연산자가 사용하는 값 타입입니다. 이 프로퍼티가 지원하는 타입 리스트는 사용 가능한 타입을 참조하십시오. |
사용 가능한 타입
다음의 타입을 입력 값 및 출력 포트에 사용할 수 있습니다.
- 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 코드에서 이러한 타입을 로컬 변수로 할당할 수 없으므로, 이 리스트에는 버퍼 또는 텍스처에 해당하는 타입이 포함되지 않습니다.
세부 정보
이 연산자의 내부 알고리즘은 다음 샘플 코드로 설명할 수 있습니다.
//Input
float[] weight = { 0.2f, 1.2f, 0.7f };
char[] values = { 'a', 'b', 'c' };
//Compute prefix sum of height
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];
//Pick a random value [0, sum of all height]
var rand = Random.Range(0.0f, weight[weight.Length - 1]);
//Evaluate probability sampling
char r = 'z';
for (int i = 0; i < weight.Length; ++i)
{
if (rand < prefixSumOfWeight[i] || i == weight.Length - 1)
{
r = values[i];
break;
}
}
//Output
Debug.Log("Result : " + r.ToString());