public Renderer(Mesher mesher, TriRunner settings) { _mesher = mesher; _settings = settings; _vertexColor = settings.VertexColoredMat; _textured = settings.TexturedMat; }
/* * public void Render(MicroMap map, TriRunner renderSettings) * { * //Break map to visualization chunks (rounded to ChunkSize) * var microBounds = map.Bounds; * var chunkMin = new Vector2i(SnapDown(microBounds.Min.X, ChunkSize), SnapDown(microBounds.Min.Z, ChunkSize)); * var chunkMax = new Vector2i(SnapUp(microBounds.Max.X, ChunkSize), SnapUp(microBounds.Max.Z, ChunkSize)); * * for (int x = chunkMin.X; x < chunkMax.X; x += ChunkSize) * { * for (int z = chunkMin.Z; z < chunkMax.Z; z += ChunkSize) * { * var meshGO = new GameObject("MicroMapChunk"); * var filter = meshGO.AddComponent<MeshFilter>(); * var renderer = meshGO.AddComponent<MeshRenderer>(); * meshGO.transform.SetParent(GetMeshRoot()); * * var chunkBound = new Bounds2i(new Vector2i(x, z), ChunkSize, ChunkSize ); * var chunkMesh = _mesher.CreateMesh(map, chunkBound, renderSettings); * * filter.mesh = chunkMesh.Item1; * var texturedMat = new Material(_textured); * texturedMat.mainTexture = chunkMesh.Item2; * renderer.material = texturedMat; * } * } * } */ public void Render2(MicroMap map, TriRunner renderSettings) { Assert.IsTrue(renderSettings.RenderMode != TerrainRenderMode.Macro); //Break map to render chunks (rounded to ChunkSize) var microBounds = map.Bounds; var chunkMin = new Vector2i(SnapDown(microBounds.Min.X, ChunkSize), SnapDown(microBounds.Min.Z, ChunkSize)); var chunkMax = new Vector2i(SnapUp(microBounds.Max.X, ChunkSize), SnapUp(microBounds.Max.Z, ChunkSize)); //Iterate and generate render chunks for (int x = chunkMin.X; x < chunkMax.X; x += ChunkSize) { for (int z = chunkMin.Z; z < chunkMax.Z; z += ChunkSize) { var meshGO = new GameObject("MicroMapChunk"); meshGO.transform.SetParent(GetMeshRoot()); var chunkBound = new Bounds2i(new Vector2i(x, z), ChunkSize, ChunkSize); var chunkMeshes = renderSettings.RenderMode == TerrainRenderMode.Blocks ? _mesher.CreateMinecraftMesh(map, chunkBound, renderSettings) : _mesher.CreateTerrainMesh(map, chunkBound, renderSettings); //optimize todo implement single mesh mode for simple chunk (no caves) { var baseMeshGO = new GameObject("BaseMesh"); var baseFilter = baseMeshGO.AddComponent <MeshFilter>(); var baseRenderer = baseMeshGO.AddComponent <MeshRenderer>(); baseMeshGO.transform.SetParent(meshGO.transform); var underMeshGO = new GameObject("UnderMesh"); var underFilter = underMeshGO.AddComponent <MeshFilter>(); var underRenderer = underMeshGO.AddComponent <MeshRenderer>(); underMeshGO.transform.SetParent(meshGO.transform); var mainMeshGO = new GameObject("MainMesh"); var mainFilter = mainMeshGO.AddComponent <MeshFilter>(); var mainRenderer = mainMeshGO.AddComponent <MeshRenderer>(); mainMeshGO.transform.SetParent(meshGO.transform); baseFilter.mesh = chunkMeshes.Base.Item1; var baseTexturedMat = new Material(_textured); baseTexturedMat.mainTexture = chunkMeshes.Base.Item2; baseRenderer.material = baseTexturedMat; underFilter.mesh = chunkMeshes.Under.Item1; var underTexturedMat = new Material(_textured); underTexturedMat.mainTexture = chunkMeshes.Under.Item2; underRenderer.material = underTexturedMat; mainFilter.mesh = chunkMeshes.Main.Item1; var mainTexturedMat = new Material(_textured); mainTexturedMat.mainTexture = chunkMeshes.Main.Item2; mainRenderer.material = mainTexturedMat; } } } }
public void Render(MacroMap map, TriRunner renderSettings) { var mesh = _mesher.CreateMacroMesh(map, renderSettings.MacroCellInfluenceVisualization); var meshGO = new GameObject("MacroMap"); var filter = meshGO.AddComponent <MeshFilter>(); filter.mesh = mesh; var renderer = meshGO.AddComponent <MeshRenderer>(); renderer.sharedMaterial = _vertexColor; meshGO.transform.SetParent(GetMeshRoot()); }
public BaseZoneGenerator(MacroMap macroMap, IEnumerable <Cell> zoneCells, int id, BiomeSettings biome, TriRunner settings) { _macroMap = macroMap; _settings = settings; _random = new Random(unchecked (settings.Seed + id)); _microReliefNoise = new FastNoise(_random.Seed); _microReliefNoise.SetFrequency(1); _resourcesNoise = new FastNoise(_random.Seed); _resourcesNoise.SetFrequency(0.05); Assert.IsTrue(zoneCells.All(c => c.ZoneId == id)); Zone = new Macro.Zone(_macroMap, _macroMap.GetSubmesh(zoneCells), id, biome, settings); }
public MacroMap(TriRunner settings, Random random) { _settings = settings; _random = random; _bounds = settings.LandBounds; _side = settings.CellSide; GenerateGrid(); Heights = new float[Vertices.Count]; Bounds = _mesh.Bounds; EmptyInfluence = new double[_settings.Biomes.Length]; _influenceTurbulance = new FastNoise(random.Seed); _influenceTurbulance.SetFrequency(settings.InfluencePerturbFreq); _influenceTurbulancePower = settings.InfluencePerturbPower; }
public MicroMap(MacroMap macromap, TriRunner settings) { Bounds = (Bounds2i)macromap.Bounds; _macromap = macromap; _settings = settings; Cells = new Cell[macromap.Cells.Count]; for (var i = 0; i < macromap.Cells.Count; i++) { var macroCell = macromap.Cells[i]; var microCell = new Cell(macroCell, this); Cells[i] = microCell; } _heightMap = new Heights[Bounds.Size.X + 1, Bounds.Size.Z + 1]; _blocks = new Blocks[Bounds.Size.X, Bounds.Size.Z]; Debug.LogFormat("Generated micromap {0} x {1} = {2} blocks", Bounds.Size.X, Bounds.Size.Z, Bounds.Size.X * Bounds.Size.Z); }
public MacroMap CreateMacroMap(TriRunner settings) { var timer = Stopwatch.StartNew(); var result = new MacroMap(settings, _random); var zoneGenerators = RandomClusterZonesDivider(result, settings); foreach (var generator in zoneGenerators) { result.Generators.Add(generator); var zone = generator.GenerateMacroZone(); result.Zones.Add(zone); } timer.Stop(); Debug.LogFormat("Created macromap in {0} msec", timer.ElapsedMilliseconds); CheckMacroHeightFunctionQuality(result); return(result); }
public MountainsGenerator(MacroMap macroMap, IEnumerable <Cell> zoneCells, int id, BiomeSettings biome, TriRunner settings) : base(macroMap, zoneCells, id, biome, settings) { Assert.IsTrue(biome.Type == BiomeType.Mountain); _microReliefNoise = new FastNoise(_random.Seed); _microReliefNoise.SetFrequency(1); }
public Zone(MacroMap mesh, MacroMap.CellMesh.Submesh cells, int id, BiomeSettings biome, TriRunner settings) { _mesh = mesh; Submesh = cells; Id = id; Biome = biome; Influence = new Influence(id); }
public DesertGenerator(MacroMap macroMap, IEnumerable <Cell> zoneCells, int id, BiomeSettings biome, TriRunner settings) : base(macroMap, zoneCells, id, biome, settings) { Assert.IsTrue(biome.Type == BiomeType.Desert); _dunesNoise = new FastNoise(_random.Seed); _dunesNoise.SetFrequency(1); _hillsOrientation = _random.Range(0, 180f); _stoneBlock = settings.AllBlocks.First(b => b.Block == BlockType.Stone); _globalZoneHeight = _random.Range(0, 10); }
public CavesGenerator(MacroMap macroMap, IEnumerable <Cell> zoneCells, int id, BiomeSettings biome, TriRunner settings) : base(macroMap, zoneCells, id, biome, settings) { Assert.IsTrue(biome.Type == BiomeType.Caves); _cavesNoise = new FastNoise(_random.Seed); _cavesNoise.SetFrequency(0.1); }
/// <summary> /// Vertex of macro map /// </summary> /// <param name="map"></param> /// <param name="id"></param> public MacroVert(MacroMap map, MacroMap.CellMesh mesh2, MacroMap.CellMesh.Vertex vertex, TriRunner settings) { Assert.IsTrue(vertex.AdjacentEdges.Count >= 1 && vertex.AdjacentEdges.Count <= 3); Assert.IsTrue(vertex.AdjacentFaces.Count >= 1 && vertex.AdjacentFaces.Count <= 3); _map = map; _mesh2 = mesh2; _vertex = vertex; _biomes = settings.Biomes; //_vertex.Data = this; }
public TestZoneGenerator(MacroMap macroMap, IEnumerable <Cell> zoneCells, int id, BiomeSettings biome, TriRunner settings) : base(macroMap, zoneCells, id, biome, settings) { Assert.IsTrue(biome.Type >= BiomeType.TestBegin && biome.Type <= BiomeType.TestEnd); _generator = new FastNoise(unchecked (settings.Seed + id)); _generator.SetFrequency(1); }