Genies iOS SDK v0.1.27
Updated: July 9, 2026
What's New
- Progressive wearable equip:
equip(_:lods:)onNAFViewandNAFAvatarSession— the wearable is equipped atlods[0]immediately and the remaining LODs stream in the background via the shared native LOD scheduler, re-publishing meshes as each lands. Streaming stops automatically if the asset is unequipped or the avatar reloads/unloads mid-stream. - New API
NAFAvatarController.isFrozen: Static-pose contract made explicit: when frozen, the animation graph is never evaluated and the pose stays at the rig's rest (bind) pose..staticPoseloads set it automatically; progressive loads clear it.
What's Fixed
.staticPoserendered a collapsed "ball of joints" instead of the bind pose — the always-built animation graph evaluated with zero clips and overwrote the pose. Static loads now freeze the controller entirely (seeisFrozen).- Animation clips played with wrong orientation — clips are authored right-handed while the engine runs Unity-style left-handed. Every clip load now bakes the clip into the engine coordinate space once at deserialize;
- Idle froze during equip/unequip — two causes fixed: the wearable load no longer re-attaches the controller mid-equip and the merged-mesh rebuild now runs off the main thread so the render loop never stalls.
- Idle snapped backwards after equip — playheads are now captured right before the skeleton re-attach instead of before the merge.
What's Changed
- LOD pipeline unified onto the shared native
LodUpgradeScheduler NAFBehaviorConfig.useRightHandeddefault is nowtrue— behavior clips ship right-handed and are baked into the engine space at load. Passfalseonly for legacy LH-authored clips.