2018-11-22 11:08:03 +01:00
|
|
|
|
|
|
|
const int maxLights = 16;
|
2018-12-11 23:05:18 +01:00
|
|
|
const int maxLightsCluster = 4; // Ensure fast loop unroll before going higher
|
2018-11-22 22:47:14 +01:00
|
|
|
const float clusterNear = 3.0;
|
|
|
|
const vec3 clusterSlices = vec3(16, 16, 16);
|
|
|
|
|
2018-12-09 19:27:11 +01:00
|
|
|
int getClusterI(vec2 tc, float viewz, vec2 cameraPlane) {
|
2018-11-22 22:47:14 +01:00
|
|
|
int sliceZ = 0;
|
2018-12-10 09:46:46 +01:00
|
|
|
float cnear = clusterNear + cameraPlane.x;
|
|
|
|
if (viewz >= cnear) {
|
|
|
|
float z = log(viewz - cnear + 1.0) / log(cameraPlane.y - cnear + 1.0);
|
2018-11-22 22:47:14 +01:00
|
|
|
sliceZ = int(z * (clusterSlices.z - 1)) + 1;
|
|
|
|
}
|
|
|
|
return int(tc.x * clusterSlices.x) +
|
|
|
|
int(int(tc.y * clusterSlices.y) * clusterSlices.x) +
|
|
|
|
int(sliceZ * clusterSlices.x * clusterSlices.y);
|
|
|
|
}
|