Пример #1
0
    public void CreateHeightMap()
    {
        // Set up noise
        rigged = new RiggedMultifractal(frequency, lacunarity, octaves, seed, quality);
        perlin = new Perlin(frequency, lacunarity, persistence, octaves, seed, quality);
        billow = new Billow(frequency, lacunarity, persistence, octaves, seed, quality);

        //ModuleBase moduleBase = perlin;

        // Apply noise to the meshes
        foreach (Transform child in transform)
        {
            MeshFilter meshFilter = child.GetComponent <MeshFilter> ();
            Vector3[]  vertices   = meshFilter.sharedMesh.vertices;
            Vector3[]  normals    = meshFilter.sharedMesh.normals;

            Color[] colorMap = new Color[vertices.Length];

            for (int i = 0; i < vertices.Length; i++)
            {
                float magnitude = (float )perlin.GetValue(vertices[i].x / scale, vertices[i].y / scale, vertices[i].z / scale);
                //float magnitude = (float )rigged.GetValue(vertices[i].x / scale, vertices[i].y / scale, vertices[i].z / scale);
                vertices [i] = Vector3.MoveTowards(vertices [i], (vertices [i] + normals [i]), magnitude * heightMultiplier);
                colorMap [i] = gradient.Evaluate((magnitude + 1) * 0.5f);
            }

            meshFilter.sharedMesh.vertices = vertices;
            meshFilter.sharedMesh.colors   = colorMap;
            meshFilter.sharedMesh.RecalculateNormals();
        }
    }
Пример #2
0
    private ModuleBase chooseModuleBase(NoiseType moduleType)
    {
        ModuleBase moduleBase;

        switch (moduleType)
        {
        case NoiseType.Billow:
            moduleBase = new Billow();
            break;

        case NoiseType.RiggedMultifractal:
            moduleBase = new RiggedMultifractal();
            break;

        case NoiseType.Voronoi:
            moduleBase = new Voronoi();
            break;

        case NoiseType.Checker:
            moduleBase = new Checker();
            break;

        case NoiseType.Cylinders:
            moduleBase = new Cylinders();
            break;

        case NoiseType.Spheres:
            moduleBase = new Spheres();
            break;

        case NoiseType.Mix:
            Perlin             perlin = new Perlin();
            RiggedMultifractal rigged = new RiggedMultifractal();
            moduleBase = new Add(perlin, rigged);
            break;


        case NoiseType.RiggedMChecker:
            Checker            checker = new Checker();
            RiggedMultifractal rigged2 = new RiggedMultifractal();
            moduleBase = new Add(checker, rigged2);
            break;

        default:
            moduleBase = new Perlin();
            break;
        }

        return(moduleBase);
    }
        public override void OnVertexBuildHeight(PQS.VertexBuildData data)
        {
            switch (indexer)
            {
            case Indexer.Billow:
                bill1 = new Billow(frequency, lacunarity, persistence, Convert.ToInt32(octaves), seed, mode);
                if (onlyOnOcean)
                {
                    if (data.vertHeight < internalRadius)
                    {
                        if (bill1.GetValue(data.directionFromCenter) > cutoff)
                        {
                            data.vertHeight += deformity + offset;
                        }
                    }
                }
                if (!onlyOnOcean)
                {
                    if (bill1.GetValue(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight += deformity + offset;
                    }
                }
                if (addNoise)
                {
                    var Simp2 = new Simplex(seed, octaves, persistence, frequency);
                    if (bill1.GetValue(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight = Simp2.noise(data.directionFromCenter) * noiseDeformity;
                    }
                }
                break;

            case Indexer.Perlin:
                perl1 = new Perlin(frequency, lacunarity, persistence, Convert.ToInt32(octaves), seed, mode);
                if (onlyOnOcean)
                {
                    if (data.vertHeight < internalRadius)
                    {
                        if (perl1.GetValue(data.directionFromCenter) > cutoff)
                        {
                            data.vertHeight += deformity + offset;
                        }
                    }
                }
                if (!onlyOnOcean)
                {
                    if (perl1.GetValue(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight += deformity + offset;
                    }
                }
                if (addNoise)
                {
                    var Simp2 = new Simplex(seed, octaves, persistence, frequency);
                    if (perl1.GetValue(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight = Simp2.noise(data.directionFromCenter) * noiseDeformity;
                    }
                }
                break;

            case Indexer.RiggedMultifractal:
                rig1 = new RiggedMultifractal(frequency, lacunarity, Convert.ToInt32(octaves), seed, mode);
                if (onlyOnOcean)
                {
                    if (data.vertHeight < internalRadius)
                    {
                        if (rig1.GetValue(data.directionFromCenter) > cutoff)
                        {
                            data.vertHeight += deformity + offset;
                        }
                    }
                }
                if (!onlyOnOcean)
                {
                    if (rig1.GetValue(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight += deformity + offset;
                    }
                }

                if (addNoise)
                {
                    var Simp2 = new Simplex(seed, octaves, persistence, frequency);
                    if (rig1.GetValue(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight = Simp2.noise(data.directionFromCenter) * noiseDeformity;
                    }
                }
                break;

            case Indexer.Simplex:
                simp1 = new Simplex(seed, octaves, persistence, frequency);
                if (onlyOnOcean)
                {
                    if (data.vertHeight < internalRadius)
                    {
                        if (simp1.noise(data.directionFromCenter) > cutoff)
                        {
                            data.vertHeight += deformity + offset;
                        }
                    }
                }
                if (!onlyOnOcean)
                {
                    if (simp1.noise(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight += deformity + offset;
                    }
                }
                if (addNoise)
                {
                    var Simp2 = new Simplex(seed, octaves, persistence, frequency);
                    if (simp1.noise(data.directionFromCenter) > cutoff)
                    {
                        data.vertHeight = Simp2.noise(data.directionFromCenter) * noiseDeformity;
                    }
                }
                break;
            }
        }