Example #1
0
 public bool ShouldPlaceTree(Vector3 point)
 {
     this.settings.baseRoughness = 3f;
     this.settings.numLayers     = 2f;
     this.settings.strength      = 2f;
     this.settings.persistance   = 1.6f;
     return(noise.Evaluate(settings, point) <= 0.03f);
 }
Example #2
0
    public void Init(int index)
    {
        ResetMesh();

        int startColumn = planet.columnsPerChunk * index;
        int endColumn   = planet.columnsPerChunk * (index + 1);

        endColumn = Mathf.Min(endColumn, planet.tileColumns);

        for (float i = startColumn; i < endColumn; i++)
        {
            float angle    = (i / planet.tileColumns) * Mathf.PI * 2f;
            float noise    = NoiseFilter.Evaluate(planet.features.noiseFeatures, new Vector2(Mathf.Cos(angle) * planet.radius, Mathf.Sin(angle) * planet.radius));
            int   distance = Mathf.RoundToInt(planet.radius + noise);

            for (int j = distance; j > planet.radius - planet.features.crustThickness; j--)
            {
                Vector2 position = new Vector2(Mathf.Cos(angle) * j, Mathf.Sin(angle) * j);
                Color   color    = planet.features.GetTileColorForHeight(j, distance);
                AddQuadToMesh(position, angle, color);
            }
        }

        UpdateMesh();
    }
Example #3
0
    /// <summary>
    /// Generates the densities of equidistant points in the cell using a noise function.
    /// </summary>
    public void GenerateDensities()
    {
        float stepSize = settings.size / settings.resolution;

        // Loop through all points to generate from the position.
        for (int x = 0; x < settings.resolution + 1; x++)
        {
            for (int y = 0; y < settings.resolution + 1; y++)
            {
                for (int z = 0; z < settings.resolution + 1; z++)
                {
                    Vector3 localPosition = new Vector3(x * stepSize, y * stepSize, z * stepSize);
                    Vector3 worldPosition = new Vector3(x * stepSize + position.x,
                                                        y * stepSize + position.y,
                                                        z * stepSize + position.z);

                    localPoints[x, y, z] = localPosition;
                    worldPoints[x, y, z] = worldPosition;

                    // Calculate noise/density at this point.
                    float density = noise.Evaluate(worldPosition);
                    densities[x, y, z] = density;
                }
            }
        }
    }
Example #4
0
    public void PositionBasedNoise(Transform tr, Vector3 scaler)
    {
        for (var i = 0; i < vertices.Length; i++)
        {
            NoiseSettings test       = new NoiseSettings();
            float         noisePoint = ((noise.Evaluate(tr.TransformPoint(vertices[i]), noiseSettings, true) + 1) * .5f);

            vertices[i] = Vector3.Scale(vertices[i], scaler * (1 + noisePoint));
        }
    }
Example #5
0
    float[,,] GetDeepNoise(float chunkX, float chunkY)
    {
        float[,,] noise = new float[chunkSize, chunkSize, chunkHeight];
        for (int x = 0; x < chunkSize; x++)
        {
            for (int y = 0; y < chunkSize; y++)
            {
                for (int h = 0; h < chunkHeight; h++)
                {
                    float xCoord = (chunkX * chunkSize) + x;
                    float yCoord = (chunkY * chunkSize) + y;
                    float hCoord = h;

                    noise[x, y, h] = noiseFilter.Evaluate(new Vector3(xCoord * noiseScale, hCoord * noiseScale, yCoord * noiseScale));
                }
            }
        }
        return(noise);
    }
Example #6
0
    public void PopulateTiles()
    {
        NoiseFilter noise = new NoiseFilter(new NoiseSettings());

        foreach (Tile tile in tiles)
        {
            Vector3 center = tile.face.Center.normalized;
            float   value  = noise.Evaluate(center);

            if (value < mapSettings.percentLand)
            {
                tile.type = tileSettings.LAND;
            }
            else
            {
                tile.type = tileSettings.OCEAN;
            }
        }
    }
    public void Generate(WorldSettings aWorldSettings, SystemSettings aSystemSettings)
    {
        // Initialise
        transform.position = Vector3.zero;
        worldSettings      = aWorldSettings;
        systemSettings     = aSystemSettings;
        sphereCreator      = new SphereCreator(worldSettings);
        noiseFilter        = new NoiseFilter(worldSettings.noiseSettings);

        // Generate World
        mesh = sphereCreator.CreateSphere();

        foreach (Vertice vertice in mesh.vertices)
        {
            float height = noiseFilter.Evaluate(vertice.position);
            vertice.height = height;
        }

        GetComponent <MeshFilter>().mesh = mesh.Render();
    }
Example #8
0
 private Vector3 PointOnPlanet(Vector3 pointOnUnitSphere, out float elevation)
 {
     elevation = _radious * (1 + _noiseFilter.Evaluate(pointOnUnitSphere));
     return(pointOnUnitSphere * elevation);
 }
Example #9
0
 public float getNoise(Vector3 pointOnUnitSphere)
 {
     return(noiseFilter.Evaluate(noiseSettings, pointOnUnitSphere));
 }
Example #10
0
    public void Generate(Tile tile)
    {
        if (tile.Layer < terrainSettings.renderLayer)
        {
            throw new ArgumentException("Tile cannot be rendered with current render layer.");
        }
        if (tile.Layer > terrainSettings.renderLayer)
        {
            foreach (Tile child in tile.Values)
            {
                Generate(child);
            }
            return;
        }

        //TODO: Split meshes into different class
        //      Group objects by layer
        //      Hexes do not line up at higher layers. Angle and sizing is slightly off.
        GameObject   gameObject   = new GameObject();
        MeshFilter   meshFilter   = gameObject.AddComponent <MeshFilter>();
        MeshRenderer meshRenderer = gameObject.AddComponent <MeshRenderer>();
        Vector3      position     = tile.Position();

        Vector3[] vertices  = new Vector3[7];
        int[]     triangles = new int[18];

        float distanceMultiple = Mathf.Pow(Mathf.Sqrt(7), tile.Layer);
        float degree_offset    = (tile.Layer * 19.11f) - 30;
        float noise            = noiseFilter.Evaluate(position.x, position.z);

        vertices[0] = new Vector3(position.x, noise, position.z);
        for (int i = 0; i < 6; i++)
        {
            float multiple = Mathf.Pow(2.65f, tile.Layer);
            float degrees  = (60 * i) + degree_offset;
            float radians  = Mathf.PI / 180 * degrees;
            float posX     = position.x + multiple * Mathf.Cos(radians);
            float posZ     = position.z + multiple * Mathf.Sin(radians);
            float posY     = noiseFilter.Evaluate(posX, posZ);
            vertices[i + 1] = new Vector3(posX, posY, posZ);
        }

        int index = 0;

        for (int j = 1; j < 7; j++)
        {
            triangles[index++] = 0;
            if (j != 6)
            {
                triangles[index++] = j + 1;
            }
            else
            {
                triangles[index++] = 1;
            }
            triangles[index++] = j;
        }

        gameObject.name             = tile.ToString();
        gameObject.transform.parent = world.transform;
        meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));

        Mesh mesh = new Mesh();

        mesh.vertices  = vertices;
        mesh.triangles = triangles;
        mesh.RecalculateNormals();

        meshFilter.sharedMesh = mesh;
    }
    public Vector3 CalculatePointOnPlanet(Vector3 pointOnUnitSphere)
    {
        float elevation = noiseFilter.Evaluate(pointOnUnitSphere);

        return(pointOnUnitSphere * settings.radius * (1 + elevation));
    }
Example #12
0
    public Vector3 CalculatePointOnSphere(Vector3 pointOnUnitSphere)
    {
        var evaluation = noiseFilter.Evaluate(pointOnUnitSphere);

        return(pointOnUnitSphere * settings.sphereRadius * (1 + evaluation));
    }
    public Vector3 calcPoint(Vector3 pointOnSphere)
    {
        float elevation = noiseFilter.Evaluate(pointOnSphere);

        return(pointOnSphere * settings.SphereRadius * (1 + elevation));
    }
    public Vector3 CalculatePointOnAsteroid(Vector3 pointOnUnitshpere)
    {
        float noisyElevation = noiseFilter.Evaluate(pointOnUnitshpere);

        return(pointOnUnitshpere * shapeSettings.asteroidRadius * (1 + noisyElevation));
    }