픽셀 셰이더의 의사 난수는 구하기 쉽지 않습니다. CPU의 의사 난수 생성기는 함수를 호출 할 때마다 읽고 쓰는 상태를 갖습니다. 픽셀 쉐이더에서는 그렇게 할 수 없습니다.
몇 가지 옵션이 있습니다.
픽셀 셰이더 대신 계산 셰이더를 사용하십시오. 버퍼에 대한 읽기 / 쓰기 액세스를 지원하므로 표준 PRNG를 구현할 수 있습니다.
화면 공간 위치와 같은 매개 변수를 기반으로 임의의 데이터를 포함하는 하나 이상의 텍스처에서 샘플링합니다. 텍스처를 찾기 위해 위치를 사용하기 전에 위치에 대한 수학을 수행 할 수도 있습니다. 수학에 임의의 그리기 당 호출 쉐이더 상수가 포함 된 경우 텍스처를 재사용 할 수 있습니다.
화면 공간 위치의 수학 함수를 찾아서 '임의의 결과'를 얻습니다.
빠른 Google 검색에서 다음 기능을 가진 이 페이지 를 찾았습니다 .
float rand_1_05(in float2 uv)
{
float2 noise = (frac(sin(dot(uv ,float2(12.9898,78.233)*2.0)) * 43758.5453));
return abs(noise.x + noise.y) * 0.5;
}
float2 rand_2_10(in float2 uv) {
float noiseX = (frac(sin(dot(uv, float2(12.9898,78.233) * 2.0)) * 43758.5453));
float noiseY = sqrt(1 - noiseX * noiseX);
return float2(noiseX, noiseY);
}
float2 rand_2_0004(in float2 uv)
{
float noiseX = (frac(sin(dot(uv, float2(12.9898,78.233) )) * 43758.5453));
float noiseY = (frac(sin(dot(uv, float2(12.9898,78.233) * 2.0)) * 43758.5453));
return float2(noiseX, noiseY) * 0.004;
}