Ponieważ producenci sterowników GPU zwykle nie zadają sobie trudu, aby wdrożyć je noiseX
w GLSL, szukam zestawu funkcji narzędziowych „szwajcarski scyzoryk do randomizacji grafiki” , najlepiej zoptymalizowanego do użycia w modułach cieniujących GPU. Wolę GLSL, ale kod zrobi dla mnie jakikolwiek język, nie mam nic przeciwko tłumaczeniu go na GLSL.
W szczególności oczekiwałbym:
a) Funkcje pseudolosowe - N-wymiarowy, równomierny rozkład na [-1,1] lub powyżej [0,1], obliczony na podstawie nasion M-wymiarowych (najlepiej dowolna wartość, ale nie mam nic przeciwko ograniczeniu nasion na przykład 0..1 dla jednolitego rozkładu wyników). Coś jak:
float random (T seed);
vec2 random2 (T seed);
vec3 random3 (T seed);
vec4 random4 (T seed);
// T being either float, vec2, vec3, vec4 - ideally.
b) Ciągły hałas, taki jak szum Perlina - znowu, wymiar N, + - równomierny rozkład, z ograniczonym zestawem wartości i, dobrze wyglądający (niektóre opcje konfiguracji wyglądu, takie jak poziomy Perlina, mogą być również przydatne). Spodziewałbym się takich podpisów:
float noise (T coord, TT seed);
vec2 noise2 (T coord, TT seed);
// ...
Nie przepadam za teorią generowania liczb losowych, więc najchętniej wybrałbym gotowe rozwiązanie , ale doceniłbym również odpowiedzi typu „oto bardzo dobry, wydajny 1D rand (), i pozwól mi wyjaśnić jak zrobić dobry N-wymiarowy rand () na wierzchu ... " .
vec2 co
? czy to jest zasięg? nasionko?