diff --git a/PRODUCT_RELEASE_NOTES.md b/PRODUCT_RELEASE_NOTES.md index 1205a977..3f4b37c9 100644 --- a/PRODUCT_RELEASE_NOTES.md +++ b/PRODUCT_RELEASE_NOTES.md @@ -1,7 +1,12 @@ +## 4.23.1 +- tweaked kdtree split limit epsilon for smaller kdtrees + +## 4.23.0 +- tweaked kdtree split limit epsilon for smaller kdtrees + ## 4.22.0 - further improved kdtree loading on NTFS/macbook - ## 4.21.0-prerelease3 - further improved kdtree loading on NTFS/macbook diff --git a/paket.dependencies b/paket.dependencies index 4613f710..1016d0d5 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -50,7 +50,7 @@ nuget Aardvark.GeoSpatial.Opc ~> 5.10.8 nuget Aardium ~> 2.0.10-prerelease0007 -nuget OPCViewer.Base ~> 1.5.2 +nuget OPCViewer.Base ~> 1.6.1 nuget Uncodium.Eigensystems ~> 1.1.2 nuget Chiron ~> 6.3.1 diff --git a/paket.lock b/paket.lock index d3909251..acd6987b 100644 --- a/paket.lock +++ b/paket.lock @@ -5,45 +5,45 @@ NUGET Aardium (2.0.10-prerelease0007) FSharp.Core (>= 4.7) FSys (>= 0.0.1 < 0.1) - Aardvark.Application (5.4.8) + Aardvark.Application (5.4.9) Aardvark.Base.Essentials (>= 5.2.27 < 5.3) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) + Aardvark.Rendering (5.4.9) FShade.Core (>= 5.5.3 < 5.6) FShade.GLSL (>= 5.5.3) FSharp.Core (>= 5.0.1) - Aardvark.Application.Slim (5.4.8) - Aardvark.Application (5.4.8) + Aardvark.Application.Slim (5.4.9) + Aardvark.Application (5.4.9) Aardvark.Base.Essentials (>= 5.2.27 < 5.3) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.Runtime (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) + Aardvark.Rendering (5.4.9) FShade (>= 5.5.3 < 5.6) FSharp.Core (>= 5.0.1) Silk.NET.GLFW (2.15) Unofficial.OpenTK (>= 3.0.21 < 3.1) - Aardvark.Application.Slim.GL (5.4.8) - Aardvark.Application (5.4.8) - Aardvark.Application.Slim (5.4.8) + Aardvark.Application.Slim.GL (5.4.9) + Aardvark.Application (5.4.9) + Aardvark.Application.Slim (5.4.9) Aardvark.Base.Essentials (>= 5.2.27 < 5.3) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.Runtime (>= 5.2.27 < 5.3) Aardvark.Base.Tensors (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) - Aardvark.Rendering.GL (5.4.8) + Aardvark.Rendering (5.4.9) + Aardvark.Rendering.GL (5.4.9) FShade (>= 5.5.3 < 5.6) FSharp.Core (>= 5.0.1) Silk.NET.Core (2.15) Silk.NET.GLFW (2.15) Unofficial.OpenTK (>= 3.0.21 < 3.1) - Aardvark.Application.Slim.Vulkan (5.4.8) - Aardvark.Application (5.4.8) - Aardvark.Application.Slim (5.4.8) + Aardvark.Application.Slim.Vulkan (5.4.9) + Aardvark.Application (5.4.9) + Aardvark.Application.Slim (5.4.9) Aardvark.Base.Essentials (>= 5.2.27 < 5.3) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.Runtime (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) - Aardvark.Rendering.Vulkan (5.4.8) + Aardvark.Rendering (5.4.9) + Aardvark.Rendering.Vulkan (5.4.9) FShade (>= 5.5.3 < 5.6) FSharp.Core (>= 5.0.1) GLSLangSharp (>= 0.4.14 < 0.5) @@ -133,9 +133,9 @@ NUGET Aardvark.SceneGraph.Opc (>= 5.4 < 5.5) FSharp.Core (>= 5.0) FSharp.Data.Adaptive (>= 1.2.13 < 1.3) - Aardvark.GPGPU (5.4.8) + Aardvark.GPGPU (5.4.9) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) + Aardvark.Rendering (5.4.9) FShade.Core (>= 5.5.3 < 5.6) FShade.GLSL (>= 5.5.3) FSharp.Core (>= 5.0.1) @@ -147,7 +147,7 @@ NUGET Aardvark.Base.Tensors (>= 5.2.19 < 5.3) FSharp.Core (>= 5.0.1) Pfim (>= 0.11.2 < 0.12) - Aardvark.Rendering (5.4.8) + Aardvark.Rendering (5.4.9) Aardvark.Base.Essentials (>= 5.2.27 < 5.3) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.Tensors (>= 5.2.27 < 5.3) @@ -155,59 +155,59 @@ NUGET FShade.GLSL (>= 5.5.3) FSharp.Core (>= 5.0.1) FSharp.Data.Adaptive (>= 1.2.13 < 1.3) - Aardvark.Rendering.GL (5.4.8) + Aardvark.Rendering.GL (5.4.9) Aardvark.Assembler (>= 0.0.8 < 0.1) Aardvark.Base.Essentials (>= 5.2.27 < 5.3) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.Runtime (>= 5.2.27 < 5.3) Aardvark.Base.Tensors (>= 5.2.27 < 5.3) Aardvark.Geometry (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) + Aardvark.Rendering (5.4.9) FShade (>= 5.5.3 < 5.6) FSharp.Core (>= 5.0.1) Unofficial.OpenTK (>= 3.0.21 < 3.1) - Aardvark.Rendering.Text (5.4.8) + Aardvark.Rendering.Text (5.4.9) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) - Aardvark.SceneGraph (5.4.8) + Aardvark.Rendering (5.4.9) + Aardvark.SceneGraph (5.4.9) CommonMark.NET (>= 0.15.1 < 0.16) FShade.Core (>= 5.5.3 < 5.6) FShade.GLSL (>= 5.5.3) FSharp.Core (>= 5.0.1) Unofficial.LibTessDotNet (>= 2.0.2 < 2.1) Unofficial.Typography (>= 0.1 < 0.2) - Aardvark.Rendering.Vulkan (5.4.8) + Aardvark.Rendering.Vulkan (5.4.9) Aardvark.Base.FSharp (>= 5.2.27 < 5.3) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.Runtime (>= 5.2.27 < 5.3) Aardvark.Base.Tensors (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) + Aardvark.Rendering (5.4.9) FShade (>= 5.5.3 < 5.6) FSharp.Core (>= 5.0.1) GLSLangSharp (>= 0.4.14 < 0.5) - Aardvark.SceneGraph (5.4.8) + Aardvark.SceneGraph (5.4.9) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) + Aardvark.Rendering (5.4.9) FShade.Core (>= 5.5.3 < 5.6) FShade.GLSL (>= 5.5.3) FSharp.Core (>= 5.0.1) - Aardvark.SceneGraph.IO (5.4.8) + Aardvark.SceneGraph.IO (5.4.9) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.Tensors (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) - Aardvark.SceneGraph (5.4.8) + Aardvark.Rendering (5.4.9) + Aardvark.SceneGraph (5.4.9) AssimpNet (>= 5.0.0-beta1 < 5.1.0-beta) FShade.Core (>= 5.5.3 < 5.6) FShade.GLSL (>= 5.5.3) FSharp.Core (>= 5.0.1) - Aardvark.SceneGraph.Opc (5.4.8) + Aardvark.SceneGraph.Opc (5.4.9) Aardvark.Base.Incremental (>= 5.2.27 < 5.3) Aardvark.Base.IO (>= 5.2.27 < 5.3) - Aardvark.Rendering (5.4.8) - Aardvark.SceneGraph (5.4.8) + Aardvark.Rendering (5.4.9) + Aardvark.SceneGraph (5.4.9) FSharp.Core (>= 5.0.1) SharpZipLib (>= 1.4.1 < 1.5) - Aardvark.Service (5.4.2) + Aardvark.Service (5.4.4) Aardvark.Application (>= 5.4.1) Aardvark.Base (>= 5.2.28 < 5.3) Aardvark.Base.FSharp (>= 5.2.28 < 5.3) @@ -220,7 +220,7 @@ NUGET FsPickler (>= 5.3.2 < 5.4) FsPickler.Json (>= 5.3.2 < 5.4) Suave (>= 2.5.6 < 2.6) - Aardvark.Service.Giraffe (5.4.2) + Aardvark.Service.Giraffe (5.4.4) Aardvark.Application (>= 5.4.1) Aardvark.Base (>= 5.2.28 < 5.3) Aardvark.Base.FSharp (>= 5.2.28 < 5.3) @@ -228,46 +228,46 @@ NUGET Aardvark.Rendering (>= 5.4.1 < 5.5) Aardvark.Rendering.GL (>= 5.4.1) Aardvark.Rendering.Vulkan (>= 5.4.1 < 5.5) - Aardvark.Service (5.4.2) - Aardvark.UI (5.4.2) + Aardvark.Service (5.4.4) + Aardvark.UI (5.4.4) FSharp.Core (>= 5.0.1) FSharp.Data.Adaptive (>= 1.2.13 < 1.3) FsPickler (>= 5.3.2 < 5.4) FsPickler.Json (>= 5.3.2 < 5.4) Giraffe (>= 5.0 < 5.1) Suave (>= 2.5.6 < 2.6) - Aardvark.UI (5.4.2) + Aardvark.UI (5.4.4) Aardvark.Application (>= 5.4.1) Aardvark.Base (>= 5.2.28 < 5.3) Aardvark.Base.FSharp (>= 5.2.28 < 5.3) Aardvark.Base.Incremental (>= 5.2.28 < 5.3) Aardvark.Rendering (>= 5.4.1 < 5.5) Aardvark.SceneGraph (>= 5.4.1 < 5.5) - Aardvark.Service (5.4.2) + Aardvark.Service (5.4.4) FSharp.Core (>= 5.0.1) FSharp.Data.Adaptive (>= 1.2.13 < 1.3) FsPickler (>= 5.3.2 < 5.4) FsPickler.Json (>= 5.3.2 < 5.4) Suave (>= 2.5.6 < 2.6) - Aardvark.UI.Primitives (5.4.2) + Aardvark.UI.Primitives (5.4.4) Aardvark.Application (>= 5.4.1) Aardvark.Base (>= 5.2.28 < 5.3) Aardvark.Base.FSharp (>= 5.2.28 < 5.3) Aardvark.Base.Incremental (>= 5.2.28 < 5.3) Aardvark.Rendering (>= 5.4.1 < 5.5) Aardvark.SceneGraph (>= 5.4.1 < 5.5) - Aardvark.Service (5.4.2) - Aardvark.UI (5.4.2) - Adaptify.Core (>= 1.1.9 < 1.2) + Aardvark.Service (5.4.4) + Aardvark.UI (5.4.4) + Adaptify.Core (>= 1.1.13 < 1.2) Aether (>= 8.3.1 < 8.4) FSharp.Core (>= 5.0.1) FSharp.Data.Adaptive (>= 1.2.13 < 1.3) FsPickler (>= 5.3.2 < 5.4) FsPickler.Json (>= 5.3.2 < 5.4) - Adaptify.Core (1.1.9) + Adaptify.Core (1.1.13) FSharp.Data.Adaptive (>= 1.2.13 < 1.3) - Adaptify.MSBuild (1.1.9) - Adaptify.Core (1.1.9) + Adaptify.MSBuild (1.1.13) + Adaptify.Core (1.1.13) Aether (8.3.1) FSharp.Core (>= 4.3.4) AssimpNet (5.0.0-beta1) @@ -324,7 +324,7 @@ NUGET FSharp.Core (6.0.2) FSharp.Data (3.1.1) FSharp.Core (>= 4.3.4) - FSharp.Data.Adaptive (1.2.14) + FSharp.Data.Adaptive (1.2.15) FSharp.Core (>= 4.7) System.Reflection.Emit.Lightweight (>= 4.6) FsPickler (5.3.2) @@ -418,7 +418,7 @@ NUGET NETStandard.Library (2.0.3) Microsoft.NETCore.Platforms (>= 1.1) Newtonsoft.Json (13.0.2) - OPCViewer.Base (1.5.2) + OPCViewer.Base (1.6.1) Aardvark.Base (>= 5.2.14 < 5.3) Aardvark.Base.FSharp (>= 5.2.14 < 5.3) Aardvark.Geometry.Intersection (>= 5.2.13 < 5.3) diff --git a/src/PRo3D.Core/Surface.fs b/src/PRo3D.Core/Surface.fs index f412b684..2eb68750 100644 --- a/src/PRo3D.Core/Surface.fs +++ b/src/PRo3D.Core/Surface.fs @@ -149,6 +149,8 @@ module DebugKdTreesX = let intersectKdTrees bb (hitObject : Surface) (cache : HashMap) (ray : FastRay3d) (kdTreeMap: HashMap) = let kdtree, c = kdTreeMap |> HashMap.find bb |> loadObjectSet cache + if isNull kdtree.KdIntersectionTree.ObjectSet then + Log.warn "object set null" let kdi = kdtree.KdIntersectionTree let mutable hit = ObjectRayHit.MaxRange @@ -228,7 +230,7 @@ module SurfaceIntersection = let closestHit = hitBoxes |> List.choose(fun key -> - //Log.line "intersection: %s; pr: %f" surf.name surf.priority.value + Log.startTimed "intersection: %s; pr: %f" surf.name surf.priority.value //let ray = r.Ray.Transformed(surf.preTransform.Backward) |> FastRay3d //combine pre and current transform let backward = if surf.transformation.flipZ then @@ -241,6 +243,7 @@ module SurfaceIntersection = let ray = r.Ray.Transformed(backward) |> FastRay3d let hit, c = kd |> DebugKdTreesX.intersectKdTrees key surf cache ray + Log.stop() cache <- c hit ) diff --git a/src/PRo3D.Core/Surface/Surface.Sg.fs b/src/PRo3D.Core/Surface/Surface.Sg.fs index abb58b70..e57535e6 100644 --- a/src/PRo3D.Core/Surface/Surface.Sg.fs +++ b/src/PRo3D.Core/Surface/Surface.Sg.fs @@ -171,24 +171,24 @@ module Sg = [| for h in patchHierarchies do if createKdTrees then - yield KdTrees.loadKdTrees h Trafo3d.Identity ViewerModality.XYZ Serialization.binarySerializer false false DebugKdTreesX.loadTriangles' true + Log.startTimed "[KdTrees] Loading kdtrees: %s" h.opcPaths.Patches_DirAbsPath + let m = Aardvark.VRVis.Opc.KdTrees.loadKdTrees h Trafo3d.Identity ViewerModality.XYZ Serialization.binarySerializer false true DebugKdTreesX.loadTriangles' true + Log.stop() + if HashMap.isEmpty m then + Log.warn "[KdTrees], KdTree map for %s is empty." h.opcPaths.Patches_DirAbsPath + yield m + else + yield m else yield HashMap.empty |] let totalKdTrees = kdTreesPerHierarchy.Length - Log.line "creating %d kdTrees" totalKdTrees + Log.line "fusing %d kdTrees" totalKdTrees let kdTrees = kdTreesPerHierarchy - |> Array.Parallel.mapi (fun i e -> - Log.start "creating kdtree #%d of %d" i totalKdTrees - let r = e - Log.stop() - r - ) - |> Array.fold (fun a b -> HashMap.union a b) HashMap.empty - + |> Array.fold HashMap.union HashMap.empty let createShadowContext (f : Aardvark.GeoSpatial.Opc.PatchLod.PatchNode) (scope : Scope) = diff --git a/src/PRo3D.Core/Surface/SurfaceApp.fs b/src/PRo3D.Core/Surface/SurfaceApp.fs index bfd3e83c..fbd94570 100644 --- a/src/PRo3D.Core/Surface/SurfaceApp.fs +++ b/src/PRo3D.Core/Surface/SurfaceApp.fs @@ -879,12 +879,13 @@ module SurfaceApp = ) Log.stop() Log.startTimed "[RebuildKdTrees] creating kdtrees" - let kdTrees = - hs |> Array.mapi (fun i h -> - KdTrees.loadKdTrees' h Trafo3d.Identity true ViewerModality.XYZ Serialization.binarySerializer true true PRo3D.Core.Surface.DebugKdTreesX.loadTriangles' false + let cnt = + hs |> Array.sumBy (fun h -> + let m = KdTrees.loadKdTrees' h Trafo3d.Identity true ViewerModality.XYZ Serialization.binarySerializer true true PRo3D.Core.Surface.DebugKdTreesX.loadTriangles' false Aardvark.VRVis.Opc.KdTrees.KdTreeParameters.legacyDefault + HashMap.count m ) Log.stop() - Log.line "[RebuildKdTrees] created/validated KdTrees for %d opcs." kdTrees.Length + Log.line "[RebuildKdTrees] created/validated KdTrees for %d opcs." cnt model | None -> model | _ -> model diff --git a/src/opc-tool/Program.fs b/src/opc-tool/Program.fs index 36d9ca20..eea9a242 100644 --- a/src/opc-tool/Program.fs +++ b/src/opc-tool/Program.fs @@ -120,7 +120,7 @@ let generateKdTrees (degreeOfParallelism : Option) (forceKdTreeRebuild : bo let kdTrees = - KdTrees.loadKdTrees' h Trafo3d.Identity true ViewerModality.XYZ serializer forceKdTreeRebuild ignoreMasterKdTree PRo3D.Core.Surface.DebugKdTreesX.loadTriangles' false + KdTrees.loadKdTrees' h Trafo3d.Identity true ViewerModality.XYZ serializer forceKdTreeRebuild ignoreMasterKdTree PRo3D.Core.Surface.DebugKdTreesX.loadTriangles' false Aardvark.VRVis.Opc.KdTrees.KdTreeParameters.legacyDefault for (bb,kdTree) in kdTrees do match kdTree with diff --git a/src/opc-tool/Properties/launchSettings.json b/src/opc-tool/Properties/launchSettings.json index 76afba91..4e55a961 100644 --- a/src/opc-tool/Properties/launchSettings.json +++ b/src/opc-tool/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "opc-tool": { "commandName": "Project", - "commandLineArgs": "--ignoremasterkdtree \"F:\\pro3d\\data\\20200220_DinosaurQuarry2\\Dinosaur_Quarry_2\" --forcekdtreerebuild" + "commandLineArgs": "--ignoremasterkdtree \"I:\\OPC\\GardenCity\\MSL_Mastcam_Sol_926_id_48427\" --forcekdtreerebuild" } } } \ No newline at end of file