THREE.JS / FOUNDATIONS 136

Indirect matters.

Direct lights are only one part of a lighting model. Keep the same points, hemisphere irradiance, and ambient-occlusion input, then switch the custom model between ignoring and consuming those context values.

Initializing -

Preparing native and custom indirect-light paths.

Material
-
Lighting model
-
Indirect path
-
AO contract
-
Active lights
-
Graph builds
-
Draw calls
-
Triangles
-
CPU avg
-
CPU p95
-
Context cache
-
Lighting contractready

Light, irradiance gain, and AO uniforms update without rebuilding; material/model changes wait for rebuild.

Lighting graphphysical
surface nodes->lights + AO->PhysicalLightingModel->output

The native model consumes direct light, irradiance, and ambient occlusion through its full PBR path.

The official PhysicalLightingModel implements indirect() and manually invokes ambientOcclusion(). This lab exposes those responsibilities in a custom context. Use ?forceWebGL=1 for WebGL2.

Review direct custom lighting ->
LAB 136 / CUSTOM INDIRECT + AO