# Depth without drift.

Independent article case study. Domain: website consumer / Design Engineering presentation.

An original indexed patch reuses a persistent position buffer. Normalized generated coordinates map through cover sizing and optional camera-ray compensation into a Three.js perspective camera. Actual updated vertex positions are projected with that camera and compared in CSS pixels with an independently calculated 2D cover reference. No camera or face inference is used.

## Attribution and evidence

Studied: [Building a Real-Time 3D Face Mask with MediaPipe, Threlte and Three.js](https://tympanus.net/codrops/2026/09/06/building-a-real-time-3d-face-mask-with-mediapipe-threlte-and-three-js/), Marek Jóźwiak. Article SHA-256: 1fc57bdd832d848252228ebcf9f875bba47b9cc3d66c0920ae24fb906c7f57f7. Analysis SHA-256: 47f3b42b8d2834808f51416ec9dbb69603b13e45d719398308a94b1bbcbc1c1d. Source revision: 3685a062df84de6c12b5583670a4be1e17226b66439c7ee42daf895d335d8600. The revision hashes the article/analysis hashes, the analyst principle and code-block evidence references, plus pinned original source/line hashes and the implementation contract; it identifies studied evidence, not a claim that the original demo executes.

Original acquisition: acquired. Original license: MIT. originalSourceAcquired: true. Source code acquisition is complete. Original runtime remains unresolved: The Svelte/MediaPipe implementation requires a live camera, model/WASM downloads, and browser media permission. The current opaque allow-scripts preview contract does not provide camera access; this is an execution prerequisite, not a paid exclusion.

No original article prose, code, artwork, source project or screenshot is distributed here. The authored-code MIT notice applies only to the independent implementation. Three.js 0.160.0 is an unmodified third-party dependency embedded in index.html; its own MIT notice is included in LICENSE and the inline dependency header. Dependency SHA-256: 170c6789f43217c96b3170f4b42fafe135de7f7cd48497a4218f9757ee1d49fa. No dependency request occurs at runtime. The original source remains acquired/MIT, while its live camera and model prerequisites remain unresolved under the original opaque preview contract. All 63 points and 96 triangles are independently generated; there is no camera request, detector, canonical face topology, face texture or physical-depth estimate. RMS drift is computed for all vertices, including any cropped offscreen; it measures this coordinate mapping, not face-tracking accuracy.

## Initial state and controls

This is a generated membrane, built from 63 editable coordinates. Follow its points through cover cropping, mirroring and depth, then compare the projected mesh with a separate 2D reference.

The page starts stationary. Play motion, where present, advances this study’s presentation until paused; text, bounce, portrait, orbit, strand and mascot motion loops, while the event composer stops at its endpoint. Scroll studies advance through ordinary document scroll or their chapter buttons. Static view stops time-based motion; manual controls still inspect values. The three scroll studies instead show every chapter in ordinary reading flow. Pointer parallax centers its decorative layers. In this projection study, Play motion advances generated input. Step input pauses and advances that input once; Redraw only renders without changing input. Initial compensation is off to make depth drift visible.

Initial control values:

| Control key | Value |
| --- | --- |
| inputAspect | 1.3333333333 |
| frameAspect | 1.4 |
| mirror | yes |
| depth | 0.8 |
| compensate | off |
| surface | lit |
| sampleU | 0.29 |
| sampleV | 0.3 |

## Running and editing

Open index.html directly. It contains all runtime code and visuals and needs no package install, account, network, remote asset or browser-origin storage. Edit its inline style and script to change the downloaded page. styles.css and script.js are reference copies of the inline source; changing those copies alone does not change the running page. Repository regeneration overwrites index.html and all generated copies, including any manual edits. Keep a separate copy when editing a download. The repository authoring modules in vendor/codrops-article-studies/scenes-*.mjs and runtime.mjs regenerate these copies through node scripts/build-codrops-article-studies.mjs. Repository regeneration also needs the private source evidence; downloaded-page execution does not.

## Verification boundary

This generation passed the captured article/analysis hash checks, article-code/paragraph pointer hashes, pinned source/line hashes, record/license/receipt hashes and original runtime snapshot hash, exact ID membership, local canonical Markdown anchor/hash checks, implementation-symbol checks, JavaScript parsing, semantic main/title counts, duplicate-ID checks and runtime URL/storage exclusion. The manifest codeFiles entries identify every emitted file by SHA-256. Each code symbol is a searchable named function, not a claimed executed call trace. Proposed checks are in KNOWLEDGE.json. runtime_verified: false. SG artifact capture proves only a recorded initial render; no interactive runtime, keyboard, accessibility, comfort or performance result is claimed.

Manual Chrome interaction is blocked by extension UI in this session. No alternate browser-control route was used. Preview sizing is native responsive width. Initial-render captures are tracked separately at site/artifacts/full-import/preview-posters/index.json and site/artifacts/full-import/preview-posters/visual-review.json in the repository. No capture receipt is bundled with this download. The bounded initial-render matrix requests all 21 studies at 320 pixels and three representative studies at 1280 pixels; the separate poster surface is 640 × 420. The authored CSS also adapts at 375 and 768 pixels, without claiming those widths were captured. A width request does not mean that capture exists or passed. Motion starts on explicit playback; system reduced motion and the Static view switch stop it.

consumer_reference: consumer-reference/agent-native/registry.json
