diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index d0056336..282752de 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -186,6 +186,7 @@ + diff --git a/FModel/Resources/approaching_storm_cubemap.dds b/FModel/Resources/approaching_storm_cubemap.dds new file mode 100644 index 00000000..c4322d7d Binary files /dev/null and b/FModel/Resources/approaching_storm_cubemap.dds differ diff --git a/FModel/ViewModels/ModelViewerViewModel.cs b/FModel/ViewModels/ModelViewerViewModel.cs index 72a9c21f..5b8c789e 100644 --- a/FModel/ViewModels/ModelViewerViewModel.cs +++ b/FModel/ViewModels/ModelViewerViewModel.cs @@ -4,6 +4,9 @@ using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Net; +using System.Reflection; +using System.Windows; +using System.Windows.Media.Media3D; using CUE4Parse.UE4.Assets.Exports; using CUE4Parse.UE4.Assets.Exports.Material; using CUE4Parse.UE4.Assets.Exports.SkeletalMesh; @@ -94,33 +97,16 @@ namespace FModel.ViewModels private void LoadHDRi() { - var hdri = new FileInfo( - Path.Combine(UserSettings.Default.OutputDirectory, ".data", "approaching_storm.jpg")); - if (!hdri.Exists) - { - var request = new RestRequest($"https://dl.polyhaven.org/file/ph-assets/HDRIs/extra/Tonemapped%20JPG/approaching_storm.jpg", Method.GET); - var response = new RestClient().ExecuteAsync(request).Result; - if (response.StatusCode != HttpStatusCode.OK) - { - var b = new Bitmap(1, 1); - b.SetPixel(0, 0, System.Drawing.Color.DarkGray); - var stream = new MemoryStream(); - b.Save(stream, ImageFormat.Jpeg); - HDRi = TextureModel.Create(stream); - return; - } - // Blur makes reflections soft but these black borders... - // var temp = SKImage.FromBitmap(SKBitmap.Decode(response.RawBytes)); - // var blur = SKImageFilter.CreateBlur(20, 20, SKShaderTileMode.Clamp); // this adds black borders. WHY? - // var blurred = temp.ApplyImageFilter(blur, temp.Info.Rect, temp.Info.Rect, out SKRectI _, out SKPoint _); - using (var writer = hdri.OpenWrite()) - writer.Write(response.RawBytes); - } - HDRi = new TextureModel(hdri.ToString()); + var cubeMap = Application.GetResourceStream(new Uri("/FModel;component/Resources/approaching_storm_cubemap.dds", + UriKind.Relative)); + HDRi = TextureModel.Create(cubeMap?.Stream); } public void LoadExport(UObject export) { +#if DEBUG + LoadHDRi(); +#endif if (!AppendModeEnabled) Clear(); switch (export) { @@ -185,7 +171,7 @@ namespace FModel.ViewModels return; } - SetupCameraAndAxis(convertedMesh.BoundingBox.Min, convertedMesh.BoundingBox.Max); + if (!AppendModeEnabled) SetupCameraAndAxis(convertedMesh.BoundingBox.Min, convertedMesh.BoundingBox.Max); foreach (var lod in convertedMesh.LODs) { @@ -224,8 +210,8 @@ namespace FModel.ViewModels { var id = section.FirstIndex + j * 3 + t; var vert = verts[indices[id]]; - var p = new Vector3(vert.Position.X, -vert.Position.Y, vert.Position.Z); - var n = new Vector3(vert.Normal.X, -vert.Normal.Y, vert.Normal.Z); + var p = new Vector3(vert.Position.X, vert.Position.Z, -vert.Position.Y); // up direction is Y + var n = new Vector3(vert.Normal.X, vert.Normal.Z, -vert.Normal.Y); n.Normalize(); var uv = new Vector2(vert.UV.U, vert.UV.V); builder.AddNode(p, n, uv); @@ -322,9 +308,9 @@ namespace FModel.ViewModels { var minOfMin = min.Min(); var maxOfMax = max.Max(); - Cam.UpDirection = new System.Windows.Media.Media3D.Vector3D(0, 0, 1); - Cam.Position = new System.Windows.Media.Media3D.Point3D(maxOfMax, maxOfMax, (minOfMin + maxOfMax) / 1.25); - Cam.LookDirection = new System.Windows.Media.Media3D.Vector3D(-Cam.Position.X, -Cam.Position.Y, 0); + Cam.UpDirection = new Vector3D(0, 1, 0); + Cam.Position = new Point3D(maxOfMax, maxOfMax, (minOfMin + maxOfMax) / 1.25); + Cam.LookDirection = new Vector3D(-Cam.Position.X, -Cam.Position.Y, 0); var lineBuilder = new LineBuilder(); lineBuilder.AddLine(new Vector3(0, 0, 0), new Vector3(100, 0, 0)); diff --git a/FModel/Views/ModelViewer.xaml b/FModel/Views/ModelViewer.xaml index 2f4e60d4..75f067e7 100644 --- a/FModel/Views/ModelViewer.xaml +++ b/FModel/Views/ModelViewer.xaml @@ -44,8 +44,8 @@ + ShowCameraTarget="False" BackgroundColor="#2A2B34" + EnableSSAO="True" SSAOIntensity="1" FXAALevel="Ultra" MSAA="Maximum" EnableSwapChainRendering="True">