ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
인체 구강 해부학 3D 인터랙티브 아틀라스로, 28개의 영구치·턱·잇몸·치수·치주인대·신경을 개별 선택 가능하며 콘빔 CT에서 분할되었습니다
Interactive 3D atlas of human oral anatomy — 28 individually selectable permanent teeth, jaws, gingiva, pulp, periodontal ligament and nerve supply, all segmented from one cone-beam CT. Takes a simula
교육Python · JavaScriptGitHub @NateSaindon온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Interactive 3D atlas of human oral anatomy in the browser — 28 selectable permanent teeth, jaws, gingiva, pulp, PDL and nerve supply, all segmented from one cone-beam CT. Takes a simulated periapical radiograph of any tooth, with that patient's own trabecular bone on the film. Linux, macOS, Windows, iPad.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Interactive 3D atlas of human oral anatomy, in the browser — segmented from a
real cone-beam CT, and it takes its own radiograph. One codebase runs on
Linux, macOS, Windows and iPad — install it to the home screen and it works
offline.
Live: https://natesaindon.github.io/3Dentes/ · What changed:
CHANGELOG.md (currently v0.9.2)
The anatomy is segmented from one cone-beam CT at 0.16 mm isotropic — hard
tissue, pulp, periodontal ligament, gingiva and the nerve supply, all of one
person. Fading the teeth back is what the layer opacity is for.README 전문 보기 ↗Interactive 3D atlas of human oral anatomy, in the browser — segmented from a real cone-beam CT, and it takes its own radiograph. One codebase runs on Linux, macOS, Windows and iPad — install it to the home screen and it works offline.
Live: https://natesaindon.github.io/3Dentes/ · What changed: CHANGELOG.md (currently v0.9.2)
The anatomy is segmented from one cone-beam CT at 0.16 mm isotropic — hard tissue, pulp, periodontal ligament, gingiva and the nerve supply, all of one person. Fading the teeth back is what the layer opacity is for.
The sensor and the beam are placed in the mouth in the 3D view, and the film beside them is computed from the same geometry. Selecting any part of a tooth — including its enamel or its crown — aims the tube at it.
Nothing about the following is drawn on. The projection is built from a source point and the receptor rectangle, so the errors of the technique are consequences of where the tube and the film were put — the film even reports what the tooth measures on it against its true length.
Different parts of this model stand on very different evidence, and the atlas is built to keep them apart rather than render them alike:
| Measured | Teeth, mandible, maxilla, the mandibular canal, and the pulp — the pulp traced by hand on the slices, because no threshold separates it from dentin at this resolution. |
| Derived | Gingiva, lofted from the measured cementoenamel junction and refitted to the published cervical-line curvature. Enamel, a depth-limited shell whose extent is measured and whose thickness is literature. The periodontal ligament and the lamina dura, both measured in position but drawn thicker than the truth — the ligament is barely one voxel, and the socket wall is drawn continuous rather than only where cortex was resolved. |
| Schematic | The two zirconia crowns: their outline is measured, but this scan saturates and cannot measure their density, which is the material's from the literature. The nerve inside the mandibular canal — CBCT resolves the canal, not its contents. The mental and incisive branches. Every maxillary nerve: the superior alveolar canals are thin, often dehiscent, and not reliably visible at 0.16 mm. |
The app says this per structure, not just here. Select anything and the detail panel states its tier — measured, derived or schematic — the method that produced it, and a source where the shape came from the literature rather than the scan. That is a build-enforced field on every structure rather than a note in a README, because the question "how do you know?" gets asked about the thing you just clicked, not about the project.
This is a study and visualisation aid, not a complete clinical reference. The app states this on screen; please keep it that way in any fork.
Still on the list — including a caries slider, an age-calcification slider, and arteries and veins — is in docs/wishlist.md. The pathology feature has its own tracker in docs/pathology-wishlist.md: none of it is built, and everything in it would be authored disease on a healthy dentition, labelled as such.
npm install
npm run build:assets # -> public/dentition.glb + teeth.json
npm run dev # http://localhost:5173/3Dentes/
The STLs are vendored in assets/cbct/stl/, so the build works offline. Earlier
versions had a second, BodyParts3D-derived asset tree selected by a
TOOTH_SOURCE environment variable; that tree has been removed and there is one
source now.
The CBCT pipeline itself is not part of npm — it is the Python in
tools/cbct/, and it needs the imaging data, which is not in this repo.
To reach the dev server from an iPad on the same network, npm run dev -- --host.
tools/manifest.mjs which structures to use, their layer, anatomical side,
and the notation derivation (single source of truth)
tools/build-assets.mjs STL -> welded, smooth-shaded, y-up, centred .glb
tools/cbct/ the Python that produced assets/cbct/ from the scan:
segmentation, arch split, pulp tracing, gingiva, nerves
src/scene.js renderer, lighting, camera, camera flights
src/picking.js raycast selection, drag-vs-click, see-through handling
src/odontogram.js the tooth chart
src/ui.js layer, notation and detail panels
src/main.js wiring and selection state
CLAUDE.md carries the long-form record of this pipeline — every rule that cost
something to learn, and the things already ruled out. Read it before changing
anything under tools/cbct/.
FMA identifiers are the join key throughout: a structure is FMA55697
everywhere — the source filename, the glTF node name, and the key in
teeth.json.
The build refuses to produce a mislabelled model. Two assertions run on every
build. The first is laterality: anatomical right is negative x, and a structure
labelled left that sits on the right fails the build. The second checks the tooth
numbering against the tooth shapes — Universal, FDI and Palmer are all derived
from one arch/side/position triple, so they always agree with each other, and
agreeing with each other is not the same as being right. So the teeth are ordered
around each arch geometrically and that order must match the numbering, and
molars and canines are identified from volume, root count and length and must
land on the positions claiming them. node tools/tooth-morphology.test.mjs
corrupts the mapping in six plausible ways and confirms each is caught.
A few things that were not obvious and are easy to regress:
@gltf-transform's normals() generates flat normals, not smooth ones,
hence the hand-rolled area-weighted computeSmoothNormals.checkLaterality asserts every structure labelled left or right
sits on the expected side. An atlas that confidently mislabels a side is worse
than no atlas.Two things with two different standings:
src/, tools/) — MIT. See LICENSE.assets/cbct/, and the dentition.glb built from it) — Nate
Saindon's own scan, published with his explicit consent, and licensed
CC BY-NC 4.0. Use,
adapt and redistribute it non-commercially, including in teaching, with
attribution: "Anatomy from 3Dentes by Nate Saindon, CC BY-NC 4.0."
Commercial use is not granted here — ask.The atlas previously vendored BodyParts3D meshes under CC BY-SA 2.1 Japan. All of them have been replaced by measured CBCT anatomy and removed from the repository, so no ShareAlike obligation reaches any part of this project. Full detail, including what that inheritance used to cover, is in ATTRIBUTION.md.
This repo contains one individual's medical imaging derivatives, with consent. It contains no DICOM, no raw volumes, and no third-party patient data — and it never should.