Example #1
0
    // - Update -
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) || (autoUdpate && (noisePerformanceTestLoopTimes != lastNoisePerformanceTestLoopTimes || noiseSource != lastNoiseSource || seed != lastSeed || octaves != lastOctaves || frequency != lastFrequency || amplitude != lastAmplitude || persistance != lastPersistance || lacunarity != lastLacunarity || maxNoiseHeight != lastMaxNoiseHeight || offset != lastOffset || noiseScale != lastNoiseScale || zoom != lastZoom || noiseResolution != lastNoiseResolution || gridSize != lastGridSize || lastUseRenderTextureForDrawingTexture != useRenderTextureForDrawingTexture || side != lastSide || quarter != lastQuarter || enableHeight != lastEnableHeight)))
        {
            if (noiseSource != Noise.NoiseSource.GPU_RenderTexture)
            {
                DrawNoiseToPlane();
            }
            else
            {
                DrawNoiseToPlaneGPURenderTexture();
            }

            //if (lastNoiseResolution != noiseResolution) {
            if (lastGridSize != gridSize)
            {
                SetMeshGrid(gridSize);
                originalVertices = (Vector3[])mf.mesh.vertices.Clone();
            }

            if (enableHeight)
            {
                AddHeightToPlane();
            }
            else
            {
                ClearPlaneHeight();
            }

            lastNoisePerformanceTestLoopTimes = noisePerformanceTestLoopTimes;
            lastNoiseSource     = noiseSource;
            lastSeed            = seed;
            lastOctaves         = octaves;
            lastFrequency       = frequency;
            lastAmplitude       = amplitude;
            lastPersistance     = persistance;
            lastLacunarity      = lacunarity;
            lastMaxNoiseHeight  = maxNoiseHeight;
            lastOffset          = offset;
            lastNoiseScale      = noiseScale;
            lastZoom            = zoom;
            lastNoiseResolution = noiseResolution;
            lastGridSize        = gridSize;
            lastSide            = side;
            lastQuarter         = quarter;
            lastEnableHeight    = enableHeight;
            lastUseRenderTextureForDrawingTexture = useRenderTextureForDrawingTexture;
        }
    }
Example #2
0
 float[,] GenerateHeightMap(GPUNoiseGenerator.Side side, string quarter)
 {
     GPUNoiseGenerator.NoiseData noise = new GPUNoiseGenerator.NoiseData {
         frequency      = 1,
         octaves        = octaves,
         side           = side,
         quarter        = quarter,
         persistence    = biomes[currentBiome].persistance,
         lacunarity     = biomes[currentBiome].lacunarity,
         maxNoiseHeight = 1,
         amplitude      = 1,
         resolution     = noiseResolution
     };
     return(Noise.GenerateNoiseMap(seed, offset, noise, 1, Noise.NoiseSource.Unity));
 }
Example #3
0
    // Generate Planet LOD
    public GameObject GeneratePlanetChunk(string name, int gridSize, Vector3 position, string side = "")
    {
        Mesh      chunkMesh = null;
        Texture2D texture;

        float[,] heightMap;
        Material[] materials;
        Material[] debugMaterial = new Material[1];

        // Jos full niin pitää kaikki sivut generoida
        if (side[0] == 'F')
        {
            // TODO: LOD Full planet generation
            #region
            return(new GameObject(name));

            /*
             * // Luo planeetan spherical cube mesh
             * gridSize = Mathf.RoundToInt(gridSize);// * 0.41f);
             * chunkMesh = GenerateSphericalMesh(gridSize, side);
             *
             * // Sitten aletaan tehdä maastoa
             * materials = new Material[6];
             * for (int i = 0; i < 6; ++i) {
             *
             *  texture = GenerateTexture(CHMapArea, gridSize);
             *  materials[i] = GenerateMaterial(texture);
             *  terrainMesh = GenerateTerrainMesh(CHMap);      // color/heightmapin pohjalta tehdään muodot
             *  GenerateChunkTerrain(chunkMesh, terrainMesh);      // yhdistää pallon ja maaston
             *
             * }
             */
            #endregion
        }
        // Generoidaan yksi sivu tai quarter
        else
        {
            //gridSize = gridSize - 1;
            chunkMesh = GenerateSphericalMesh(Mathf.RoundToInt(gridSize), planetSize, side); // generoi spherical meshen

            //texture = GenerateTexture(CHMap, gridSize);        // josta tehään tekstuuri

            //terrainVertices = GenerateTerrainVertices(CHMap, side, gridSize); // heightmapin pohjalta tehdään muodot

            GPUNoiseGenerator.Side s = GPUNoiseGenerator.Side.Bottom;
            switch (side.Substring(0, 1))
            {
            case "0":
                s = GPUNoiseGenerator.Side.Bottom;
                break;

            case "1":
                s = GPUNoiseGenerator.Side.Left;
                break;

            case "2":
                s = GPUNoiseGenerator.Side.Front;
                break;

            case "3":
                s = GPUNoiseGenerator.Side.Right;
                break;

            case "4":
                s = GPUNoiseGenerator.Side.Top;
                break;

            case "5":
                s = GPUNoiseGenerator.Side.Back;
                break;
            }
            heightMap = GenerateHeightMap(s, side.Substring(0, side.Length - 1));

            GenerateChunkTerrain(chunkMesh, heightMap);      // yhdistää pallon ja maaston


            // [ - DEBUG - ]
            Texture2D noiseTexture = TextureGenerator.TextureFromHeightMap(heightMap);
            Texture2D colorTexture = TextureGenerator.TextureFromColorMap(GenerateColorMap(heightMap, heightMap.GetLength(0)), heightMap.GetLength(0), heightMap.GetLength(1));

            noiseTaulu.material.mainTexture = colorTexture;
            //debugMaterial[0] = noiseTaulu.material;
            // [ --------- ]

            materials = new Material[1];
            //materials[0] = GenerateMaterial(noiseTexture); //  <- Generoi materiaalin -- laitto kyllä tässä vaan tekstuurin materiaaliin
            materials[0] = noiseTaulu.material;
        }


        return(GeneratePlanetChunkObj(side, position, chunkMesh, chunkMesh, materials, gridSize)); //new Material[0], gridSize);
    }