@hypersoniclabs/helix-cli 0.1.6 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +627 -6
- package/assets/bridge/metahuman-eye-baked.png +0 -0
- package/assets/item-def-sounds/Common/A_DryShot.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverA.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverB.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_ChargingHandle.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_01.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_02.ogg +0 -0
- package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_03.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_003.ogg +0 -0
- package/bridge-plugins/helix.bridge.unreal/bin/unreal-skeletal-mesh-extract.js +812 -0
- package/bridge-plugins/helix.bridge.unreal/bridge-plugin.json +40 -0
- package/bridge-plugins/helix.bridge.unreal/test/exporter.test.js +418 -0
- package/bridge-plugins/helix.bridge.unreal/test/handler.test.js +417 -0
- package/bridge-plugins/helix.bridge.unreal/unreal/export_skeletal_mesh.py +384 -0
- package/bridge-recipes/cyberpunk/cyberpunk-female-bone-map.json +476 -0
- package/bridge-recipes/sims4/README.md +43 -0
- package/bridge-recipes/sims4/sims4-female-bone-map.json +65 -0
- package/bridge-recipes/unreal/character-customizer/README.md +58 -0
- package/bridge-recipes/unreal/character-customizer/all.json +13 -0
- package/bridge-recipes/unreal/character-customizer/base-male-body.json +6 -0
- package/bridge-recipes/unreal/character-customizer/base-male-head.json +6 -0
- package/bridge-recipes/unreal/character-customizer/beard.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/beard.json +6 -0
- package/bridge-recipes/unreal/character-customizer/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/bottom.json +6 -0
- package/bridge-recipes/unreal/character-customizer/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/eyewear.json +6 -0
- package/bridge-recipes/unreal/character-customizer/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/footwear.json +6 -0
- package/bridge-recipes/unreal/character-customizer/hair.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/hair.json +6 -0
- package/bridge-recipes/unreal/character-customizer/test/recipes.test.js +74 -0
- package/bridge-recipes/unreal/character-customizer/top.addon.json +1 -0
- package/bridge-recipes/unreal/character-customizer/top.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-female/README.md +57 -0
- package/bridge-recipes/unreal/helix-character-creator-female/all.json +18 -0
- package/bridge-recipes/unreal/helix-character-creator-female/back.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/back.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/base-female-face.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/base-female.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/bottom.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/eyewear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-hair.json +23 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-nebula-urbanghost.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch-singles.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch5.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch6.json +19 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-batch7.json +11 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cap.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-chain.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-chain.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-maska.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-maska.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panama.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panama.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-swat.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-swat.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/footwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/hair.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/hair.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/headwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/headwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/neck.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/neck.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-female/top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/README.md +15 -0
- package/bridge-recipes/unreal/helix-character-creator-male/all.json +18 -0
- package/bridge-recipes/unreal/helix-character-creator-male/back.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/back.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/base-male-face.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/base-male.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/bottom.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/bottom.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/eyewear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/eyewear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/footwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/footwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/hair.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/hair.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/headwear.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/headwear.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-hair.json +23 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-nebula-urbanghost.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch-uniforms.json +10 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch6-slot2.json +7 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch7-slot3.json +6 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-batch8-combined.json +11 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-boots-25.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-man-mask-3.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-mikejack-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-socks.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-socks.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/mask.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/mask.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/neck.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/neck.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/outfit.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/outfit.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/palette-pilot.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/test/recipes.test.js +122 -0
- package/bridge-recipes/unreal/helix-character-creator-male/top.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/top.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/bottom-nopalette.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/headwear-nopalette.addon.json +1 -0
- package/bridge-recipes/unreal/helix-character-creator-male/variants/neck-nopalette.addon.json +1 -0
- package/dist/ability.d.ts +2 -2
- package/dist/ability.js +6 -5
- package/dist/ability.js.map +1 -1
- package/dist/achievement.d.ts +123 -0
- package/dist/achievement.js +400 -0
- package/dist/achievement.js.map +1 -0
- package/dist/api.d.ts +19 -1
- package/dist/api.js +80 -6
- package/dist/api.js.map +1 -1
- package/dist/assets.d.ts +595 -0
- package/dist/assets.js +1121 -0
- package/dist/assets.js.map +1 -0
- package/dist/audioCommand.d.ts +65 -0
- package/dist/audioCommand.js +181 -0
- package/dist/audioCommand.js.map +1 -0
- package/dist/bakeBodyRegionsCli.d.ts +19 -0
- package/dist/bakeBodyRegionsCli.js +25 -0
- package/dist/bakeBodyRegionsCli.js.map +1 -0
- package/dist/bakeLighting.d.ts +173 -0
- package/dist/bakeLighting.js +452 -0
- package/dist/bakeLighting.js.map +1 -0
- package/dist/bridge/bridge.testutil.d.ts +105 -0
- package/dist/bridge/bridge.testutil.js +259 -0
- package/dist/bridge/bridge.testutil.js.map +1 -0
- package/dist/bridge/characterAddon.d.ts +47 -0
- package/dist/bridge/characterAddon.js +146 -0
- package/dist/bridge/characterAddon.js.map +1 -0
- package/dist/bridge/detect.d.ts +4 -0
- package/dist/bridge/detect.js +154 -0
- package/dist/bridge/detect.js.map +1 -0
- package/dist/bridge/execute.d.ts +3 -0
- package/dist/bridge/execute.js +206 -0
- package/dist/bridge/execute.js.map +1 -0
- package/dist/bridge/glb.d.ts +60 -0
- package/dist/bridge/glb.js +81 -0
- package/dist/bridge/glb.js.map +1 -0
- package/dist/bridge/hash.d.ts +6 -0
- package/dist/bridge/hash.js +40 -0
- package/dist/bridge/hash.js.map +1 -0
- package/dist/bridge/index.d.ts +11 -0
- package/dist/bridge/index.js +28 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/internal/artifacts.d.ts +5 -0
- package/dist/bridge/internal/artifacts.js +31 -0
- package/dist/bridge/internal/artifacts.js.map +1 -0
- package/dist/bridge/internal/builtInExecution.d.ts +4 -0
- package/dist/bridge/internal/builtInExecution.js +514 -0
- package/dist/bridge/internal/builtInExecution.js.map +1 -0
- package/dist/bridge/internal/externalExecution.d.ts +12 -0
- package/dist/bridge/internal/externalExecution.js +261 -0
- package/dist/bridge/internal/externalExecution.js.map +1 -0
- package/dist/bridge/internal/outputReservation.d.ts +13 -0
- package/dist/bridge/internal/outputReservation.js +151 -0
- package/dist/bridge/internal/outputReservation.js.map +1 -0
- package/dist/bridge/internal/snapshots.d.ts +32 -0
- package/dist/bridge/internal/snapshots.js +562 -0
- package/dist/bridge/internal/snapshots.js.map +1 -0
- package/dist/bridge/management.d.ts +40 -0
- package/dist/bridge/management.js +333 -0
- package/dist/bridge/management.js.map +1 -0
- package/dist/bridge/manifest.d.ts +8 -0
- package/dist/bridge/manifest.js +192 -0
- package/dist/bridge/manifest.js.map +1 -0
- package/dist/bridge/metahuman.d.ts +26 -0
- package/dist/bridge/metahuman.js +332 -0
- package/dist/bridge/metahuman.js.map +1 -0
- package/dist/bridge/planner.d.ts +9 -0
- package/dist/bridge/planner.js +246 -0
- package/dist/bridge/planner.js.map +1 -0
- package/dist/bridge/plugins.d.ts +17 -0
- package/dist/bridge/plugins.js +307 -0
- package/dist/bridge/plugins.js.map +1 -0
- package/dist/bridge/resolution.d.ts +8 -0
- package/dist/bridge/resolution.js +55 -0
- package/dist/bridge/resolution.js.map +1 -0
- package/dist/bridge/types.d.ts +247 -0
- package/dist/bridge/types.js +60 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/bridge/validate.d.ts +12 -0
- package/dist/bridge/validate.js +370 -0
- package/dist/bridge/validate.js.map +1 -0
- package/dist/bridge/zipSource.d.ts +27 -0
- package/dist/bridge/zipSource.js +90 -0
- package/dist/bridge/zipSource.js.map +1 -0
- package/dist/browser/hostSlots.d.ts +57 -0
- package/dist/browser/hostSlots.js +371 -0
- package/dist/browser/hostSlots.js.map +1 -0
- package/dist/browser/launch.d.ts +25 -0
- package/dist/browser/launch.js +74 -0
- package/dist/browser/launch.js.map +1 -0
- package/dist/browser/nonSystemChrome.d.ts +15 -0
- package/dist/browser/nonSystemChrome.js +91 -0
- package/dist/browser/nonSystemChrome.js.map +1 -0
- package/dist/builds/index.d.ts +54 -0
- package/dist/builds/index.js +215 -0
- package/dist/builds/index.js.map +1 -0
- package/dist/bundle.d.ts +35 -2
- package/dist/bundle.js +437 -20
- package/dist/bundle.js.map +1 -1
- package/dist/canary/cli.d.ts +17 -0
- package/dist/canary/cli.js +95 -0
- package/dist/canary/cli.js.map +1 -0
- package/dist/canary/index.d.ts +4 -0
- package/dist/canary/index.js +21 -0
- package/dist/canary/index.js.map +1 -0
- package/dist/canary/inventory.d.ts +46 -0
- package/dist/canary/inventory.js +499 -0
- package/dist/canary/inventory.js.map +1 -0
- package/dist/canary/pacifica.d.ts +51 -0
- package/dist/canary/pacifica.js +247 -0
- package/dist/canary/pacifica.js.map +1 -0
- package/dist/canary/plan.d.ts +115 -0
- package/dist/canary/plan.js +479 -0
- package/dist/canary/plan.js.map +1 -0
- package/dist/character/addonPushOut.d.ts +66 -0
- package/dist/character/addonPushOut.js +211 -0
- package/dist/character/addonPushOut.js.map +1 -0
- package/dist/character/avatarPreflight.d.ts +92 -0
- package/dist/character/avatarPreflight.js +261 -0
- package/dist/character/avatarPreflight.js.map +1 -0
- package/dist/character/bakeBodyRegions.d.ts +80 -0
- package/dist/character/bakeBodyRegions.js +190 -0
- package/dist/character/bakeBodyRegions.js.map +1 -0
- package/dist/character/baseColorGuard.d.ts +62 -0
- package/dist/character/baseColorGuard.js +141 -0
- package/dist/character/baseColorGuard.js.map +1 -0
- package/dist/character/bodyGeometryGuard.d.ts +243 -0
- package/dist/character/bodyGeometryGuard.js +417 -0
- package/dist/character/bodyGeometryGuard.js.map +1 -0
- package/dist/character/bodyRegionHide.d.ts +57 -0
- package/dist/character/bodyRegionHide.js +97 -0
- package/dist/character/bodyRegionHide.js.map +1 -0
- package/dist/character/composeBaseMale.d.ts +25 -0
- package/dist/character/composeBaseMale.js +712 -0
- package/dist/character/composeBaseMale.js.map +1 -0
- package/dist/character/esm.js +3 -1
- package/dist/character/esm.js.map +1 -1
- package/dist/character/faceManifest.d.ts +53 -0
- package/dist/character/faceManifest.js +256 -0
- package/dist/character/faceManifest.js.map +1 -0
- package/dist/character/fbx.d.ts +61 -0
- package/dist/character/fbx.js +360 -0
- package/dist/character/fbx.js.map +1 -0
- package/dist/character/fitGarmentFile.d.ts +39 -0
- package/dist/character/fitGarmentFile.js +53 -0
- package/dist/character/fitGarmentFile.js.map +1 -0
- package/dist/character/helixPalette.d.ts +68 -0
- package/dist/character/helixPalette.js +183 -0
- package/dist/character/helixPalette.js.map +1 -0
- package/dist/character/hideCoverage.d.ts +135 -0
- package/dist/character/hideCoverage.js +450 -0
- package/dist/character/hideCoverage.js.map +1 -0
- package/dist/character/imageLimits.d.ts +3 -0
- package/dist/character/imageLimits.js +7 -0
- package/dist/character/imageLimits.js.map +1 -0
- package/dist/character/importCharacter.d.ts +188 -10
- package/dist/character/importCharacter.js +853 -76
- package/dist/character/importCharacter.js.map +1 -1
- package/dist/character/importTrust.d.ts +11 -0
- package/dist/character/importTrust.js +56 -0
- package/dist/character/importTrust.js.map +1 -0
- package/dist/character/ktx2Decode.d.ts +11 -0
- package/dist/character/ktx2Decode.js +87 -0
- package/dist/character/ktx2Decode.js.map +1 -0
- package/dist/character/mat4.d.ts +7 -0
- package/dist/character/mat4.js +25 -2
- package/dist/character/mat4.js.map +1 -1
- package/dist/character/meshyToHelixMap.d.ts +10 -0
- package/dist/character/meshyToHelixMap.js +92 -3
- package/dist/character/meshyToHelixMap.js.map +1 -1
- package/dist/character/metahumanToHelixMap.d.ts +2 -0
- package/dist/character/metahumanToHelixMap.js +34 -0
- package/dist/character/metahumanToHelixMap.js.map +1 -0
- package/dist/character/normalMapGuard.d.ts +59 -0
- package/dist/character/normalMapGuard.js +139 -0
- package/dist/character/normalMapGuard.js.map +1 -0
- package/dist/character/quat.js +2 -2
- package/dist/character/quat.js.map +1 -1
- package/dist/character/reframeSkeletonFile.d.ts +19 -0
- package/dist/character/reframeSkeletonFile.js +45 -0
- package/dist/character/reframeSkeletonFile.js.map +1 -0
- package/dist/character/repairLodSkeletonsFile.d.ts +25 -0
- package/dist/character/repairLodSkeletonsFile.js +49 -0
- package/dist/character/repairLodSkeletonsFile.js.map +1 -0
- package/dist/character/restFrameGuard.d.ts +52 -0
- package/dist/character/restFrameGuard.js +90 -0
- package/dist/character/restFrameGuard.js.map +1 -0
- package/dist/character/slotBudgets.d.ts +37 -0
- package/dist/character/slotBudgets.generated.d.ts +15 -0
- package/dist/character/slotBudgets.generated.js +110 -0
- package/dist/character/slotBudgets.generated.js.map +1 -0
- package/dist/character/slotBudgets.js +45 -0
- package/dist/character/slotBudgets.js.map +1 -0
- package/dist/character/stages/atlasMaterials.d.ts +53 -0
- package/dist/character/stages/atlasMaterials.js +246 -0
- package/dist/character/stages/atlasMaterials.js.map +1 -0
- package/dist/character/stages/bakeTexture.d.ts +28 -7
- package/dist/character/stages/bakeTexture.js +586 -108
- package/dist/character/stages/bakeTexture.js.map +1 -1
- package/dist/character/stages/conform.d.ts +54 -9
- package/dist/character/stages/conform.js +686 -113
- package/dist/character/stages/conform.js.map +1 -1
- package/dist/character/stages/earClearance.d.ts +105 -0
- package/dist/character/stages/earClearance.js +480 -0
- package/dist/character/stages/earClearance.js.map +1 -0
- package/dist/character/stages/faceRegion.d.ts +55 -0
- package/dist/character/stages/faceRegion.js +183 -0
- package/dist/character/stages/faceRegion.js.map +1 -0
- package/dist/character/stages/firstPersonHide.d.ts +42 -0
- package/dist/character/stages/firstPersonHide.js +140 -0
- package/dist/character/stages/firstPersonHide.js.map +1 -0
- package/dist/character/stages/joinPerMesh.d.ts +18 -0
- package/dist/character/stages/joinPerMesh.js +46 -0
- package/dist/character/stages/joinPerMesh.js.map +1 -0
- package/dist/character/stages/ktx2.d.ts +6 -4
- package/dist/character/stages/ktx2.js +81 -29
- package/dist/character/stages/ktx2.js.map +1 -1
- package/dist/character/stages/limbBridge.d.ts +114 -0
- package/dist/character/stages/limbBridge.js +1286 -0
- package/dist/character/stages/limbBridge.js.map +1 -0
- package/dist/character/stages/mergeLods.d.ts +19 -0
- package/dist/character/stages/mergeLods.js +58 -2
- package/dist/character/stages/mergeLods.js.map +1 -1
- package/dist/character/stages/poseAwareFit.d.ts +192 -0
- package/dist/character/stages/poseAwareFit.js +417 -0
- package/dist/character/stages/poseAwareFit.js.map +1 -0
- package/dist/character/stages/poseFit/math.d.ts +141 -0
- package/dist/character/stages/poseFit/math.js +514 -0
- package/dist/character/stages/poseFit/math.js.map +1 -0
- package/dist/character/stages/poseFit/measure.d.ts +88 -0
- package/dist/character/stages/poseFit/measure.js +148 -0
- package/dist/character/stages/poseFit/measure.js.map +1 -0
- package/dist/character/stages/poseFit/model.d.ts +46 -0
- package/dist/character/stages/poseFit/model.js +147 -0
- package/dist/character/stages/poseFit/model.js.map +1 -0
- package/dist/character/stages/poseFit/offsetField.d.ts +76 -0
- package/dist/character/stages/poseFit/offsetField.js +249 -0
- package/dist/character/stages/poseFit/offsetField.js.map +1 -0
- package/dist/character/stages/poseFit/posing.d.ts +52 -0
- package/dist/character/stages/poseFit/posing.js +330 -0
- package/dist/character/stages/poseFit/posing.js.map +1 -0
- package/dist/character/stages/poseFit/testRig.d.ts +31 -0
- package/dist/character/stages/poseFit/testRig.js +85 -0
- package/dist/character/stages/poseFit/testRig.js.map +1 -0
- package/dist/character/stages/reframeSkeletonToHost.d.ts +35 -0
- package/dist/character/stages/reframeSkeletonToHost.js +111 -0
- package/dist/character/stages/reframeSkeletonToHost.js.map +1 -0
- package/dist/character/stages/report.js +0 -2
- package/dist/character/stages/report.js.map +1 -1
- package/dist/character/stages/resizeTextures.js +4 -4
- package/dist/character/stages/resizeTextures.js.map +1 -1
- package/dist/character/stages/retarget.d.ts +8 -2
- package/dist/character/stages/retarget.js +52 -4
- package/dist/character/stages/retarget.js.map +1 -1
- package/dist/character/stages/retargetClip.d.ts +6 -2
- package/dist/character/stages/retargetClip.js +53 -16
- package/dist/character/stages/retargetClip.js.map +1 -1
- package/dist/character/stages/sanitizeMaterials.d.ts +39 -0
- package/dist/character/stages/sanitizeMaterials.js +136 -0
- package/dist/character/stages/sanitizeMaterials.js.map +1 -0
- package/dist/character/stages/simplifyMesh.js +6 -3
- package/dist/character/stages/simplifyMesh.js.map +1 -1
- package/dist/character/stages/splitFacePrimitive.js +0 -2
- package/dist/character/stages/splitFacePrimitive.js.map +1 -1
- package/dist/character/stages/splitSharedLodSkeletons.d.ts +31 -0
- package/dist/character/stages/splitSharedLodSkeletons.js +104 -0
- package/dist/character/stages/splitSharedLodSkeletons.js.map +1 -0
- package/dist/character/stages/unifyMaterial.d.ts +66 -0
- package/dist/character/stages/unifyMaterial.js +136 -0
- package/dist/character/stages/unifyMaterial.js.map +1 -0
- package/dist/character/stages/vrmDynamics.d.ts +144 -0
- package/dist/character/stages/vrmDynamics.js +421 -0
- package/dist/character/stages/vrmDynamics.js.map +1 -0
- package/dist/character/stages/vrmFace.d.ts +82 -0
- package/dist/character/stages/vrmFace.js +280 -0
- package/dist/character/stages/vrmFace.js.map +1 -0
- package/dist/character/stages/weldedSimplify.d.ts +15 -1
- package/dist/character/stages/weldedSimplify.js +90 -9
- package/dist/character/stages/weldedSimplify.js.map +1 -1
- package/dist/character/testutil/meshyBridgeFixture.d.ts +33 -0
- package/dist/character/testutil/meshyBridgeFixture.js +219 -0
- package/dist/character/testutil/meshyBridgeFixture.js.map +1 -0
- package/dist/character/testutil/meshyHead.d.ts +19 -0
- package/dist/character/testutil/meshyHead.js +99 -0
- package/dist/character/testutil/meshyHead.js.map +1 -0
- package/dist/character/testutil/meshyRig.d.ts +17 -0
- package/dist/character/testutil/meshyRig.js +117 -0
- package/dist/character/testutil/meshyRig.js.map +1 -0
- package/dist/character/testutil/slotBudgetExpectations.d.ts +11 -0
- package/dist/character/testutil/slotBudgetExpectations.js +21 -0
- package/dist/character/testutil/slotBudgetExpectations.js.map +1 -0
- package/dist/character/testutil/syntheticRig.d.ts +12 -1
- package/dist/character/testutil/syntheticRig.js +88 -3
- package/dist/character/testutil/syntheticRig.js.map +1 -1
- package/dist/character/unrealMaterialSidecar.d.ts +94 -0
- package/dist/character/unrealMaterialSidecar.js +879 -0
- package/dist/character/unrealMaterialSidecar.js.map +1 -0
- package/dist/character/untrustedSource.d.ts +54 -0
- package/dist/character/untrustedSource.js +181 -0
- package/dist/character/untrustedSource.js.map +1 -0
- package/dist/character/vrmCharacter.d.ts +156 -0
- package/dist/character/vrmCharacter.js +678 -0
- package/dist/character/vrmCharacter.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +72 -16
- package/dist/config.js.map +1 -1
- package/dist/continuum/adminPackagePinCommand.d.ts +14 -0
- package/dist/continuum/adminPackagePinCommand.js +46 -0
- package/dist/continuum/adminPackagePinCommand.js.map +1 -0
- package/dist/continuum/adminPackagePublishCommand.d.ts +13 -0
- package/dist/continuum/adminPackagePublishCommand.js +22 -0
- package/dist/continuum/adminPackagePublishCommand.js.map +1 -0
- package/dist/continuum/authoring.d.ts +52 -0
- package/dist/continuum/authoring.js +143 -0
- package/dist/continuum/authoring.js.map +1 -0
- package/dist/continuum/characterMigrationGenerator.d.ts +17 -0
- package/dist/continuum/characterMigrationGenerator.js +242 -0
- package/dist/continuum/characterMigrationGenerator.js.map +1 -0
- package/dist/continuum/cli.d.ts +69 -0
- package/dist/continuum/cli.js +145 -0
- package/dist/continuum/cli.js.map +1 -0
- package/dist/continuum/cliAuthority.d.ts +17 -0
- package/dist/continuum/cliAuthority.js +28 -0
- package/dist/continuum/cliAuthority.js.map +1 -0
- package/dist/continuum/client.d.ts +103 -0
- package/dist/continuum/client.js +190 -0
- package/dist/continuum/client.js.map +1 -0
- package/dist/continuum/homeScenePackage.d.ts +159 -0
- package/dist/continuum/homeScenePackage.js +267 -0
- package/dist/continuum/homeScenePackage.js.map +1 -0
- package/dist/continuum/homeScenePackageCommand.d.ts +44 -0
- package/dist/continuum/homeScenePackageCommand.js +107 -0
- package/dist/continuum/homeScenePackageCommand.js.map +1 -0
- package/dist/continuum/identity.d.ts +4 -0
- package/dist/continuum/identity.js +20 -0
- package/dist/continuum/identity.js.map +1 -0
- package/dist/continuum/index.d.ts +11 -0
- package/dist/continuum/index.js +28 -0
- package/dist/continuum/index.js.map +1 -0
- package/dist/continuum/missingNormals.d.ts +48 -0
- package/dist/continuum/missingNormals.js +99 -0
- package/dist/continuum/missingNormals.js.map +1 -0
- package/dist/continuum/objectUpload.d.ts +64 -0
- package/dist/continuum/objectUpload.js +375 -0
- package/dist/continuum/objectUpload.js.map +1 -0
- package/dist/continuum/pull.d.ts +22 -0
- package/dist/continuum/pull.js +47 -0
- package/dist/continuum/pull.js.map +1 -0
- package/dist/continuum/sourceBundle.d.ts +18 -0
- package/dist/continuum/sourceBundle.js +160 -0
- package/dist/continuum/sourceBundle.js.map +1 -0
- package/dist/continuum/state.d.ts +41 -0
- package/dist/continuum/state.js +198 -0
- package/dist/continuum/state.js.map +1 -0
- package/dist/continuum/types.d.ts +156 -0
- package/dist/continuum/types.js +6 -0
- package/dist/continuum/types.js.map +1 -0
- package/dist/continuum/workflow.d.ts +62 -0
- package/dist/continuum/workflow.js +592 -0
- package/dist/continuum/workflow.js.map +1 -0
- package/dist/cs2/areas.d.ts +41 -0
- package/dist/cs2/areas.js +82 -0
- package/dist/cs2/areas.js.map +1 -0
- package/dist/cs2/binary.d.ts +10 -0
- package/dist/cs2/binary.js +59 -0
- package/dist/cs2/binary.js.map +1 -0
- package/dist/cs2/cityLegacy.d.ts +29 -0
- package/dist/cs2/cityLegacy.js +48 -0
- package/dist/cs2/cityLegacy.js.map +1 -0
- package/dist/cs2/convert/areas.d.ts +32 -0
- package/dist/cs2/convert/areas.js +96 -0
- package/dist/cs2/convert/areas.js.map +1 -0
- package/dist/cs2/convert/glb.d.ts +48 -0
- package/dist/cs2/convert/glb.js +178 -0
- package/dist/cs2/convert/glb.js.map +1 -0
- package/dist/cs2/convert/markings.d.ts +96 -0
- package/dist/cs2/convert/markings.js +329 -0
- package/dist/cs2/convert/markings.js.map +1 -0
- package/dist/cs2/convert/nodeSeams.d.ts +20 -0
- package/dist/cs2/convert/nodeSeams.js +164 -0
- package/dist/cs2/convert/nodeSeams.js.map +1 -0
- package/dist/cs2/convert/roadBake.d.ts +112 -0
- package/dist/cs2/convert/roadBake.js +290 -0
- package/dist/cs2/convert/roadBake.js.map +1 -0
- package/dist/cs2/convert/roads.d.ts +110 -0
- package/dist/cs2/convert/roads.js +419 -0
- package/dist/cs2/convert/roads.js.map +1 -0
- package/dist/cs2/convert/terrain.d.ts +67 -0
- package/dist/cs2/convert/terrain.js +141 -0
- package/dist/cs2/convert/terrain.js.map +1 -0
- package/dist/cs2/convert/terrainConform.d.ts +58 -0
- package/dist/cs2/convert/terrainConform.js +284 -0
- package/dist/cs2/convert/terrainConform.js.map +1 -0
- package/dist/cs2/convert/treeRoadClearance.d.ts +17 -0
- package/dist/cs2/convert/treeRoadClearance.js +78 -0
- package/dist/cs2/convert/treeRoadClearance.js.map +1 -0
- package/dist/cs2/convert/trees.d.ts +33 -0
- package/dist/cs2/convert/trees.js +68 -0
- package/dist/cs2/convert/trees.js.map +1 -0
- package/dist/cs2/csm2.d.ts +58 -0
- package/dist/cs2/csm2.js +188 -0
- package/dist/cs2/csm2.js.map +1 -0
- package/dist/cs2/fixtures.d.ts +5 -0
- package/dist/cs2/fixtures.js +15 -0
- package/dist/cs2/fixtures.js.map +1 -0
- package/dist/cs2/impostors.d.ts +31 -0
- package/dist/cs2/impostors.js +42 -0
- package/dist/cs2/impostors.js.map +1 -0
- package/dist/cs2/index.d.ts +22 -0
- package/dist/cs2/index.js +191 -0
- package/dist/cs2/index.js.map +1 -0
- package/dist/cs2/inspect.d.ts +81 -0
- package/dist/cs2/inspect.js +181 -0
- package/dist/cs2/inspect.js.map +1 -0
- package/dist/cs2/lods.d.ts +22 -0
- package/dist/cs2/lods.js +136 -0
- package/dist/cs2/lods.js.map +1 -0
- package/dist/cs2/materials.d.ts +43 -0
- package/dist/cs2/materials.js +137 -0
- package/dist/cs2/materials.js.map +1 -0
- package/dist/cs2/placements.d.ts +57 -0
- package/dist/cs2/placements.js +116 -0
- package/dist/cs2/placements.js.map +1 -0
- package/dist/cs2/roadPieces.d.ts +79 -0
- package/dist/cs2/roadPieces.js +263 -0
- package/dist/cs2/roadPieces.js.map +1 -0
- package/dist/cs2/roads.d.ts +92 -0
- package/dist/cs2/roads.js +329 -0
- package/dist/cs2/roads.js.map +1 -0
- package/dist/cs2/terrain.d.ts +37 -0
- package/dist/cs2/terrain.js +91 -0
- package/dist/cs2/terrain.js.map +1 -0
- package/dist/cs2/types.d.ts +444 -0
- package/dist/cs2/types.js +22 -0
- package/dist/cs2/types.js.map +1 -0
- package/dist/cs2/water.d.ts +26 -0
- package/dist/cs2/water.js +58 -0
- package/dist/cs2/water.js.map +1 -0
- package/dist/currency.d.ts +94 -0
- package/dist/currency.js +425 -0
- package/dist/currency.js.map +1 -0
- package/dist/dev/devServer.d.ts +53 -0
- package/dist/dev/devServer.js +228 -0
- package/dist/dev/devServer.js.map +1 -0
- package/dist/dev/shellPage.d.ts +3 -0
- package/dist/dev/shellPage.js +297 -0
- package/dist/dev/shellPage.js.map +1 -0
- package/dist/dev/state.d.ts +84 -0
- package/dist/dev/state.js +265 -0
- package/dist/dev/state.js.map +1 -0
- package/dist/device.d.ts +104 -0
- package/dist/device.js +2744 -0
- package/dist/device.js.map +1 -0
- package/dist/deviceActionValidation.d.ts +21 -0
- package/dist/deviceActionValidation.js +460 -0
- package/dist/deviceActionValidation.js.map +1 -0
- package/dist/distribution.d.ts +69 -0
- package/dist/distribution.js +138 -0
- package/dist/distribution.js.map +1 -0
- package/dist/enginePins.d.ts +45 -0
- package/dist/enginePins.js +134 -0
- package/dist/enginePins.js.map +1 -0
- package/dist/gesture/axisReference.d.ts +22 -0
- package/dist/gesture/axisReference.js +32 -0
- package/dist/gesture/axisReference.js.map +1 -0
- package/dist/gesture/capture.d.ts +84 -0
- package/dist/gesture/capture.js +303 -0
- package/dist/gesture/capture.js.map +1 -0
- package/dist/gesture/harnessPage.d.ts +23 -0
- package/dist/gesture/harnessPage.js +153 -0
- package/dist/gesture/harnessPage.js.map +1 -0
- package/dist/gesture/inspect.d.ts +189 -0
- package/dist/gesture/inspect.js +678 -0
- package/dist/gesture/inspect.js.map +1 -0
- package/dist/gesture/rig.d.ts +12 -0
- package/dist/gesture/rig.js +111 -0
- package/dist/gesture/rig.js.map +1 -0
- package/dist/gesture/worldRuntime.d.ts +65 -0
- package/dist/gesture/worldRuntime.js +110 -0
- package/dist/gesture/worldRuntime.js.map +1 -0
- package/dist/glb/draw-calls.d.ts +60 -0
- package/dist/glb/draw-calls.js +160 -0
- package/dist/glb/draw-calls.js.map +1 -0
- package/dist/glb/glb-summary.d.ts +68 -0
- package/dist/glb/glb-summary.js +450 -0
- package/dist/glb/glb-summary.js.map +1 -0
- package/dist/glb/index.d.ts +12 -0
- package/dist/glb/index.js +24 -0
- package/dist/glb/index.js.map +1 -0
- package/dist/glb/smooth-normals.d.ts +98 -0
- package/dist/glb/smooth-normals.js +395 -0
- package/dist/glb/smooth-normals.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6786 -128
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +35 -1
- package/dist/init.js +1115 -47
- package/dist/init.js.map +1 -1
- package/dist/install.d.ts +16 -5
- package/dist/install.js +123 -23
- package/dist/install.js.map +1 -1
- package/dist/interactable.d.ts +154 -0
- package/dist/interactable.js +1219 -0
- package/dist/interactable.js.map +1 -0
- package/dist/item.d.ts +217 -0
- package/dist/item.js +892 -0
- package/dist/item.js.map +1 -0
- package/dist/itemDef/distribute.d.ts +17 -0
- package/dist/itemDef/distribute.js +29 -0
- package/dist/itemDef/distribute.js.map +1 -0
- package/dist/itemDef/emoteRules.d.ts +85 -0
- package/dist/itemDef/emoteRules.js +368 -0
- package/dist/itemDef/emoteRules.js.map +1 -0
- package/dist/itemDef/gunConfigRules.d.ts +24 -0
- package/dist/itemDef/gunConfigRules.js +300 -0
- package/dist/itemDef/gunConfigRules.js.map +1 -0
- package/dist/itemDef/inspect.d.ts +19 -0
- package/dist/itemDef/inspect.js +144 -0
- package/dist/itemDef/inspect.js.map +1 -0
- package/dist/itemDef/scaffold.d.ts +41 -0
- package/dist/itemDef/scaffold.js +303 -0
- package/dist/itemDef/scaffold.js.map +1 -0
- package/dist/itemDef/tables.d.ts +81 -0
- package/dist/itemDef/tables.js +226 -0
- package/dist/itemDef/tables.js.map +1 -0
- package/dist/itemDef/validate.d.ts +30 -0
- package/dist/itemDef/validate.js +175 -0
- package/dist/itemDef/validate.js.map +1 -0
- package/dist/itemPublishVersion.d.ts +46 -0
- package/dist/itemPublishVersion.js +242 -0
- package/dist/itemPublishVersion.js.map +1 -0
- package/dist/itemSearch.d.ts +128 -0
- package/dist/itemSearch.js +140 -0
- package/dist/itemSearch.js.map +1 -0
- package/dist/itemSetVersion.d.ts +42 -0
- package/dist/itemSetVersion.js +94 -0
- package/dist/itemSetVersion.js.map +1 -0
- package/dist/itemThumbnail.d.ts +40 -0
- package/dist/itemThumbnail.js +116 -0
- package/dist/itemThumbnail.js.map +1 -0
- package/dist/lib.d.ts +571 -7
- package/dist/lib.js +1178 -15
- package/dist/lib.js.map +1 -1
- package/dist/looks.d.ts +103 -0
- package/dist/looks.js +102 -0
- package/dist/looks.js.map +1 -0
- package/dist/materials/availability.d.ts +8 -0
- package/dist/materials/availability.js +22 -0
- package/dist/materials/availability.js.map +1 -0
- package/dist/materials/identity.d.ts +30 -0
- package/dist/materials/identity.js +68 -0
- package/dist/materials/identity.js.map +1 -0
- package/dist/materials/pins.d.ts +23 -0
- package/dist/materials/pins.js +93 -0
- package/dist/materials/pins.js.map +1 -0
- package/dist/mesh/surfaceBvh.d.ts +13 -0
- package/dist/mesh/surfaceBvh.js +197 -0
- package/dist/mesh/surfaceBvh.js.map +1 -0
- package/dist/module-validation.d.ts +2 -0
- package/dist/module-validation.js +24 -0
- package/dist/module-validation.js.map +1 -0
- package/dist/money.d.ts +183 -0
- package/dist/money.js +299 -0
- package/dist/money.js.map +1 -0
- package/dist/npc/capture.d.ts +41 -0
- package/dist/npc/capture.js +99 -0
- package/dist/npc/capture.js.map +1 -0
- package/dist/npc/format.d.ts +2 -0
- package/dist/npc/format.js +102 -0
- package/dist/npc/format.js.map +1 -0
- package/dist/npc/inspect.d.ts +23 -0
- package/dist/npc/inspect.js +54 -0
- package/dist/npc/inspect.js.map +1 -0
- package/dist/npc/metrics.d.ts +132 -0
- package/dist/npc/metrics.js +214 -0
- package/dist/npc/metrics.js.map +1 -0
- package/dist/npc/session.d.ts +35 -0
- package/dist/npc/session.js +172 -0
- package/dist/npc/session.js.map +1 -0
- package/dist/pack/locomotionReference.d.ts +40 -0
- package/dist/pack/locomotionReference.js +132 -0
- package/dist/pack/locomotionReference.js.map +1 -0
- package/dist/pack/scaffold.d.ts +15 -0
- package/dist/pack/scaffold.js +144 -0
- package/dist/pack/scaffold.js.map +1 -0
- package/dist/pack/validate.d.ts +67 -0
- package/dist/pack/validate.js +317 -0
- package/dist/pack/validate.js.map +1 -0
- package/dist/package.d.ts +14 -1
- package/dist/package.js +106 -7
- package/dist/package.js.map +1 -1
- package/dist/paletteShowcase.d.ts +183 -0
- package/dist/paletteShowcase.js +454 -0
- package/dist/paletteShowcase.js.map +1 -0
- package/dist/paletteShowcaseProfiles.d.ts +112 -0
- package/dist/paletteShowcaseProfiles.js +121 -0
- package/dist/paletteShowcaseProfiles.js.map +1 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.js +11 -0
- package/dist/paths.js.map +1 -0
- package/dist/placementRequest.d.ts +37 -0
- package/dist/placementRequest.js +220 -0
- package/dist/placementRequest.js.map +1 -0
- package/dist/placements/assets.d.ts +7 -0
- package/dist/placements/assets.js +114 -0
- package/dist/placements/assets.js.map +1 -0
- package/dist/placements/attachFoliageLods.d.ts +4 -0
- package/dist/placements/attachFoliageLods.js +70 -0
- package/dist/placements/attachFoliageLods.js.map +1 -0
- package/dist/placements/attachImpostors.d.ts +3 -0
- package/dist/placements/attachImpostors.js +51 -0
- package/dist/placements/attachImpostors.js.map +1 -0
- package/dist/placements/authored.d.ts +11 -0
- package/dist/placements/authored.js +65 -0
- package/dist/placements/authored.js.map +1 -0
- package/dist/placements/bake.d.ts +2 -0
- package/dist/placements/bake.js +235 -0
- package/dist/placements/bake.js.map +1 -0
- package/dist/placements/captureHost.d.ts +4 -0
- package/dist/placements/captureHost.js +125 -0
- package/dist/placements/captureHost.js.map +1 -0
- package/dist/placements/foliageCapture.d.ts +2 -0
- package/dist/placements/foliageCapture.js +98 -0
- package/dist/placements/foliageCapture.js.map +1 -0
- package/dist/placements/foliageCards.d.ts +17 -0
- package/dist/placements/foliageCards.js +120 -0
- package/dist/placements/foliageCards.js.map +1 -0
- package/dist/placements/foliageLods.d.ts +8 -0
- package/dist/placements/foliageLods.js +240 -0
- package/dist/placements/foliageLods.js.map +1 -0
- package/dist/placements/foliageTexture.d.ts +4 -0
- package/dist/placements/foliageTexture.js +91 -0
- package/dist/placements/foliageTexture.js.map +1 -0
- package/dist/placements/impostorCapture.d.ts +2 -0
- package/dist/placements/impostorCapture.js +111 -0
- package/dist/placements/impostorCapture.js.map +1 -0
- package/dist/placements/impostors.d.ts +18 -0
- package/dist/placements/impostors.js +279 -0
- package/dist/placements/impostors.js.map +1 -0
- package/dist/placements/source.d.ts +53 -0
- package/dist/placements/source.js +111 -0
- package/dist/placements/source.js.map +1 -0
- package/dist/product.d.ts +84 -0
- package/dist/product.js +285 -0
- package/dist/product.js.map +1 -0
- package/dist/publications.d.ts +116 -0
- package/dist/publications.js +180 -0
- package/dist/publications.js.map +1 -0
- package/dist/publishDuplicateGuard.d.ts +92 -0
- package/dist/publishDuplicateGuard.js +128 -0
- package/dist/publishDuplicateGuard.js.map +1 -0
- package/dist/realizability.d.ts +36 -0
- package/dist/realizability.js +269 -0
- package/dist/realizability.js.map +1 -0
- package/dist/resolve.d.ts +7 -1
- package/dist/resolve.js +77 -11
- package/dist/resolve.js.map +1 -1
- package/dist/sceneElements/compiler.d.ts +21 -0
- package/dist/sceneElements/compiler.js +976 -0
- package/dist/sceneElements/compiler.js.map +1 -0
- package/dist/sceneElements/continuum.d.ts +54 -0
- package/dist/sceneElements/continuum.js +451 -0
- package/dist/sceneElements/continuum.js.map +1 -0
- package/dist/sceneElements/devices.d.ts +12 -0
- package/dist/sceneElements/devices.js +212 -0
- package/dist/sceneElements/devices.js.map +1 -0
- package/dist/sceneElements/meshCells.d.ts +49 -0
- package/dist/sceneElements/meshCells.js +174 -0
- package/dist/sceneElements/meshCells.js.map +1 -0
- package/dist/sceneElements/types.d.ts +261 -0
- package/dist/sceneElements/types.js +3 -0
- package/dist/sceneElements/types.js.map +1 -0
- package/dist/sceneHlod/approximate.d.ts +23 -0
- package/dist/sceneHlod/approximate.js +171 -0
- package/dist/sceneHlod/approximate.js.map +1 -0
- package/dist/sceneHlod/artifact.d.ts +3 -0
- package/dist/sceneHlod/artifact.js +29 -0
- package/dist/sceneHlod/artifact.js.map +1 -0
- package/dist/sceneHlod/bakeSurface.d.ts +2 -0
- package/dist/sceneHlod/bakeSurface.js +59 -0
- package/dist/sceneHlod/bakeSurface.js.map +1 -0
- package/dist/sceneHlod/basisEncoder.d.ts +3 -0
- package/dist/sceneHlod/basisEncoder.js +68 -0
- package/dist/sceneHlod/basisEncoder.js.map +1 -0
- package/dist/sceneHlod/cellArtifact.d.ts +17 -0
- package/dist/sceneHlod/cellArtifact.js +78 -0
- package/dist/sceneHlod/cellArtifact.js.map +1 -0
- package/dist/sceneHlod/commands.d.ts +2 -0
- package/dist/sceneHlod/commands.js +114 -0
- package/dist/sceneHlod/commands.js.map +1 -0
- package/dist/sceneHlod/complete.d.ts +78 -0
- package/dist/sceneHlod/complete.js +261 -0
- package/dist/sceneHlod/complete.js.map +1 -0
- package/dist/sceneHlod/completePrototype.d.ts +39 -0
- package/dist/sceneHlod/completePrototype.js +121 -0
- package/dist/sceneHlod/completePrototype.js.map +1 -0
- package/dist/sceneHlod/geometry.d.ts +6 -0
- package/dist/sceneHlod/geometry.js +101 -0
- package/dist/sceneHlod/geometry.js.map +1 -0
- package/dist/sceneHlod/imageSampling.d.ts +11 -0
- package/dist/sceneHlod/imageSampling.js +100 -0
- package/dist/sceneHlod/imageSampling.js.map +1 -0
- package/dist/sceneHlod/refinement.d.ts +46 -0
- package/dist/sceneHlod/refinement.js +204 -0
- package/dist/sceneHlod/refinement.js.map +1 -0
- package/dist/sceneHlod/scene.d.ts +80 -0
- package/dist/sceneHlod/scene.js +264 -0
- package/dist/sceneHlod/scene.js.map +1 -0
- package/dist/sceneHlod/sharedAtlas.d.ts +37 -0
- package/dist/sceneHlod/sharedAtlas.js +84 -0
- package/dist/sceneHlod/sharedAtlas.js.map +1 -0
- package/dist/sceneHlod/source.d.ts +17 -0
- package/dist/sceneHlod/source.js +241 -0
- package/dist/sceneHlod/source.js.map +1 -0
- package/dist/sceneHlod/textureCodec.d.ts +4 -0
- package/dist/sceneHlod/textureCodec.js +66 -0
- package/dist/sceneHlod/textureCodec.js.map +1 -0
- package/dist/sceneHlod/transfer.d.ts +8 -0
- package/dist/sceneHlod/transfer.js +147 -0
- package/dist/sceneHlod/transfer.js.map +1 -0
- package/dist/sceneHlod/types.d.ts +69 -0
- package/dist/sceneHlod/types.js +3 -0
- package/dist/sceneHlod/types.js.map +1 -0
- package/dist/sceneImport/archive.d.ts +30 -0
- package/dist/sceneImport/archive.js +336 -0
- package/dist/sceneImport/archive.js.map +1 -0
- package/dist/sceneImport/bistroMaterialBake.d.ts +20 -0
- package/dist/sceneImport/bistroMaterialBake.js +169 -0
- package/dist/sceneImport/bistroMaterialBake.js.map +1 -0
- package/dist/sceneImport/bistroTexturePlan.d.ts +6 -0
- package/dist/sceneImport/bistroTexturePlan.js +23 -0
- package/dist/sceneImport/bistroTexturePlan.js.map +1 -0
- package/dist/sceneImport/compiler.d.ts +36 -0
- package/dist/sceneImport/compiler.js +251 -0
- package/dist/sceneImport/compiler.js.map +1 -0
- package/dist/sceneImport/composeMounts.d.ts +159 -0
- package/dist/sceneImport/composeMounts.js +687 -0
- package/dist/sceneImport/composeMounts.js.map +1 -0
- package/dist/sceneImport/defaultMaterials.d.ts +45 -0
- package/dist/sceneImport/defaultMaterials.js +121 -0
- package/dist/sceneImport/defaultMaterials.js.map +1 -0
- package/dist/sceneImport/externalTextures.d.ts +44 -0
- package/dist/sceneImport/externalTextures.js +146 -0
- package/dist/sceneImport/externalTextures.js.map +1 -0
- package/dist/sceneImport/fbx.d.ts +101 -0
- package/dist/sceneImport/fbx.js +307 -0
- package/dist/sceneImport/fbx.js.map +1 -0
- package/dist/sceneImport/glbSplit.d.ts +24 -0
- package/dist/sceneImport/glbSplit.js +95 -0
- package/dist/sceneImport/glbSplit.js.map +1 -0
- package/dist/sceneImport/gltfIo.d.ts +32 -0
- package/dist/sceneImport/gltfIo.js +39 -0
- package/dist/sceneImport/gltfIo.js.map +1 -0
- package/dist/sceneImport/helsinkiTiles.d.ts +31 -0
- package/dist/sceneImport/helsinkiTiles.js +52 -0
- package/dist/sceneImport/helsinkiTiles.js.map +1 -0
- package/dist/sceneImport/materials/binding.d.ts +16 -0
- package/dist/sceneImport/materials/binding.js +42 -0
- package/dist/sceneImport/materials/binding.js.map +1 -0
- package/dist/sceneImport/materials/catalog.d.ts +36 -0
- package/dist/sceneImport/materials/catalog.js +233 -0
- package/dist/sceneImport/materials/catalog.js.map +1 -0
- package/dist/sceneImport/materials/index.d.ts +4 -0
- package/dist/sceneImport/materials/index.js +21 -0
- package/dist/sceneImport/materials/index.js.map +1 -0
- package/dist/sceneImport/materials/matcher.d.ts +33 -0
- package/dist/sceneImport/materials/matcher.js +127 -0
- package/dist/sceneImport/materials/matcher.js.map +1 -0
- package/dist/sceneImport/materials/recipe.d.ts +30 -0
- package/dist/sceneImport/materials/recipe.js +134 -0
- package/dist/sceneImport/materials/recipe.js.map +1 -0
- package/dist/sceneImport/multiAsset.d.ts +79 -0
- package/dist/sceneImport/multiAsset.js +535 -0
- package/dist/sceneImport/multiAsset.js.map +1 -0
- package/dist/sceneImport/multiAssetSpawn.d.ts +40 -0
- package/dist/sceneImport/multiAssetSpawn.js +98 -0
- package/dist/sceneImport/multiAssetSpawn.js.map +1 -0
- package/dist/sceneImport/obj.d.ts +41 -0
- package/dist/sceneImport/obj.js +276 -0
- package/dist/sceneImport/obj.js.map +1 -0
- package/dist/sceneImport/package.d.ts +104 -0
- package/dist/sceneImport/package.js +1004 -0
- package/dist/sceneImport/package.js.map +1 -0
- package/dist/sceneImport/packageReader.d.ts +10 -0
- package/dist/sceneImport/packageReader.js +250 -0
- package/dist/sceneImport/packageReader.js.map +1 -0
- package/dist/sceneImport/proxy.d.ts +100 -0
- package/dist/sceneImport/proxy.js +334 -0
- package/dist/sceneImport/proxy.js.map +1 -0
- package/dist/sceneImport/publish.d.ts +47 -0
- package/dist/sceneImport/publish.js +98 -0
- package/dist/sceneImport/publish.js.map +1 -0
- package/dist/sceneImport/semantic.d.ts +75 -0
- package/dist/sceneImport/semantic.js +296 -0
- package/dist/sceneImport/semantic.js.map +1 -0
- package/dist/sceneImport/spawnProbe.d.ts +55 -0
- package/dist/sceneImport/spawnProbe.js +159 -0
- package/dist/sceneImport/spawnProbe.js.map +1 -0
- package/dist/sceneImport/streamLayout.d.ts +96 -0
- package/dist/sceneImport/streamLayout.js +203 -0
- package/dist/sceneImport/streamLayout.js.map +1 -0
- package/dist/sceneImport/textureDecode.d.ts +21 -0
- package/dist/sceneImport/textureDecode.js +292 -0
- package/dist/sceneImport/textureDecode.js.map +1 -0
- package/dist/sceneImport/types.d.ts +84 -0
- package/dist/sceneImport/types.js +58 -0
- package/dist/sceneImport/types.js.map +1 -0
- package/dist/scenePerformance.d.ts +162 -0
- package/dist/scenePerformance.js +905 -0
- package/dist/scenePerformance.js.map +1 -0
- package/dist/screenshot/captureScreenshots.d.ts +36 -0
- package/dist/screenshot/captureScreenshots.js +229 -0
- package/dist/screenshot/captureScreenshots.js.map +1 -0
- package/dist/screenshot/encodeImagePreview.d.ts +5 -0
- package/dist/screenshot/encodeImagePreview.js +42 -0
- package/dist/screenshot/encodeImagePreview.js.map +1 -0
- package/dist/screenshot/publishThumbnail.d.ts +4 -0
- package/dist/screenshot/publishThumbnail.js +56 -0
- package/dist/screenshot/publishThumbnail.js.map +1 -0
- package/dist/screenshot/staticServe.d.ts +14 -0
- package/dist/screenshot/staticServe.js +120 -0
- package/dist/screenshot/staticServe.js.map +1 -0
- package/dist/source-archive.d.ts +101 -0
- package/dist/source-archive.js +309 -0
- package/dist/source-archive.js.map +1 -0
- package/dist/stdioBlocking.d.ts +1 -0
- package/dist/stdioBlocking.js +9 -0
- package/dist/stdioBlocking.js.map +1 -0
- package/dist/terrain/bake.d.ts +40 -0
- package/dist/terrain/bake.js +318 -0
- package/dist/terrain/bake.js.map +1 -0
- package/dist/terrain/generate.d.ts +21 -0
- package/dist/terrain/generate.js +239 -0
- package/dist/terrain/generate.js.map +1 -0
- package/dist/terrain/grid.d.ts +48 -0
- package/dist/terrain/grid.js +133 -0
- package/dist/terrain/grid.js.map +1 -0
- package/dist/terrain/import.d.ts +40 -0
- package/dist/terrain/import.js +252 -0
- package/dist/terrain/import.js.map +1 -0
- package/dist/terrain/index.d.ts +11 -0
- package/dist/terrain/index.js +88 -0
- package/dist/terrain/index.js.map +1 -0
- package/dist/terrain/inspect.d.ts +35 -0
- package/dist/terrain/inspect.js +115 -0
- package/dist/terrain/inspect.js.map +1 -0
- package/dist/terrain/island.d.ts +31 -0
- package/dist/terrain/island.js +128 -0
- package/dist/terrain/island.js.map +1 -0
- package/dist/terrain/noise.d.ts +79 -0
- package/dist/terrain/noise.js +162 -0
- package/dist/terrain/noise.js.map +1 -0
- package/dist/terrain/normals.d.ts +21 -0
- package/dist/terrain/normals.js +55 -0
- package/dist/terrain/normals.js.map +1 -0
- package/dist/terrain/presets/alpine.json +20 -0
- package/dist/terrain/presets/coast.json +20 -0
- package/dist/terrain/presets/desert.json +22 -0
- package/dist/terrain/presets/forest.json +20 -0
- package/dist/terrain/presets/meadow.json +20 -0
- package/dist/terrain/presets/volcanic.json +22 -0
- package/dist/terrain/presets.d.ts +29 -0
- package/dist/terrain/presets.js +128 -0
- package/dist/terrain/presets.js.map +1 -0
- package/dist/terrain/source.d.ts +42 -0
- package/dist/terrain/source.js +241 -0
- package/dist/terrain/source.js.map +1 -0
- package/dist/terrain/tile.d.ts +92 -0
- package/dist/terrain/tile.js +268 -0
- package/dist/terrain/tile.js.map +1 -0
- package/dist/textureAudit.d.ts +23 -0
- package/dist/textureAudit.js +192 -0
- package/dist/textureAudit.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/unreal/avatarMode.d.ts +21 -0
- package/dist/unreal/avatarMode.js +33 -0
- package/dist/unreal/avatarMode.js.map +1 -0
- package/dist/unreal/delivery.d.ts +46 -0
- package/dist/unreal/delivery.js +89 -0
- package/dist/unreal/delivery.js.map +1 -0
- package/dist/unreal/doctor.d.ts +50 -0
- package/dist/unreal/doctor.js +102 -0
- package/dist/unreal/doctor.js.map +1 -0
- package/dist/unreal/package.d.ts +80 -0
- package/dist/unreal/package.js +273 -0
- package/dist/unreal/package.js.map +1 -0
- package/dist/unreal/release.d.ts +41 -0
- package/dist/unreal/release.js +122 -0
- package/dist/unreal/release.js.map +1 -0
- package/dist/unreal.d.ts +30 -0
- package/dist/unreal.js +362 -0
- package/dist/unreal.js.map +1 -0
- package/dist/unrealCandidate.d.ts +213 -0
- package/dist/unrealCandidate.js +765 -0
- package/dist/unrealCandidate.js.map +1 -0
- package/dist/unrealManifest.d.ts +74 -0
- package/dist/unrealManifest.js +354 -0
- package/dist/unrealManifest.js.map +1 -0
- package/dist/unrealPublish.d.ts +111 -0
- package/dist/unrealPublish.js +331 -0
- package/dist/unrealPublish.js.map +1 -0
- package/dist/vault.d.ts +121 -0
- package/dist/vault.js +136 -0
- package/dist/vault.js.map +1 -0
- package/dist/vehicle/addOnDefinition.d.ts +19 -0
- package/dist/vehicle/addOnDefinition.js +21 -0
- package/dist/vehicle/addOnDefinition.js.map +1 -0
- package/dist/vehicle/addon.d.ts +158 -0
- package/dist/vehicle/addon.js +441 -0
- package/dist/vehicle/addon.js.map +1 -0
- package/dist/vehicle/addonDefinitionGuard.d.ts +53 -0
- package/dist/vehicle/addonDefinitionGuard.js +206 -0
- package/dist/vehicle/addonDefinitionGuard.js.map +1 -0
- package/dist/vehicle/addonPublished.d.ts +80 -0
- package/dist/vehicle/addonPublished.js +221 -0
- package/dist/vehicle/addonPublished.js.map +1 -0
- package/dist/vehicle/audio.d.ts +259 -0
- package/dist/vehicle/audio.js +1069 -0
- package/dist/vehicle/audio.js.map +1 -0
- package/dist/vehicle/audioDefects.d.ts +125 -0
- package/dist/vehicle/audioDefects.js +591 -0
- package/dist/vehicle/audioDefects.js.map +1 -0
- package/dist/vehicle/audioDistinct.d.ts +62 -0
- package/dist/vehicle/audioDistinct.js +479 -0
- package/dist/vehicle/audioDistinct.js.map +1 -0
- package/dist/vehicle/audioImport.d.ts +217 -0
- package/dist/vehicle/audioImport.js +610 -0
- package/dist/vehicle/audioImport.js.map +1 -0
- package/dist/vehicle/audioProvenance.d.ts +47 -0
- package/dist/vehicle/audioProvenance.js +364 -0
- package/dist/vehicle/audioProvenance.js.map +1 -0
- package/dist/vehicle/audioReference.d.ts +36 -0
- package/dist/vehicle/audioReference.js +176 -0
- package/dist/vehicle/audioReference.js.map +1 -0
- package/dist/vehicle/audioSlots.d.ts +27 -0
- package/dist/vehicle/audioSlots.js +43 -0
- package/dist/vehicle/audioSlots.js.map +1 -0
- package/dist/vehicle/audioSpectral.d.ts +71 -0
- package/dist/vehicle/audioSpectral.js +534 -0
- package/dist/vehicle/audioSpectral.js.map +1 -0
- package/dist/vehicle/cabinCheck.d.ts +209 -0
- package/dist/vehicle/cabinCheck.js +799 -0
- package/dist/vehicle/cabinCheck.js.map +1 -0
- package/dist/vehicle/drive.d.ts +66 -0
- package/dist/vehicle/drive.js +228 -0
- package/dist/vehicle/drive.js.map +1 -0
- package/dist/vehicle/enginePolicy.d.ts +68 -0
- package/dist/vehicle/enginePolicy.js +209 -0
- package/dist/vehicle/enginePolicy.js.map +1 -0
- package/dist/vehicle/hostFrame.d.ts +78 -0
- package/dist/vehicle/hostFrame.js +136 -0
- package/dist/vehicle/hostFrame.js.map +1 -0
- package/dist/vehicle/inspectionSheets.d.ts +42 -0
- package/dist/vehicle/inspectionSheets.js +173 -0
- package/dist/vehicle/inspectionSheets.js.map +1 -0
- package/dist/vehicle/keyboardLaunch.d.ts +189 -0
- package/dist/vehicle/keyboardLaunch.js +340 -0
- package/dist/vehicle/keyboardLaunch.js.map +1 -0
- package/dist/vehicle/lampCoverage.d.ts +49 -0
- package/dist/vehicle/lampCoverage.js +252 -0
- package/dist/vehicle/lampCoverage.js.map +1 -0
- package/dist/vehicle/mintAddOn.d.ts +110 -0
- package/dist/vehicle/mintAddOn.js +321 -0
- package/dist/vehicle/mintAddOn.js.map +1 -0
- package/dist/vehicle/mintVehicle.d.ts +189 -0
- package/dist/vehicle/mintVehicle.js +417 -0
- package/dist/vehicle/mintVehicle.js.map +1 -0
- package/dist/vehicle/paintHue.d.ts +89 -0
- package/dist/vehicle/paintHue.js +248 -0
- package/dist/vehicle/paintHue.js.map +1 -0
- package/dist/vehicle/panelCoverage.d.ts +37 -0
- package/dist/vehicle/panelCoverage.js +93 -0
- package/dist/vehicle/panelCoverage.js.map +1 -0
- package/dist/vehicle/platform.d.ts +71 -0
- package/dist/vehicle/platform.js +144 -0
- package/dist/vehicle/platform.js.map +1 -0
- package/dist/vehicle/preview.d.ts +339 -0
- package/dist/vehicle/preview.js +854 -0
- package/dist/vehicle/preview.js.map +1 -0
- package/dist/vehicle/previewAddon.d.ts +197 -0
- package/dist/vehicle/previewAddon.js +520 -0
- package/dist/vehicle/previewAddon.js.map +1 -0
- package/dist/vehicle/previewSeats.d.ts +102 -0
- package/dist/vehicle/previewSeats.js +190 -0
- package/dist/vehicle/previewSeats.js.map +1 -0
- package/dist/vehicle/publish.d.ts +78 -0
- package/dist/vehicle/publish.js +111 -0
- package/dist/vehicle/publish.js.map +1 -0
- package/dist/vehicle/recheckListed.d.ts +87 -0
- package/dist/vehicle/recheckListed.js +200 -0
- package/dist/vehicle/recheckListed.js.map +1 -0
- package/dist/vehicle/renditionManifest.d.ts +10 -0
- package/dist/vehicle/renditionManifest.js +56 -0
- package/dist/vehicle/renditionManifest.js.map +1 -0
- package/dist/vehicle/sealCheck.d.ts +30 -0
- package/dist/vehicle/sealCheck.js +59 -0
- package/dist/vehicle/sealCheck.js.map +1 -0
- package/dist/vehicle/simulate.d.ts +219 -0
- package/dist/vehicle/simulate.js +536 -0
- package/dist/vehicle/simulate.js.map +1 -0
- package/dist/vehicle/simulateRuntime.d.ts +76 -0
- package/dist/vehicle/simulateRuntime.js +252 -0
- package/dist/vehicle/simulateRuntime.js.map +1 -0
- package/dist/vehicle/testutil/sourcedAudio.d.ts +13 -0
- package/dist/vehicle/testutil/sourcedAudio.js +96 -0
- package/dist/vehicle/testutil/sourcedAudio.js.map +1 -0
- package/dist/vehicle/validate.d.ts +225 -0
- package/dist/vehicle/validate.js +956 -0
- package/dist/vehicle/validate.js.map +1 -0
- package/dist/vehicle/wheelDesign.d.ts +98 -0
- package/dist/vehicle/wheelDesign.js +276 -0
- package/dist/vehicle/wheelDesign.js.map +1 -0
- package/dist/verifySubPath.d.ts +69 -0
- package/dist/verifySubPath.js +458 -0
- package/dist/verifySubPath.js.map +1 -0
- package/dist/visualQa/animation.d.ts +57 -0
- package/dist/visualQa/animation.js +503 -0
- package/dist/visualQa/animation.js.map +1 -0
- package/dist/visualQa/avatar.d.ts +3 -0
- package/dist/visualQa/avatar.js +443 -0
- package/dist/visualQa/avatar.js.map +1 -0
- package/dist/visualQa/avatarMath.d.ts +180 -0
- package/dist/visualQa/avatarMath.js +318 -0
- package/dist/visualQa/avatarMath.js.map +1 -0
- package/dist/visualQa/avatarPreview.d.ts +26 -0
- package/dist/visualQa/avatarPreview.js +167 -0
- package/dist/visualQa/avatarPreview.js.map +1 -0
- package/dist/visualQa/avatarPreviewMath.d.ts +189 -0
- package/dist/visualQa/avatarPreviewMath.js +696 -0
- package/dist/visualQa/avatarPreviewMath.js.map +1 -0
- package/dist/visualQa/avatarPreviewProbe.d.ts +7 -0
- package/dist/visualQa/avatarPreviewProbe.js +181 -0
- package/dist/visualQa/avatarPreviewProbe.js.map +1 -0
- package/dist/visualQa/avatarProbe.d.ts +1 -0
- package/dist/visualQa/avatarProbe.js +264 -0
- package/dist/visualQa/avatarProbe.js.map +1 -0
- package/dist/visualQa/browser.d.ts +116 -0
- package/dist/visualQa/browser.js +817 -0
- package/dist/visualQa/browser.js.map +1 -0
- package/dist/visualQa/candidate.d.ts +116 -0
- package/dist/visualQa/candidate.js +265 -0
- package/dist/visualQa/candidate.js.map +1 -0
- package/dist/visualQa/checklists.d.ts +31 -0
- package/dist/visualQa/checklists.js +160 -0
- package/dist/visualQa/checklists.js.map +1 -0
- package/dist/visualQa/command.d.ts +110 -0
- package/dist/visualQa/command.js +521 -0
- package/dist/visualQa/command.js.map +1 -0
- package/dist/visualQa/commonAsserts.d.ts +68 -0
- package/dist/visualQa/commonAsserts.js +239 -0
- package/dist/visualQa/commonAsserts.js.map +1 -0
- package/dist/visualQa/contactSheet.d.ts +32 -0
- package/dist/visualQa/contactSheet.js +153 -0
- package/dist/visualQa/contactSheet.js.map +1 -0
- package/dist/visualQa/critic.d.ts +18 -0
- package/dist/visualQa/critic.js +179 -0
- package/dist/visualQa/critic.js.map +1 -0
- package/dist/visualQa/emotePage.d.ts +10 -0
- package/dist/visualQa/emotePage.js +249 -0
- package/dist/visualQa/emotePage.js.map +1 -0
- package/dist/visualQa/evidenceOverlay.d.ts +74 -0
- package/dist/visualQa/evidenceOverlay.js +268 -0
- package/dist/visualQa/evidenceOverlay.js.map +1 -0
- package/dist/visualQa/harness.d.ts +57 -0
- package/dist/visualQa/harness.js +3 -0
- package/dist/visualQa/harness.js.map +1 -0
- package/dist/visualQa/hosted.d.ts +152 -0
- package/dist/visualQa/hosted.js +367 -0
- package/dist/visualQa/hosted.js.map +1 -0
- package/dist/visualQa/labelLimit.d.ts +12 -0
- package/dist/visualQa/labelLimit.js +31 -0
- package/dist/visualQa/labelLimit.js.map +1 -0
- package/dist/visualQa/mirror.d.ts +36 -0
- package/dist/visualQa/mirror.js +98 -0
- package/dist/visualQa/mirror.js.map +1 -0
- package/dist/visualQa/moveUx.d.ts +44 -0
- package/dist/visualQa/moveUx.js +103 -0
- package/dist/visualQa/moveUx.js.map +1 -0
- package/dist/visualQa/pinnedChrome.d.ts +63 -0
- package/dist/visualQa/pinnedChrome.js +214 -0
- package/dist/visualQa/pinnedChrome.js.map +1 -0
- package/dist/visualQa/resolve.d.ts +88 -0
- package/dist/visualQa/resolve.js +248 -0
- package/dist/visualQa/resolve.js.map +1 -0
- package/dist/visualQa/scene.d.ts +14 -0
- package/dist/visualQa/scene.js +688 -0
- package/dist/visualQa/scene.js.map +1 -0
- package/dist/visualQa/shot.d.ts +2 -0
- package/dist/visualQa/shot.js +27 -0
- package/dist/visualQa/shot.js.map +1 -0
- package/dist/visualQa/signIn.d.ts +35 -0
- package/dist/visualQa/signIn.js +144 -0
- package/dist/visualQa/signIn.js.map +1 -0
- package/dist/visualQa/submitBudget.d.ts +25 -0
- package/dist/visualQa/submitBudget.js +82 -0
- package/dist/visualQa/submitBudget.js.map +1 -0
- package/dist/visualQa/types.d.ts +195 -0
- package/dist/visualQa/types.js +12 -0
- package/dist/visualQa/types.js.map +1 -0
- package/dist/visualQa/vehicle.d.ts +130 -0
- package/dist/visualQa/vehicle.js +2001 -0
- package/dist/visualQa/vehicle.js.map +1 -0
- package/dist/visualQa/vehicleAddonProbe.d.ts +1 -0
- package/dist/visualQa/vehicleAddonProbe.js +115 -0
- package/dist/visualQa/vehicleAddonProbe.js.map +1 -0
- package/dist/visualQa/vehicleCabinFit.d.ts +78 -0
- package/dist/visualQa/vehicleCabinFit.js +55 -0
- package/dist/visualQa/vehicleCabinFit.js.map +1 -0
- package/dist/visualQa/vehicleClearance.d.ts +135 -0
- package/dist/visualQa/vehicleClearance.js +299 -0
- package/dist/visualQa/vehicleClearance.js.map +1 -0
- package/dist/visualQa/vehicleDriveAlive.d.ts +55 -0
- package/dist/visualQa/vehicleDriveAlive.js +103 -0
- package/dist/visualQa/vehicleDriveAlive.js.map +1 -0
- package/dist/visualQa/vehicleGrip.d.ts +156 -0
- package/dist/visualQa/vehicleGrip.js +439 -0
- package/dist/visualQa/vehicleGrip.js.map +1 -0
- package/dist/visualQa/vehicleInspection.d.ts +30 -0
- package/dist/visualQa/vehicleInspection.js +189 -0
- package/dist/visualQa/vehicleInspection.js.map +1 -0
- package/dist/visualQa/vehicleLamps.d.ts +118 -0
- package/dist/visualQa/vehicleLamps.js +374 -0
- package/dist/visualQa/vehicleLamps.js.map +1 -0
- package/dist/visualQa/vehicleMath.d.ts +440 -0
- package/dist/visualQa/vehicleMath.js +967 -0
- package/dist/visualQa/vehicleMath.js.map +1 -0
- package/dist/visualQa/vehicleOccupants.d.ts +66 -0
- package/dist/visualQa/vehicleOccupants.js +448 -0
- package/dist/visualQa/vehicleOccupants.js.map +1 -0
- package/dist/visualQa/vehiclePenetration.d.ts +172 -0
- package/dist/visualQa/vehiclePenetration.js +1157 -0
- package/dist/visualQa/vehiclePenetration.js.map +1 -0
- package/dist/visualQa/vehiclePoses.d.ts +25 -0
- package/dist/visualQa/vehiclePoses.js +56 -0
- package/dist/visualQa/vehiclePoses.js.map +1 -0
- package/dist/visualQa/vehiclePosture.d.ts +78 -0
- package/dist/visualQa/vehiclePosture.js +263 -0
- package/dist/visualQa/vehiclePosture.js.map +1 -0
- package/dist/visualQa/vehiclePreview.d.ts +103 -0
- package/dist/visualQa/vehiclePreview.js +312 -0
- package/dist/visualQa/vehiclePreview.js.map +1 -0
- package/dist/visualQa/vehicleProbe.d.ts +3 -0
- package/dist/visualQa/vehicleProbe.js +670 -0
- package/dist/visualQa/vehicleProbe.js.map +1 -0
- package/dist/visualQa/vehicleStance.d.ts +108 -0
- package/dist/visualQa/vehicleStance.js +200 -0
- package/dist/visualQa/vehicleStance.js.map +1 -0
- package/dist/visualQa/viewer.d.ts +6 -0
- package/dist/visualQa/viewer.js +750 -0
- package/dist/visualQa/viewer.js.map +1 -0
- package/dist/visualQa/viewerGeometry.d.ts +116 -0
- package/dist/visualQa/viewerGeometry.js +476 -0
- package/dist/visualQa/viewerGeometry.js.map +1 -0
- package/dist/visualQa/viewerPage.d.ts +11 -0
- package/dist/visualQa/viewerPage.js +414 -0
- package/dist/visualQa/viewerPage.js.map +1 -0
- package/dist/visualQa/webgpuSelfTest.d.ts +52 -0
- package/dist/visualQa/webgpuSelfTest.js +113 -0
- package/dist/visualQa/webgpuSelfTest.js.map +1 -0
- package/dist/visualQa/winChrome.d.ts +92 -0
- package/dist/visualQa/winChrome.js +445 -0
- package/dist/visualQa/winChrome.js.map +1 -0
- package/dist/visualQa/worldWalk.d.ts +59 -0
- package/dist/visualQa/worldWalk.js +523 -0
- package/dist/visualQa/worldWalk.js.map +1 -0
- package/dist/visualQa/worldWalkMath.d.ts +263 -0
- package/dist/visualQa/worldWalkMath.js +873 -0
- package/dist/visualQa/worldWalkMath.js.map +1 -0
- package/dist/visualQa/worldWalkProbe.d.ts +1 -0
- package/dist/visualQa/worldWalkProbe.js +206 -0
- package/dist/visualQa/worldWalkProbe.js.map +1 -0
- package/dist/visualsConfig.d.ts +65 -0
- package/dist/visualsConfig.js +1333 -0
- package/dist/visualsConfig.js.map +1 -0
- package/dist/voiceCommand.d.ts +11 -0
- package/dist/voiceCommand.js +101 -0
- package/dist/voiceCommand.js.map +1 -0
- package/dist/world/analyze.d.ts +51 -0
- package/dist/world/analyze.js +767 -0
- package/dist/world/analyze.js.map +1 -0
- package/dist/world/baseline.d.ts +33 -0
- package/dist/world/baseline.js +111 -0
- package/dist/world/baseline.js.map +1 -0
- package/dist/world/canonicalize.d.ts +7 -0
- package/dist/world/canonicalize.js +110 -0
- package/dist/world/canonicalize.js.map +1 -0
- package/dist/world/diff.d.ts +18 -0
- package/dist/world/diff.js +58 -0
- package/dist/world/diff.js.map +1 -0
- package/dist/world/focus.d.ts +11 -0
- package/dist/world/focus.js +161 -0
- package/dist/world/focus.js.map +1 -0
- package/dist/world/format.d.ts +6 -0
- package/dist/world/format.js +125 -0
- package/dist/world/format.js.map +1 -0
- package/dist/world/readWorldMetrics.d.ts +10 -0
- package/dist/world/readWorldMetrics.js +31 -0
- package/dist/world/readWorldMetrics.js.map +1 -0
- package/dist/world/snapshotTypes.d.ts +59 -0
- package/dist/world/snapshotTypes.js +8 -0
- package/dist/world/snapshotTypes.js.map +1 -0
- package/dist/world/snapshotWorld.d.ts +16 -0
- package/dist/world/snapshotWorld.js +142 -0
- package/dist/world/snapshotWorld.js.map +1 -0
- package/dist/world/wiring.d.ts +21 -0
- package/dist/world/wiring.js +73 -0
- package/dist/world/wiring.js.map +1 -0
- package/dist/world/zones.d.ts +23 -0
- package/dist/world/zones.js +134 -0
- package/dist/world/zones.js.map +1 -0
- package/docs/bridge.md +304 -0
- package/docs/device-hand-reach.md +44 -0
- package/docs/scene-hlod.md +139 -0
- package/docs/vehicle-audio-import.md +299 -0
- package/docs/vehicle-simulate.md +165 -0
- package/docs/visual-qa-candidate-versions.md +71 -0
- package/docs/visual-qa.md +462 -0
- package/package.json +69 -4
- package/plugins/beamng-vehicle/README.md +129 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/beamng-vehicle.mjs +1295 -0
- package/plugins/beamng-vehicle/bin/beamng_abs.py +408 -0
- package/plugins/beamng-vehicle/bin/beamng_audio.py +394 -0
- package/plugins/beamng-vehicle/bin/beamng_engine.py +184 -0
- package/plugins/beamng-vehicle/bin/beamng_expression.py +373 -0
- package/plugins/beamng-vehicle/bin/beamng_jbeam.py +858 -0
- package/plugins/beamng-vehicle/bin/beamng_materials.py +261 -0
- package/plugins/beamng-vehicle/bin/beamng_stock_events.py +171 -0
- package/plugins/beamng-vehicle/bin/convert-beamng.py +1563 -0
- package/plugins/beamng-vehicle/bin/fmod_studio.py +524 -0
- package/plugins/beamng-vehicle/bin/fsb5.py +304 -0
- package/plugins/beamng-vehicle/bin/index-beamng-common.mjs +16 -0
- package/plugins/beamng-vehicle/bin/index-beamng.py +69 -0
- package/plugins/beamng-vehicle/bin/lower-beamng.py +2399 -0
- package/plugins/beamng-vehicle/bin/sim_audio.py +250 -0
- package/plugins/beamng-vehicle/bin/sim_audio_ac.py +378 -0
- package/plugins/beamng-vehicle/bin/sim_audio_beamng.py +878 -0
- package/plugins/beamng-vehicle/bin/sim_audio_fixtures.py +287 -0
- package/plugins/beamng-vehicle/bin/sim_audio_import.py +135 -0
- package/plugins/beamng-vehicle/bin/test_beamng_engine.py +124 -0
- package/plugins/beamng-vehicle/bin/test_beamng_jbeam.py +383 -0
- package/plugins/beamng-vehicle/bin/test_beamng_precedence.py +134 -0
- package/plugins/beamng-vehicle/bin/test_sim_audio.py +249 -0
- package/plugins/beamng-vehicle/bridge-plugin.json +55 -0
- package/plugins/beamng-vehicle/controller-adapters/beamng-0.39.4-abs.json +52 -0
- package/plugins/beamng-vehicle/lib/common-dependency.mjs +357 -0
- package/plugins/beamng-vehicle/lib/dae-scan.mjs +40 -0
- package/plugins/beamng-vehicle/lib/file-identity.mjs +46 -0
- package/plugins/beamng-vehicle/lib/material-semantics.mjs +312 -0
- package/plugins/beamng-vehicle/lib/palette-contract.mjs +6 -0
- package/plugins/beamng-vehicle/lib/vehicle-qa.mjs +567 -0
- package/plugins/beamng-vehicle/lib/vehicle-source.mjs +247 -0
- package/plugins/beamng-vehicle/profiles/source-compatibility.json +14 -0
- package/plugins/beamng-vehicle/vendor/vehicle-package-v2.mjs +6451 -0
- package/vendor/README.md +63 -0
- package/vendor/ability-manifest.mjs +527 -6
- package/vendor/audits/asset-credits.mjs +96 -0
- package/vendor/audits/check-loaders.mjs +80 -0
- package/vendor/audits/perf-gate.mjs +759 -0
- package/vendor/audits/prove-live.mjs +307 -0
- package/vendor/audits/source-audit.mjs +530 -0
- package/vendor/audits/world-audit.mjs +439 -0
- package/vendor/capture-body.glb +0 -0
- package/vendor/capture-face.glb +0 -0
- package/vendor/installed-index.mjs +1 -1
- package/vendor/vehicle-package-v2.mjs +6451 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Scene HLOD authoring
|
|
2
|
+
|
|
3
|
+
These dedicated commands operate on a sealed local Scene v2 bundle. They do not change the character simplification or material-atlas tools.
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
helix scene hlod tag ./scene.json --nodes node.bridge node.landmark --mode include --layer large-features
|
|
7
|
+
helix scene hlod tag ./scene.json --nodes node.moving-door --mode exclude
|
|
8
|
+
helix scene hlod inspect ./scene.json
|
|
9
|
+
helix scene hlod bake ./scene.json
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Parent policies are inherited. Untagged objects are excluded by default. An explicit child `include`, `exclude`, or `inherit` policy controls that subtree;
|
|
13
|
+
an optional layer may be inherited separately. Cell membership remains the scene's existing native distance-streaming layout.
|
|
14
|
+
Only selected geometry is represented in the HLOD. Lights, collision and excluded objects keep their own behavior.
|
|
15
|
+
|
|
16
|
+
`tag` reseals the scene and invalidates its previous HLOD declaration, retaining old content-addressed files for cache reuse.
|
|
17
|
+
Configure a layer while tagging with `--distance 128 --max-distance 2048 --fade 350 --ratio 0.2 --error 0.1 --atlas 512`.
|
|
18
|
+
Distances and simplification error are metres. The triangle ratio is a target constrained by maximum geometric error.
|
|
19
|
+
Atlas sizes are 128, 256, 512, or 1024. The scene's HLOD capability, layer and coverage metadata are portable platform contracts.
|
|
20
|
+
|
|
21
|
+
`bake` merges selected source surfaces per cell/layer, simplifies geometry, creates fresh UVs, and projects original PBR appearance onto color,
|
|
22
|
+
normal, roughness/metalness/occlusion and optional emissive atlases. Output is a GLB with one opaque PBR material and KTX2 mip chains by default.
|
|
23
|
+
Use `--compression png` for portable PNG atlases or `--force` to ignore cached results. Every source pin is verified even on a cache hit.
|
|
24
|
+
|
|
25
|
+
Assets land under `hlod/<sha256>.glb`. Receipts under `.helix/hlod-cache/` include source/output triangles, source draw calls, geometry error,
|
|
26
|
+
projection misses, bake timings and memory estimates. JSON output also reports total wall time, output bytes and cache hits.
|
|
27
|
+
The scene file is replaced only after every cluster succeeds and the resulting document validates. Cancellation, input corruption or concurrent scene edits
|
|
28
|
+
leave that file intact. The command never publishes or contacts asset services.
|
|
29
|
+
|
|
30
|
+
Supported inputs are static `render.primitive` boxes and embedded local GLBs with opaque, single-sided metallic/roughness materials.
|
|
31
|
+
Meshopt compression, mesh quantization, Basis KTX2, PNG/JPEG/WebP textures, authored tangents, transforms and TEXCOORD_0 texture transforms are supported.
|
|
32
|
+
The finest declared resource LOD supplies the bake unless the node declares `hlod.bakeResource`, a pinned local bundle GLB in the same local space.
|
|
33
|
+
This optional, non-inherited reference lets an opaque exterior supply HLOD while the ordinary resource/LOD retains near glass and shared textures.
|
|
34
|
+
The source reference and resource pins participate in stale-bake detection; generated proxies cannot serve as bake inputs. Retagging preserves the
|
|
35
|
+
reference unless excluding the node. Material factors and source texture channels are transferred without scene lighting.
|
|
36
|
+
|
|
37
|
+
Unsupported inputs fail explicitly: animations/skinning/morphs, vertex colors, transparency/cutouts, double-sided materials, non-triangle primitives,
|
|
38
|
+
additional UV sets, unsupported glTF extensions, external GLB texture/buffer references, runtime behavior on covered nodes/ancestors,
|
|
39
|
+
mutable surfaces and authored replacement materials. Exclude these objects or convert their immutable appearance into a supported source GLB first.
|
|
40
|
+
Terrain, scene mounts, item-instance collections and mixed light components use their existing systems and cannot be merged into this static coverage.
|
|
41
|
+
|
|
42
|
+
Each cluster is limited to 500,000 input triangles, 1,024 selected nodes, 128 MiB of decoded textures and one output atlas set.
|
|
43
|
+
Individual inputs are limited to a 256 MiB GLB and 4,096 × 4,096 texture pixels. A failed projection or a bake reducing neither triangles nor draw calls is rejected.
|
|
44
|
+
If a cluster exceeds limits, split its distance cell or select fewer large features. Baking runs serially to bound native/WASM scratch memory.
|
|
45
|
+
|
|
46
|
+
Library exports: `tagSceneHlod`, `inspectSceneHlod`, `planSceneHlod`, `bakeSceneHlod`, and the independent `bakeHlodSurface` API.
|
|
47
|
+
|
|
48
|
+
`approximateHlodGeometry(surface, { voxelSizeM, maxErrorM, triangleRatio, signal })` supplies an alternative geometry stage
|
|
49
|
+
for distant static assemblies. It voxelizes source triangles, floods exterior space, removes enclosed interiors, extracts a
|
|
50
|
+
continuous surface and simplifies it. Returned metrics include voxel dimensions, scratch allocation, triangles and stage timings.
|
|
51
|
+
Input is capped at 500,000 triangles, the grid at 16M voxels and the extracted surface at 1M triangles. Excessive resolution fails;
|
|
52
|
+
the helper never silently increases voxel size. Callers still bake source appearance onto the returned geometry.
|
|
53
|
+
|
|
54
|
+
Its `errorM` measures simplification relative to the reconstructed surface, not against the original asset. Voxel resolution also
|
|
55
|
+
changes silhouettes and can close narrow gaps. Validate geometry and appearance at the intended viewing distance. The ordinary
|
|
56
|
+
`scene hlod bake` command continues to use its existing geometry stage; the new helper is available through the library API.
|
|
57
|
+
|
|
58
|
+
`npm run test:scene-hlod` runs the offline full-bake/cache/integrity/cancellation integration test. The same test is included in the normal suite gate.
|
|
59
|
+
Runtime selection and readiness/fading belong to `@helix/scene` and its optional `@helix/visual` bridge; consult the platform Scene HLOD reference for runtime setup.
|
|
60
|
+
|
|
61
|
+
Maintainer validation scripts also cover authored geometry (`scene-hlod-authored-bench.mjs`), source/proxy images (`scene-hlod-visual-bench.mjs`),
|
|
62
|
+
full scene movement/per-pass source counts (`scene-hlod-runtime-bench.mjs`) and visual/context-recovery smoke (`scene-hlod-runtime-smoke.mjs`).
|
|
63
|
+
The smoke captures an intermediate fade as well as completed replacements. Runtime scripts take an output directory and an engine checkout path;
|
|
64
|
+
the smoke's optional final `visual` argument enables the full visual runtime.
|
|
65
|
+
|
|
66
|
+
`scene-hlod-package-proof.mjs <installed-directory> <engine-directory>` expects a fresh directory installed from packed CLI/manifest/SDK/scene/visual
|
|
67
|
+
artifacts, Three, TypeScript, Vite and Three declarations. For unpublished work, substitute exact local dependency archives only in the temporary CLI
|
|
68
|
+
package metadata. The script checks real paths stay in that install, invokes its CLI exports, uses `installWorld` to wire pinned system payloads,
|
|
69
|
+
compiles declarations, builds a standalone world and tests far/near/far through a localhost browser. The engine path supplies copied hosted Three/Basis
|
|
70
|
+
artifacts; the resulting world has no source checkout imports. All test browsers and servers close on success or failure.
|
|
71
|
+
|
|
72
|
+
Add the final `complete` argument to the package proof, runtime smoke or runtime benchmark to exercise version-2 complete coverage.
|
|
73
|
+
The package proof verifies that one coarse mesh keeps the second native cell visible while only the first cell changes to fine content.
|
|
74
|
+
|
|
75
|
+
## Texture filtering at distance
|
|
76
|
+
|
|
77
|
+
The surface transfer derives each output texel's source UV footprint from the proxy and original triangle geometry, including texture transforms.
|
|
78
|
+
It selects and blends area-filtered source mip levels. Color/emissive samples are averaged in linear light; normal and ORM channels stay linear.
|
|
79
|
+
Fine mortar, brick relief and other subtexel texture details therefore contribute by covered area instead of becoming oversized bright speckles.
|
|
80
|
+
This is offline filtering: output atlas dimensions, geometry budgets and runtime draw counts do not increase. It does not remove authored trim.
|
|
81
|
+
|
|
82
|
+
Rebake existing scenes to use it. Local-cell baker version 3 and complete/refinement prototype baker version 2 invalidate earlier appearance caches;
|
|
83
|
+
these internal cache versions do not change the Scene HLOD capability/schema versions. Rebuild complete coverage before rebaking refinements.
|
|
84
|
+
Mip caches are scoped to one transfer and share pixel data across material bindings. Projection, silhouette and atlas-budget limits still apply.
|
|
85
|
+
Inspect the rebaked result at its actual transition distance; filtering does not repair coarse geometry or insufficient chart space.
|
|
86
|
+
Complete/refinement bakes accept tiles up to 1024 pixels for large, detailed facades, with the same 16M-texel shared-atlas cap.
|
|
87
|
+
Increasing `maxTileSize` can grow the shared texture allocation; inspect the bake receipt and keep decoded reservations within the scene budget.
|
|
88
|
+
The packer trims unused outer rows/columns after placing tiles. Atlas edges need not be powers of two; gutters and mipmapped KTX2 remain supported.
|
|
89
|
+
KTX2 encoding sizes its output buffer from the full UASTC block/mip chain instead of the upstream wrapper?s fixed 10 MiB buffer.
|
|
90
|
+
The image bound remains 4096 pixels per edge, and the WASM encoder is released after each image.
|
|
91
|
+
Use an updated manifest validator for these settings. The shared material carrier includes normal/UV attributes so glTF loaders preserve
|
|
92
|
+
the smooth vertex-normal and derivative-tangent behavior of the cell meshes that borrow its material. Rebuilding complete coverage regenerates it.
|
|
93
|
+
|
|
94
|
+
## Complete distant scene coverage
|
|
95
|
+
|
|
96
|
+
```sh
|
|
97
|
+
helix scene hlod bake-complete ./scene.json --cell-size 512 --voxel-size 2 --texels-per-metre 1 --min-tile 64 --max-tile 256
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
This dedicated bake produces HLOD version 2 (`helix.scene-hlod/2`): one merged mesh/material per independent coarse cell,
|
|
101
|
+
complete coarse residency, shared immutable appearance and per-source fine replacement. Tag ordinary static nodes first;
|
|
102
|
+
the existing native cell selection and ordinary object LODs remain in charge of nearby detail. The command also accepts
|
|
103
|
+
up to 16 scene files in the same bundle, sharing appearance across their separately sealed roots. Keep coarse regions inside
|
|
104
|
+
scene partitions; do not split one region across multiple documents if it must remain one mesh.
|
|
105
|
+
|
|
106
|
+
Layer `--error` and `--ratio` still control geometric simplification. Start with appropriate distant values when tagging,
|
|
107
|
+
such as `--error 2 --ratio 0.005`; old conservative layer settings are preserved. The new bake compares ordinary simplification
|
|
108
|
+
with bounded exterior approximation and retries a failing material projection only for the affected prototype. No projection
|
|
109
|
+
misses are accepted. Voxelization can still remove narrow openings: inspect silhouettes at the actual fine-cell boundary.
|
|
110
|
+
|
|
111
|
+
Input hashes, inherited transforms (including scale/shear), bake settings, source ordering and membership are sealed.
|
|
112
|
+
Warm bakes verify source bytes and reuse prototype geometry/appearance; cell artifacts and shared texture encoding are deterministic.
|
|
113
|
+
All outputs validate before scenes are resealed. Each scene replacement is atomic; a multi-document caller should publish
|
|
114
|
+
its bundle index only after the command succeeds. No network, credentials or remote publication are used by this operation.
|
|
115
|
+
|
|
116
|
+
## Streamed regional refinement
|
|
117
|
+
|
|
118
|
+
After `bake-complete`, run `helix scene hlod bake-refinements ./scene.json --distance 896 --error 0.5 --ratio 0.01
|
|
119
|
+
--voxel-size 0.5 --texels-per-metre 4 --min-tile 64 --max-tile 256` (one command). Multiple scene arguments share the prototype cache.
|
|
120
|
+
This preserves the original complete mesh/material pins and ordered source coverage, and adds one sharper mesh and regional material per cell.
|
|
121
|
+
`--atlas 1024` bounds each regional atlas edge (256/512/1024/2048). To fit that upload/decode budget, repeated and larger prototypes keep more
|
|
122
|
+
texels while smaller features can use smaller tiles down to `--min-tile`. This avoids an otherwise small cell acquiring a large atlas reservation.
|
|
123
|
+
The scene requires `helix.scene-hlod/3`. The runtime streams optional upgrades from spare memory and retains coarse coverage as fallback.
|
|
124
|
+
Do not increase every regional atlas globally: inspect silhouettes and texture detail at the actual loading range, then measure decoded residency.
|
|
125
|
+
The library equivalent is `bakeSceneHlodRefinements`; its receipt reports geometry, per-cell material sizes, triangles and bake time.
|
|
126
|
+
`bake-complete` deliberately rebuilds the coarse level and removes the refinement tier; run `bake-refinements` again afterwards.
|
|
127
|
+
|
|
128
|
+
## Shared appearance and compact cell artifacts
|
|
129
|
+
|
|
130
|
+
The HLOD library also exposes `planSharedHlodAtlas` / `bakeSharedHlodAtlas` for repeated immutable source appearances.
|
|
131
|
+
Power-of-two prototype tiles share a bounded 16M-texel rectangle, with outer gutters, half-resolution normal maps and
|
|
132
|
+
quarter-resolution ORM maps. `writeSharedHlodMaterialGlb` writes its single PBR material as a pinned GLB resource;
|
|
133
|
+
the carrier triangle is for loading only. Reservations include the uncompressed RGBA fallback and complete mip chains.
|
|
134
|
+
|
|
135
|
+
`writeHlodCellGlb` writes one mesh with 16-bit positions/UVs, 8-bit normals and lossless meshopt compression. Its returned
|
|
136
|
+
`quantizationErrorM` bounds the additional position error. Every triangle has a constant `_HELIX_HLOD_SOURCE` index into
|
|
137
|
+
the cluster's ordered source nodes, allowing independent replacement within a merged cell. Geometry is limited to
|
|
138
|
+
500,000 triangles and 1,024 owners. Appearance is supplied by the shared material at runtime. These are HLOD-specific
|
|
139
|
+
library operations; ordinary model/character simplification and the existing scene bake command retain their behavior.
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
# `helix vehicle audio-import` — a car's sounds from its sim mod, never synthesised
|
|
2
|
+
|
|
3
|
+
Vehicle audio is **never generated or synthesised** — not resynthesis, not a text-to-audio take, not the runtime's
|
|
4
|
+
built-in synthesised engine. Every slot is a real recording, in this order of preference:
|
|
5
|
+
|
|
6
|
+
1. the most accurate BeamNG mod of that exact car;
|
|
7
|
+
2. another BeamNG mod of the same engine or car family, or BeamNG's stock FMOD banks for generic sounds (doors,
|
|
8
|
+
horns, tyres, impacts) when no car-specific recording exists;
|
|
9
|
+
3. another sim's mod or official car (Assetto Corsa / ACC ...);
|
|
10
|
+
4. real recordings of the car.
|
|
11
|
+
|
|
12
|
+
A slot with none of these stays **empty with a reason**; `vehicle audio-check` and `vehicle publish` then fail the car
|
|
13
|
+
until it is sourced (or the part is genuinely not fitted — see below).
|
|
14
|
+
|
|
15
|
+
## Command
|
|
16
|
+
|
|
17
|
+
```sh
|
|
18
|
+
helix vehicle audio-import <mod dir | mod .zip | Assetto Corsa car dir | .bank> --out <dir> \
|
|
19
|
+
[--sim beamng|ac|auto] [--vehicle <beamng vehicle id>] [--config <file.pc>] [--map <slot-map.json>] \
|
|
20
|
+
[--beamng-root <BeamNG.drive install>] [--cylinders N] [--prefer exterior|interior] [--ac-native-rungs] \
|
|
21
|
+
[--mod-url <url>] [--base-package <vehicle-package.json | dir | audio.json>] [--json]
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- `--beamng-root` (or `HELIX_BEAMNG_ROOT`): the BeamNG.drive install. Its `content/art_sound.zip` FMOD banks resolve
|
|
25
|
+
every stock event a mod names (`event:>Engine>Starter>v8flat_1986_eng`), its `content/vehicles/common.zip` resolves
|
|
26
|
+
the common parts a vehicle selects (the soundscape horn), its stock engine blends fill a mod that uses a stock engine
|
|
27
|
+
sound, and slots no part names get what the game itself plays (table below). For a non-BeamNG car (Assetto Corsa) it
|
|
28
|
+
fills the slots that car lacks with BeamNG's generic stock recordings.
|
|
29
|
+
- The audio block always carries the five mix fields the runtime reads: `engineGainDb`, `exhaustGainDb`, `minLoadMix`,
|
|
30
|
+
`maxLoadMix`, `muffling`. Each comes from, in order: the `--map` top level; `--base-package` (an existing package's
|
|
31
|
+
audio block, so re-importing a published car keeps its mix); the BeamNG mod's selected `soundConfig` (`mainGain`,
|
|
32
|
+
`minLoadMix`, `maxLoadMix`, `intakeMuffling`) and `soundConfigExhaust.mainGain` — the ladder source first, then the
|
|
33
|
+
main source; else the engine's own BeamNG-blend defaults (-8 dB, -5 dB, 0.15, 1, 0.25). `audio-import.json` and the
|
|
34
|
+
printed summary say where each came from (`mix`).
|
|
35
|
+
- `--cylinders`: the RECORDED engine's cylinder count (the ladder pitch model). Derived from the BeamNG engine part when
|
|
36
|
+
it says; required for an Assetto Corsa car.
|
|
37
|
+
- FMOD decoding uses `vgmstream-cli` (`HELIX_VGMSTREAM` or PATH, release r2117 measured); without it PCM banks are
|
|
38
|
+
decoded byte for byte and Vorbis banks via `pip install fsb5`; anything else is refused with an install message.
|
|
39
|
+
`ffmpeg` (`HELIX_FFMPEG`) transcodes OGG/FLAC and re-pitches FMOD auto-pitched rungs.
|
|
40
|
+
|
|
41
|
+
Output:
|
|
42
|
+
|
|
43
|
+
- `<out>/audio/*.wav` — 16-bit PCM. The only byte changes ever made are recorded as `provenance.transforms`:
|
|
44
|
+
`wav-header-repair` (a malformed header rebuilt around the untouched sample data — the mmbng 993 mod's PSH ladder
|
|
45
|
+
declares 2 channels with the byteRate/blockAlign of mono, so decoders that trust blockAlign play it an octave low at
|
|
46
|
+
half speed), `decode` (OGG/FLAC/FMOD codec to PCM) and `fmod-autopitch-varispeed` (below).
|
|
47
|
+
- `<out>/audio.json` — the package `audio` block, ready to drop into `vehicle-package.json` (copy `audio/` beside it):
|
|
48
|
+
`bankId`, `sampleCylinderCount`, `strokes`, `engineBlend`, `exhaustBlend?`, `bank { blends, assets }`, and all 31
|
|
49
|
+
`slots`.
|
|
50
|
+
- `<out>/audio-import.json` — the full report: every slot's decision, source, alternatives and reason; unmapped source
|
|
51
|
+
sounds; the stock events extracted.
|
|
52
|
+
|
|
53
|
+
`vehicle audio-check <out>/audio.json` checks the block on its own (fitment is cross-checked only against a full
|
|
54
|
+
package's physics).
|
|
55
|
+
|
|
56
|
+
## Provenance
|
|
57
|
+
|
|
58
|
+
Every consumed slot, every bank sample and every blend carries:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
"provenance": {
|
|
62
|
+
"kind": "sim-mod" | "sim-official" | "recording",
|
|
63
|
+
"sim": "beamng" | "assetto-corsa",
|
|
64
|
+
"mod": "mmbng", // the mod / car folder ("BeamNG.drive" for stock banks)
|
|
65
|
+
"modUrl": "https://...", // when --mod-url / map modUrl is given
|
|
66
|
+
"sourceFile": "art/sound/engine/PSH/1768.wav", // or "content/art_sound.zip:art/sound/fmod/desktop/vehicle.assets.bank"
|
|
67
|
+
"sourceSha256": "<sha256 of that source file>",
|
|
68
|
+
"event": "event:/Engine/Starter/v8flat_1986_eng",
|
|
69
|
+
"sample": "<FMOD subsound name>", "subsong": 1234,
|
|
70
|
+
"extractor": "helix beamng_stock_events + vgmstream-cli r2117",
|
|
71
|
+
"transforms": [{ "kind": "wav-header-repair", "detail": "..." }],
|
|
72
|
+
"jbeam": "Porsh_engine.starterSample", // the field that named it (BeamNG)
|
|
73
|
+
"baseGameDefault": "lua/vehicle/... default" // when the game's own default filled the slot
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
It lives inline: `audio.slots[i].provenance`, `audio.slots[i].assets[j].provenance`, `audio.bank.assets[k].provenance`,
|
|
78
|
+
`audio.bank.blends[name].provenance` (`audio-check` also reads a top-level `audio.provenance[slot]` map). The engine's
|
|
79
|
+
package validator ignores unknown keys, and the backend's `pinVehiclePackage` (helix-backend-api
|
|
80
|
+
`src/universal-items/vehicle-package-wire.ts`) seals a `structuredClone` of the submitted package, so the keys survive
|
|
81
|
+
publication (the live 993's slot `note` keys are the existing proof that extra slot keys round-trip).
|
|
82
|
+
|
|
83
|
+
## Gates (`vehicle audio-check`; `vehicle publish` refuses the same)
|
|
84
|
+
|
|
85
|
+
| code | level | when |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `AUDIO_SYNTHESISED` | error | a provenance `kind`/`transform` that is generated or synthesised, or a slot `reason`/`note` that says so (negated clauses like "rather than synthesised" are fine) |
|
|
88
|
+
| `AUDIO_ENGINE_UNSOURCED` | error | no recorded engine ladder (`audio.bank`/`engineBlend`): the runtime would play its synthesised fallback engine. Replaces the old `AUDIO_FALLBACK_ENGINE` warning. Electric cars are exempt |
|
|
89
|
+
| `AUDIO_MIX_FIELDS_MISSING` | error | the audio block lacks a finite `engineGainDb` / `exhaustGainDb`, or a `minLoadMix` / `maxLoadMix` / `muffling` in 0..1. The runtime feeds them to Web Audio; a NaN gain throws in the frame loop, so the car boards but never moves or sounds (R34 1.0.9) |
|
|
90
|
+
| `AUDIO_SLOT_UNSOURCED` | error | one of the 31 slots is missing, has no recording, or only names a platform buffer (the runtime's default pack) |
|
|
91
|
+
| `AUDIO_PROVENANCE_MISSING` | error | a recording (slot asset or ladder rung) that says nothing about where it came from |
|
|
92
|
+
| `AUDIO_SLOT_FITMENT_MISMATCH` | error | `absent: "not-fitted"` on a car that has the part (a turbo car's turboSpool, a manual's clutch), or turbo sounds on a car with no `physics.induction` |
|
|
93
|
+
| `AUDIO_ENGINE_EXHAUST_SHARED_RECORDING` | warn | engine and exhaust blends play the same **sourced** recording (an unsourced shared blend stays `AUDIO_ENGINE_EXHAUST_SAME_BLEND`, error) |
|
|
94
|
+
|
|
95
|
+
The only legitimately empty slots (`consumed: false`, `buffers: []`, a `reason`):
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{ "slot": "turboSpool", "buffers": [], "consumed": false, "absent": "not-fitted", "reason": "naturally aspirated ..." }
|
|
99
|
+
{ "slot": "exhaustLadder", "buffers": [], "consumed": false, "absent": "combined-with-engine", "reason": "..." }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- `not-fitted`: `turboSpool` / `blowOff` without a turbocharger (`physics.induction` absent or not `turbo`),
|
|
103
|
+
`reverseBeep` (fitted equipment), `clutch` on an automatic or CVT; every combustion slot on an electric car.
|
|
104
|
+
- `combined-with-engine`: `exhaustLadder` only, with a sourced engine ladder.
|
|
105
|
+
|
|
106
|
+
**Combined engine+exhaust recordings.** Some mods record one set for both (the mmbng 993 sets the exhaust
|
|
107
|
+
`sampleName` to `"0"`). `audio-import` omits `exhaustBlend` and declares the exhaust slot `combined-with-engine`; the
|
|
108
|
+
recording plays once, on the engine layer, exactly as BeamNG plays it (`importBeamngBank` takes the exhaust blend as
|
|
109
|
+
optional). A package that instead points both blends at the same sourced recording is a warning, not an error: it is a
|
|
110
|
+
real recording, just doubled.
|
|
111
|
+
|
|
112
|
+
## Load rows
|
|
113
|
+
|
|
114
|
+
`bank.blends[name].samples` is `[row 0, row 1]` = **row 0 off-throttle / low load, row 1 on-throttle / high load**.
|
|
115
|
+
Verified against the engine: helix-web-engine-new `systems/engine-core/src/audio/vehicle/beamngBlend.ts`
|
|
116
|
+
`importBeamngBlend` (`loadAxisOrder ?? 'offLoad-first'`: `offIndex = 0`, `onIndex = 1`), which `packageBank.ts`
|
|
117
|
+
`resolvePackageBank` calls without overriding the order. A BeamNG blend's rows are kept as authored; a one-row blend
|
|
118
|
+
serves both rows.
|
|
119
|
+
|
|
120
|
+
## Sources
|
|
121
|
+
|
|
122
|
+
### BeamNG mods
|
|
123
|
+
|
|
124
|
+
| what the mod names | slot |
|
|
125
|
+
|---|---|
|
|
126
|
+
| `soundConfig.sampleName` → `art/sound/blends/<name>.sfxBlend2D.json` (else the stock blend in `art_sound.zip` + FLAC ladder in `audio.zip`) | `engineLadder` |
|
|
127
|
+
| `soundConfigExhaust.sampleName` (`"0"` = combined) | `exhaustLadder` |
|
|
128
|
+
| `starterSample` / `starterSampleExhaust` | `startup` |
|
|
129
|
+
| `shutOffSampleEngine` / `shutOffSampleExhaust` | `shutdown` |
|
|
130
|
+
| `instantAfterFireSound` / `sustainedAfterFireSound` / `shiftAfterFireSound` | `backfire` |
|
|
131
|
+
| `turbocharger.whineLoopEvent` | `turboSpool` |
|
|
132
|
+
| `bovSoundFileName` | `blowOff` |
|
|
133
|
+
| `gearWhineInputEvent` / `gearWhineOutputEvent` | `transmissionWhine` |
|
|
134
|
+
| `shiftSoundEventSequentialGearUp` / `...GearDown`, `shiftSoundEventHPatternGearIn` / `...GearOut`, `shiftSoundEventSingleAxisLever` | `shiftUp` / `shiftDown` |
|
|
135
|
+
| coupler `detachSoundEvent` / `attachSoundEvent` naming `Latches>Door` | `doorOpen` / `doorClose` (bonnet/boot latches: no HELIX slot) |
|
|
136
|
+
| `beepLoopName` | `reverseBeep` |
|
|
137
|
+
| `brakeSquealLoop` | `brakeSqueal` |
|
|
138
|
+
| beam `soundFile` naming a suspension event | `suspension` |
|
|
139
|
+
| `soundscape` rows: `horn`, `indLoop1` / `indicatorStart`, `handbrakeEngaging` | `horn`, `indicatorTick`, `handbrake` |
|
|
140
|
+
| `art/sound/**`, `vehicles/*/sounds/**` files no field names | by file name (`horn`, `door_open`, `gearup`, `blowoff`, `limiter`, `skid` ...) |
|
|
141
|
+
| `hissLoopEvent`, supercharger `whineLoopEvent`, light switches, bonnet/boot latches | reported as unmapped (no HELIX slot) |
|
|
142
|
+
|
|
143
|
+
What BeamNG plays when no selected part names a sound (filled with `--beamng-root`; the evidence is the game's own Lua):
|
|
144
|
+
|
|
145
|
+
| slot | stock event (sample choice) | evidence |
|
|
146
|
+
|---|---|---|
|
|
147
|
+
| `startup` | `Engine/Starter/Old_V2` (the start take) | `combustionEngine.lua` starterSample default |
|
|
148
|
+
| `backfire` | `Vehicle/Afterfire/01_Single_EQ1` | `combustionEngineThermals.lua` |
|
|
149
|
+
| `transmissionWhine` | `Vehicle/Transmission/helical_01/twine_in` | `manualGearbox.lua` |
|
|
150
|
+
| `shiftUp` / `shiftDown` | `Vehicle/Interior/Gearshift/manual_modern_01_in` / `_out` | `hPattern.lua` |
|
|
151
|
+
| `brakeSqueal` | `Vehicle/Failures/failure_brakes_normal` | `wheels.lua` brakeSquealLoop |
|
|
152
|
+
| `tyreScrub` / `tyreSpin` / `skid` | `Surfaces/skid_rigid_v2` (asphalt combined / wheelspin loop / lock-up onset) | `sounds.lua` rigidSkid |
|
|
153
|
+
| `tyreRollSlow` / `tyreRollFast` | `Surfaces/roll_rigid_v2` (asphalt slow / fast) | `sounds.lua` rigidRoll |
|
|
154
|
+
| `impactLight` / `impactMedium` / `impactHeavy` | `Destruction/Vehicle/vehicle_part_impact` (sml / med / lrg) | `sounds.lua` impactGenericEvent |
|
|
155
|
+
| `suspension` | `Vehicle/Suspension/car_modn_med_01/spring_compress_01` | common beamSounds |
|
|
156
|
+
| `doorOpen` / `doorClose` | `Vehicle/Latches/Door/modern_03_open` / `_close` | common door couplers |
|
|
157
|
+
| `handbrake` | `Vehicle/Interior/Handbrake_Ratchet/Ratchet_01_Ratchet` | common soundscape |
|
|
158
|
+
| `indicatorTick` | `Vehicle/Interior/Indicator/AU3_Click` | common `soundscape_indicator1` |
|
|
159
|
+
| `turboSpool` / `blowOff` (turbo cars only) | `Vehicle/Forced_Induction/Turbo_01/turbo_spin` / `turbo_bov` | turbocharger defaults |
|
|
160
|
+
|
|
161
|
+
`shutdown`, `clutch`, `intake` and `revLimiter` have no base-game default: BeamNG plays nothing for them unless a part
|
|
162
|
+
names one, so they stay empty until a `--map` source provides them.
|
|
163
|
+
|
|
164
|
+
`tyreSqueal` (the legacy aggregate) names the `tyreScrub` recording, unconsumed. `idle` names the lowest off-throttle
|
|
165
|
+
engine rung, unconsumed (the runtime idles on the ladder). Two consumed slots that resolve to the same recording keep
|
|
166
|
+
it once; the second is unconsumed with the reason. A cross-role match between rows that cite the same sourced take
|
|
167
|
+
(same source file, sha256, take and transforms) is the sim's own choice to play one recording for both roles, so
|
|
168
|
+
audio-check does not call it `AUDIO_NEAR_DUPLICATE_SOUNDS`; unsourced reuse still fails it.
|
|
169
|
+
|
|
170
|
+
`vehicle publish` uploads, provisions and seals the assets of every slot, consumed or not: they are all in the
|
|
171
|
+
Package's runtime closure, which the engine validator requires to be complete. `vehicle preview` serves them from
|
|
172
|
+
disk the same way (a url-less one stops the car being presented), and `audio-check` verifies each one loads — a
|
|
173
|
+
local file or a url that answers 200 with the declared digest and size, decoding as a WAV — without judging it as a
|
|
174
|
+
played sound (`AUDIO_SOURCE_MISSING`, `AUDIO_ROW_NOT_LOADABLE`, `AUDIO_URL_NOT_FOUND`, `AUDIO_CHECKSUM_MISMATCH`,
|
|
175
|
+
`AUDIO_NOT_WAV`, `AUDIO_NOT_IN_CLOSURE` apply; the loudness/pitch/duplicate gates do not).
|
|
176
|
+
|
|
177
|
+
### Assetto Corsa / ACC
|
|
178
|
+
|
|
179
|
+
`content/cars/<car>/sfx/<car>.bank` (FMOD Studio 1.x, FMT `0x50`; metadata and FSB5 samples in one file) and
|
|
180
|
+
`content/sfx/GUIDs.txt` (event paths; Kunos variants such as `ferrari_f40_s3` share GUIDs, the bank's own car wins).
|
|
181
|
+
|
|
182
|
+
| event | slots |
|
|
183
|
+
|---|---|
|
|
184
|
+
| `engine_ext` (preferred) / `engine_int` | `engineLadder` (exhaust layer: `combined-with-engine`) |
|
|
185
|
+
| `backfire_ext` / `_int` | `backfire` |
|
|
186
|
+
| `door` | `doorOpen`, `doorClose` (by sample name) |
|
|
187
|
+
| `gear_ext` / `_int` | `shiftUp`, `shiftDown` |
|
|
188
|
+
| `horn`, `limiter` | `horn`, `revLimiter` |
|
|
189
|
+
| `skid_ext` / `_int` | `tyreScrub` |
|
|
190
|
+
| `transmission` | `transmissionWhine` |
|
|
191
|
+
| `turbo` | `turboSpool`, `blowOff` |
|
|
192
|
+
| `wheel` | `tyreRollSlow`, `brakeSqueal` |
|
|
193
|
+
| `gear_grind`, `bodywork`, `wind`, `tractioncontrol_*` | unmapped |
|
|
194
|
+
|
|
195
|
+
The engine ladder comes from the event's `rpms` parameter sheet. Each instrument has an **auto-pitch reference** (the
|
|
196
|
+
rpm it was recorded at; INST float at +69, measured against the samples' spectra: the F40's exterior on-throttle set is
|
|
197
|
+
four takes recorded at 4,600 rpm) and volume fades on `rpms` (CTRL property 4 + CURV points) that make it the dominant
|
|
198
|
+
voice over a plateau. Kunos spreads several takes recorded at one rpm across the rev range by auto-pitch; a HELIX rung
|
|
199
|
+
is one recording per rpm, so each instrument becomes:
|
|
200
|
+
|
|
201
|
+
- reference rpm inside its plateau → the recording itself at its reference rpm;
|
|
202
|
+
- otherwise → the recording as FMOD plays it at the plateau's anchor (centre, or its open edge), i.e. a varispeed by
|
|
203
|
+
anchor/reference (`fmod-autopitch-varispeed`, ratio recorded). `--ac-native-rungs` keeps only unchanged rungs.
|
|
204
|
+
|
|
205
|
+
Rows: `_off_` samples → row 0, `_on_` → row 1; an idle take with neither joins both.
|
|
206
|
+
|
|
207
|
+
## `--map`: one car from several sources
|
|
208
|
+
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"sources": {
|
|
212
|
+
"ac": { "path": "/mnt/d/SteamLibrary/steamapps/common/assettocorsa/content/cars/ferrari_f40", "sim": "ac" },
|
|
213
|
+
"euan": { "path": "../mods/euan-f40-0.38.zip", "sim": "beamng", "vehicle": "gabryf40", "config": "LM (EU).pc", "modUrl": "https://..." },
|
|
214
|
+
"bng": { "path": "/mnt/d/SteamLibrary/steamapps/common/BeamNG.drive", "sim": "beamng-base" },
|
|
215
|
+
"rec": { "path": "../reference-sound", "sim": "recording", "mod": "993 cold start, field recording", "modUrl": "https://youtu.be/..." }
|
|
216
|
+
},
|
|
217
|
+
"slots": {
|
|
218
|
+
"engineLadder": { "source": "euan", "blend": "art/sound/blends/f40engine.sfxBlend2D.json" },
|
|
219
|
+
"exhaustLadder": { "source": "euan", "blend": "f40exhaust" },
|
|
220
|
+
"startup": { "source": "euan", "sample": "F40_LM_Start" },
|
|
221
|
+
"blowOff": { "source": "euan", "sample": "bovf40", "trim": { "startS": 0, "endS": 0.9 } },
|
|
222
|
+
"doorClose": { "source": "ac", "sample": "door_close" },
|
|
223
|
+
"shutdown": { "event": "event:>Engine>Shutoff>v8flat_1986_eng", "sample": "Auto_Maserati_Exterior_Start_Idle_Engine_01_SHUTOFF_right" },
|
|
224
|
+
"intake": { "source": "rec", "file": "intake-1.mp3" },
|
|
225
|
+
"horn": { "concat": [
|
|
226
|
+
{ "event": "event:>Vehicle>Electrics>Horns>BM1_V1", "sample": "<start take>" },
|
|
227
|
+
{ "event": "event:>Vehicle>Electrics>Horns>BM1_V1", "sample": "<loop take>", "repeat": 9 },
|
|
228
|
+
{ "event": "event:>Vehicle>Electrics>Horns>BM1_V1", "sample": "<end take>" } ] },
|
|
229
|
+
"reverseBeep": { "absent": "not-fitted", "reason": "the Ferrari F40 has no reverse beeper" }
|
|
230
|
+
},
|
|
231
|
+
"ladder": { "rpm": { "F40_ex_on_mid": 5700 }, "prefer": "exterior", "nativeRungs": false },
|
|
232
|
+
"cylinders": 8, "strokes": 4, "crankLayout": "flat-plane", "bankId": "ferrari-f40", "modUrl": "https://..."
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
- The positional source is `main`; slots the map does not name come from `main` (then, with `--beamng-root`, the
|
|
237
|
+
base game's default). Paths are relative to the map file.
|
|
238
|
+
- A pick on a BeamNG mod (`sample` / `field`) is a jbeam field, the value it names, or a recording the mod ships
|
|
239
|
+
(path, or a bare stem such as `F40_LM_Start` / `bovf40` — extension-less jbeam references resolve the same way). On an
|
|
240
|
+
Assetto Corsa source `sample` is the FMOD subsound name (`event` narrows to one event).
|
|
241
|
+
- `event` names a BeamNG stock FMOD event (`event:>A>B>C`, `event:/A/B/C`, or `A/B/C`); `sample` then picks one take of
|
|
242
|
+
it exactly. A stock event without a `source` is resolved in the `--beamng-root` install.
|
|
243
|
+
- `blend` (on `engineLadder` / `exhaustLadder`, or `ladder.blend` / `ladder.engineBlend` / `ladder.exhaustBlend`) picks a
|
|
244
|
+
blend the mod ships that no selected part names (an Automation export whose jbeam names a stale `sampleName`).
|
|
245
|
+
- `trim: { startS, endS }` keeps a window of a longer real recording; `concat` plays several pieces in order (`repeat`
|
|
246
|
+
per piece), e.g. a stock horn's start + loop + end. Both are recorded in `provenance.transforms`
|
|
247
|
+
(`{ kind: "trim", startS, endS }`, `{ kind: "concat", detail }`) and the pieces in `provenance.pieces`; nothing is
|
|
248
|
+
mixed, filtered or generated.
|
|
249
|
+
- `sim: "recording"` sources take real recordings of the car (`file`); they carry `provenance.kind: "recording"`.
|
|
250
|
+
- `notFitted: "<reason>"` or `absent: "not-fitted"` + `reason` declares a part the real car lacks; `empty: "<reason>"`
|
|
251
|
+
leaves a slot empty on purpose (audio-check still fails it).
|
|
252
|
+
|
|
253
|
+
## Electric cars
|
|
254
|
+
|
|
255
|
+
An EV is recognised from what the package says the car is: `physics.engine.cylinders` 0, an electric engine/motor
|
|
256
|
+
declaration, or (for a bare `audio.json`) a motor ladder: blend provenance with `motor: true` or `pitchAutomation`. Never from
|
|
257
|
+
`audio.drivetrain: "electric"`: that switches the runtime to its synthesised motor voice and ignores recorded ladders,
|
|
258
|
+
so audio-check fails it as `AUDIO_SYNTHESISED`.
|
|
259
|
+
|
|
260
|
+
- The motor is still a recorded engine ladder (`AUDIO_ENGINE_UNSOURCED` otherwise). BeamNG's electric motors name a
|
|
261
|
+
stock blend with no rung samples (`ElectricMotor_02` -> `event:>Engine>Bands>Real>electric_eng_02`, one loop re-pitched
|
|
262
|
+
by an `RPM` pitch automation on the event's master bus). audio-import builds the ladder from that event: rungs at
|
|
263
|
+
1,000 rpm then every 2,000 rpm up to the motor's `maxRPM` (or `ladder.rungs` / `ladder.maxRpm` / the automation's
|
|
264
|
+
span), each the recording at the rate the automation plays it there (normalised pitch -1..1 = -24..+24 semitones),
|
|
265
|
+
recorded as `fmod-pitch-automation-varispeed`; the blend provenance keeps the curve. A map can name the event
|
|
266
|
+
directly: `{"slots": {"engineLadder": {"event": "event:/Engine/Bands/Real/electric_eng_02"}}}`. An event with a second
|
|
267
|
+
simultaneous loop puts it on the exhaust layer.
|
|
268
|
+
- A recorded blend taken from an electric car (its selected parts' powertrain has an `electricMotor`) is a motor ladder
|
|
269
|
+
too: no cylinder count is asked for (`sampleCylinderCount` 1; the playback rate is rpm / rung rpm either way) and its
|
|
270
|
+
blend provenance says `motor: true`.
|
|
271
|
+
- `not-fitted` is allowed for every combustion slot (exhaustLadder, idle, startup, shutdown, clutch, turboSpool,
|
|
272
|
+
blowOff, intake, revLimiter, backfire) and, on a single-speed drive (one forward ratio), shiftUp / shiftDown.
|
|
273
|
+
transmissionWhine stays required: the reduction gear whines.
|
|
274
|
+
- The firing-fundamental pitch gate does not apply to a motor ladder. Rungs the source itself re-pitched from one take
|
|
275
|
+
(FMOD auto-pitch, an event's pitch automation) are not called resampled copies (`AUDIO_LADDER_RUNG_COPY`,
|
|
276
|
+
`AUDIO_NEAR_DUPLICATE_RUNGS`). The near-pure-tone gate is unchanged: the stock BeamNG whine and 12 real Model S
|
|
277
|
+
clips pass it as they are.
|
|
278
|
+
|
|
279
|
+
## The rung pitch gate
|
|
280
|
+
|
|
281
|
+
`AUDIO_RUNG_PITCH_OCTAVE_OFF` used to come from a periodicity tracker alone, which locks onto the engine-cycle
|
|
282
|
+
sub-harmonic that real flat-plane V8 and flat-six recordings carry: it failed every real F40 ladder. It now decides on a
|
|
283
|
+
comb cross-check first (`firingCombRatio`, the f40-r8 owner-proxy's `firing_xcheck.py`): summed spectral peaks on the
|
|
284
|
+
labelled firing series k × f — or on its half-order series k × f/2, which each bank's collector puts into a real
|
|
285
|
+
recording — over the comb between the teeth. >= 3: pitched at its label; < 1.5: off its label (error); between:
|
|
286
|
+
ambiguous (warning). Measured on 130 real F40 rungs (Kunos AC, euan and Gabry BeamNG mods): 0 below 1.5, 11 between.
|
|
287
|
+
Two-octaves-down copies of the same rungs fall below 1.5 on 128 of 130, one-octave-down copies on 74; round 7's
|
|
288
|
+
crank-order synthetic rung measures about 0.6.
|
|
289
|
+
|
|
290
|
+
## Known limits
|
|
291
|
+
|
|
292
|
+
- Real Assetto Corsa recordings clip and carry DC offset (the F40's `F40_ex_on_low_2`: 18% of samples clipped, -0.19 FS
|
|
293
|
+
DC) and fail `AUDIO_CLIPPED` / `AUDIO_DC_OFFSET`. This command never alters a recording to pass a gate.
|
|
294
|
+
- The mmbng 993 PSH ladder sits about 8% below its rpm labels (its dominant series is 1.38 x crank at the labelled rpm),
|
|
295
|
+
so it fails the pitch gate on its own labels.
|
|
296
|
+
- The portable runtime plays a recorded gear whine only with a declared native pitch and has no player for a
|
|
297
|
+
package's idle or intake take (idle comes from the ladder's bottom rung), so those recordings are kept unconsumed —
|
|
298
|
+
and still uploaded and sealed with the package.
|
|
299
|
+
- FMOD metadata layouts other than FMT `0x50` (Assetto Corsa) and `0x92` (BeamNG 0.3x) are refused by version number.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# `helix vehicle simulate`: drive a vehicle before it is published
|
|
2
|
+
|
|
3
|
+
A package's `targets` give its real-car figures (0-100 km/h 4.6 s ±8 %). Until now nothing checked them before a person drove the car on the live site. `vehicle simulate` puts the car on a flat pad, using the **runtime the platform serves today**: the same Rapier world and land solver v2 that players run. It measures the figures and judges each one against the package's own targets, plus an optional reference spec.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
helix vehicle simulate <dir | vehicle-package.json | saved item JSON> [--spec <file>] [--json]
|
|
7
|
+
helix vehicle simulate --item <published-item-id> [--spec <file>] [--json]
|
|
8
|
+
[--offline] [--runtime <bundle.mjs|url>] [--range ^0.3] [--api-url <url>]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Exit codes: `0` means every compared figure passes (or the car has no targets) and the keyboard launch does not FAIL. `1` means a figure is out of tolerance, the rest pose is wrong, or the car is not drivable on a keyboard. `2` means the car could not be simulated: the input was unreadable, no runtime was available, the engine refused the package, or the vehicle is not a land vehicle.
|
|
12
|
+
|
|
13
|
+
`helix vehicle validate` runs the same drive whenever the package has `targets`. A miss there is the error `SIMULATED_PERFORMANCE_OUT_OF_TOLERANCE` at `targets.<key>`, and `--no-simulate` skips the drive. Run it before sealing the Vehicle Package.
|
|
14
|
+
|
|
15
|
+
## The runtime it drives
|
|
16
|
+
|
|
17
|
+
1. `GET <api>/api/v1/instant-packages/humanoid-character/runtime/%5E0.3/index.js` returns a 307 to the CDN bundle. The request carries a browser user agent, because the CDN refuses bare clients.
|
|
18
|
+
2. The bytes are cached by sha256 under `~/.helix/cache/engine-runtime/<sha>/`. `HELIX_ENGINE_RUNTIME_CACHE` overrides the location. A per-(API, range) pointer remembers the last good fetch.
|
|
19
|
+
3. The bundle's only bare imports are rewritten to file URLs:
|
|
20
|
+
- `three` → this CLI's `helix-runtime-three` alias (three 0.185.1, shared with `vehicle addon check`);
|
|
21
|
+
- `@dimforge/rapier3d-compat` → rapier 0.14.0.
|
|
22
|
+
|
|
23
|
+
Those are the versions the engine version's envelope declares (`manifest.three` / `manifest.rapier`). If a future engine declares other versions, the report warns and asks for a CLI update.
|
|
24
|
+
4. Every report starts with `engine runtime humanoid-character <SYSTEM_VERSION> (<source>; sha256 …)`. The source is one of:
|
|
25
|
+
- `live`: fetched now;
|
|
26
|
+
- `cache`: the same bytes as an earlier fetch;
|
|
27
|
+
- `cache (offline fallback: <reason>; fetched <when>)`: the network was down and the last cached runtime was used;
|
|
28
|
+
- `cache (offline, …)`: `--offline` was passed;
|
|
29
|
+
- `file`: `--runtime <bundle.mjs>` was passed.
|
|
30
|
+
|
|
31
|
+
## What it measures
|
|
32
|
+
|
|
33
|
+
| Figure (target key) | How |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `zeroToHundredKphS`, `zeroToSixtyMphS`, `quarterMileS`, `topSpeedKph` (+ converged), `ungovernedTopSpeedKph` | the runtime's `measureVehicle` card (full throttle, automatic shifts, 90 s) |
|
|
36
|
+
| `brakingSixtyToZeroM` | the card's 60-0 mph full-brake stop |
|
|
37
|
+
| `brakingHundredToZeroM`, and any stop a spec names | the runtime's `measureBraking` from that entry speed |
|
|
38
|
+
| `lateralG` | the card's steady-state skidpad (best 1 s average) |
|
|
39
|
+
| `turboLagS` | the roll-on below |
|
|
40
|
+
| rest pose | `allGrounded`, chassis clearance, ride height, pitch/roll. The pose FAILS when a wheel floats or the car tilts more than 3° |
|
|
41
|
+
|
|
42
|
+
**Tolerance semantics.** These are the same as the runtime's `compareToTargets`: `error = (simulated - target) / target`, and the figure passes iff `|error| <= tolerance`. `tolerance` is a fraction (0.08 = ±8 %). A figure the instrument could not measure FAILS.
|
|
43
|
+
|
|
44
|
+
**`--spec` formats.**
|
|
45
|
+
- A vehicle package, or `{ "targets": { … } }` (package-style `{ value, tolerance }`).
|
|
46
|
+
- A flat map of package-style keys.
|
|
47
|
+
- A reference spec with `perf.0_100_kmh_s`, `perf.0_60_mph_s`, `perf.quarter_mile_s`, `perf.top_speed_kmh`, `perf.skidpad_g` / `perf.lateral_g`, `perf.turbo_lag_s`, and `perf.braking_<N>_0_m` (from N km/h) or `perf.braking_<N>mph_0_m` (from N mph). A leaf there is a number or `{ value, tol_pct }`, where `tol_pct` is a percent. With no tolerance given, ±10 % applies, and the row says so.
|
|
48
|
+
|
|
49
|
+
Package targets and spec targets are reported as separate rows.
|
|
50
|
+
|
|
51
|
+
## Engine policy warnings (never errors)
|
|
52
|
+
|
|
53
|
+
`simulate` and `validate` print two named warnings from `src/vehicle/enginePolicy.ts`, both generic:
|
|
54
|
+
|
|
55
|
+
- `SPEED_LIMITER_IS_A_MARKET_GOVERNOR`: `physics.engine.speedLimiterKph` is below 0.9 x `targets.ungovernedTopSpeedKph` (or below 0.9 x
|
|
56
|
+
the instrument's own ungoverned top speed when that target is absent). The live land solver never applies the field; only the
|
|
57
|
+
instrument reads it, so a market or agreement governor just pins the instrument and the top-speed target while the platform car
|
|
58
|
+
runs ungoverned. Set the limiter to null and `targets.topSpeedKph` to the ungoverned figure. No add-on can toggle it (the ECU slot has no
|
|
59
|
+
speed-limiter tune path), so `check_vehicle_addon` and `vehicle addon check` measure add-ons ungoverned.
|
|
60
|
+
- `TORQUE_CURVE_EXCEEDS_DECLARED_CRANK_FIGURES`: an authored crank curve (`physics.engine.torqueCurve` or the solver's
|
|
61
|
+
`simulation.land.driveline.engine.torqueCurve.points`), or the package's own `peakTorqueNm` / `peakPowerKw`, is more than 5 % above the
|
|
62
|
+
maker's declared crank torque or power. Declared figures are read from `manufacturer` citation titles (N.m, kgm, lb-ft; kW, PS, hp;
|
|
63
|
+
never a "at the wheels" or dyno line) and fall back to the package's own peak fields. Losses belong in `drivetrainEfficiency` and drag.
|
|
64
|
+
It is a warning, not an error, because the figures are mined from prose and a market-capped maker figure can leave a car out of
|
|
65
|
+
tolerance on its instrumented targets, which already fail as errors.
|
|
66
|
+
|
|
67
|
+
## Shift scheme (auto vs manual)
|
|
68
|
+
|
|
69
|
+
The report prints the gearbox's shift policy and, when it matters, a `⚠ shift` warning:
|
|
70
|
+
|
|
71
|
+
- `shift: gearbox kind manual, auto-shift ON, manual layer available (toggle ability7)` — a manual-kind gearbox with `gearbox.auto { enabled: true }`. The instrument shifts automatically, but the live drive also exposes a manual layer keyed on the standard action ids: **`ability7` toggles automatic ⇄ manual, `sprint` is the clutch, `ability1`–`ability6` select forward gears 1–6, `crouch` is neutral, `reload` is reverse.** For such a box the report adds **"simulated with auto-shift; live manual-shift unverified"** — this command proves the automatic path only, so you must still verify the live car upshifts before shipping.
|
|
72
|
+
- `shift: gearbox kind manual, auto-shift OFF` — the gearbox cannot shift itself. The instrument then holds 1st gear, the 0-100 / top-speed figures cannot be reached (they FAIL their targets), and the live car will pin 1st gear the same way unless the player uses the manual keys above. Author `auto { enabled: true, upRpm, downRpm }` for a road car the default drive should shift itself, or document the manual keys as the intended scheme.
|
|
73
|
+
|
|
74
|
+
Round 5's F40 passed the instrument's 0-100 in 4.28 s while the live car pinned 1st at ~20 km/h — a car whose shift scheme only works on one of the two surfaces. Read the `shift` line and the `⚠ shift` warning before you trust a green comparison.
|
|
75
|
+
|
|
76
|
+
## Keyboard launch (`--no-keyboard-launch` skips it)
|
|
77
|
+
|
|
78
|
+
The card's 0-100 is a digital launch too (`throttle: 1, steer: 0`), but on a perfectly symmetric pad nothing ever disturbs the heading, so a car that is directionally unstable under power still runs straight and posts its best figure. Round 8's turbo supercar posted 4.38 s here and hit the arena wall in 3 of 3 live keyboard launches. The live 993 reached 100 km/h in 3 of 3 with the same harness. `src/vehicle/keyboardLaunch.ts` adds two measurements in the same runtime:
|
|
79
|
+
|
|
80
|
+
- **The run.** It launches the car the way the live drive ability does:
|
|
81
|
+
- an auto-hold stop, then W 0 → 1 in one tick (the platform does not ramp a digital throttle);
|
|
82
|
+
- automatic shifts;
|
|
83
|
+
- a player that taps A/D with 100 ms reactions to hold a 3.5 m lane from a start 2° off it.
|
|
84
|
+
|
|
85
|
+
The `move` vector is normalised the way the platform does it, so W+A sends throttle 0.707 and steer −0.707. Reported: keyboard 0-100 against the card's (the gap), wheelspin time (driven slip ratio > 0.2) and peak slip per gear, the peak yaw rate, heading error and sideslip for 1.5 s after each upshift re-engages, and the worst lane offset.
|
|
86
|
+
- **The probe.** The same launch runs hands-off, with a 0.2 rad/s yaw-rate nudge at 20, 40, 60 and 100 km/h and as each of the first two upshifts re-engages. Each nudge is a fresh run in both directions, and the worse direction is kept.
|
|
87
|
+
|
|
88
|
+
Verdict:
|
|
89
|
+
- **FAIL** (not drivable on a keyboard): a nudge grows into a spin (sideslip ≥ 0.35 rad, or a yaw rate ≥ 3× the nudge), or the run spins or leaves its lane.
|
|
90
|
+
- **WARN**: heading error or sideslip above 0.1 rad in the run, a nudge still unsettled after 1 s, or a keyboard 0-100 more than 15 % slower than the card's.
|
|
91
|
+
|
|
92
|
+
FAIL makes the command exit 1. `vehicle validate` reports it as the warning `SIMULATED_KEYBOARD_LAUNCH_UNDRIVABLE` (WARN as `SIMULATED_KEYBOARD_LAUNCH_MARGINAL`). It is not an error because land v2 has no traction control to author, so a faithful no-TC car whose torque exceeds its rear grip in 1st gear may have no accurate way to pass. Tuning guidance is in the MCP skill reference `physics-from-specs.md`, "Drivable on a keyboard".
|
|
93
|
+
|
|
94
|
+
## Turbo lag
|
|
95
|
+
|
|
96
|
+
**Measurement.** The roll-on works like this:
|
|
97
|
+
1. Hold 3rd gear, or the top gear when there are fewer than four. Manual mode is used when the gearbox supports it.
|
|
98
|
+
2. Hold a fixed low rpm: max(2000, idle + 500, 1.1 × `clutch.launchStartRpm`), capped at half the limiter. An automatic box also stays above its `downRpm`.
|
|
99
|
+
3. Go to full throttle. `turboLagS` is the time until the 0.1 s-smoothed acceleration reaches 90 % of that pull's peak.
|
|
100
|
+
|
|
101
|
+
The report adds the start rpm and speed, the rpm at 90 %, and the start and peak acceleration. It also gives the torque curve's onset shape: peak torque and its rpm, the start rpm's share of peak, the rpm where the curve first reaches 50 % and 90 % of peak, and the steepest rise.
|
|
102
|
+
|
|
103
|
+
**Authoring rule.** On land solver v2, the engine torque each step is
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
evalLut(engine.torqueCurve, rpm) × throttle × limiterCut × boostFactor
|
|
107
|
+
boostFactor = curveBoostBar === undefined ? 1 + (boostTorqueCoef ?? 1) × boostBar
|
|
108
|
+
: max(1, (1 + boostBar) / (1 + curveBoostBar))
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
This is runtime `src/core/vehicle/v2/driveline.ts`, `stepDriveline`. The curve is `simulation.land.driveline.engine.torqueCurve`, which `vehiclePackageToTuning` carries into `tuning.landV2.driveline.engine`.
|
|
112
|
+
|
|
113
|
+
With `boostTorqueCoef: 0` and no `curveBoostBar`, `boostFactor` is 1. A turbine block then makes sound and back-pressure, but **no torque**, so the static curve is the whole torque story. A full-boost dyno curve therefore pulls instantly at every rpm: no lag. (A set `curveBoostBar` only ever *raises* torque above the curve.) To author lag:
|
|
114
|
+
|
|
115
|
+
- below the boost-onset rpm, keep the curve at off-boost torque (about what the engine makes naturally aspirated);
|
|
116
|
+
- climb steeply through onset to the boosted plateau;
|
|
117
|
+
- run `helix vehicle simulate` and read `turbo lag` and `90 % at <rpm>`.
|
|
118
|
+
|
|
119
|
+
For reference, on engine 0.3.180 the round-1 F40 package measures 0.80 s from 2,840 rpm in 3rd; its curve is derated below about 3,300 rpm. The same car with a flat full-boost curve measures about 0.1 s. The naturally aspirated 993 measures 0.12 s. When forced induction is declared but adds no torque, and the curve already makes ≥ 85 % of peak at the roll-on rpm, the report prints a note saying the car will pull with no lag.
|
|
120
|
+
|
|
121
|
+
## Host manifest
|
|
122
|
+
|
|
123
|
+
The backend reads a vehicle's add-on host surface **only** from glTF `asset.extras.HELIX_vehicle` (backend `src/add-ons/host-manifest.ts`, `hostManifestOfGlb`). The runtime reads scene > document > asset. So a manifest written to the scene extras, which is what Blender's "Custom Properties" export does, drives fine but publishes a **silent non-host**: `verification.ok`, a board with no sockets and no tunable paths, and "0 compatible" in the customizer.
|
|
124
|
+
|
|
125
|
+
Put it on the asset:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
"asset": {
|
|
129
|
+
"version": "2.0",
|
|
130
|
+
"extras": {
|
|
131
|
+
"HELIX_vehicle": {
|
|
132
|
+
"version": 1,
|
|
133
|
+
"class": "sports-car",
|
|
134
|
+
"sockets": {
|
|
135
|
+
"seat_dside_f": [0.34, 0.37, -0.10],
|
|
136
|
+
"wheel_lf": [0.78, 0.33, 1.22],
|
|
137
|
+
"exhaust": [0.30, 0.25, -2.10]
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Sockets are positions in the model frame: +X left, +Y up, +Z forward, metres. Names must match `^[A-Za-z0-9_.\-*]{1,64}$`; the backend drops anything else. `socketNodes` (`{ socketId: "node" | ["node", …] }`) must name real nodes.
|
|
145
|
+
|
|
146
|
+
After export with gltf-transform: `doc.getRoot().getAsset().extras = { ...doc.getRoot().getAsset().extras, HELIX_vehicle: manifest }`. You can also rewrite the GLB JSON chunk directly. Keep no differing copy in the scene or document extras.
|
|
147
|
+
|
|
148
|
+
`helix vehicle validate --glb` reports these codes as errors. `helix continuum publish-package` refuses to seal a `vehicle` Package descriptor whose model GLB (an object of media type `model/gltf-binary` carried as bytes) has any of them, before anything is uploaded:
|
|
149
|
+
|
|
150
|
+
| Code | Meaning |
|
|
151
|
+
|---|---|
|
|
152
|
+
| `HOST_MANIFEST_MISSING` | no `HELIX_vehicle` anywhere |
|
|
153
|
+
| `HOST_MANIFEST_MISPLACED` | found only in scene, document or node extras (the message says where) |
|
|
154
|
+
| `HOST_MANIFEST_EMPTY` | no usable socket |
|
|
155
|
+
| `HOST_MANIFEST_DIVERGENT` | a scene or document copy differs from the asset copy |
|
|
156
|
+
| `HOST_BIND_ROOT_MISSING` / `HOST_BIND_MOUNT_NODE_MISSING` / `HOST_BIND_ROOT_NOT_OWNER` | the host offers a `boot`/`bonnet` socket but the GLB lacks `vehicle_root`, the lid's mount node, or has the lid outside `vehicle_root` (the runtime throws while composing the car) |
|
|
157
|
+
| `HOST_MANIFEST_SOCKET_INVALID` | a socket value is not `[x, y, z]` |
|
|
158
|
+
| `HOST_MANIFEST_SOCKET_NAME_INVALID` | a socket name the backend drops |
|
|
159
|
+
| `HOST_MANIFEST_SOCKET_NODE_MISSING` | a `socketNodes` entry names a node that is not in the GLB |
|
|
160
|
+
|
|
161
|
+
To check a published car's board, read `GET /api/v1/universal-items/:id/slots`. A usable host has `hostKind: "vehicle"`, at least one socket, and, for a land car, the tunable paths its package resolves (backend #1677).
|
|
162
|
+
|
|
163
|
+
## Tests
|
|
164
|
+
|
|
165
|
+
`src/vehicle/simulate.spec.ts` and `src/vehicle/simulateRuntime.spec.ts` cover the comparison and tolerance rules, the spec formats, the specifier rewrite, the cache and the offline fallback. The smoke test drives the 993 fixture with the live runtime. It checks that the fixture passes its own targets and that targets 20 % slower FAIL. It runs in CI (`CI=true`) and with `HELIX_SIMULATE_SMOKE=1`; `HELIX_SIMULATE_SMOKE=0` turns it off.
|