clusters.glsl 600 B

1234567891011121314151617
  1. const int maxLights = 16;
  2. const int maxLightsCluster = 4; // Ensure fast loop unroll before going higher
  3. const float clusterNear = 3.0;
  4. const vec3 clusterSlices = vec3(16, 16, 16);
  5. int getClusterI(vec2 tc, float viewz, vec2 cameraPlane) {
  6. int sliceZ = 0;
  7. float cnear = clusterNear + cameraPlane.x;
  8. if (viewz >= cnear) {
  9. float z = log(viewz - cnear + 1.0) / log(cameraPlane.y - cnear + 1.0);
  10. sliceZ = int(z * (clusterSlices.z - 1)) + 1;
  11. }
  12. return int(tc.x * clusterSlices.x) +
  13. int(int(tc.y * clusterSlices.y) * clusterSlices.x) +
  14. int(sliceZ * clusterSlices.x * clusterSlices.y);
  15. }