Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
197 commits
Select commit Hold shift + click to select a range
58f03cd
test(bench): add three.js parity bench (no bridging)
apresmoi May 29, 2026
039d079
feat(polycss): three.js-shaped position + zoom at API boundary
apresmoi May 29, 2026
6b63d56
chore(website): legacy zoom compat for vanilla-mounted scenes
apresmoi May 29, 2026
f423afa
test(bench): drive directional + ambient lights from synced sliders
apresmoi May 29, 2026
3da0091
feat(polycss): light direction in user-frame at the API boundary
apresmoi May 29, 2026
1f89851
feat(lighting): physical Lambert in shadePolygon — Three.js parity
apresmoi May 29, 2026
6bb8ff3
fix(lighting): BRDF_Lambert wraps ambient too — exact Three.js parity
apresmoi May 29, 2026
6c6129b
fix(shadow): only paint shadows on receivers when one exists
apresmoi May 29, 2026
0baa8a0
feat(shadow): physical Three.js-shaped shadow color
apresmoi May 29, 2026
7fcb8e8
test(bench): rebake floor atlas on light change for static-mode parity
apresmoi May 29, 2026
1c40283
test(bench): add cottage OBJ + dropdown for textured parity testing
apresmoi May 29, 2026
feae31b
test(bench): cottage normalization → bbox MIN at origin (PolyCSS parity)
apresmoi May 29, 2026
db9a17c
test(bench): cottage on floor + no texture flicker on drag
apresmoi May 29, 2026
7880492
refactor(parser): remove gridShift — bbox MIN at origin, like Three.js
apresmoi May 29, 2026
174c893
test(bench): enlarge three.js shadow frustum so grazing-light shadows…
apresmoi May 29, 2026
cb0fc0f
test(bench): scale Three.js DirectionalLight.position out to fix shad…
apresmoi May 29, 2026
84790ea
test(bench): auto-fit three.js shadow camera to the scene bbox
apresmoi May 29, 2026
0fee4ee
feat(lighting): physical Lambert for textured atlas tints
apresmoi May 29, 2026
835fcf7
fix(bench): textureLighting "static" → "baked" — restore per-face Lam…
apresmoi May 29, 2026
04bc2e9
test(bench): textureQuality: 1 — sharp cottage textures in parity bench
apresmoi May 29, 2026
6e8808d
test(bench): add baked/dynamic lighting mode dropdown
apresmoi May 29, 2026
066eb8c
feat(shadow): allow self-shadow on receivers that also cast
apresmoi May 30, 2026
bf0e014
fix(shadow): epsilon-strict half-space test kills self-shadow artefacts
apresmoi May 30, 2026
678985e
fix(shadow): semi-transparent on textured receivers, ambient-only on …
apresmoi May 30, 2026
59c05e7
test(bench): use BasicShadowMap on three.js to match PolyCSS hard edges
apresmoi May 30, 2026
ba230fd
fix(shadow): per-group opacity for textured self-shadow
apresmoi May 30, 2026
f2b7a7e
fix(shadow): gamma-correct opacity for textured self-shadow
apresmoi May 30, 2026
0f416eb
fix(shadow): smaller self-shadow eps + bench shadow.lift=0 + PCFShado…
apresmoi May 30, 2026
ac1b594
test(bench): add 3D "E" mesh option for clear self-shadow comparison
apresmoi May 30, 2026
ee240e5
fix(shadow): drop receiver-SVG lift from 5px to 0.5px
apresmoi May 30, 2026
51267ea
fix(renderer): wire scene-level seamBleed into the solid leaf renderer
apresmoi May 30, 2026
a10f969
test(bench): add 'Copy state URL' button to the panel
apresmoi May 30, 2026
872c439
feat(shadow): cached per-light raytrace + skip shadow paint on fully-…
apresmoi May 30, 2026
4c04f4b
Merge branch 'main' into feat/three-parity
apresmoi May 30, 2026
daee2d8
fix(parser): drop gridShift + disable per-light raytrace (cottage par…
apresmoi May 30, 2026
2b13a8e
feat(scene): in-place rebakeAtlas with pre-decode to remove drag flicker
apresmoi May 30, 2026
1059a2a
fix(scene): serialise rebakeAtlas so concurrent ticks don't fight
apresmoi May 30, 2026
c237a0e
feat(bench): debounced baked rebake + atlas leaves drop background sh…
apresmoi May 31, 2026
3d8f5d9
fix(styles): dynamic Lambert formula matches Three.js MeshLambertMate…
apresmoi May 31, 2026
085d641
fix(atlas): preserve dynamic-mode normals in async pages-ready callback
apresmoi May 31, 2026
73241d9
feat(debug): emit data-poly-index on every leaf for devtools pinpointing
apresmoi May 31, 2026
faed11d
fix(shadow): keep small surface features from interior occlusion cull
apresmoi May 31, 2026
d00e1e2
fix(shadow): reduce SELF_SHADOW_EPS and lift to shrink junction-corne…
apresmoi May 31, 2026
51acba2
fix(shadow): Minkowski-expand receiver outline to close adjacent-face…
apresmoi May 31, 2026
692ad3c
fix(shadow): apply mesh scale to shadow-projection world coords
apresmoi May 31, 2026
8bda3ae
fix(transform): scale pivots from mesh origin (Three.js parity), rota…
apresmoi May 31, 2026
c5c39aa
fix(shadow): scale shadow geometry from mesh origin to match wrapper …
apresmoi May 31, 2026
6a84580
feat(bench): unify cottage controls — x/y/z position sliders + scale …
apresmoi May 31, 2026
c37e8ab
feat(bench): unify per-mesh transform into one Object panel (x/y/z/sc…
apresmoi May 31, 2026
669211d
Merge remote-tracking branch 'origin/main' into feat/three-parity
apresmoi May 31, 2026
8828598
feat(bench): add per-mesh rotation sliders + directional-light helper…
apresmoi May 31, 2026
779b850
fix(shadow): wire receiver lift through shadow.lift option + zoom-sca…
apresmoi May 31, 2026
c15d86d
feat(bench): draggable directional-light helper wired to TransformCon…
apresmoi May 31, 2026
1a994b9
feat(bench): gallery-style draggable rhombus light helper (rotate-by-…
apresmoi May 31, 2026
af87116
fix(bench): light-helper drag uses stopImmediatePropagation to block …
apresmoi May 31, 2026
b601523
fix(bench): light helper follows mouse during drag (drop guarded setT…
apresmoi May 31, 2026
97343f2
feat(core): screenToWorldOnSphere for cursor-perfect light helper drag
apresmoi May 31, 2026
9c725e6
fix(core): screenToWorldOnSphere falls back to silhouette so drag tra…
apresmoi May 31, 2026
005f17b
refactor(scene): extract types, equality, transforms from createPolyS…
apresmoi May 31, 2026
0f5e07a
refactor(scene): extract shadow geometry helpers (groupReceiverFaceGr…
apresmoi May 31, 2026
e250473
refactor(scene): extract lighting CSS-var helpers and baked-solid pre…
apresmoi May 31, 2026
28cf0e9
refactor(scene): extract ShadowSvgState + ground SVG primitives
apresmoi May 31, 2026
68ea57e
refactor(scene): introduce SceneContext + extract MeshEntry/ReceiverF…
apresmoi May 31, 2026
c2bd2ee
refactor(scene): extract shadow cache management + emitGroundShadow
apresmoi May 31, 2026
30cfece
refactor(scene): extract emitReceiverShadows (~625 LOC) into its own …
apresmoi May 31, 2026
7d6acd7
feat(bench): add castle to three-parity dropdown with synthetic MTL
apresmoi May 31, 2026
e0baf7e
fix(gallery): lightHelperPosition in VanillaScene uses post-parity wo…
apresmoi May 31, 2026
75314ce
refactor(react+vue): PolyMesh position to post-parity world units wit…
apresmoi May 31, 2026
cffddfe
fix(scene): baked-solid lighting preview cascade matches Three.js (sR…
apresmoi May 31, 2026
91ba4db
feat(gallery): cursor-perfect light helper drag via screenToWorldOnSp…
apresmoi May 31, 2026
e9cb248
feat(dock): rename Key→Light intensity, widen light/ambient/shadow-re…
apresmoi May 31, 2026
d53ebe8
fix(scene): commitBakedSolidLighting uses in-place rebake so atlas le…
apresmoi May 31, 2026
1890764
fix(scene): commitBakedSolidLighting refreshes BOTH solid + atlas lea…
apresmoi May 31, 2026
9e4763f
fix(gallery): skip CSS-cascade preview in baked mode so solid leaves …
apresmoi May 31, 2026
b95bee3
feat(gallery+bench): add Self-shadow toggle (per-mesh receiveShadow)
apresmoi May 31, 2026
24ce8e0
fix(gallery): Self-shadow toggle auto-enables Cast shadow + Show grou…
apresmoi May 31, 2026
bc3ca63
fix(scene): castle outer-wall self-shadows (occlusion raytrace + rece…
apresmoi May 31, 2026
d28f80d
feat(bench): three-parity gains cast-shadow/floor/autoCenter/light-co…
apresmoi May 31, 2026
7aa2406
feat(bench): shadow-oracle.html — per-pixel diff debugger with polygo…
apresmoi May 31, 2026
58915f3
fix(scene): close receiver-shadow seam gaps with same-color stroke bleed
apresmoi May 31, 2026
2e758dd
fix(scene): bump receiver-shadow stroke 1px → 2px to overcome solid s…
apresmoi May 31, 2026
9517640
fix(render): halve solid seam bleed 1.5 → 0.75 CSS px
apresmoi May 31, 2026
b55cf13
revert(render): restore DEFAULT_SOLID_SEAM_BLEED to 1.5
apresmoi May 31, 2026
831e051
refactor(render): consolidate seam-bleed constant to single source of…
apresmoi May 31, 2026
1b67c81
feat(scene): reinterpret options.seamBleed as a 0..1 ratio (was absol…
apresmoi May 31, 2026
0f76d5d
feat(scene): seamBleed ratio scales every per-strategy bleed too
apresmoi May 31, 2026
815594d
fix(scene): bump receiver-shadow stroke 2 → 3 px to cover residual su…
apresmoi Jun 1, 2026
ec4e14a
feat(bench): add coliseum mesh to three-parity + shadow-oracle
apresmoi Jun 1, 2026
68964ca
refactor(core): host receiver-shadow face grouping + react/vue ground…
apresmoi Jun 1, 2026
0dbf507
feat(react,vue,core): port receiver-face shadows to all three renderers
apresmoi Jun 1, 2026
7a87fc7
fix(react,vue): zoom semantics match vanilla (zoom / BASE_TILE for CS…
apresmoi Jun 1, 2026
cfea624
fix(react,vue): apply optimizeMeshPolygons in PolyMesh + add merge prop
apresmoi Jun 1, 2026
b0b0782
fix(react,vue): apply worldDirectionToCss to shadow light + sync benc…
apresmoi Jun 1, 2026
6f5efd1
fix(react,vue): camera CSS + orthographic perspective parity with van…
apresmoi Jun 1, 2026
c50a104
fix(core): keep borderShape strategy active in dynamic lighting (vani…
apresmoi Jun 1, 2026
27da786
test(bench): add iframe-meas + match-viewport scripts confirming rend…
apresmoi Jun 1, 2026
e59acfc
test(bench): add _strat-check.mjs feature-detection probe
apresmoi Jun 1, 2026
632aa34
fix(react,vue): add buildBasisHints + data-poly-index parity with van…
apresmoi Jun 1, 2026
2861906
feat(core,react,vue): add TextureCornerShapeSolidPoly + filterAtlasPl…
apresmoi Jun 1, 2026
77844ff
fix(react,vue): apply worldDirectionalLightToCss to bakedDirectional …
apresmoi Jun 1, 2026
ed7ba18
fix(react,vue): forward scene lights to atlas plan even in dynamic mo…
apresmoi Jun 1, 2026
97855a4
fix(react,vue): mirror vanilla dedupByCaster on receiver-shadow polyg…
apresmoi Jun 1, 2026
9649903
feat(react,vue): expose voxelSource prop on PolyMesh for direct voxel…
apresmoi Jun 1, 2026
0b34bac
feat(elements): add cast-shadow + receive-shadow attributes on <poly-…
apresmoi Jun 1, 2026
5b2c7eb
feat(elements): expose objOptions attributes on <poly-mesh>
apresmoi Jun 1, 2026
6bbb4eb
feat(react,vue): port lightOccludedPolyIndices self-shadow path
apresmoi Jun 1, 2026
73defa3
fix(core): don't auto-forward options.seamEdges into computeTextureAt…
apresmoi Jun 1, 2026
f1da404
feat(bench): parity-quad 4-up view with live postMessage sync across …
apresmoi Jun 1, 2026
58501e9
refactor(bench): parity-quad mounts all 4 renderers inline via public…
apresmoi Jun 1, 2026
ddd473d
feat(bench): parity-quad gains shadow flags + shadow-oracle defaults …
apresmoi Jun 1, 2026
e097d5f
fix(bench): parity-quad vanilla + html drag propagates to other panes
apresmoi Jun 1, 2026
fd85bb2
fix(bench): parity-quad HTML pane sets receive-shadow on the main mesh
apresmoi Jun 1, 2026
c9b7fca
fix(bench): parity-quad lift shadow 1 screen-px above floor to win z-…
apresmoi Jun 1, 2026
ab45556
fix(bench): parity-quad clamps dir.z >= 0.05 so light can't drop belo…
apresmoi Jun 1, 2026
9a11239
refactor(bench): perf-* drive full state from URL params + postMessag…
apresmoi Jun 1, 2026
a9c2467
feat(bench): parity-quad pane labels become bigger red links that ope…
apresmoi Jun 1, 2026
b10b187
fix(react,vue): dynamic-mode parity — PolyScene swaps light dir to CS…
apresmoi Jun 1, 2026
5c3c9f5
fix(react,vue): portal receiver-shadow SVGs out of mesh wrapper
apresmoi Jun 1, 2026
2e99fc8
fix(react,vue): include <i> in dynamic-mode Lambert color rule
apresmoi Jun 1, 2026
f339241
test(vue): update dynamic-lighting scene-var test for CSS-frame parity
apresmoi Jun 1, 2026
f200b62
feat(bench): add apple GLB mesh to shadow-oracle.html
apresmoi Jun 1, 2026
1f59543
fix(scene): re-render all meshes on textureLighting change
apresmoi Jun 1, 2026
c3f49c8
feat(shadow): self-shadow seam cull via shared-edge adjacency + min-area
apresmoi Jun 1, 2026
4ac8620
perf(vue): memoize selfShadowEdgeMap via computed()
apresmoi Jun 1, 2026
cd38732
fix(gallery): VanillaScene floor opts in to receiveShadow
apresmoi Jun 1, 2026
c87bd79
fix(gallery): shadow lift positive so the floor receiver shows the sh…
apresmoi Jun 1, 2026
3782519
fix(gallery): split VanillaScene effect 2 into camera-only + lighting…
apresmoi Jun 1, 2026
2066545
fix(orbit): clamp rotX to [0, 89] so the floor stays front-facing
apresmoi Jun 1, 2026
7940543
feat(scene): gate data-poly-shadow-* attrs behind debugShadowAttrs op…
apresmoi Jun 1, 2026
fa13bc8
fix(gallery): revert buggy floor-pad-from-shadowMaxExtend conversion
apresmoi Jun 1, 2026
51c7508
Merge remote-tracking branch 'origin/main' into feat/three-parity
apresmoi Jun 2, 2026
8abf166
chore: remove root-level debug probe scripts and screenshots
apresmoi Jun 2, 2026
1bd0ede
fix(shadow): drop virtual ground fallback for three.js receive-shadow…
apresmoi Jun 2, 2026
b2f85fe
fix(shadow): tight receiver SVG bbox + mount inside receiver wrapper
apresmoi Jun 2, 2026
09adff8
test(bench): add perspective-receiver-shadow repro page
apresmoi Jun 2, 2026
90c1a3b
fix(shadow): clip receiver shadow against member polygons, not just f…
apresmoi Jun 2, 2026
e48c36b
test(bench): add flight-system-support GLB to shadow-oracle
apresmoi Jun 2, 2026
e473a1a
fix(shadow): mount receiver SVG on scene root again, member-clip supe…
apresmoi Jun 2, 2026
d56fd80
feat(core): add { center } option to parseGltf + parseObj for centroi…
apresmoi Jun 2, 2026
c68ce2e
fix(polycss)!: mesh rotation/position/scale pivot at local (0,0,0); w…
apresmoi Jun 2, 2026
6db6a20
fix(core): apply wrapper CSS rotation matrix in back-face cull and vo…
apresmoi Jun 2, 2026
e44bff6
fix(shadow): apply mesh rotation to caster + receiver world vertices
apresmoi Jun 2, 2026
a5b106a
feat(shadow): group all shadow SVGs inside .polycss-shadows wrapper
apresmoi Jun 2, 2026
fd87eec
fix(shadow): apply sliver cull on per-member-clip area, drop aspect-o…
apresmoi Jun 2, 2026
1cb5422
fix(shadow): receiver back-face cull skips mesh rotation (face plane …
apresmoi Jun 2, 2026
b4743fb
test(bench): shadow-oracle always emits debug attrs + softer receiver…
apresmoi Jun 2, 2026
6c56052
fix(shadow): tear down receiver SVGs when receiveShadow flips off
apresmoi Jun 2, 2026
3a4801f
feat(gallery): brighter default lighting + darker ground for post-par…
apresmoi Jun 2, 2026
2cf08c5
test(bench): add fire-extinguisher OBJ to shadow-oracle
apresmoi Jun 2, 2026
c859d46
fix(gallery): restore CSS-cascade light preview during baked-mode giz…
apresmoi Jun 2, 2026
0423777
fix(atlas): drop pseudo-shadow occlusion from baked solid diffuse so …
apresmoi Jun 2, 2026
19a5e4e
fix(shadow): tear down receiver SVGs when castShadow toggles off
apresmoi Jun 3, 2026
fb7d243
fix(shadow): apply shadow.maxExtend to receiver-face path
apresmoi Jun 3, 2026
aea2b8e
chore(bench): drop stale shadow diagnostic scripts + refactor-baselin…
apresmoi Jun 3, 2026
8bf8aac
feat(bench): expose shadow.maxExtend via me= URL param + plumb into p…
apresmoi Jun 3, 2026
5ef0020
perf(shadow): cull caster polygons facing away from light
apresmoi Jun 3, 2026
cbfb83e
Revert "perf(shadow): cull caster polygons facing away from light"
apresmoi Jun 3, 2026
7b9a1a5
Reapply "perf(shadow): cull caster polygons facing away from light"
apresmoi Jun 3, 2026
fbcb31b
fix(voxel): match polygon-path Lambert (sRGB+/π) in brush shading
apresmoi Jun 3, 2026
a3a3785
fix(voxel): switch direct→polygon renderer when castShadow toggles on
apresmoi Jun 3, 2026
5dff12d
test(voxel): use ambient=π so /π Lambert cancels in identity-color as…
apresmoi Jun 3, 2026
8f84973
chore(bench): shadow-regression fixture + perf research log
apresmoi Jun 3, 2026
982b7e4
docs(bench): identify true teapot-floor cost — 2182 triangles per pat…
apresmoi Jun 3, 2026
51aeeb5
docs(bench): H9 silhouette extraction design (pending H2 result)
apresmoi Jun 3, 2026
6a4df18
feat(core): caster silhouette extraction helper + unit tests (H9 prep)
apresmoi Jun 3, 2026
ae0de85
chore(bench): three.js parity shots script for visual regression
apresmoi Jun 3, 2026
002750c
docs(bench): log H2 path-simplify iteration (flat win, recommend disc…
apresmoi Jun 3, 2026
c144aaf
docs(bench): split shadow vs lighting cost — H9 targets the 95%
apresmoi Jun 3, 2026
feb4ea7
perf(shadow): per-caster-mesh silhouette extraction (H9)
apresmoi Jun 3, 2026
1c34666
docs(bench): log H9 silhouette extraction iteration (cherry-pick)
apresmoi Jun 3, 2026
5337ae4
perf(shadow): quantize light direction to skip per-frame re-emit (H3)
apresmoi Jun 3, 2026
1417a60
docs(bench): log H3 light-quantize iteration (recommend cherry-pick)
apresmoi Jun 3, 2026
2cafc2b
docs(bench): log H10 quantize-CSS-vars NEGATIVE — style trigger isn't…
apresmoi Jun 3, 2026
40c0347
docs(bench): H10 also rules out scene-transform write; dynamic-Lamber…
apresmoi Jun 3, 2026
e9cf56c
perf(shadow): silhouette extraction for self-shadow casters (H9b)
apresmoi Jun 3, 2026
4e9eac9
docs(bench): log H9b silhouette self-shadow iteration (recommend cher…
apresmoi Jun 3, 2026
77f3206
perf(lighting): quantize light + clip CSS vars to 0.01 (H10)
apresmoi Jun 3, 2026
567f1fe
docs(bench): H10 REVISITED — root cause was --clx/cly/clz not --plx/y…
apresmoi Jun 3, 2026
2467352
docs(bench): log H11 receiver-face coalesce iteration (NEGATIVE, disc…
apresmoi Jun 3, 2026
ecb3d50
docs(bench): H8 pre-flight prediction — 75% byte-equal d= hit rate po…
apresmoi Jun 3, 2026
7f99ddc
docs(bench): H11b silhouette-onto-proxy design (next high-ROI after H8)
apresmoi Jun 3, 2026
c8bdb1b
docs(bench): log H8 v2 d= memoize iteration (NEGATIVE, discard)
apresmoi Jun 3, 2026
2187a1e
perf(shadow): silhouette onto OBB receiver proxies for self-shadow (H…
apresmoi Jun 3, 2026
fbdf029
docs(bench): log H11b OBB-proxy iteration (recommend cherry-pick)
apresmoi Jun 3, 2026
ef6c3fb
docs(bench): TL;DR loop summary — 7-10× fps on worst-case teapot-self…
apresmoi Jun 3, 2026
774c45e
perf(lighting): mirror H10 CSS-var quantize to React + Vue PolyScene/…
apresmoi Jun 3, 2026
25a65a1
docs(bench): log H10 React+Vue mirror in TL;DR table
apresmoi Jun 3, 2026
307c553
Revert "docs(bench): log H11b OBB-proxy iteration (recommend cherry-p…
apresmoi Jun 3, 2026
3f8ef23
Revert "perf(shadow): silhouette onto OBB receiver proxies for self-s…
apresmoi Jun 3, 2026
216880a
docs(bench): mark H11b reverted — broke gallery self-shadow visibility
apresmoi Jun 3, 2026
bc421bd
Merge remote-tracking branch 'origin/main' into feat/three-parity
apresmoi Jun 3, 2026
c936154
fix(merge): apply H10 quantize to per-mesh light override + update or…
apresmoi Jun 3, 2026
ae523ce
Revert "perf(shadow): silhouette extraction for self-shadow casters (…
apresmoi Jun 3, 2026
3968bf8
docs(bench): mark H9b reverted — broke coliseum self-shadow contrast
apresmoi Jun 3, 2026
c08b031
fix(react,vue): mirror vanilla three.js parity fixes into PolyMesh + …
apresmoi Jun 3, 2026
f37113b
test(core): refresh optimizer + parseVox counts post-gridShift drop
apresmoi Jun 3, 2026
4f79743
fix(vue,test): green the remaining pre-existing branch failures
apresmoi Jun 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 0 additions & 139 deletions bench/baked-shadow-diagnose.mjs

This file was deleted.

127 changes: 0 additions & 127 deletions bench/baked-shadow.html

This file was deleted.

Loading
Loading