Issue: ContactShadows component not deserializing from GLB after upgrading to Needle Engine 4.12.4
Environment: Unity 6000.2.2f1, Needle Engine 4.12.4, three@0.169.15
What works: Production build created BEFORE upgrading to 4.12.4 — ContactShadows renders correctly with soft falloff.
What breaks: Any new production build (npm run build:production) after upgrading to 4.12.4 — ContactShadows node exists in scene (Object3D, correct scale 3/0.5/3) but has NO ContactShadows component attached. Only 1 child (GroundCubeQuad mesh) instead of the expected shadow infrastructure (plane, occluder, blur plane, shadow camera).
GLB data confirmed identical: ContactShadows component data in NEEDLE_components/builtin_components is byte-for-byte identical between working and broken GLBs (darkness=0.9, opacity=0.487, blur=2, enabled=true, guid=1494896423).
What we tried:
- TypeStore.add(“ContactShadows”, ContactShadows) in register_types.ts — no effect
- Manual instantiation with new ContactShadows() + GameObject.addNewComponent() — creates shadow infrastructure but renders hard-edge blocks without falloff
- Mesh Compression: None (disabled Draco) — no effect
- Using exact same source code as working build — no effect
Runtime diagnostic output:
NODE: Contact_Shadows type: Object3D visible: true children: 1
scale: 3 0.5 3
child0: Object3D visible: true
(No component found via userData.needle.components)
Steps to reproduce:
- Have a scene with ContactShadows component (working in Unity play mode)
- Export to web project
- npm run build:production
- ContactShadows node loads but component is never instantiated