shader
shader: string = `uniform vec2 froms[INVERTED_TUNNEL_COUNT];uniform vec2 toFromDeltas[INVERTED_TUNNEL_COUNT];uniform float fromRadii[INVERTED_TUNNEL_COUNT];uniform float toRadii[INVERTED_TUNNEL_COUNT];uniform sampler2D noiseTexture;#ifdef WEBGL2_IS_AVAILABLEfloat invertedTunnelTerrain(float h) {return texture(noiseTexture,vec2(h, 0.5))[0] - 0.5;}#elsefloat invertedTunnelTerrain(float h) {return texture2D(noiseTexture,vec2(h, 0.5))[0] - 0.5;}#endiffloat invertedTunnelMinDistance(vec2 target, out float colorIndex) {colorIndex = 3.0;float minDistance = -1000.0;for (int i = 0; i < INVERTED_TUNNEL_COUNT; i++) {vec2 targetFromDelta = target - froms[i];float h = dot(targetFromDelta, toFromDeltas[i])/ dot(toFromDeltas[i], toFromDeltas[i]);float clampedH = clamp(h, 0.0, 1.0);float currentDistance = -mix(fromRadii[i], toRadii[i], clampedH) + distance(targetFromDelta, toFromDeltas[i] * clampedH) - invertedTunnelTerrain(h) / 12.0;minDistance = max(minDistance, -currentDistance);}return minDistance;}`