Debugginfg the bad tiles lighting

This commit is contained in:
samcake 2016-12-12 18:02:14 -08:00
parent 06b7388930
commit d4f4bd4519
2 changed files with 37 additions and 5 deletions

View file

@ -58,7 +58,6 @@ float frustumGrid_eyeToVolumeDepth(float eposZ, float rangeNear, float rangeFar)
return (-eposZ - rangeNear) / (rangeFar - rangeNear);
}
vec3 frustumGrid_eyeToVolume(vec3 epos, mat4 projection, float rangeNear, float rangeFar) {
vec4 clipPos = vec4(epos.x * projection[0][0] + epos.z * projection[2][0],
epos.y * projection[1][1] + epos.z * projection[2][1],
@ -126,14 +125,15 @@ int frustumGrid_eyeDepthToClusterLayer(float eyeZ) {
}
ivec3 frustumGrid_eyeToClusterPos(vec3 eyePos) {
if ((eyePos.z > -frustumGrid.frustumNear) || (eyePos.z < -frustumGrid.frustumFar)) {
/*
if ((eyePos.z > -frustumGrid.frustumNear) || (eyePos.z < -frustumGrid.frustumFar)) {
return ivec3(-2);
}
if (eyePos.z > -frustumGrid.rangeNear) {
return ivec3(0,0,-1);
}
*/
vec3 volumePos = frustumGrid_eyeToVolume(eyePos, frustumGrid.eyeToGridProj, frustumGrid.rangeNear, frustumGrid.rangeFar);
@ -143,8 +143,38 @@ ivec3 frustumGrid_eyeToClusterPos(vec3 eyePos) {
gridPos.z = frustumGrid.dims.z;
}
ivec3 igridPos = ivec3(floor(gridPos));
return ivec3(floor(gridPos));
if ((eyePos.z > -frustumGrid.frustumNear) || (eyePos.z < -frustumGrid.frustumFar)) {
return ivec3(igridPos.x, igridPos.y, - 2);
}
if (eyePos.z > -frustumGrid.rangeNear) {
return ivec3(igridPos.x, igridPos.y, -1);
}
return igridPos;
//ivec3(floor(gridPos));
}
ivec3 frustumGrid_eyeToClusterPosSafe(vec3 eyePos) {
if (eyePos.z <= 0) {
return frustumGrid_eyeToClusterPos(eyePos);
} else {
// Flip the eyePos
vec3 volumePos = frustumGrid_eyeToVolume(vec3(eyePos.x, eyePos.y, -eyePos.z), frustumGrid.eyeToGridProj, frustumGrid.rangeNear, frustumGrid.rangeFar);
vec3 gridPos = frustumGrid_volumeToGrid(volumePos, frustumGrid.dims);
if (gridPos.z >= frustumGrid.dims.z) {
gridPos.z = frustumGrid.dims.z;
}
ivec3 clusterPos = ivec3(floor(gridPos));
return ivec3(clusterPos.x, clusterPos.y, -2);
}
}
int frustumGrid_eyeToClusterDirH(vec3 eyeDir) {

View file

@ -278,7 +278,9 @@ uint32_t scanLightVolumeSphere(FrustumGrid& grid, const FrustumGrid::Planes plan
const auto& zPlanes = planes[2];
// FInd the light origin cluster
auto centerCluster = grid.frustumGrid_eyeToClusterPos(glm::vec3(eyePosRadius));
// auto centerCluster = grid.frustumGrid_eyeToClusterPos(glm::vec3(eyePosRadius));
auto centerCluster = grid.frustumGrid_eyeToClusterPosSafe(glm::vec3(eyePosRadius));
int center_z = centerCluster.z;
int center_y = centerCluster.y;