Build two scenes, one with objects and one without

This commit is contained in:
Jarrod Doyle 2025-01-26 12:26:27 +00:00
parent 62f2886eb4
commit 3f6ed89667
Signed by: Jayrude
GPG Key ID: 38B57B16E7C0ADF7
1 changed files with 18 additions and 6 deletions

View File

@ -34,6 +34,7 @@ public class LightMapper
private DbFile _mission; private DbFile _mission;
private ObjectHierarchy _hierarchy; private ObjectHierarchy _hierarchy;
private Raytracer _scene; private Raytracer _scene;
private Raytracer _sceneNoObj;
private List<Light> _lights; private List<Light> _lights;
private SurfaceType[] _triangleTypeMap; private SurfaceType[] _triangleTypeMap;
@ -56,12 +57,19 @@ public class LightMapper
VerifyRequiredChunksExist(); VerifyRequiredChunksExist();
var mesh = Timing.TimeStage("Build Mesh", BuildMesh); var (noObjMesh, fullMesh) = Timing.TimeStage("Build Meshes", BuildMeshes);
_triangleTypeMap = mesh.TriangleSurfaceMap; _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", () => _scene = Timing.TimeStage("Build RT Scene", () =>
{ {
var rt = new Raytracer(); var rt = new Raytracer();
rt.AddMesh(new TriangleMesh(mesh.Vertices, mesh.Indices)); rt.AddMesh(new TriangleMesh(fullMesh.Vertices, fullMesh.Indices));
rt.CommitScene(); rt.CommitScene();
return rt; return rt;
}); });
@ -180,7 +188,7 @@ public class LightMapper
return new ObjectHierarchy(_mission); return new ObjectHierarchy(_mission);
} }
private Mesh BuildMesh() private (Mesh, Mesh) BuildMeshes()
{ {
var meshBuilder = new MeshBuilder(); var meshBuilder = new MeshBuilder();
@ -189,12 +197,16 @@ public class LightMapper
if (!_mission.TryGetChunk<WorldRep>("WREXT", out var worldRep) || if (!_mission.TryGetChunk<WorldRep>("WREXT", out var worldRep) ||
!_mission.TryGetChunk<BrList>("BRLIST", out var brList)) !_mission.TryGetChunk<BrList>("BRLIST", out var brList))
{ {
return meshBuilder.Build(); return (meshBuilder.Build(), meshBuilder.Build());
} }
meshBuilder.AddWorldRepPolys(worldRep); meshBuilder.AddWorldRepPolys(worldRep);
var noObjMesh = meshBuilder.Build();
meshBuilder.AddObjectPolys(brList, _hierarchy, _campaign); meshBuilder.AddObjectPolys(brList, _hierarchy, _campaign);
return meshBuilder.Build(); var fullMesh = meshBuilder.Build();
return (noObjMesh, fullMesh);
} }
private void BuildLightList() private void BuildLightList()