Code: Select all
public float ValueNoise1D(float x)
{
int l = Mathf.FloorToInt(x);
int r = l + 1;
float vl = hashToFloat(hash(l));
float vr = hashToFloat(hash(r));
float lerp = Mathf.InverseLerp(l, r, x);
return Mathf.Lerp(vl, vr, lerp);
}
//Based on Murmur3
int hash(int key)
{
uint k = (uint)key;
k += 0x7ed55d16;
k ^= k >> 16;
k *= 0x85ebca6b;
k ^= k >> 13;
k *= 0xc2b2ae35;
k ^= k >> 16;
return (int)(k & 0x7fffffff);
}
float hashToFloat(int hash)
{
return hash / (float)0x80000000;
}
Ein Beispiel ist Regen. Wenn Regen an einem bestimmten Tag eine 30% ige Chance hat, können Sie einen einheitlichen Wert V mit der Wahrscheinlichkeit P abziehen und prüfen, ob er weniger als 0 ist, d. H. V-P < /ol>
Eine Option kann versuchen, eine inverse kumulative Verteilungsfunktion zu berechnen, um den Ausgang so einheitlich zu machen, aber ich weiß nicht, wo ich überhaupt anfangen soll, dies zu berechnen. Dazu. Perlin und Simplex -Rauschen sind an allen Punkten kontinuierlich. Ohne zu interpolieren würde es einen plötzlichen Sprung mit dem wahrgenommenen Wert geben. Das Interpolieren zwischen zwei zufälligen Werten ist jedoch genau das, was die Wahrscheinlichkeitsverteilungsfunktion zu einem bestimmten Zeitpunkt ungleichmäßig verursacht. möglich. Jede Hilfe wäre geschätzt.