Compare commits

..

No commits in common. "651243d91fb47bba518369fe22c7a9bbcf8f9fb4" and "3edc5eb7580b5fe7ce951bede1f2b0bb5b197084" have entirely different histories.

2 changed files with 7 additions and 8 deletions

View File

@ -564,8 +564,8 @@ public class LightMapper
}
var visibleSet = settings.FastPvs switch {
true => pvs.ComputeVisibilityFast(cellIdx),
false => pvs.ComputeVisibilityExact(_lights[i].Position, cellIdx, _lights[i].Radius)
true => pvs.ComputeVisibilityFast(lightCellMap[i]),
false => pvs.ComputeVisibilityExact(_lights[i].Position, lightCellMap[i], _lights[i].Radius)
};
// Log.Information("Light {i} sees {c} cells", i, visibleSet.Count);
@ -1068,17 +1068,16 @@ public class LightMapper
// TODO: direction should already be normalised here
private bool TraceSunRay(Vector3 origin, Vector3 direction)
{
// Avoid self intersection
origin += direction * MathUtils.Epsilon;
var hitResult = _scene.Trace(new Ray
{
Origin = origin,
Direction = Vector3.Normalize(direction),
});
// If origin is very close to a wall, the initial trace to the sun sometimes misses the wall. Now that we have
// backface culling enabled in Embree, this can result in reaching a sky when we shouldn't.
// By doing another occlusion trace in the reverse direction we fix this. Any backfaces we passed through in
// the initial trace become frontfaces to be occluded by.
if (hitResult && !TraceOcclusion(_scene, hitResult.Position + hitResult.ErrorOffset * hitResult.Normal, origin))
if (hitResult)
{
return _triangleTypeMap[(int)hitResult.PrimId] == SurfaceType.Sky;
}

View File

@ -154,7 +154,7 @@ public class PotentiallyVisibleSet
return [];
}
var visibleCells = new HashSet<int> { cellIdx };
var visibleCells = new HashSet<int>();
foreach (var edgeIdx in _graph[cellIdx].EdgeIndices)
{
var edge = _edges[edgeIdx];