Exemplo n.º 1
0
 public Renderer(Mesher mesher, TriRunner settings)
 {
     _mesher      = mesher;
     _settings    = settings;
     _vertexColor = settings.VertexColoredMat;
     _textured    = settings.TexturedMat;
 }
Exemplo n.º 2
0
        /*
         * 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;
                    }
                }
            }
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        /// <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;
        }
Exemplo n.º 13
0
 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);
 }