3D Weight Manifold SURFACE
W[j][i] → texels on manifold · perspective projection modulates facing factor f(j,i,θ,φ)
Drag to rotate · Auto-rotates when released
Lens Projection — What the GPU Samples FRUSTUM
GPU textureFetch proj(sphereUV, viewDir) → foreshortened weight field
Head-on texels = full precision. Rim texels = mipmap degradation. Behind = discarded.
Active Weight Topology COLLAPSE
Flat weight matrix · brightness = facing factor (visible subset = collapsed theory)
Output Comparison — View-Dependent Computation ENTROPY
y_flat (full compute) vs y_view (perspective, energy-saving) vs y_ensemble (multi-view recovery)
GLSL Implementation — Perspective-Dependent Weight Fetch SHADER
// Fragment shader: weight lookups modulated by view angle
uniform sampler2D u_weightSphere; // W mapped to spherical UV
uniform sampler2D u_inputTex; // x mapped to equatorial UV
uniform mat3 u_viewRot; // perspective rotation matrix
uniform float u_facingCutoff; // collapse threshold
void main() {
// Lat/lon for this texel → 3D normal on sphere
vec3 nrm = texelFetch(u_weightSphere, gl_FragCoord.xy, 0).rgb;
// Transform by view rotation using hardware matrix multiply
vec3 rotated = u_viewRot * nrm;
// GPU foreshortening = automatic level-of-detail selection
float facing = max(0.0, -rotated.z);
// Collapse decision: skip computation for back hemisphere
if (facing < u_facingCutoff) discard;
// Sample the weight with perspective-dependent mipmap level
float weight = texture(u_weightSphere, v_uv,
clamp(1.0-facing, 0.0, 3.0)).r;
// Modulate by foreshortening → perspective-dependent contribution
float contribution = weight * input_val * facing;
// Hardware dFdx computes the boundary flux for free
float flux = dFdx(contribution);
outColor = vec4(contribution, flux, facing, 1.0);
}