Skip to main content

Genies iOS SDK v0.1.27

Updated: July 9, 2026

What's New

  • Progressive wearable equip: equip(_:lods:) on NAFView and NAFAvatarSession — the wearable is equipped at lods[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. .staticPose loads set it automatically; progressive loads clear it.

What's Fixed

  • .staticPose rendered 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 (see isFrozen).
  • 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.useRightHanded default is now true — behavior clips ship right-handed and are baked into the engine space at load. Pass false only for legacy LH-authored clips.