private void GenerateOceanMesh() { // Remove old chunks if (parentOceanChunks) { DestroyImmediate(parentOceanChunks.gameObject); } if (!shapeSettings.ocean) { return; } if (!parentOceanChunks) { parentOceanChunks = new GameObject("Ocean Chunks").transform; parentOceanChunks.parent = transform; } if (shapeGenerator == null) { Debug.LogError("no shape generator"); } ocean = new PlanetMeshChunkRenderer(parentOceanChunks, shapeGenerator, PlanetMeshChunkRenderer.ShapeType.Sphere); }
private void GenerateTerrainMesh() { // Remove old chunks if (parentTerrainChunks) { DestroyImmediate(parentTerrainChunks.gameObject); } if (!parentTerrainChunks) { parentTerrainChunks = new GameObject("Terrain Chunks").transform; parentTerrainChunks.parent = transform; } if (shapeGenerator == null) { Debug.LogError("no shape generator"); } terrain = new PlanetMeshChunkRenderer(parentTerrainChunks, shapeGenerator, PlanetMeshChunkRenderer.ShapeType.Noise); }
public void Create(PlanetMeshChunkRenderer _renderer, List <Vector3> _vertices) { texture = new Texture2D(textureResolution, 1); vertices = _vertices; count++; gameObject.name = $"Chunk {count}"; meshRenderer = GetComponent <MeshRenderer>(); meshRenderer.receiveShadows = false; vertices = new List <Vector3> { _vertices[0], _vertices[1], _vertices[2] }; triangles = new List <int>(); var settings = _renderer.shapeSettings; if (_renderer.shapeType == PlanetMeshChunkRenderer.ShapeType.Noise) { meshRenderer.material = settings.terrainMaterial; } if (_renderer.shapeType == PlanetMeshChunkRenderer.ShapeType.Sphere) { meshRenderer.material = settings.oceanMaterial; } var chunkTriangles = settings.chunkTriangles; if (_renderer.shapeType == PlanetMeshChunkRenderer.ShapeType.Sphere) { chunkTriangles = settings.oceanTriangles; } SubdivideFace(0, 1, 2, chunkTriangles); var radius = settings.radius; //var renderOffset = settings.renderOffset; var renderOffset = Vector3.zero; for (int i = 0; i < vertices.Count; i++) { vertices[i] = vertices[i].normalized; switch (_renderer.shapeType) { case PlanetMeshChunkRenderer.ShapeType.Noise: Vector3 seaLevel = vertices[i] * radius * (1 + settings.oceanDepth); float elevation = _renderer.shapeGenerator.CalculateAdditionalElevation(vertices[i]) * _renderer.shapeGenerator.amplitude; vertices[i] = renderOffset + seaLevel + vertices[i] * elevation; _renderer.shapeGenerator.elevationMinMax.AddValue((1 + settings.oceanDepth) * radius + elevation); break; case PlanetMeshChunkRenderer.ShapeType.Sphere: vertices[i] = renderOffset + vertices[i] * radius * (1 + settings.oceanDepth); break; } } mesh = new Mesh(); GetComponent <MeshFilter>().sharedMesh = mesh; mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.normals = vertices.Select(s => s.normalized).ToArray(); gameObject.SetActive(false); }