Beispiel #1
0
        public void Start()
        {
            TaskUtils.SetGlobalMultithreading(false);
            var heightTex = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\smallCut.png", 240, 240,
                                                                     TextureFormat.RGBA32, true, true);

            _currentHeightmap = HeightmapUtils.CreateHeightmapArrayFromTexture(heightTex);

            MyArrayUtils.Normalize(_currentHeightmap.HeightmapAsArray);
            MyArrayUtils.InvertNormalized(_currentHeightmap.HeightmapAsArray);

            //for (int x = 0; x < 40; x++)
            //{
            //    for (int y = 0; y < 40; y++)
            //    {
            //        _currentHeightmap.HeightmapAsArray[90+x, 90+y] = 0;
            //    }
            //}

            CreateComparisionObject();
            MyArrayUtils.Multiply(_currentHeightmap.HeightmapAsArray, 400);


            Mei_RenderComputeShader();
        }
        public ColorPaletteFile LoadColorPaletteFile()
        {
            var texSize = _configuration.TextureSize;
            var tex     = SavingFileManager.LoadPngTextureFromFile(_configuration.FilePath, texSize.X,
                                                                   texSize.Y, TextureFormat.ARGB32, true, false);

            var oneLineCount   = Mathf.Min(_configuration.MaxOneLineColorCount, texSize.X);
            var outColorArrays = new List <List <Color> >();

            for (int y = 0; y < texSize.Y; y++)
            {
                var oneLineList = new List <Color>();
                for (int x = 0; x < oneLineCount; x++)
                {
                    var color = tex.GetPixel(x, (texSize.Y - 1) - y);
                    if (!color.Equals(_configuration.EmptyColor))
                    {
                        oneLineList.Add(color);
                    }
                }
                outColorArrays.Add(oneLineList);
            }
            GameObject.Destroy(tex);
            return(new ColorPaletteFile(outColorArrays));
        }
Beispiel #3
0
        public void Start_Hydraulic()
        {
            var heightTexture1 =
                SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\temp3.png", 240, 240, TextureFormat.RGBA32, true,
                                                         true);
            var heightmap1 = HeightmapUtils.CreateHeightmapArrayFromTexture(heightTexture1);

            //DiamondSquareCreator creator = new DiamondSquareCreator(new RandomProvider(22));
            //var heightmap2 = creator.CreateDiamondSquareNoiseArray(new IntVector2(240, 240), 64);
            //MyArrayUtils.Multiply(heightmap2.HeightmapAsArray, 0.1f);

            var tParam = EroderDebugObject.CalculateFromHillFactor(1, new ArrayExtremes(0, 5000), 24);

            var extents = MyArrayUtils.CalculateExtremes(heightmap1.HeightmapAsArray);

            MyArrayUtils.Normalize(heightmap1.HeightmapAsArray);

            var erodedArrays = GenerateHydraulicErodedArrays(heightmap1, new List <HydraulicEroderConfiguration>()
            {
                new HydraulicEroderConfiguration()
                {
                    StepCount                  = 40,
                    NeighbourFinder            = NeighbourFinders.Big9Finder,
                    kr_ConstantWaterAddition   = 0.001f,
                    ks_GroundToSedimentFactor  = 1f,
                    ke_WaterEvaporationFactor  = 0.05f,
                    kc_MaxSedimentationFactor  = 0.8f,
                    FinalSedimentationToGround = true,
                    WaterGenerator             = HydraulicEroderWaterGenerator.AllFrames,
                    DestinationFinder          = HydraulicEroderWaterDestinationFinder.OnlyBest
                },
            });

            CreateTestObject(heightmap1, erodedArrays);
        }
        public void Start()
        {
            var heightmapTextureSize = new IntVector2(3600, 3600);
            var rgbaMainTexture      = SavingFileManager.LoadPngTextureFromFile(_filePathsConfiguration.HeightmapFilePath,
                                                                                heightmapTextureSize.X, heightmapTextureSize.Y, TextureFormat.ARGB32, true, false);

            TerrainTextureFormatTransformator transformator =
                new TerrainTextureFormatTransformator(_gameInitializationFields.Retrive <CommonExecutorUTProxy>());
            var globalHeightTexture = transformator.EncodedHeightTextureToPlain(new TextureWithSize()
            {
                Size    = heightmapTextureSize,
                Texture = rgbaMainTexture
            });

            if (true)
            {
                _gameInitializationFields.SetField(new TerrainDetailAlignmentCalculator(240));

                TerrainDetailGenerator terrainDetailGenerator =
                    CreateTerrainDetailGenerator(
                        globalHeightTexture,
                        _gameInitializationFields.Retrive <UTTextureRendererProxy>(),
                        _gameInitializationFields.Retrive <CommonExecutorUTProxy>(),
                        _gameInitializationFields.Retrive <UnityThreadComputeShaderExecutorObject>(),
                        _gameInitializationFields.Retrive <ComputeShaderContainerGameObject>());

                var commonExecutorUtProxy = _gameInitializationFields.Retrive <CommonExecutorUTProxy>();

                TerrainDetailProvider terrainDetailProvider =
                    CreateTerrainDetailProvider(terrainDetailGenerator, commonExecutorUtProxy);


                var terrainDetailFileManager =
                    new TerrainDetailFileManager(_configuration.TerrainDetailCachePath, commonExecutorUtProxy);
                var terrainShapeDb = CreateTerrainShapeDb(terrainDetailProvider
                                                          , commonExecutorUtProxy
                                                          , _gameInitializationFields.Retrive <TerrainDetailAlignmentCalculator>()
                                                          , _configuration.TerrainShapeDbConfiguration.MergeTerrainDetail
                                                          , _configuration.TerrainShapeDbConfiguration.UseTextureSavingToDisk
                                                          , _configuration.TerrainShapeDbConfiguration.UseTextureLoadingFromDisk, terrainDetailFileManager);

                TerrainShapeDbProxy terrainShapeDbProxy = new TerrainShapeDbProxy(terrainShapeDb);
                var baseTerrainDetailProvider           = BaseTerrainDetailProvider.CreateFrom(terrainShapeDb);
                _gameInitializationFields.SetField(baseTerrainDetailProvider);
                terrainDetailGenerator.SetBaseTerrainDetailProvider(baseTerrainDetailProvider);

                _ultraUpdatableContainer.AddOtherThreadProxy(terrainShapeDbProxy);

                _gameInitializationFields.SetField(terrainShapeDbProxy);
            }
            else
            {
                ITerrainShapeDb terrainShapeDbProxy = new DebugSlopedTerrainShapeDb(
                    _gameInitializationFields.Retrive <UTTextureRendererProxy>()
                    );

                terrainShapeDbProxy = new RecordingTerrainShapeDb(terrainShapeDbProxy);
                _gameInitializationFields.SetField((RecordingTerrainShapeDb)terrainShapeDbProxy);
            }
        }
Beispiel #5
0
        public Grass2SingledBillboardClan Load(string rootPath, IntVector2 billboardImageSize)
        {
            var pathGenerator = new Grass2BillboardClanFilesManagerPathGenerator(rootPath);
            var infoFile      =
                JsonUtility.FromJson <Grass2BillboardInfoJson>(File.ReadAllText(pathGenerator.CreateInfoFilePath()));

            var billboardsList = new List <DetailedGrass2SingleBillboard>();

            int i = 0;

            foreach (var bladesCount in infoFile.BladesCountList)
            {
                var tex = SavingFileManager.LoadPngTextureFromFile(pathGenerator.CreateBillboardFilePath(i),
                                                                   billboardImageSize.X, billboardImageSize.Y, TextureFormat.ARGB32, true, true);
                tex.filterMode = FilterMode.Point;
                tex.wrapMode   = TextureWrapMode.Clamp;

                billboardsList.Add(new DetailedGrass2SingleBillboard()
                {
                    BladesCount = bladesCount,
                    Texture     = tex
                });
                i++;
            }

            return(new Grass2SingledBillboardClan()
            {
                BillboardsList = billboardsList
            });
        }
Beispiel #6
0
        public void Start_Mai()
        {
            var heightTexture1 = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\smallCut.png", 240,
                                                                          240, TextureFormat.RGBA32, true, true);
            var heightmap1 = HeightmapUtils.CreateHeightmapArrayFromTexture(heightTexture1);

            //DiamondSquareCreator creator = new DiamondSquareCreator(new RandomProvider(22));
            //var heightmap2 = creator.CreateDiamondSquareNoiseArray(new IntVector2(240, 240), 64);
            //MyArrayUtils.Multiply(heightmap2.HeightmapAsArray, 0.1f);
            HeightmapArray workingHeightmap = LoadHeightmapFromTextureFile(@"C:\inz\cont\temp3.png");

            MyArrayUtils.Normalize(workingHeightmap.HeightmapAsArray);
            MyArrayUtils.InvertNormalized(workingHeightmap.HeightmapAsArray);

            var generatedArrays = GenerateErodedArrays(workingHeightmap, new List <MeiHydraulicEroderConfiguration>()
            {
                new MeiHydraulicEroderConfiguration()
                {
                    StepCount           = 10,
                    A_PipeCrossSection  = 0.00005f,
                    ConstantWaterAdding = 1 / 16f,
                    GravityAcceleration = 9.81f,
                    DeltaT                   = 1 / 60f,
                    DepositionConstant       = 0.0001f * 12 * 10f,
                    DissolvingConstant       = 0.0001f * 12 * 10f,
                    EvaporationConstant      = 0.00011f * 0.5f * 10,
                    GridSize                 = new Vector2(1, 1),
                    L_PipeLength             = 1,
                    SedimentCapacityConstant = 25000
                },
            });

            CreateTestObject(workingHeightmap, generatedArrays);
        }
Beispiel #7
0
        public async Task <TextureWithSize> RetriveHeightDetailElementAsync(string filename)
        {
            IntVector2 textureSize = new IntVector2(241, 241);
            var        path        = _mainDictionaryPath + filename + _extension;

            Preconditions.Assert(File.Exists(path), $"Cannot retrive heightDetailElement of path {path} as it does not exist");
            {
                var texture = await _commonExecutor.AddAction(() =>
                {
                    var tex = SavingFileManager.LoadPngTextureFromFile(path, textureSize.X, textureSize.Y,
                                                                       TextureFormat.ARGB32, true, true);
                    tex.wrapMode = TextureWrapMode.Clamp;
                    return(tex);
                });

                var transformator = new TerrainTextureFormatTransformator(_commonExecutor);
                var plainTexture  = await transformator.EncodedHeightTextureToPlainAsync(new TextureWithSize()
                {
                    Texture = texture,
                    Size    = textureSize
                });

                return(new TextureWithSize()
                {
                    Size = textureSize,
                    Texture = plainTexture
                });
            }
        }
        public void Start()
        {
            TaskUtils.SetGlobalMultithreading(false);
            //DiamondSquareCreator creator = new DiamondSquareCreator(new RandomProvider(22));
            //_currentHeightmap = creator.CreateDiamondSquareNoiseArray(_sizeOfTexture, 64);
            //MyArrayUtils.Multiply(_currentHeightmap.HeightmapAsArray, 0.1f);
            var heightTex = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\smallCut.png", 240, 240,
                                                                     TextureFormat.RGBA32, true, true);

            _currentHeightmap = HeightmapUtils.CreateHeightmapArrayFromTexture(heightTex);

            MyArrayUtils.Normalize(_currentHeightmap.HeightmapAsArray);
            MyArrayUtils.InvertNormalized(_currentHeightmap.HeightmapAsArray);

            CreateComparisionObject();
            //MyArrayUtils.Multiply(_currentHeightmap.HeightmapAsArray, 400);

            //float[,] newHeightArray = new float[256,256];
            //for (int x = 0; x < 256; x++)
            //{
            //    for (int y = 0; y < 256; y++)
            //    {
            //        var distance = (new Vector2(x,y) - new Vector2(128, 128)).magnitude;
            //        newHeightArray[x, y] = distance;
            //    }
            //}
            //MyArrayUtils.Normalize(newHeightArray);
            //_currentHeightmap = new HeightmapArray(newHeightArray);

            //Hydraulic_RenderComputeShader();

            Thermal_RenderComputeShader();
            //Hydraulic_RenderComputeShader();
        }
Beispiel #9
0
        public HeightmapArray LoadHeightmapFromTextureFile(string pathToTemplateFile)
        {
            var tex = SavingFileManager.LoadPngTextureFromFile(pathToTemplateFile, 240, 240,
                                                               TextureFormat.ARGB32, false,
                                                               false);

            return(HeightmapUtils.CreateHeightmapArrayFromTexture(tex));
        }
Beispiel #10
0
        public void Start()
        {
            TaskUtils.SetGlobalMultithreading(false);

            var rgbaMainTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\n49_e019_1arc_v3.png", 3600,
                                                                           3600,
                                                                           TextureFormat.ARGB32, true, false);

            MainTexture = _transformator.EncodedHeightTextureToPlainAsync(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = rgbaMainTexture
            }).Result;

            //var heightArray = HeightmapUtils.CreateHeightmapArrayFromTexture(MainTexture);
            //for (int x = 0; x < 5; x++)
            //{
            //    for (int y = 0; y < 5; y++)
            //    {
            //        heightArray.HeightmapAsArray[x, y] = 0.3f;
            //    }
            //}
            //MainTexture = HeightmapUtils.CreateTextureFromHeightmap(heightArray);


            InitializeFields();

            var unitySideLength = 10f;
            var realSideLength  = 240 * 24;
            var metersPerUnit   = realSideLength / unitySideLength;

            _gameObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
            var material = new Material(Shader.Find("Custom/Terrain/Terrain_Debug_Plain"));

            _gameObject.GetComponent <MeshRenderer>().material = material;
            _gameObject.name = "Terrain";
            _gameObject.transform.localRotation = Quaternion.Euler(0, 0, 0);

            //_gameObject.transform.localScale = new Vector3(10, (6500 / metersPerUnit) , 10);
            //_gameObject.transform.localPosition = new Vector3(0 , 0, 0);

            //_gameObject.transform.localScale = new Vector3(10, (6500 / metersPerUnit) * 8, 10);
            //_gameObject.transform.localPosition = new Vector3(0, 0, 0);

            _gameObject.transform.localScale             = new Vector3(10, 1 / 64f * (6500 / metersPerUnit) * 8 * 8, 10);
            _gameObject.transform.localPosition          = new Vector3(0, -30, 0);
            _gameObject.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);

            RegenerateTextures();

            //Camera.main.transform.localPosition = new Vector3(10,2,0);
            //Camera.main.transform.eulerAngles = new Vector3(30,-45,0);
            Camera.main.transform.localPosition = new Vector3(-1, -25, 10);
            Camera.main.transform.eulerAngles   = new Vector3(30, 132, 0);
        }
Beispiel #11
0
 public void Save(string directoryPath, List <TAMTone> tones, List <TAMMipmapLevel> levels, TAMSoleImagesPack pack)
 {
     for (int toneIndex = 0; toneIndex < tones.Count; toneIndex++)
     {
         for (int levelIndex = 0; levelIndex < levels.Count; levelIndex++)
         {
             var image = pack.Columns[tones[toneIndex]][levels[levelIndex]];
             SavingFileManager.SaveTextureToPngFile(directoryPath + CreateFileNameToSoleImage(toneIndex, levelIndex), image);
         }
     }
 }
 public void MyLateOnRenderImage(RenderTexture src, RenderTexture dest)
 {
     if (_requestedScreenshot && (_requestedScreenshotFrame == Time.frameCount))
     {
         var artisticRenderTex = _testingRunner.RenderTargets.ArtisticMainTexture;
         var artisticTex2D     = UltraTextureRenderer.RenderTextureToTexture2D(artisticRenderTex);
         SavingFileManager.SaveTextureToPngFile($"{_measurementsPath}/ArtisticTex.{_testingRunner.RequestedTestFrame}.png", artisticTex2D);
         GameObject.Destroy(artisticTex2D);
         _requestedScreenshot = false;
     }
 }
Beispiel #13
0
        public void StartY()
        {
            var heightTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\smallCut.png", 240,
                                                                         240, TextureFormat.RGBA32, true, true);

            _currentHeightmap = HeightmapUtils.CreateHeightmapArrayFromTexture(heightTexture);
            var array = _currentHeightmap.HeightmapAsArray;

            MyArrayUtils.Multiply(array, 65000);
            var extremes = MyArrayUtils.CalculateExtremes(array);

            Debug.Log("Max: " + extremes.Max + " min: " + extremes.Min);
        }
        public void Start()
        {
            TaskUtils.SetGlobalMultithreading(false);

            var rgbaMainTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\n49_e019_1arc_v3.png", 3600,
                                                                           3600,
                                                                           TextureFormat.ARGB32, true, false);


            TerrainTextureFormatTransformator transformator =
                new TerrainTextureFormatTransformator(new CommonExecutorUTProxy());
            var mainTexture = transformator.EncodedHeightTextureToPlainAsync(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = rgbaMainTexture
            }).Result;


            var gameObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
            var material   = new Material(Shader.Find("Custom/Terrain/Ring1"));

            TerrainAndNormalTexture pair = CreateTerrainAndNormalTexture(mainTexture);

            material.SetTexture("_HeightmapTex", pair.HeightTexture);
            material.SetTexture("_NormalmapTex", pair.NormalTexture);

            gameObject.GetComponent <MeshRenderer>().material = material;
            gameObject.name = "Terrain";
            gameObject.transform.localRotation = Quaternion.Euler(0, 0, 0);

            var unitySideLength = 10f;
            var realSideLength  = 240 * 24;
            var metersPerUnit   = realSideLength / unitySideLength;

            if (_terrainResolution == TerrainCardinalResolution.MIN_RESOLUTION)
            {
                gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit), 10);
                gameObject.transform.localPosition = new Vector3(0, 0, 0);
            }
            else if (_terrainResolution == TerrainCardinalResolution.MID_RESOLUTION)
            {
                gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit) * 8, 10);
                gameObject.transform.localPosition = new Vector3(0, 0, 0);
            }
            else
            {
                gameObject.transform.localScale    = new Vector3(10, (6500 / metersPerUnit) * 8 * 8, 10);
                gameObject.transform.localPosition = new Vector3(0, -30, 0);
            }
            gameObject.GetComponent <MeshFilter>().mesh = PlaneGenerator.CreateFlatPlaneMesh(240, 240);
        }
Beispiel #15
0
        CreateHeightmap_TODO_DELETE(
            HeightmapArray heightmapArray)     //input heightmap has 256x256 map, spans 5,7x5,7km p22.3m real life terrain
        {
            var tessalationRequirementTextureGenerator = new TessalationRequirementTextureGenerator();
            var tessalationReqTexture =
                tessalationRequirementTextureGenerator.GenerateTessalationRequirementTexture(heightmapArray, 64);

            var heightmapBundle = SavingFileManager.LoadHeightmapBundlesFromFiles("heightmapBundle", 4, 2048);

            var submapTextures = new Ring1SubmapTextures(heightmapBundle, tessalationReqTexture);

            _rootNode = CreateRootNode_TODO_DELETE(submapTextures);
            _rootNode.UpdateLod();
        }
        public void CreateDebugIntensityTexture(IIntensitySamplingProvider provider)
        {
            var tex = new Texture2D(16, 16, TextureFormat.ARGB32, false, true);

            for (int x = 0; x < 16; x++)
            {
                for (int y = 0; y < 16; y++)
                {
                    tex.SetPixel(x, y, new Color(provider.Sample(new Vector2(x / 15f, y / 15f)), 0, 0, 1));
                }
            }
            tex.Apply(false);
            SavingFileManager.SaveTextureToPngFile($@"C:\inz2\Intensity.png", tex);
        }
Beispiel #17
0
        public void Start231()
        {
            string        bilFilePath    = @"C:\inz\cont\n49_e019_1arc_v3.bil";
            HeightmapFile heightmapFile  = new HeightmapFile();
            const int     filePixelWidth = 3601;

            heightmapFile.LoadFile(bilFilePath, 3601);
            heightmapFile.MirrorReflectHeightDataInXAxis();
            var heightArray = heightmapFile.GlobalHeightArray;

            var smallArray = HeightmapUtils.CutSubArray(heightArray, new IntArea(100, 100, 240, 240));

            SavingFileManager.SaveTextureToPngFile(@"C:\inz\cont\smallCut.png",
                                                   HeightmapUtils.CreateTextureFromHeightmap(smallArray));
        }
Beispiel #18
0
        private void GenerateTexture()
        {
            var heightTexture1 = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\temp3.png", 240,
                                                                          240, TextureFormat.RGBA32, true, true);
            Material material = new Material(Shader.Find("Custom/TerGen/ErosionThermal"));

            material.SetTexture("_MainInputTex", heightTexture1);

            RenderTextureInfo renderTextureInfo = new RenderTextureInfo(240, 240, RenderTextureFormat.ARGB32);

            ConventionalTextureInfo outTextureInfo = new ConventionalTextureInfo(240, 240, TextureFormat.ARGB32, false);

            OutputTexture = UltraTextureRenderer.RenderTextureAtOnce(material, renderTextureInfo, outTextureInfo);
            OutputShowingObject.GetComponent <MeshRenderer>().material.SetTexture("_MainTex", OutputTexture);
        }
        private void WriteRenderTargetsToFile()
        {
            var targetDirectory = @"C:\tmp\diagrams\mmRenderTargets\";

            Directory.CreateDirectory(targetDirectory);

            SavingFileManager.SaveTextureToPngFile(targetDirectory + "/artistic.png", UltraTextureRenderer.RenderTextureToTexture2D(MeasurementRenderTargets.ArtisticMainTexture));
            SavingFileManager.SaveTextureToPngFile(targetDirectory + "/worldPos.png", UltraTextureRenderer.RenderTextureToTexture2D(_worldPositionRenderTarget));
            SavingFileManager.SaveTextureToPngFile(targetDirectory + "/vectors.png", UltraTextureRenderer.RenderTextureToTexture2D(_vectorsRenderTarget));

            //var dummyTex2D = UltraTextureRenderer.RenderTextureToTexture2D(_dummyStage1Texture);
            //SavingFileManager.SaveTextureToPngFile(targetDirectory + "/dummy.png", dummyTex2D);
            //SavingFileManager.SaveTextureToPngFile(targetDirectory + "/dummyL1.png", dummyTex2D.RetriveMipmapAsTexture(1));
            //SavingFileManager.SaveTextureToPngFile(targetDirectory + "/dummyL1.png", dummyTex2D.RetriveMipmapAsTexture(2));
        }
Beispiel #20
0
        public async Task <TextureWithSize> RetriveNormalDetailElementAsync(string filename)
        {
            IntVector2 textureSize = new IntVector2(241, 241);
            var        path        = _mainDictionaryPath + filename + _extension;

            Preconditions.Assert(File.Exists(path), $"Cannot retrive normalDetailElement of path {path} as it does not exist");
            var texture = await _commonExecutor.AddAction(() =>
                                                          SavingFileManager.LoadPngTextureFromFile(path, textureSize.X, textureSize.Y,
                                                                                                   TextureFormat.ARGB32, true, true));

            return(new TextureWithSize()
            {
                Size = textureSize,
                Texture = texture
            });
        }
Beispiel #21
0
        public TAMSoleImagesPack Load(string directoryPath, List <TAMTone> tones, List <TAMMipmapLevel> levels)
        {
            var columns = Enumerable.Range(0, tones.Count).ToDictionary(
                toneIndex => tones[toneIndex],
                toneIndex =>

                Enumerable.Range(0, levels.Count).ToDictionary(
                    levelIndex => levels[levelIndex],
                    levelIndex =>
            {
                var path = directoryPath + CreateFileNameToSoleImage(toneIndex, levelIndex);
                return(SavingFileManager.LoadPngTextureFromFile(path));
            })
                );

            return(new TAMSoleImagesPack(columns));
        }
Beispiel #22
0
        public void Save(string rootPath, Grass2SingledBillboardClan clan)
        {
            var billboardsList = clan.BillboardsList;
            var pathGenerator  = new Grass2BillboardClanFilesManagerPathGenerator(rootPath);
            var infoFile       = new Grass2BillboardInfoJson()
            {
                BladesCountList = billboardsList.Select(c => c.BladesCount).ToList()
            };

            File.WriteAllText(pathGenerator.CreateInfoFilePath(), JsonUtility.ToJson(infoFile));

            int i = 0;

            foreach (var billboard in billboardsList)
            {
                SavingFileManager.SaveTextureToPngFile(pathGenerator.CreateBillboardFilePath(i), billboard.Texture);
                i++;
            }
        }
Beispiel #23
0
        public void Start_Thermal()
        {
            var heightTexture1 = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\smallCut.png", 240,
                                                                          240, TextureFormat.RGBA32, true, true);
            var heightmap1 = HeightmapUtils.CreateHeightmapArrayFromTexture(heightTexture1);

            DiamondSquareCreator creator = new DiamondSquareCreator(new RandomProvider(22));
            var heightmap2 = creator.CreateDiamondSquareNoiseArray(new IntVector2(240, 240), 64);

            MyArrayUtils.Multiply(heightmap2.HeightmapAsArray, 0.1f);

            var tParam       = EroderDebugObject.CalculateFromHillFactor(1, new ArrayExtremes(0, 5000), 24);
            var erodedArrays = GenerateErodedArrays(heightmap1, new List <ThermalErosionConfiguration>()
            {
                new ThermalErosionConfiguration()
                {
                    CParam          = 0.5f,
                    StepCount       = 10,
                    TParam          = tParam * 0.6f,
                    NeighbourFinder = NeighbourFinders.Big9Finder,
                    GroundMover     = ThermalErosionGroundMovers.OnlyBestMover
                },
                new ThermalErosionConfiguration()
                {
                    CParam          = 0.5f,
                    StepCount       = 10,
                    TParam          = tParam * 0.6f,
                    NeighbourFinder = NeighbourFinders.Big9Finder,
                    GroundMover     = ThermalErosionGroundMovers.AllNeighboursMover
                },
                new ThermalErosionConfiguration()
                {
                    CParam            = 0.5f,
                    StepCount         = 10,
                    TParam            = tParam * 0.6f,
                    NeighbourFinder   = NeighbourFinders.Big9Finder,
                    GroundMover       = ThermalErosionGroundMovers.OnlyBestMoverTweaked,
                    NeighboursChooser = ThermalEroderNeighboursChoosers.LesserEqualThanTChooser
                },
            });

            CreateTestObject(heightmap1, erodedArrays);
        }
Beispiel #24
0
        public void Start()
        {
            var image  = SavingFileManager.LoadPngTextureFromFile(SourceImagePath, false);
            var width  = image.width;
            var height = image.height;

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    var p      = image.GetPixel(x, y);
                    var tParam = x / ((float)(width - 1));
                    p.b = tParam;
                    image.SetPixel(x, y, p);
                }
            }

            SavingFileManager.SaveTextureToPngFile(DestinationImagePath, image);
        }
Beispiel #25
0
        private Dictionary <HabitatType, Texture2D> CreateHabitatTexturesDict()
        {
            var size           = HabitatTexturesSize;
            var forrestTexture = new Texture2D(size, size, TextureFormat.RGB24, false, true);

            forrestTexture.wrapMode = TextureWrapMode.Clamp;
            var meadowTexture = new Texture2D(size, size, TextureFormat.RGB24, false, true);

            meadowTexture.wrapMode = TextureWrapMode.Clamp;
            var fellTexture = new Texture2D(size, size, TextureFormat.RGB24, false, true);

            fellTexture.wrapMode = TextureWrapMode.Clamp;

            var allTexture = new Texture2D(size, size, TextureFormat.RGB24, false, true);

            allTexture.wrapMode = TextureWrapMode.Clamp;

            for (int x = 0; x < size; x++)
            {
                for (int y = 0; y < size; y++)
                {
                    var forrestVal = Mathf.InverseLerp(0.6f, 0.8f, x / (float)HabitatTexturesSize);
                    forrestTexture.SetPixel(x, y, new Color(forrestVal, 0, 0, 0));

                    var meadowVal = Mathf.InverseLerp(0.2f, 0.4f, y / (float)HabitatTexturesSize);
                    meadowTexture.SetPixel(x, y, new Color(meadowVal, 0, 0, 0));

                    var fellVal = Mathf.InverseLerp(0.1f, 0.0f, y / (float)HabitatTexturesSize);
                    fellTexture.SetPixel(x, y, new Color(fellVal, 0, 0, 0));

                    allTexture.SetPixel(x, y, new Color(forrestVal, meadowVal, fellVal, 1));
                }
            }
            allTexture.Apply(false);
            SavingFileManager.SaveTextureToPngFile($@"C:\inz2\all.png", allTexture);

            return(new Dictionary <HabitatType, Texture2D>()
            {
                { HabitatType.Forest, forrestTexture },
                { HabitatType.Meadow, meadowTexture },
                { HabitatType.Fell, fellTexture },
            });
        }
        private static RenderTexture CreateGlobalHeightTexture(CommonExecutorUTProxy commonExecutorUtProxy)
        {
            var rgbaMainTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\mgr\PwMgrProject\precomputedResources\allTerrainF1.png", 3600,
                                                                           3600,
                                                                           TextureFormat.ARGB32, true, false);
            TerrainTextureFormatTransformator transformator =
                new TerrainTextureFormatTransformator(commonExecutorUtProxy);
            var mirroredImage = transformator.MirrorHeightTexture(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = rgbaMainTexture
            });
            var globalHeightTexture = transformator.EncodedHeightTextureToPlain(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = mirroredImage
            });

            return(globalHeightTexture);
        }
Beispiel #27
0
        public static Texture CreateTextureFrom(IntensityFieldFigure intensityFigure)
        {
            int width  = intensityFigure.Width;
            int height = intensityFigure.Height;

            var tex = new Texture2D(width, height, TextureFormat.RGB24, false);

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    tex.SetPixel(x, y, new Color(intensityFigure.GetPixel(x, y), 0, 0));
                }
            }
            tex.wrapMode = TextureWrapMode.Clamp;
            tex.Apply(false);

            SavingFileManager.SaveTextureToPngFile($@"C:\inz2\tex{texNo++}.png", tex);
            return(tex);
        }
Beispiel #28
0
        public void StartX()
        {
            TaskUtils.SetGlobalMultithreading(false);
            MainTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\n49_e019_1arc_v3.png", 3600, 3600,
                                                                   TextureFormat.ARGB32, true, false);

            var plain = _transformator.EncodedHeightTextureToPlainAsync(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = MainTexture
            });

            var decoded = _transformator.PlainToEncodedHeightTextureAsync(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = plain.Result
            });

            SavingFileManager.SaveTextureToPngFile(@"C:\inz\cont\n49_e019_1arc_v4.rfloat.png", decoded.Result);
        }
Beispiel #29
0
        private void DebugCreateTexture(float[] array, MyRectangle generationArea, IntVector2 outFigureSize,
                                        int count)
        {
            var size       = outFigureSize;
            var oneFigSize = outFigureSize.X * outFigureSize.Y;

            for (int i = 0; i < count; i++)
            {
                var newTex = new Texture2D(size.X, size.Y, TextureFormat.ARGB32, false, false);
                for (int y = 0; y < size.Y; y++)
                {
                    for (int x = 0; x < size.X; x++)
                    {
                        var dist = array[y * size.Y + x + oneFigSize * i];
                        newTex.SetPixel(x, y, new Color(dist, 0, 0, 1));
                    }
                }
                var originalName = $"{generationArea}-{DateTime.Now.Ticks}{i}.png";
                originalName = Path.GetInvalidFileNameChars().Aggregate(originalName, (current, c) => current.Replace(c.ToString(), string.Empty));
                SavingFileManager.SaveTextureToPngFile($@"C:\inz\debGrassIntensityTex\" + originalName, newTex);
            }
        }
Beispiel #30
0
        // Use this for initialization
        void Start()
        {
            _updatableContainer = new UpdatableContainer();
            TaskUtils.SetGlobalMultithreading(false);

            _ring1Tree = new Ring1Tree();

            //////////////////

            var rgbaMainTexture = SavingFileManager.LoadPngTextureFromFile(@"C:\inz\cont\n49_e019_1arc_v3.png", 3600,
                                                                           3600,
                                                                           TextureFormat.ARGB32, true, false);


            CommonExecutorUTProxy commonExecutorUtProxy = new CommonExecutorUTProxy(); //todo

            _updatableContainer.AddUpdatableElement(commonExecutorUtProxy);
            TerrainTextureFormatTransformator transformator =
                new TerrainTextureFormatTransformator(commonExecutorUtProxy);
            var globalHeightTexture = transformator.EncodedHeightTextureToPlain(new TextureWithSize()
            {
                Size    = new IntVector2(3600, 3600),
                Texture = rgbaMainTexture
            });

            /// /// VISIBILITY TEXTURE
            var visibilityTextureSideLength = 16;
            var visibilityTexture           = new Texture2D(visibilityTextureSideLength, visibilityTextureSideLength,
                                                            TextureFormat.RFloat, false);

            visibilityTexture.filterMode = FilterMode.Point;

            var visibilityTextureProcessorProxy =
                new Ring1VisibilityTextureProcessorUTProxy(new Ring1VisibilityTextureProcessor(visibilityTexture));

            _updatableContainer.AddUpdatableElement(visibilityTextureProcessorProxy);


            var visibilityTextureChangeGrabber = new Ring1VisibilityTextureChangeGrabber();

            var terrainParentGameObject = new GameObject("TerrainParent");

            var unityCoordsCalculator = new UnityCoordsCalculator(new Vector2(24 * 240 * 2, 24 * 240 * 2));
            var orderGrabber          = new Ring1PaintingOrderGrabber();

            var painterProxy = new RingTerrainPainterUTProxy(new RingTerrainPainter());

            _updatableContainer.AddUpdatableElement(painterProxy);

            painterProxy.Update();

            var mainRespondingProxy = new Ring1NodeEventMainRespondingProxy(new Ring1NodeEventMainResponder());

            _otherThreadActionPairs.Add(new OtherThreadProxyAndActionPair()
            {
                Proxy           = mainRespondingProxy,
                EveryPostAction =
                    () =>
                {
                    var delta = visibilityTextureChangeGrabber.RetriveVisibilityChanges();

                    if (delta.AnyChange)
                    {
                        var visibilityTextureChagnes = visibilityTextureChangeGrabber.RetriveVisibilityChanges();
                        visibilityTextureProcessorProxy.AddOrder(visibilityTextureChagnes);
                    }

                    if (orderGrabber.IsAnyOrder)
                    {
                        painterProxy.AddOrder(orderGrabber.RetriveOrderAndClear());
                    }
                }
            });


            UTTextureRendererProxy textureRendererProxy = new UTTextureRendererProxy(new TextureRendererService(
                                                                                         new MultistepTextureRenderer(ContainerGameObject), new TextureRendererServiceConfiguration()
            {
                StepSize = new Vector2(500, 500)
            }));

            _updatableContainer.AddUpdatableElement(textureRendererProxy);

            UnityThreadComputeShaderExecutorObject computeShaderExecutorObject =
                new UnityThreadComputeShaderExecutorObject();

            _updatableContainer.AddUpdatableElement(computeShaderExecutorObject);
            _updatableContainer.AddUpdatableElement(commonExecutorUtProxy);

            TerrainDetailGenerator terrainDetailGenerator =
                CreateTerrainDetailGenerator(
                    globalHeightTexture, textureRendererProxy, commonExecutorUtProxy, computeShaderExecutorObject,
                    ContainerGameObject);
            TerrainDetailProvider terrainDetailProvider =
                CreateTerrainDetailProvider(terrainDetailGenerator);

            var terrainShapeDb = FETerrainShapeDbInitialization.CreateTerrainShapeDb(terrainDetailProvider, commonExecutorUtProxy
                                                                                     , new TerrainDetailAlignmentCalculator(240), false, false, false, null);
            TerrainShapeDbProxy terrainShapeDbProxy = new TerrainShapeDbProxy(terrainShapeDb);

            terrainDetailGenerator.SetBaseTerrainDetailProvider(BaseTerrainDetailProvider.CreateFrom(terrainShapeDb));

            _otherThreadActionPairs.Add(new OtherThreadProxyAndActionPair()
            {
                Proxy = terrainShapeDbProxy
            });

            var meshGeneratorProxy = new MeshGeneratorUTProxy(new MeshGeneratorService());

            _updatableContainer.AddUpdatableElement(meshGeneratorProxy);

            _stainTerrainResourceCreatorUtProxy =
                new StainTerrainResourceCreatorUTProxy(new StainTerrainResourceCreator());
            _updatableContainer.AddUpdatableElement(_stainTerrainResourceCreatorUtProxy);

            var stainTerrainServiceProxy = new StainTerrainServiceProxy(
                new StainTerrainService(
                    new ComputationStainTerrainResourceGenerator(
                        new StainTerrainResourceComposer(
                            _stainTerrainResourceCreatorUtProxy
                            ),
                        new StainTerrainArrayMelder(),
                        new DummyStainTerrainArrayFromBiomesGenerator(
                            new DebugBiomeContainerGenerator().GenerateBiomesContainer(
                                new BiomesContainerConfiguration()),
                            new StainTerrainArrayFromBiomesGeneratorConfiguration()
                            )),
                    new MyRectangle(0, 0, 24 * 240 * 2, 24 * 240 * 2)));

            _otherThreadActionPairs.Add(new OtherThreadProxyAndActionPair()
            {
                Proxy = stainTerrainServiceProxy
            });

            var gRing1NodeTerrainCreator = new GRing1NodeTerrainCreator(
                orderGrabber,
                terrainParentGameObject,
                meshGeneratorProxy,
                terrainShapeDbProxy,
                stainTerrainServiceProxy,
                unityCoordsCalculator,
                null,
                null,
                new GRingGroundShapeProviderConfiguration(),
                new GRingTerrainMeshProviderConfiguration());

            var gRing2NodeTerrainCreator = new GRing2NodeTerrainCreator(
                orderGrabber,
                terrainParentGameObject,
                meshGeneratorProxy,
                terrainShapeDbProxy,
                unityCoordsCalculator,
                new GRing2PatchesCreatorProxy(CreateRing2PatchesCreator()),
                null,
                null,
                new GRingGroundShapeProviderConfiguration(),
                new GRingTerrainMeshProviderConfiguration());

            UTRing2PlateStamperProxy stamperProxy = new UTRing2PlateStamperProxy(
                new Ring2PlateStamper(new Ring2PlateStamperConfiguration()
            {
                PlateStampPixelsPerUnit = new Dictionary <int, float>()
            }, ContainerGameObject));

            _updatableContainer.AddUpdatableElement(stamperProxy);

            Ring2PatchStamplingOverseerFinalizer patchStamper =
                new Ring2PatchStamplingOverseerFinalizer(stamperProxy, textureRendererProxy, commonExecutorUtProxy);

            var gStampedRing2NodeTerrainCreator = new GStampedRing2NodeTerrainCreator(
                orderGrabber,
                terrainParentGameObject,
                meshGeneratorProxy,
                terrainShapeDbProxy,
                unityCoordsCalculator,
                new GRing2PatchesCreatorProxy(CreateRing2PatchesCreator()),
                patchStamper,
                null,
                null,
                new GRingGroundShapeProviderConfiguration(),
                new GRingTerrainMeshProviderConfiguration());

            var subCreator = new SupremeGRingNodeTerrainCreator(new List <NewListenersCreatorWithLimitation>()
            {
                //new NewListenersCreatorWithMaximumLod()
                //{
                //    Creator = gRing1NodeTerrainCreator,
                //    MaximumLod = new FlatLod(6)
                //},
                new NewListenersCreatorWithLimitation()
                {
                    Creator    = new GVoidNodeTerrainCreator(),
                    MaximumLod = new FlatLod(6)
                },
                //new NewListenersCreatorWithMaximumLod()
                //{
                //    Creator = gRing2NodeTerrainCreator,
                //    MaximumLod = new FlatLod(8)
                //}
                new NewListenersCreatorWithLimitation()
                {
                    Creator    = gStampedRing2NodeTerrainCreator,
                    MaximumLod = new FlatLod(9)
                }
            });

            var eventCollector = new Ring1NodeEventCollector(
                new DynamicFlatLodGRingNodeTerrainCreator(subCreator, new FlatLodCalculator(unityCoordsCalculator)));

            _ring1TreeProxy = new Ring1TreeProxy(_ring1Tree);
            _otherThreadActionPairs.Add(new OtherThreadProxyAndActionPair()
            {
                Proxy           = _ring1TreeProxy,
                EveryPostAction =
                    () =>
                {
                    if (eventCollector.Any)
                    {
                        mainRespondingProxy.AddOrder(eventCollector.RetriveOrderAndClear());
                    }
                }
            });

            var baseQuadSideLength = 90f;

            StartThreading(_otherThreadActionPairs);
            _ring1TreeProxy.CreateHeightmap(new Ring1Tree.RootNodeCreationParameters()
            {
                UnityCoordsCalculator = unityCoordsCalculator,
                NodeListener          = eventCollector,
                PrecisionDistances    =
                    new Dictionary <float, int>
                {
                    //{4f * 50f/3f, 9},
                    //{4f * 50f/2f, 8},
                    { CalculatePrecisionDistance(baseQuadSideLength, 2, 1), 7 },
                    { 6.5f * 50f, 6 },
                    { 20 * 50f, 5 },
                    { 40 * 50f, 4 },
                    { 50 * 50f, 3 },
                    { 100 * 50f, 2 },
                    { 200 * 50f, 1 }
                },
                InitialCameraPosition = Vector3.zero,
            });
        }