From 577b82e86f7a5f694b6262f3048f33a7038be201 Mon Sep 17 00:00:00 2001 From: iAmAsval Date: Tue, 16 Nov 2021 23:39:23 +0100 Subject: [PATCH] emissive has a problem with some skins --- FModel/ViewModels/ModelViewerViewModel.cs | 50 +++++++++++------------ FModel/Views/ModelViewer.xaml | 7 ++-- FModel/Views/ModelViewer.xaml.cs | 12 ++++-- 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/FModel/ViewModels/ModelViewerViewModel.cs b/FModel/ViewModels/ModelViewerViewModel.cs index f7f987ef..0c8c6847 100644 --- a/FModel/ViewModels/ModelViewerViewModel.cs +++ b/FModel/ViewModels/ModelViewerViewModel.cs @@ -13,7 +13,6 @@ using FModel.Framework; using HelixToolkit.SharpDX.Core; using HelixToolkit.Wpf.SharpDX; using SharpDX; -using SharpDX.Direct3D11; using Camera = HelixToolkit.Wpf.SharpDX.Camera; using Geometry3D = HelixToolkit.SharpDX.Core.Geometry3D; using PerspectiveCamera = HelixToolkit.Wpf.SharpDX.PerspectiveCamera; @@ -57,22 +56,6 @@ namespace FModel.ViewModels set => SetProperty(ref _zAxis, value); } - private bool _showWireframe; - public bool ShowWireframe - { - get => _showWireframe; - set - { - SetProperty(ref _showWireframe, value); - foreach (var g in Group3d) - { - if (g is not MeshGeometryModel3D geometryModel) - continue; - geometryModel.RenderWireframe = !_showWireframe; - } - } - } - private bool _appendModeEnabled; public bool AppendModeEnabled { @@ -112,7 +95,7 @@ namespace FModel.ViewModels } } - public void HideToggleAll() + public void RenderingToggle() { foreach (var g in Group3d) { @@ -123,7 +106,18 @@ namespace FModel.ViewModels } } - public void ToggleDiffuseOnly() + public void WirefreameToggle() + { + foreach (var g in Group3d) + { + if (g is not MeshGeometryModel3D geometryModel) + continue; + + geometryModel.RenderWireframe = !geometryModel.RenderWireframe; + } + } + + public void DiffuseOnlyToggle() { foreach (var g in Group3d) { @@ -134,7 +128,7 @@ namespace FModel.ViewModels { mat.RenderAmbientOcclusionMap = !mat.RenderAmbientOcclusionMap; mat.RenderDisplacementMap = !mat.RenderDisplacementMap; - mat.RenderEmissiveMap = !mat.RenderEmissiveMap; + // mat.RenderEmissiveMap = !mat.RenderEmissiveMap; mat.RenderEnvironmentMap = !mat.RenderEnvironmentMap; mat.RenderIrradianceMap = !mat.RenderIrradianceMap; mat.RenderRoughnessMetallicMap = !mat.RenderRoughnessMetallicMap; @@ -203,7 +197,6 @@ namespace FModel.ViewModels continue; var m = new PBRMaterial { RenderShadowMap = true, EnableAutoTangent = true }; - var parameters = new CMaterialParams(); unrealMaterial.GetParams(parameters); @@ -215,11 +208,17 @@ namespace FModel.ViewModels if (parameters.Normal is UTexture2D normal) m.NormalMap = new TextureModel(normal.Decode()?.Encode().AsStream()); // if (parameters.Specular is UTexture2D specular) - // m.SpecularColorMap = new TextureModel(specular.Decode()?.Encode().AsStream()); - // if (parameters.UseMobileSpecular) - // m.SpecularShininess = parameters.MobileSpecularPower; + // m.AmbientOcculsionMap = new TextureModel(specular.Decode()?.Encode().AsStream()); + // if (parameters.Specular is UTexture2D specularPower) + // { + // m.RoughnessFactor = parameters.MobileSpecularPower; + // m.RoughnessMetallicMap = new TextureModel(specularPower.Decode()?.Encode().AsStream()); + // } // if (parameters.Emissive is UTexture2D emissive) + // { + // m.EmissiveColor = Color4.White; // FortniteGame/Content/Characters/Player/Female/Medium/Bodies/F_MED_Obsidian/Meshes/F_MED_Obsidian.uasset // m.EmissiveMap = new TextureModel(emissive.Decode()?.Encode().AsStream()); + // } } else { @@ -231,8 +230,7 @@ namespace FModel.ViewModels Name = unrealMaterial.Name, Geometry = builder.ToMeshGeometry3D(), Material = m, - IsRendering = isRendering, - FillMode = FillMode.Solid + IsRendering = isRendering }); } } diff --git a/FModel/Views/ModelViewer.xaml b/FModel/Views/ModelViewer.xaml index d10822b0..9d7319e0 100644 --- a/FModel/Views/ModelViewer.xaml +++ b/FModel/Views/ModelViewer.xaml @@ -4,9 +4,8 @@ xmlns:converters="clr-namespace:FModel.Views.Resources.Converters" xmlns:adonisUi="clr-namespace:AdonisUI;assembly=AdonisUI" xmlns:adonisControls="clr-namespace:AdonisUI.Controls;assembly=AdonisUI" - xmlns:adonisExtensions="clr-namespace:AdonisUI.Extensions;assembly=AdonisUI" xmlns:helix="http://helix-toolkit.org/wpf/SharpDX" - WindowStartupLocation="CenterScreen" ResizeMode="CanResize" IconVisibility="Collapsed" Background="#262630" + WindowStartupLocation="CenterScreen" ResizeMode="CanResize" IconVisibility="Collapsed" PreviewKeyDown="OnWindowKeyDown" Closing="OnClosing" Height="{Binding Source={x:Static SystemParameters.MaximizedPrimaryScreenHeight}, Converter={converters:RatioConverter}, ConverterParameter='0.60'}" Width="{Binding Source={x:Static SystemParameters.MaximizedPrimaryScreenWidth}, Converter={converters:RatioConverter}, ConverterParameter='0.60'}"> @@ -29,7 +28,7 @@ - + @@ -41,7 +40,7 @@ + Background="{DynamicResource {x:Static adonisUi:Brushes.Layer3BackgroundBrush}}" /> _applicationView.ModelViewer.LoadExport(export); - private void OnClosing(object sender, CancelEventArgs e) => MyAntiCrashGroup.ItemsSource = null; // <3 + private void OnClosing(object sender, CancelEventArgs e) + { + _applicationView.ModelViewer.AppendModeEnabled = false; + MyAntiCrashGroup.ItemsSource = null; // <3 + } private void OnWindowKeyDown(object sender, KeyEventArgs e) { switch (e.Key) { case Key.W: - _applicationView.ModelViewer.ShowWireframe = !_applicationView.ModelViewer.ShowWireframe; + _applicationView.ModelViewer.WirefreameToggle(); break; case Key.H: - _applicationView.ModelViewer.HideToggleAll(); + _applicationView.ModelViewer.RenderingToggle(); break; case Key.D: - _applicationView.ModelViewer.ToggleDiffuseOnly(); + _applicationView.ModelViewer.DiffuseOnlyToggle(); break; } }