private void DrawMap() { Puts("Drawing map..."); var width = _config.RenderResolution.Width; var height = _config.RenderResolution.Height; var coordinateConverter = new CoordinateConverter(width, height); var raycastCoordinateConverter = new RaycastCoordinateConverter(coordinateConverter); var layers = new List <ILayer>(); Puts("Initializing background layer..."); var backgroundTextureProvider = new SeamlessProvider(new BitmapProvider(_config.BackgroundTexturePath.FullPath), width, height); var backgroundLayer = new BitmapLayer(backgroundTextureProvider, NormalColorBlending.Instance); layers.Add(backgroundLayer); Puts("Initializing splat layers..."); foreach (var splatConfiguration in _config.SplatConfigurations) { Puts($"Splat #{splatConfiguration.Index}..."); var splatTextureProvider = new SeamlessProvider(new BitmapProvider(splatConfiguration.TexturePath.FullPath), width, height); var splatMask = new SplatMask(coordinateConverter, splatConfiguration.Index); var splatLayer = new MaskedBitmapLayer(splatTextureProvider, splatMask, NormalColorBlending.Instance); layers.Add(splatLayer); } Puts("Initializing materials source..."); var materialSource = new DetailsLayer.MaterialSource(_config.DetailsConfiguration.MaterialConfigurations, width, height); Puts("Initializing details layer..."); var detailsLayer = new DetailsLayer(raycastCoordinateConverter, materialSource, _config.DetailsConfiguration.RaycastLayers); layers.Add(detailsLayer); Puts("Initializing light layer..."); var lightningLayer = new LightLayer(raycastCoordinateConverter, _config.LightConfiguration, _config.LightConfiguration.RaycastLayers); layers.Add(lightningLayer); Puts("Initializing water layer..."); var waterTextureProvider = new SeamlessProvider(new BitmapProvider(_config.WaterConfiguration.TexturePath.FullPath), height, width); var waterMask = new WaterMask(raycastCoordinateConverter, _config.WaterConfiguration.MinOpacity, _config.WaterConfiguration.MaxDepth, _config.WaterConfiguration.RaycastLayers); var waterLayer = new MaskedBitmapLayer(waterTextureProvider, waterMask, NormalColorBlending.Instance); layers.Add(waterLayer); Puts("Initializing layer group..."); var layerGroup = new LayerGroup(layers); var result = new Texture2D(width, height); var wrapper = new TextureWrapper(result); Puts("Drawing..."); layerGroup.Draw(wrapper); Puts("Resizing to result resolution..."); TextureScale.Scale(result, _config.ResultResolution.Width, _config.ResultResolution.Height); Puts("Saving result..."); Directory.CreateDirectory(_config.ResultPath.FullPath); result.SaveAsPng(PathToResult); wrapper.Dispose(); Puts("Done."); }