﻿#pragma kernel GenerateNoise

#include "Includes\FastNoiseLite.compute"
#include "Includes\MetricsCompute.compute"

RWStructuredBuffer<float> _Weights;

float _NoiseScale;
float _Amplitude;
float _Frequency;
int _Octaves;
float _GroundPercent;
int _GroundLevel;


[numthreads(numThreads, numThreads, numThreads)]
void GenerateNoise(uint3 id : SV_DispatchThreadID)
{
    fnl_state noise = fnlCreateState();
    noise.noise_type = FNL_NOISE_OPENSIMPLEX2;
    noise.fractal_type = FNL_FRACTAL_RIDGED;
    noise.frequency = _Frequency;
    noise.octaves = _Octaves;

    float3 pos = (id * _NoiseScale) / (_ChunkSize - 1) * _Scale;
    float ground = -pos.y + (_GroundPercent * _GroundLevel);
    float n = ground + fnlGetNoise3D(noise, pos.x, pos.y, pos.z) * _Amplitude;
    _Weights[indexFromCoord(id.x, id.y, id.z)] = n;
}