From 3f6ed89667e62d3a97225d2aa97acbb5bdceda2e Mon Sep 17 00:00:00 2001 From: Jarrod Doyle Date: Sun, 26 Jan 2025 12:26:27 +0000 Subject: [PATCH] Build two scenes, one with objects and one without --- KeepersCompound.Lightmapper/LightMapper.cs | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/KeepersCompound.Lightmapper/LightMapper.cs b/KeepersCompound.Lightmapper/LightMapper.cs index bfad390..12df010 100644 --- a/KeepersCompound.Lightmapper/LightMapper.cs +++ b/KeepersCompound.Lightmapper/LightMapper.cs @@ -34,6 +34,7 @@ public class LightMapper private DbFile _mission; private ObjectHierarchy _hierarchy; private Raytracer _scene; + private Raytracer _sceneNoObj; private List _lights; private SurfaceType[] _triangleTypeMap; @@ -56,12 +57,19 @@ public class LightMapper VerifyRequiredChunksExist(); - var mesh = Timing.TimeStage("Build Mesh", BuildMesh); - _triangleTypeMap = mesh.TriangleSurfaceMap; + var (noObjMesh, fullMesh) = Timing.TimeStage("Build Meshes", BuildMeshes); + _triangleTypeMap = fullMesh.TriangleSurfaceMap; + _sceneNoObj = Timing.TimeStage("Build RT NoObj Scene", () => + { + var rt = new Raytracer(); + rt.AddMesh(new TriangleMesh(noObjMesh.Vertices, noObjMesh.Indices)); + rt.CommitScene(); + return rt; + }); _scene = Timing.TimeStage("Build RT Scene", () => { var rt = new Raytracer(); - rt.AddMesh(new TriangleMesh(mesh.Vertices, mesh.Indices)); + rt.AddMesh(new TriangleMesh(fullMesh.Vertices, fullMesh.Indices)); rt.CommitScene(); return rt; }); @@ -180,7 +188,7 @@ public class LightMapper return new ObjectHierarchy(_mission); } - private Mesh BuildMesh() + private (Mesh, Mesh) BuildMeshes() { var meshBuilder = new MeshBuilder(); @@ -189,12 +197,16 @@ public class LightMapper if (!_mission.TryGetChunk("WREXT", out var worldRep) || !_mission.TryGetChunk("BRLIST", out var brList)) { - return meshBuilder.Build(); + return (meshBuilder.Build(), meshBuilder.Build()); } meshBuilder.AddWorldRepPolys(worldRep); + var noObjMesh = meshBuilder.Build(); + meshBuilder.AddObjectPolys(brList, _hierarchy, _campaign); - return meshBuilder.Build(); + var fullMesh = meshBuilder.Build(); + + return (noObjMesh, fullMesh); } private void BuildLightList()