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); } }
private void CreateGrass2IntensityDb() { HabitatToGrassIntensityMapGenerator habitatToGrassIntensityMapGenerator = new HabitatToGrassIntensityMapGenerator( _initializationFields.Retrive <ComputeShaderContainerGameObject>(), _initializationFields.Retrive <UnityThreadComputeShaderExecutorObject>(), _initializationFields.Retrive <CommonExecutorUTProxy>(), _veConfiguration.HabitatToGrassIntensityMapGeneratorConfiguration); HabitatMapDbProxy habitatDbProxy = _initializationFields.Retrive <HabitatMapDbProxy>(); var pathProximityTextureDbProxy = _initializationFields.Retrive <PathProximityTextureDbProxy>(); var mapsGenerator = new Grass2IntensityMapGenerator( habitatToGrassIntensityMapGenerator, new HabitatTexturesGenerator(habitatDbProxy, _veConfiguration.HabitatTexturesGeneratorConfiguration, _initializationFields.Retrive <TextureConcieverUTProxy>()), _veConfiguration.Grass2IntensityMapGeneratorConfiguration, pathProximityTextureDbProxy); var db = new SpatialDb <List <Grass2TypeWithIntensity> >(mapsGenerator, _veConfiguration.Grass2IntensityDbConfiguration ); var databaseProxy = new Grass2IntensityDbProxy(db); _ultraUpdatableContainer.AddOtherThreadProxy(databaseProxy); _ultraUpdatableContainer.AddOtherThreadProxy(habitatDbProxy); _initializationFields.SetField(databaseProxy); }
public void Start() { var ring2ShaderRepository = Ring2PlateShaderRepository.Create(); var conciever = _gameInitializationFields.Retrive <TextureConcieverUTProxy>(); var detailEnhancer = new Ring2IntensityPatternEnhancer(_gameInitializationFields.Retrive <UTTextureRendererProxy>(), _ring2InitializerConfiguration.Ring2IntensityPatternEnhancingSizeMultiplier); var ring2PatchesPainterUtProxy = new Ring2PatchesPainterUTProxy(new Ring2PatchesPainter( new Ring2MultishaderMaterialRepository(ring2ShaderRepository, Ring2ShaderNames.ShaderNames))); _ultraUpdatableContainer.Add(ring2PatchesPainterUtProxy); var patchesCreator = new GRing2PatchesCreator( _gameInitializationFields.Retrive <IRing2RegionsDatabase>(), new GRing2RegionsToPatchTemplateConventer(), new Ring2PatchTemplateCombiner(), new Ring2PatchCreator(), new Ring2IntensityPatternProvider(conciever, detailEnhancer), new GRing2Deviser(), _ring2InitializerConfiguration.Ring2PatchesOverseerConfiguration ); var gRing2PatchesCreatorProxy = new GRing2PatchesCreatorProxy(patchesCreator); _ultraUpdatableContainer.AddOtherThreadProxy(gRing2PatchesCreatorProxy); _gameInitializationFields.SetField(gRing2PatchesCreatorProxy); UTRing2PlateStamperProxy stamperProxy = new UTRing2PlateStamperProxy( new Ring2PlateStamper(_ring2InitializerConfiguration.Ring2PlateStamperConfiguration, _gameInitializationFields.Retrive <ComputeShaderContainerGameObject>())); _ultraUpdatableContainer.Add(stamperProxy); Ring2PatchStamplingOverseerFinalizer patchStamper = new Ring2PatchStamplingOverseerFinalizer( stamperProxy, _gameInitializationFields.Retrive <UTTextureRendererProxy>(), _gameInitializationFields.Retrive <CommonExecutorUTProxy>()); _gameInitializationFields.SetField(patchStamper); }
private void InitializeWelding() { var weldingTexture = new RenderTexture(1024, 1024, 0, RenderTextureFormat.RFloat); weldingTexture.enableRandomWrite = true; weldingTexture.filterMode = FilterMode.Point; weldingTexture.wrapMode = TextureWrapMode.Clamp; weldingTexture.Create(); HeightArrayWelderProxy welderProxy = new HeightArrayWelderProxy( new HeightArrayWeldingDispatcher( new WeldMapLevel1Manager( new WeldMapLevel2Manager( new WeldingExecutor( _gameInitializationFields.Retrive <ComputeShaderContainerGameObject>(), _gameInitializationFields.Retrive <UnityThreadComputeShaderExecutorObject>(), weldingTexture), new WeldMapLevel2ManagerConfiguration() { WeldTextureSize = new IntVector2(1024, 1024), ColumnsCount = 1024, StripLength = 240, StripsPerOneColumnCount = 2, //todo StripStride = 256 })))); _ultraUpdatableContainer.AddOtherThreadProxy(welderProxy); var terrainThreadAssignBox = new LateAssignBox <Ring1TreeProxy>(); _gameInitializationFields.SetField(terrainThreadAssignBox); var weldingPack = new HeightArrayWeldingPack(new TextureWithSize() { Texture = weldingTexture, Size = new IntVector2(1024, 1024) }, welderProxy, _gameInitializationFields.Retrive <CommonExecutorUTProxy>(), _gRingConfiguration.WeldingEnabled); _gameInitializationFields.SetField(weldingPack); }
// Use this for initialization void Start() { _configuration = new FEConfiguration(new FilePathsConfiguration()) { Multithreading = UseMultithreading }; _configuration.TerrainShapeDbConfiguration = TerrainShapeDbConfiguration; FeGRingConfiguration.FeConfiguration = _configuration; VegetationConfiguration.FeConfiguration = _configuration; TaskUtils.SetGlobalMultithreading(_configuration.Multithreading); TaskUtils.ExecuteActionWithOverridenMultithreading(true, () => { MyProfiler.BeginSample("Sample1"); msw.StartSegment("Game initialization"); GlobalServicesProfileInfo servicesProfileInfo = new GlobalServicesProfileInfo(); if (GraphicsOverlay != null) { GraphicsOverlay.ServicesProfileInfo = servicesProfileInfo; } _ultraUpdatableContainer = new UltraUpdatableContainer( _configuration.SchedulerConfiguration, servicesProfileInfo, _configuration.UpdatableContainerConfiguration); _configuration.TerrainShapeDbConfiguration.UseTextureSavingToDisk = true; _gameInitializationFields.SetField(ContainerGameObject); _gameInitializationFields.SetField(_configuration.Repositioner); _gameInitializationFields.SetField(_configuration.HeightDenormalizer); var initializingHelper = new FEInitializingHelper(_gameInitializationFields, _ultraUpdatableContainer, _configuration); initializingHelper.InitializeUTService(new TextureConcieverUTProxy()); initializingHelper.InitializeUTService(new UnityThreadComputeShaderExecutorObject(_configuration.UseMultistepComputeShaderExecution)); initializingHelper.InitializeUTService(new CommonExecutorUTProxy()); initializingHelper.CreatePathProximityTextureDb(); SetInitialCameraPosition(); initializingHelper.InitializeDesignBodySpotUpdater(); initializingHelper.InitializeUTRendererProxy(); initializingHelper.InitializeUTService(new MeshGeneratorUTProxy(new MeshGeneratorService())); initializingHelper.InitializeMonoliticRing2RegionsDatabase(); var finalSurfacePathInitialization = new Ring2PatchInitializer(_gameInitializationFields, _ultraUpdatableContainer, new Ring2PatchInitializerConfiguration(_configuration)); finalSurfacePathInitialization.Start(); var finalTerrainInitialization = new FinalTerrainInitialization(_ultraUpdatableContainer, _gameInitializationFields, _configuration, FeGRingConfiguration); finalTerrainInitialization.Start(); initializingHelper.InitializeGlobalInstancingContainer(); var finalVegetation = new FinalVegetation(_gameInitializationFields, _ultraUpdatableContainer, VegetationConfiguration); finalVegetation.Start(); }); MyProfiler.EndSample(); }
public void InitializeUTService <T>(T updatable) where T : BaseUTService { _gameInitializationFields.SetField(updatable); _updatableContainer.Add(updatable); }