# Vendored libraries

- `planck.mjs`: Planck 1.4.2, https://unpkg.com/planck@1.4.2/dist/planck.mjs. Unmodified distribution. MIT; see `PLANCK-LICENSE.txt`.
- Three.js **r170** examples modules, MIT; see `THREE-LICENSE.txt`. Core Three.js is shared from `../../pinball/vendor/three.module.min.js`. The following files come from the pinned official source paths below. Imports are changed to local relative paths and `.mjs` filenames; otherwise they retain the upstream implementation.
  - `GLTFLoader.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/loaders/GLTFLoader.js
  - `GLTFExporter.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/exporters/GLTFExporter.js
  - `BufferGeometryUtils.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/utils/BufferGeometryUtils.js
  - `OrbitControls.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/controls/OrbitControls.js
  - `RoomEnvironment.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/environments/RoomEnvironment.js
  - `RoundedBoxGeometry.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/geometries/RoundedBoxGeometry.js
  - `EffectComposer.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/postprocessing/EffectComposer.js
  - `Pass.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/postprocessing/Pass.js
  - `RenderPass.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/postprocessing/RenderPass.js
  - `SSAOPass.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/postprocessing/SSAOPass.js
  - `ShaderPass.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/postprocessing/ShaderPass.js
  - `MaskPass.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/postprocessing/MaskPass.js
  - `OutputPass.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/postprocessing/OutputPass.js
  - `SSAOShader.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/shaders/SSAOShader.js
  - `CopyShader.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/shaders/CopyShader.js
  - `OutputShader.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/shaders/OutputShader.js
  - `SimplexNoise.mjs`: https://github.com/mrdoob/three.js/blob/r170/examples/jsm/math/SimplexNoise.js

The Phase 2 workshop uses the controls, neutral room environment and rounded geometry helper. The asset pipeline uses the exporter to produce `../assets/mx450.glb` and the loader to verify it. No remote module or package download is required when viewing the workshop or loading the bundled asset.

The workshop uses the official r170 compositor, SSAO and output modules. Its application configuration limits occlusion to a 60 mm sample radius, attenuates its strength, excludes transparent graphics/shadow overlays from the normal pass, and renders AO at reduced resolution. Full-resolution HDR PBR rendering and final tone/color conversion remain separate. These are viewer effects, not baked into the GLB. `?ao=0` disables occlusion for comparison; unsupported float-color buffers or a compositor failure use the direct renderer.
