private void EnableRenderer(bool cameraHigher) { try { if (_imageEx != null) { return; } var renderer = new DarkKn5ObjectRenderer(Model.Car); renderer.SelectSkin(null); renderer.Initialize(); renderer.SetCameraHigher = cameraHigher; SetRendererSize(renderer); renderer.Draw(); Model.Renderer = renderer; _imageEx = new D3DImageEx(); Scene.Source = _imageEx; _setCount = 0; _lastTarget = IntPtr.Zero; CompositionTarget.Rendering += OnRendering; VisibilityAnimation.SetVisible(Scene, true); } catch (Exception e) { MessageBox.Show(e.ToString()); } }
public async Task LamborghiniTest() { var path = Path.Combine(AcRootFinder.Find(), @"content\cars"); if (!Directory.Exists(path)) { Debug.WriteLine("REQUIRED ASSET IS MISSING, TEST CANNOT BE DONE"); return; } var cars = Directory.GetDirectories(path, "ks_lamborghini_*").Select(x => new { CarId = Path.GetFileName(x), CarDirectory = x, Kn5 = FileUtils.GetMainCarFilename(x) }).ToList(); var sw = Stopwatch.StartNew(); var i = 0; using (var e = cars.GetEnumerator()) { if (!e.MoveNext()) { return; } var first = e.Current; if (first == null) { return; } using (var renderer = new DarkKn5ObjectRenderer(new CarDescription(first.Kn5, first.CarDirectory))) { renderer.UseMsaa = false; renderer.UseFxaa = false; renderer.AutoRotate = false; renderer.SetCamera(new Vector3(3.867643f, 1.42359f, 4.70381f), new Vector3(0.0f, 0.7f, 0.5f), (float)(Math.PI / 180d * 30f)); renderer.BackgroundColor = Color.FromArgb(220, 220, 220); renderer.Initialize(); renderer.Width = CommonAcConsts.PreviewWidth; renderer.Height = CommonAcConsts.PreviewHeight; do { if (e.Current != first) { first = e.Current; if (first == null) { return; } await renderer.SetCarAsync(new CarDescription(first.Kn5, first.CarDirectory)); } Console.WriteLine(first.CarId); foreach (var skinDirectory in Directory.GetDirectories(Path.Combine(first.CarDirectory, "skins"))) { // Console.WriteLine(skinDirectory); renderer.Shot(4d, 1d, true) .HighQualityResize(new Size(CommonAcConsts.PreviewWidth, CommonAcConsts.PreviewHeight)) .Save(Path.Combine(skinDirectory, "preview_new.jpg")); renderer.SelectNextSkin(); i++; } } while (e.MoveNext()); } } Console.WriteLine($"Done: {i} skins ({sw.Elapsed.TotalMilliseconds / i:F1} ms per skin)"); }
private async Task EnableRenderer() { if (!_loaded) { await DisableRenderer(); return; } try { _carId = ValuesStorage.Storage.GetObject <JObject>("__QuickDrive_Main")?.GetStringValueOnly("CarId") ?? @"abarth500"; var car = CarsManager.Instance.GetById(_carId); if (_imageEx != null || car == null) { return; } Progress.IsActive = true; var panoramaBg = new Uri("pack://application:,,,/Content Manager;component/Assets/Img/ShowroomPanoramaExample.jpg", UriKind.Absolute); var renderer = new DarkKn5ObjectRenderer(CarDescription.FromDirectory(car.Location, car.AcdData)) { WpfMode = true, UseMsaa = false, VisibleUi = false, TryToGuessCarLights = false, LoadCarLights = false, AnyGround = true, BackgroundColor = System.Drawing.Color.FromArgb(0x444444), BackgroundBrightness = 1f, LightBrightness = 0f, AmbientDown = System.Drawing.Color.FromArgb(0x444444), AmbientUp = System.Drawing.Color.FromArgb(0xffffff), AmbientBrightness = 4f, Light = Vector3.Normalize(new Vector3(-0.1f, 10, -0.1f)), ShadowMapSize = 512, EnableShadows = false, AutoRotate = false, AutoAdjustTarget = false, UseDof = true, UseAccumulationDof = true, AccumulationDofApertureSize = 0f, AccumulationDofIterations = 20, AccumulationDofBokeh = false, UseFxaa = false, UseSslr = true, UseAo = false, UseDither = true, MaterialsReflectiveness = 1.5f, UseCustomReflectionCubemap = true, CustomReflectionCubemap = Application.GetResourceStream(panoramaBg)?.Stream.ReadAsBytesAndDispose(), CubemapAmbientWhite = false, CubemapAmbient = 0.6f, }; var data = car.AcdData; if (data != null) { var carBasic = data.GetIniFile("car.ini")["BASIC"]; _carLength = carBasic.GetVector3F("INERTIA").ToVector3().Z; var suspensions = data.GetIniFile("suspensions.ini"); var suspensionsBasic = suspensions["BASIC"]; var go = carBasic.GetVector3F("GRAPHICS_OFFSET").ToVector3(); var center = suspensionsBasic.GetFloat("WHEELBASE", 2.5f) * suspensionsBasic.GetFloat("CG_LOCATION", 0.5f); _carOffset = new Vector3(go.X, go.Y - suspensions["REAR"].GetFloat("BASEY", 0.25f), go.Z + center); _lookAt = new Vector3(go.X, go.Y - suspensions["FRONT"].GetFloat("BASEY", 0.25f), go.Z + center); } await Task.Run(() => renderer.Initialize()); renderer.SetCameraHigher = false; SetRendererSize(renderer); if (renderer.CarNode != null) { // renderer.SelectSkin(car.SelectedSkin?.Id); renderer.CarNode.BrakeLightsEnabled = true; renderer.CarNode.CockpitLrActive = true; renderer.CarNode.CurrentLod = renderer.CarNode.LodsCount > 1 ? 1 : 0; } await Task.Run(() => renderer.Draw()); _renderer = renderer; _imageEx = new D3DImageEx(); Scene.Source = _imageEx; _setCount = 0; _lastTarget = IntPtr.Zero; CompositionTargetEx.Rendering += OnRendering; UpdateCamera(); } catch (Exception e) { NonfatalError.Notify("Can’t display chase camera preview", e); } finally { Progress.IsActive = false; } }