private void makeCell(Vector3 coords) { Bounds bounds = new Bounds(coords, Vector3.one * spaceSettings.subdivisionDimmension); for (float x = (int)coords.x - spaceSettings.subdivisionDimmension / 2; x < (int)coords.x + spaceSettings.subdivisionDimmension / 2; x += 2 - spaceSettings.density) { for (float y = (int)coords.y - spaceSettings.subdivisionDimmension / 2; y < (int)coords.y + spaceSettings.subdivisionDimmension / 2; y += 2 - spaceSettings.density) { for (float z = (int)coords.z - spaceSettings.subdivisionDimmension / 2; z < (int)coords.z + spaceSettings.subdivisionDimmension / 2; z += 2 - spaceSettings.density) { //initial position Vector3 pos = new Vector3(x, y, z); //calculating jitter Vector3 jitter = new Vector3(0.5f - noise.evaluate(pos + Vector3.left), 0.5f - noise.evaluate(pos + Vector3.up), 0.5f - noise.evaluate(pos + Vector3.forward)); //applying jitter pos += jitter * spaceSettings.jitterMultiplier; //calculating size from pos float value = noise.evaluate(pos * spaceSettings.samplingResolution); //creating solar system if valid if (value <= 0.5 && bounds.Contains(pos)) { SolarSystemMaker ssm = new SolarSystemMaker(pos); } } } } }
float getAltitudeFromNoiseLayer(NoiseSettings layer, Vector3 pointOnUnitSphere) { float altitude = 0; float frequency = layer.baseRoughness; float amplitude = 1; for (int i = 0; i < layer.numLayers; i++) { float v = noise.evaluate(pointOnUnitSphere * frequency + layer.center); altitude += v * amplitude; frequency *= layer.roughness; amplitude *= layer.persistance; } altitude = Mathf.Max(0, altitude - layer.flatThreshold); altitude *= layer.strength; return(altitude); }