Build two scenes, one with objects and one without
This commit is contained in:
parent
62f2886eb4
commit
3f6ed89667
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue