Release v0.9.6
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
// Licensed under the Non-Profit Open Software License version 3.0
|
||||
|
||||
// Variables
|
||||
uint PerlinType;
|
||||
float PerlinAmplitude;
|
||||
float PerlinFrequency;
|
||||
float2 PerlinOffset;
|
||||
uint PerlinOctaves;
|
||||
float PerlinOctavesStrength;
|
||||
|
||||
// Methods
|
||||
float StandardPerlinNoise(uint id, float amplitude, float2 offset){
|
||||
// Calculate vector
|
||||
float2 pos = IndexToFloatVector(id, HeightMapResolution);
|
||||
|
||||
// Calculate x and y position
|
||||
float x = float(pos.x) / HeightMapResolution;
|
||||
float y = float(pos.y) / HeightMapResolution;
|
||||
|
||||
// Generate noise
|
||||
return cnoise(float2(x * amplitude + offset.x, y * amplitude + offset.y));
|
||||
}
|
||||
|
||||
float BillowyPerlinNoise(uint id, float amplitude, float2 offset){
|
||||
float noise = StandardPerlinNoise(id, amplitude, offset);
|
||||
return abs(noise * 2 - 1);
|
||||
}
|
||||
|
||||
float RigidPerlinNoise(uint id, float amplitude, float2 offset){
|
||||
return 1 - BillowyPerlinNoise(id, amplitude, offset);;
|
||||
}
|
||||
|
||||
// Kernel
|
||||
[numthreads(32,1,1)]
|
||||
void PerlinNoise (uint3 id : SV_DispatchThreadID)
|
||||
{
|
||||
if(id.x < HeightMapLength){ // Keep in bounds
|
||||
float total = 0;
|
||||
float frequency = PerlinFrequency;
|
||||
float amplitude = 1;
|
||||
float maxvalue = 0;
|
||||
|
||||
for(uint i = 0; i < PerlinOctaves; i++){
|
||||
|
||||
// Types
|
||||
if(PerlinType == 0){ // Standard
|
||||
total += StandardPerlinNoise(id.x, frequency, PerlinOffset) * amplitude;
|
||||
} else if(PerlinType == 1){ // Billowy
|
||||
total += BillowyPerlinNoise(id.x, frequency, PerlinOffset) * amplitude;
|
||||
} else if(PerlinType == 2){ // Rigid
|
||||
total += RigidPerlinNoise(id.x, frequency, PerlinOffset) * amplitude;
|
||||
}
|
||||
|
||||
maxvalue += amplitude;
|
||||
amplitude *= PerlinOctavesStrength;
|
||||
frequency *= 2;
|
||||
}
|
||||
|
||||
// Update buffer
|
||||
HeightBuffer[id.x] = total/maxvalue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user