// - 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; } }
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)); }
// 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); }