@vincentt-xr/sdk 2.0.0-alpha.7 → 2.0.0-alpha.9

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.
Files changed (639) hide show
  1. package/GROUNDING.md +5651 -82
  2. package/README.md +1 -0
  3. package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
  4. package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
  5. package/dist/DebuggerUI-7ngnJsBe.js +275 -0
  6. package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
  7. package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
  8. package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
  9. package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
  10. package/dist/FaceSurface-DmP9AEeC.js +27 -0
  11. package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
  12. package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
  13. package/dist/SkeletonUtils-C2r90MtN.js +21 -0
  14. package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
  15. package/dist/TextLabel-XE0rQSDn.cjs +2 -0
  16. package/dist/TextLabel-c9BCucOI.js +961 -0
  17. package/dist/assets/cache.d.ts +99 -0
  18. package/dist/assets/estimate.d.ts +11 -0
  19. package/dist/assets/gltfLoader.d.ts +16 -0
  20. package/dist/assets/index.d.ts +7 -0
  21. package/dist/assets/loaders.d.ts +43 -0
  22. package/dist/assets/react.d.ts +33 -0
  23. package/dist/body-pose/index.d.ts +521 -0
  24. package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
  25. package/dist/body-trigger/frame.d.ts +88 -0
  26. package/dist/body-trigger/index.d.ts +6 -0
  27. package/dist/body-trigger/moves.d.ts +235 -0
  28. package/dist/body-trigger/trigger.d.ts +75 -0
  29. package/dist/calibration/calibration.d.ts +75 -0
  30. package/dist/calibration/index.d.ts +6 -0
  31. package/dist/calibration/storage.d.ts +13 -0
  32. package/dist/calibration/types.d.ts +53 -0
  33. package/dist/calibration/useXRCalibration.d.ts +46 -0
  34. package/dist/camera/CameraPermissionGate.d.ts +26 -0
  35. package/dist/camera/devices.d.ts +26 -0
  36. package/dist/camera/index.d.ts +8 -0
  37. package/dist/camera/permission.d.ts +86 -0
  38. package/dist/camera/useCameraPermission.d.ts +35 -0
  39. package/dist/canonicalFace-BHwyCx1c.js +9 -0
  40. package/dist/canonicalFace-C83I225R.cjs +1 -0
  41. package/dist/capabilities/detect.d.ts +45 -0
  42. package/dist/capabilities/index.d.ts +5 -0
  43. package/dist/capabilities/types.d.ts +120 -0
  44. package/dist/capabilities/useXRCapabilities.d.ts +18 -0
  45. package/dist/compat/environment.d.ts +5 -0
  46. package/dist/compat/index.d.ts +4 -0
  47. package/dist/compat/run.d.ts +18 -0
  48. package/dist/compat/scenarios.d.ts +10 -0
  49. package/dist/compat/types.d.ts +101 -0
  50. package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
  51. package/dist/components/BodyInstruction/index.d.ts +69 -0
  52. package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
  53. package/dist/components/BodyTracker/index.d.ts +17 -0
  54. package/dist/components/BodyTrigger/index.d.ts +49 -0
  55. package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
  56. package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
  57. package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
  58. package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
  59. package/dist/components/FaceAtlas/constants.d.ts +8 -0
  60. package/dist/components/FaceAtlas/index.d.ts +7 -0
  61. package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
  62. package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
  63. package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
  64. package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
  65. package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
  66. package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
  67. package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
  68. package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
  69. package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
  70. package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
  71. package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
  72. package/dist/components/FaceCharacter/index.d.ts +18 -0
  73. package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
  74. package/dist/components/FaceInset/FaceInset.d.ts +68 -0
  75. package/dist/components/FaceInset/frame.d.ts +94 -0
  76. package/dist/components/FaceInset/index.d.ts +6 -0
  77. package/dist/components/FaceInset/material.d.ts +40 -0
  78. package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
  79. package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
  80. package/dist/components/FaceInstruction/index.d.ts +56 -0
  81. package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
  82. package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
  83. package/dist/components/FaceLiquify/debug.d.ts +37 -0
  84. package/dist/components/FaceLiquify/frame.d.ts +55 -0
  85. package/dist/components/FaceLiquify/index.d.ts +10 -0
  86. package/dist/components/FaceLiquify/material.d.ts +39 -0
  87. package/dist/components/FaceLiquify/pass.d.ts +49 -0
  88. package/dist/components/FaceLiquify/presence.d.ts +25 -0
  89. package/dist/components/FaceLiquify/presets.d.ts +82 -0
  90. package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
  91. package/dist/components/FaceLiquify/target.d.ts +85 -0
  92. package/dist/components/FaceLiquify/warp.d.ts +72 -0
  93. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +37 -5
  94. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
  95. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +21 -0
  96. package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
  97. package/dist/components/FaceMesh/index.d.ts +2 -2
  98. package/dist/components/FaceRetouch/Background.d.ts +3 -1
  99. package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
  100. package/dist/components/FaceRetouch/renderState.d.ts +19 -0
  101. package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
  102. package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
  103. package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
  104. package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
  105. package/dist/components/FaceSwap/index.d.ts +13 -0
  106. package/dist/components/FaceSwap/settings.d.ts +300 -0
  107. package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
  108. package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
  109. package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
  110. package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
  111. package/dist/components/FaceWarp3D/index.d.ts +2 -3
  112. package/dist/components/Faceless/Faceless.d.ts +51 -0
  113. package/dist/components/Faceless/index.d.ts +2 -0
  114. package/dist/components/GestureListener/index.d.ts +11 -0
  115. package/dist/components/HairLock/HairLock.d.ts +39 -0
  116. package/dist/components/HairLock/index.d.ts +2 -0
  117. package/dist/components/HairLock/lockGeometry.d.ts +15 -0
  118. package/dist/components/HandCutout/index.d.ts +35 -0
  119. package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
  120. package/dist/components/HandInstruction/index.d.ts +74 -0
  121. package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
  122. package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
  123. package/dist/components/HandRig/HandAttachment.d.ts +34 -0
  124. package/dist/components/HandRig/HandOccluder.d.ts +55 -0
  125. package/dist/components/HandRig/HandTattoo.d.ts +61 -0
  126. package/dist/components/HandRig/WristAttachment.d.ts +34 -0
  127. package/dist/components/HandRig/index.d.ts +101 -0
  128. package/dist/components/HandRig/useArmMask.d.ts +29 -0
  129. package/dist/components/HandRig/wristSolve.d.ts +69 -0
  130. package/dist/components/HandTouch/HandTouch.d.ts +62 -0
  131. package/dist/components/HandTouch/Touchable.d.ts +36 -0
  132. package/dist/components/HandTouch/index.d.ts +2 -0
  133. package/dist/components/HandTracker/index.d.ts +10 -0
  134. package/dist/components/HeadBinding/index.d.ts +14 -0
  135. package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
  136. package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
  137. package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
  138. package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
  139. package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
  140. package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
  141. package/dist/components/HeadOccluder/index.d.ts +57 -3
  142. package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
  143. package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
  144. package/dist/components/HolisticTracker/index.d.ts +69 -0
  145. package/dist/components/HolisticTracker/settings.d.ts +58 -0
  146. package/dist/components/HolisticTracker/signals.d.ts +49 -0
  147. package/dist/components/Instruction/HintStage.d.ts +29 -0
  148. package/dist/components/Instruction/InstructionCue.d.ts +126 -0
  149. package/dist/components/Instruction/gestureHold.d.ts +20 -0
  150. package/dist/components/Instruction/ghost.d.ts +129 -0
  151. package/dist/components/Instruction/hintBlend.d.ts +19 -0
  152. package/dist/components/Instruction/hintLook.d.ts +81 -0
  153. package/dist/components/Instruction/hintLoop.d.ts +36 -0
  154. package/dist/components/Instruction/index.d.ts +41 -0
  155. package/dist/components/Instruction/useGhostModel.d.ts +33 -0
  156. package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
  157. package/dist/components/IrisEffect/IrisMaterial.d.ts +73 -0
  158. package/dist/components/IrisEffect/index.d.ts +51 -0
  159. package/dist/components/IrisEffect/settings.d.ts +117 -0
  160. package/dist/components/LipEffect/LipEffect.d.ts +27 -1
  161. package/dist/components/LipEffect/LipEffectMaterial.d.ts +95 -7
  162. package/dist/components/LipEffect/LipEffects.d.ts +12 -0
  163. package/dist/components/LipEffect/defaults.d.ts +46 -4
  164. package/dist/components/LipEffect/index.d.ts +11 -3
  165. package/dist/components/LipEffect/lipShading.d.ts +73 -0
  166. package/dist/components/LipEffect/settings.d.ts +375 -0
  167. package/dist/components/LipEffect/shader.d.ts +39 -0
  168. package/dist/components/LipEffect/types.d.ts +128 -9
  169. package/dist/components/LipEffect/useLipDesignTextures.d.ts +17 -0
  170. package/dist/components/LipEffect/uvGuide.d.ts +74 -0
  171. package/dist/components/Makeup/Blush.d.ts +18 -0
  172. package/dist/components/Makeup/Brows.d.ts +20 -0
  173. package/dist/components/Makeup/Contour.d.ts +17 -0
  174. package/dist/components/Makeup/Eyeliner.d.ts +20 -0
  175. package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
  176. package/dist/components/Makeup/Highlighter.d.ts +18 -0
  177. package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
  178. package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
  179. package/dist/components/Makeup/constants.d.ts +44 -0
  180. package/dist/components/Makeup/design.d.ts +106 -0
  181. package/dist/components/Makeup/designSamples.d.ts +42 -0
  182. package/dist/components/Makeup/eyes.d.ts +114 -0
  183. package/dist/components/Makeup/fields.d.ts +10 -0
  184. package/dist/components/Makeup/geometry.d.ts +106 -0
  185. package/dist/components/Makeup/index.d.ts +26 -0
  186. package/dist/components/Makeup/looks.d.ts +28 -0
  187. package/dist/components/Makeup/material.d.ts +239 -0
  188. package/dist/components/Makeup/settings.d.ts +54 -0
  189. package/dist/components/Makeup/shades.d.ts +143 -0
  190. package/dist/components/Makeup/shapes.d.ts +27 -0
  191. package/dist/components/Makeup/skinTone.d.ts +135 -0
  192. package/dist/components/Makeup/types.d.ts +110 -0
  193. package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
  194. package/dist/components/Necklace/Necklace.d.ts +44 -0
  195. package/dist/components/Necklace/index.d.ts +1 -0
  196. package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
  197. package/dist/components/ParticleEmitter/index.d.ts +1 -0
  198. package/dist/components/PersonCutout/index.d.ts +50 -0
  199. package/dist/components/PersonCutout/personCutout.d.ts +16 -0
  200. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
  201. package/dist/components/ScreenImage/index.d.ts +3 -1
  202. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
  203. package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
  204. package/dist/components/ScreenImage/source.d.ts +6 -0
  205. package/dist/components/ScreenImage/types.d.ts +18 -0
  206. package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
  207. package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
  208. package/dist/components/SegmentationOverlay/index.d.ts +9 -0
  209. package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
  210. package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
  211. package/dist/components/SegmentationOverlay/settings.d.ts +65 -0
  212. package/dist/components/ShoulderOccluder/index.d.ts +43 -0
  213. package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
  214. package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
  215. package/dist/components/SpringSwing/index.d.ts +1 -0
  216. package/dist/components/XRProvider/index.d.ts +16 -2
  217. package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
  218. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
  219. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
  220. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
  221. package/dist/components/index.d.ts +11 -0
  222. package/dist/config/index.d.ts +0 -1
  223. package/dist/constants/index.d.ts +4 -1
  224. package/dist/context-DTxSQvp4.js +13 -0
  225. package/dist/context-hA0Rb2Xa.cjs +1 -0
  226. package/dist/contexts-BH7PdKFS.cjs +1 -0
  227. package/dist/contexts-jak8-tND.js +667 -0
  228. package/dist/coordinates/feed.d.ts +52 -0
  229. package/dist/coordinates/index.d.ts +7 -0
  230. package/dist/coordinates/side.d.ts +40 -0
  231. package/dist/coordinates/spaces.d.ts +49 -0
  232. package/dist/coordinates/viewport.d.ts +22 -0
  233. package/dist/coordinates/world.d.ts +15 -0
  234. package/dist/debug-ui/default-setting.cjs +2 -2
  235. package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
  236. package/dist/debug-ui/gesture-settings/index.d.ts +14 -0
  237. package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
  238. package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
  239. package/dist/debug-ui/index.d.ts +18 -3
  240. package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
  241. package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
  242. package/dist/debug-ui/media-source/index.d.ts +1 -1
  243. package/dist/debug-ui/media-source/session.d.ts +30 -2
  244. package/dist/debug-ui/media-source.cjs +1 -1
  245. package/dist/debug-ui/media-source.js +1 -1
  246. package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
  247. package/dist/debug-ui/product-hotspots/index.d.ts +25 -0
  248. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
  249. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
  250. package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
  251. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
  252. package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
  253. package/dist/debug-ui/segmentation-overlay-settings/index.d.ts +12 -0
  254. package/dist/debug-ui/settings-panel/index.d.ts +6 -1
  255. package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
  256. package/dist/debug-ui/xr-diagnostics/index.d.ts +26 -0
  257. package/dist/debug-ui.cjs +3 -3
  258. package/dist/debug-ui.js +2695 -2547
  259. package/dist/detector-K8aej4MB.js +59 -0
  260. package/dist/detector-ijypGtse.cjs +1 -0
  261. package/dist/entries/all.d.ts +3 -1
  262. package/dist/entries/core.d.ts +20 -2
  263. package/dist/entries/face-effects.d.ts +123 -9
  264. package/dist/entries/instructions.d.ts +48 -0
  265. package/dist/entries/internal.d.ts +2 -1
  266. package/dist/entries/low-level.d.ts +49 -3
  267. package/dist/entries/particles.d.ts +11 -0
  268. package/dist/entries/product.d.ts +11 -0
  269. package/dist/entries/tracking.d.ts +60 -2
  270. package/dist/face-atlas/attributes.d.ts +30 -0
  271. package/dist/face-atlas/eyes.d.ts +272 -0
  272. package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
  273. package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
  274. package/dist/face-atlas/glsl/common.d.ts +55 -0
  275. package/dist/face-atlas/glsl/design.d.ts +49 -0
  276. package/dist/face-atlas/glsl/eyes.d.ts +73 -0
  277. package/dist/face-atlas/glsl/finish.d.ts +24 -0
  278. package/dist/face-atlas/glsl/format.d.ts +4 -0
  279. package/dist/face-atlas/glsl/index.d.ts +59 -0
  280. package/dist/face-atlas/glsl/shading.d.ts +15 -0
  281. package/dist/face-atlas/glsl/shapes.d.ts +66 -0
  282. package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
  283. package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
  284. package/dist/face-atlas/guide.d.ts +51 -0
  285. package/dist/face-atlas/index.d.ts +25 -0
  286. package/dist/face-atlas/lead.d.ts +117 -0
  287. package/dist/face-atlas/madeUpCamera.d.ts +125 -0
  288. package/dist/face-atlas/masks.d.ts +53 -0
  289. package/dist/face-atlas/obj.d.ts +69 -0
  290. package/dist/face-atlas/polylines.d.ts +63 -0
  291. package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
  292. package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
  293. package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
  294. package/dist/face-atlas/probe/constants.d.ts +137 -0
  295. package/dist/face-atlas/probe/glsl.d.ts +43 -0
  296. package/dist/face-atlas/probe/lightFit.d.ts +108 -0
  297. package/dist/face-atlas/probe/schedule.d.ts +44 -0
  298. package/dist/face-atlas/probe/selfTest.d.ts +87 -0
  299. package/dist/face-atlas/probe/stats.d.ts +143 -0
  300. package/dist/face-atlas/probe/targets.d.ts +70 -0
  301. package/dist/face-atlas/probe/unwrap.d.ts +76 -0
  302. package/dist/face-atlas/quality.d.ts +28 -0
  303. package/dist/face-atlas/regions.d.ts +31 -0
  304. package/dist/face-atlas/registry.d.ts +252 -0
  305. package/dist/face-atlas/renderState.d.ts +86 -0
  306. package/dist/face-atlas/selfOcclusion.d.ts +62 -0
  307. package/dist/face-atlas/shading.d.ts +406 -0
  308. package/dist/face-atlas/shapes.d.ts +86 -0
  309. package/dist/face-atlas/sides.d.ts +41 -0
  310. package/dist/face-atlas/skinMask.d.ts +35 -0
  311. package/dist/face-atlas/surface.d.ts +155 -0
  312. package/dist/face-atlas/topology.d.ts +44 -0
  313. package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
  314. package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
  315. package/dist/face-character/bindFaceModel.d.ts +106 -0
  316. package/dist/face-character/canonicalFace.d.ts +17 -0
  317. package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
  318. package/dist/face-character/canonicalFacePositions.d.ts +7 -0
  319. package/dist/face-character/driveFaceModel.d.ts +57 -0
  320. package/dist/face-character/expressionOutputs.d.ts +45 -0
  321. package/dist/face-character/faceExpressions.d.ts +104 -0
  322. package/dist/face-character/faceImageLandmarker.d.ts +93 -0
  323. package/dist/face-character/faceMeshBinding.d.ts +62 -0
  324. package/dist/face-character/faceMorph.d.ts +77 -0
  325. package/dist/face-character/faceMorphs.d.ts +46 -0
  326. package/dist/face-character/facePhoto.d.ts +138 -0
  327. package/dist/face-character/facePiercings.d.ts +116 -0
  328. package/dist/face-character/facePin.d.ts +131 -0
  329. package/dist/face-character/faceReprojection.d.ts +273 -0
  330. package/dist/face-character/faceReprojector.d.ts +171 -0
  331. package/dist/face-character/faceRig.d.ts +176 -0
  332. package/dist/face-character/faceSwapPresence.d.ts +85 -0
  333. package/dist/face-character/faceTexture.d.ts +169 -0
  334. package/dist/face-character/faceTextureBaker.d.ts +86 -0
  335. package/dist/face-character/faceTextureGuide.d.ts +106 -0
  336. package/dist/face-character/faceTextureStats.d.ts +298 -0
  337. package/dist/face-character/faceTransfer.d.ts +396 -0
  338. package/dist/face-character/faceTransferGeometry.d.ts +109 -0
  339. package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
  340. package/dist/face-character/faceWarp3D.d.ts +101 -0
  341. package/dist/face-character/faceless.d.ts +79 -0
  342. package/dist/face-character/featureWarp.d.ts +28 -0
  343. package/dist/face-character/liveFaceRegistry.d.ts +370 -0
  344. package/dist/face-character/liveValue.d.ts +12 -0
  345. package/dist/face-character/memo.d.ts +15 -0
  346. package/dist/face-effects.cjs +2324 -1
  347. package/dist/face-effects.js +14208 -2268
  348. package/dist/face-expression/index.d.ts +182 -0
  349. package/dist/face-info/landmarks.d.ts +17 -3
  350. package/dist/face-info/types.d.ts +20 -3
  351. package/dist/gestures/definitions.d.ts +98 -0
  352. package/dist/gestures/detector.d.ts +87 -0
  353. package/dist/gestures/index.d.ts +8 -0
  354. package/dist/gestures/measures.d.ts +114 -0
  355. package/dist/gestures/settings.d.ts +49 -0
  356. package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
  357. package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
  358. package/dist/hand/armFit.d.ts +46 -0
  359. package/dist/hand/armMask.d.ts +178 -0
  360. package/dist/hand/handCutout.d.ts +23 -0
  361. package/dist/hand/handCutoutRegistry.d.ts +7 -0
  362. package/dist/hand/handGestures.d.ts +524 -0
  363. package/dist/hand/handPose.d.ts +98 -0
  364. package/dist/hand/handRigSolver.d.ts +159 -0
  365. package/dist/hand/handTattoo.d.ts +81 -0
  366. package/dist/hand/handTouch.d.ts +240 -0
  367. package/dist/hand/wrist.d.ts +44 -0
  368. package/dist/hand/wristFilter.d.ts +44 -0
  369. package/dist/hooks/selectors.d.ts +76 -1
  370. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  371. package/dist/hooks/useFaceInfo.d.ts +13 -1
  372. package/dist/hooks/useFaceInfos.d.ts +1 -1
  373. package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
  374. package/dist/hooks/useGesture.d.ts +32 -0
  375. package/dist/hooks/useIrisTracking.d.ts +45 -0
  376. package/dist/hooks/useTrackerContext.d.ts +6 -0
  377. package/dist/hooks/useXRDiagnostics.d.ts +81 -0
  378. package/dist/hooks/useXRModel.d.ts +7 -0
  379. package/dist/hooks/useXRSession/facade.d.ts +42 -2
  380. package/dist/hooks/useXRSession/index.d.ts +2 -2
  381. package/dist/hooks/useXRSession/reason.d.ts +3 -1
  382. package/dist/hooks/useXRSession/registry.d.ts +14 -0
  383. package/dist/hooks/useXRSession/store.d.ts +52 -3
  384. package/dist/index-B1_TzJaI.js +1104 -0
  385. package/dist/index-BavF06C6.js +190 -0
  386. package/dist/index-BfFmpddl.cjs +21 -0
  387. package/dist/index-BuBzneeW.cjs +46 -0
  388. package/dist/index-CGsQWodV.cjs +1 -0
  389. package/dist/index-CIe7eCMH.js +3200 -0
  390. package/dist/index-CfSF8LXa.cjs +1 -0
  391. package/dist/index-D5GTzOzD.cjs +1 -0
  392. package/dist/index-DBhQzvVa.js +314 -0
  393. package/dist/index-DE17y0ZI.cjs +1 -0
  394. package/dist/index-JII7huPk.js +442 -0
  395. package/dist/index-tpCr9CLj.cjs +1 -0
  396. package/dist/index-w1S7fI2B.js +1432 -0
  397. package/dist/index-zGaqrz_K.js +188 -0
  398. package/dist/instructions.cjs +30 -0
  399. package/dist/instructions.js +1507 -0
  400. package/dist/{internal-Dmk1cTXq.js → internal-B90P-clC.js} +138 -119
  401. package/dist/internal-Cjinca64.cjs +1 -0
  402. package/dist/internal.cjs +1 -1
  403. package/dist/internal.js +15 -10
  404. package/dist/iris/compute.d.ts +27 -0
  405. package/dist/iris/index.d.ts +4 -0
  406. package/dist/iris/lead.d.ts +19 -0
  407. package/dist/iris/types.d.ts +89 -0
  408. package/dist/landmarkMask-BFDyBnKM.js +224 -0
  409. package/dist/landmarkMask-u7es2k4X.cjs +1 -0
  410. package/dist/landmarks-BlUqf5MZ.cjs +1 -0
  411. package/dist/landmarks-bftdwq6Z.js +76 -0
  412. package/dist/loaders-BGAUACsd.js +363 -0
  413. package/dist/loaders-BJ1_QCHt.cjs +1 -0
  414. package/dist/low-level.cjs +1 -1
  415. package/dist/low-level.js +1190 -675
  416. package/dist/main.cjs +1 -1
  417. package/dist/main.js +1190 -452
  418. package/dist/models/Base/index.d.ts +49 -0
  419. package/dist/models/Body/index.d.ts +3 -1
  420. package/dist/models/Face/constants.d.ts +8 -0
  421. package/dist/models/Face/index.d.ts +4 -12
  422. package/dist/models/Face/rotation.d.ts +18 -3
  423. package/dist/models/Hand/GestureTracking.d.ts +1 -1
  424. package/dist/models/Hand/HandTracking.d.ts +17 -1
  425. package/dist/models/Holistic/index.d.ts +49 -0
  426. package/dist/models/Holistic/result.d.ts +68 -0
  427. package/dist/models/Segmentation/index.d.ts +2 -0
  428. package/dist/models/SemanticSegmentation/index.d.ts +31 -0
  429. package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
  430. package/dist/models/index.d.ts +2 -0
  431. package/dist/models/nodeSource.d.ts +9 -0
  432. package/dist/particles/emission.d.ts +24 -0
  433. package/dist/particles/eyes.d.ts +24 -0
  434. package/dist/particles/glsl.d.ts +14 -0
  435. package/dist/particles/index.d.ts +10 -0
  436. package/dist/particles/motion.d.ts +42 -0
  437. package/dist/particles/presets.d.ts +12 -0
  438. package/dist/particles/ring.d.ts +58 -0
  439. package/dist/particles/selfTest.d.ts +53 -0
  440. package/dist/particles/settings.d.ts +127 -0
  441. package/dist/particles/shapes.d.ts +29 -0
  442. package/dist/particles/spawner.d.ts +60 -0
  443. package/dist/particles/system.d.ts +64 -0
  444. package/dist/particles.cjs +122 -0
  445. package/dist/particles.js +774 -0
  446. package/dist/product/ProductDimensions.d.ts +16 -0
  447. package/dist/product/ProductHotspot.d.ts +16 -0
  448. package/dist/product/ProductViewer.d.ts +9 -0
  449. package/dist/product/details.d.ts +53 -0
  450. package/dist/product/index.d.ts +14 -0
  451. package/dist/product/loadModelViewer.d.ts +4 -0
  452. package/dist/product/types.d.ts +71 -0
  453. package/dist/product/useProductAr.d.ts +37 -0
  454. package/dist/product/useProductDetails.d.ts +60 -0
  455. package/dist/product.cjs +1 -0
  456. package/dist/product.js +414 -0
  457. package/dist/providers-C8rE26Uf.js +366 -0
  458. package/dist/providers-DHsrhDI2.cjs +62 -0
  459. package/dist/quality/XRQualityController.d.ts +25 -0
  460. package/dist/quality/controller.d.ts +33 -0
  461. package/dist/quality/index.d.ts +6 -0
  462. package/dist/quality/types.d.ts +100 -0
  463. package/dist/quality/useXRQuality.d.ts +28 -0
  464. package/dist/render/renderPasses.d.ts +8 -0
  465. package/dist/render/sceneBeforeRender.d.ts +12 -0
  466. package/dist/{renderGroups-KZk6eRiY.js → renderGroups-B38pUaX2.js} +1 -1
  467. package/dist/{renderGroups-80H3DpTl.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
  468. package/dist/renderPasses-B6l8IpJv.js +1290 -0
  469. package/dist/renderPasses-dqmkft4P.cjs +158 -0
  470. package/dist/renderState-CJNmj5jz.js +39 -0
  471. package/dist/renderState-apSfg4eR.cjs +1 -0
  472. package/dist/scene-object.cjs +1 -1
  473. package/dist/scene-object.js +2 -2
  474. package/dist/segmentation-Cb3ouK6Z.js +1758 -0
  475. package/dist/segmentation-D9pYO6aR.cjs +1 -0
  476. package/dist/segmentation2d/faceMemory.d.ts +28 -0
  477. package/dist/segmentation2d/faceRegions.d.ts +24 -0
  478. package/dist/segmentation2d/index.d.ts +9 -0
  479. package/dist/segmentation2d/maskUv.d.ts +23 -0
  480. package/dist/segmentation2d/rasterize.d.ts +14 -0
  481. package/dist/segmentation2d/types.d.ts +52 -0
  482. package/dist/select-Ck5LGz-J.cjs +1 -0
  483. package/dist/select-pYRo_win.js +233 -0
  484. package/dist/selectors-C4X71aoD.cjs +1 -0
  485. package/dist/selectors-DmNaKIwE.js +196 -0
  486. package/dist/session-BrH8G7iJ.cjs +31 -0
  487. package/dist/session-DgA_z6O1.js +418 -0
  488. package/dist/settings-BJ7FMBsO.js +111 -0
  489. package/dist/settings-C63FMBlF.cjs +1 -0
  490. package/dist/similarityFit-BFqHND2e.cjs +1 -0
  491. package/dist/similarityFit-Bbz-R8AY.js +91 -0
  492. package/dist/spring/index.d.ts +2 -0
  493. package/dist/spring/spring.d.ts +69 -0
  494. package/dist/spring/swing.d.ts +54 -0
  495. package/dist/subjects/index.d.ts +2 -0
  496. package/dist/subjects/select.d.ts +62 -0
  497. package/dist/subjects/types.d.ts +55 -0
  498. package/dist/tracking-config/apply.d.ts +57 -0
  499. package/dist/tracking-config/index.d.ts +7 -0
  500. package/dist/tracking-config/resolve.d.ts +25 -0
  501. package/dist/tracking-config/storage.d.ts +8 -0
  502. package/dist/tracking-config/types.d.ts +106 -0
  503. package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
  504. package/dist/tracking.cjs +10 -1
  505. package/dist/tracking.js +1326 -506
  506. package/dist/trigger-D0Pm9noT.cjs +49 -0
  507. package/dist/trigger-IQeys0oS.js +2128 -0
  508. package/dist/types/compositor.d.ts +21 -0
  509. package/dist/types/face.d.ts +20 -1
  510. package/dist/types/hand-tracking.d.ts +9 -0
  511. package/dist/types/holistic.d.ts +121 -0
  512. package/dist/types/index.d.ts +1 -0
  513. package/dist/types/model.d.ts +22 -2
  514. package/dist/types/nodes.d.ts +47 -3
  515. package/dist/types/segmentation.d.ts +24 -0
  516. package/dist/types/session.d.ts +41 -3
  517. package/dist/updateThrottle-BseecYag.js +4 -0
  518. package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
  519. package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
  520. package/dist/useFaceInfo-J4x7LsqL.js +76 -0
  521. package/dist/useFaceResultReader-BvEo5REG.js +61 -0
  522. package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
  523. package/dist/useInstructionHold-DOu-RpCM.js +53 -0
  524. package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
  525. package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
  526. package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
  527. package/dist/useXRCapabilities-Cr3RzuAW.cjs +1 -0
  528. package/dist/useXRCapabilities-Cxmlmpbd.js +30 -0
  529. package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
  530. package/dist/utils/fns.d.ts +6 -3
  531. package/dist/utils/headOccluderFit.d.ts +42 -0
  532. package/dist/utils/integrity.d.ts +21 -1
  533. package/dist/utils/resolveNumFaces.d.ts +13 -0
  534. package/dist/utils/shoulderOccluderFit.d.ts +38 -0
  535. package/dist/utils/similarityFit.d.ts +23 -0
  536. package/dist/utils/updateThrottle.d.ts +2 -0
  537. package/dist/utils/useStableUniforms.d.ts +18 -0
  538. package/dist/uv-BMFt19bg.cjs +1 -0
  539. package/dist/{index-ByoNj0QP.js → uv-DJU_XfmN.js} +15 -247
  540. package/docs/SDK_DOCUMENTATION.md +1 -2
  541. package/docs/api/adaptive-quality.mdx +104 -0
  542. package/docs/api/asset-lifecycle.mdx +78 -0
  543. package/docs/api/body-instructions.mdx +285 -0
  544. package/docs/api/body-triggers.mdx +234 -0
  545. package/docs/api/camera-permission.mdx +142 -0
  546. package/docs/api/coordinate-spaces.mdx +168 -0
  547. package/docs/api/cross-camera.mdx +89 -0
  548. package/docs/api/debug-ui-scene-editor.mdx +23 -2
  549. package/docs/api/diagnostics-calibration.mdx +97 -0
  550. package/docs/api/external-face-mesh.mdx +231 -0
  551. package/docs/api/face-actions.mdx +20 -16
  552. package/docs/api/face-attribute-expression.mdx +1 -1
  553. package/docs/api/face-binding-anchors.mdx +4 -2
  554. package/docs/api/face-character.mdx +157 -0
  555. package/docs/api/face-effects.mdx +9 -0
  556. package/docs/api/face-expression-controller.mdx +153 -0
  557. package/docs/api/face-info.mdx +17 -11
  558. package/docs/api/face-inset.mdx +204 -0
  559. package/docs/api/face-instructions.mdx +183 -0
  560. package/docs/api/face-liquify.mdx +196 -0
  561. package/docs/api/face-mesh.mdx +8 -9
  562. package/docs/api/face-morph.mdx +117 -0
  563. package/docs/api/face-painting.mdx +7 -0
  564. package/docs/api/face-reprojection.mdx +154 -0
  565. package/docs/api/face-retouching.mdx +18 -10
  566. package/docs/api/face-swap.mdx +350 -0
  567. package/docs/api/face-warp-3d.mdx +166 -0
  568. package/docs/api/faceless.mdx +143 -0
  569. package/docs/api/gestures.mdx +209 -0
  570. package/docs/api/hair.mdx +97 -0
  571. package/docs/api/hand-instructions.mdx +222 -0
  572. package/docs/api/hand-rig.mdx +535 -0
  573. package/docs/api/hand-touch.mdx +162 -0
  574. package/docs/api/head-occluder.mdx +563 -0
  575. package/docs/api/holistic-tracker.mdx +164 -0
  576. package/docs/api/instructions.mdx +323 -0
  577. package/docs/api/iris-tracking.mdx +247 -0
  578. package/docs/api/made-up-camera.mdx +131 -0
  579. package/docs/api/makeup-skin-tone.mdx +135 -0
  580. package/docs/api/makeup.mdx +353 -0
  581. package/docs/api/multi-subject.mdx +98 -0
  582. package/docs/api/particles.mdx +155 -0
  583. package/docs/api/person-cutout.mdx +136 -0
  584. package/docs/api/pin-to-face-mesh.mdx +274 -0
  585. package/docs/api/product-ar.mdx +114 -0
  586. package/docs/api/product-details.mdx +78 -0
  587. package/docs/api/screen-space-coordinates.mdx +4 -1
  588. package/docs/api/segmentation-overlay.mdx +301 -0
  589. package/docs/api/session-lifecycle.mdx +136 -0
  590. package/docs/api/trackers.mdx +5 -0
  591. package/docs/api/tracking-config.mdx +108 -0
  592. package/docs/docs.json +51 -1
  593. package/docs/examples/lip-shaders.mdx +273 -0
  594. package/docs/guides/face-atlas-template.svg +1 -0
  595. package/docs/guides/face-atlas-textures.mdx +186 -0
  596. package/docs/guides/face-texture-template.svg +1 -0
  597. package/docs/guides/harness-debug-ui.mdx +4 -4
  598. package/docs/guides/lip-effect-textures.mdx +368 -0
  599. package/docs/guides/lip-uv-template.png +0 -0
  600. package/docs/guides/lip-uv-template.svg +1 -0
  601. package/docs/guides/makeup-design-textures.mdx +109 -0
  602. package/docs/introduction.mdx +1 -2
  603. package/package.json +23 -1
  604. package/dist/DebuggerUI-B6bP6P9r.cjs +0 -1
  605. package/dist/DebuggerUI-BjOMr8q_.js +0 -269
  606. package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
  607. package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
  608. package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
  609. package/dist/FaceRetouch-DwbKQJAN.js +0 -551
  610. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
  611. package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
  612. package/dist/components/FaceWarp3D/warp.d.ts +0 -13
  613. package/dist/contexts-ByhzppYl.js +0 -663
  614. package/dist/contexts-Dr62It_K.cjs +0 -1
  615. package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
  616. package/dist/getFaceInfo-C4QpCQIY.js +0 -118
  617. package/dist/getFaceInfo-fA1bFBub.cjs +0 -1
  618. package/dist/index-9dlAQAhy.js +0 -1462
  619. package/dist/index-BjmTe9eM.cjs +0 -1
  620. package/dist/index-BpEf2BBb.cjs +0 -1
  621. package/dist/index-CyUUurQT.cjs +0 -1
  622. package/dist/index-DCiMbxC3.cjs +0 -1
  623. package/dist/index-DXT3WccE.js +0 -2089
  624. package/dist/index-DpI-qo5X.cjs +0 -17
  625. package/dist/index-DyVF4vEW.js +0 -111
  626. package/dist/index-VJ0SJwmG.js +0 -214
  627. package/dist/internal-Cq-TEQ5Y.cjs +0 -1
  628. package/dist/renderLayers-lDtL0_43.cjs +0 -1
  629. package/dist/renderLayers-zrK2pv5O.js +0 -13
  630. package/dist/renderPasses-BOoBSr8z.cjs +0 -21
  631. package/dist/renderPasses-BcquyVtu.js +0 -1500
  632. package/dist/selectors-B8H97CKA.js +0 -59
  633. package/dist/selectors-CZLKT2Iv.cjs +0 -1
  634. package/dist/session-CpkiK5YA.cjs +0 -31
  635. package/dist/session-DLFN_VII.js +0 -363
  636. package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
  637. package/dist/useFaceInfo-Dk426LTu.js +0 -62
  638. package/dist/useFaceResults-CtetsO9M.js +0 -19
  639. package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
@@ -0,0 +1,396 @@
1
+ import { FaceSwapSettings } from '../components/FaceSwap/settings';
2
+ import { FaceImageLandmark } from './faceReprojection';
3
+ import { FaceTexture, FaceTextureStatistics } from './faceTexture';
4
+ import { FaceTransferLevel } from './faceTransferGeometry';
5
+ import * as THREE from "three";
6
+ /**
7
+ * Face texture transfer (FACE-2): any face texture drawn on any face.
8
+ *
9
+ * The first half of this file is the colour, edge and layout maths of the
10
+ * transfer shaders, as plain TypeScript. These functions are the reference:
11
+ * the GLSL is built from `FACE_TRANSFER_MATH_GLSL`, which embeds the same
12
+ * constants, and the tests pin the behaviour. Change the maths here first.
13
+ * The second half is the engine: the target's live map
14
+ * (`writeFaceTransferLiveMap`), the shaders and `FaceTransfer`.
15
+ *
16
+ * Colour is a gain per channel in linear light, computed per vertex:
17
+ * - **tone** `tM / sM`: the global skin-tone, exposure and white-balance
18
+ * ratio of the two skin means (`matchSkinTone`);
19
+ * - **light**: the local low-frequency lighting ratio (`matchLighting`), at
20
+ * full strength for brightness and `FACE_TRANSFER_CHROMA` strength for
21
+ * colour, so coloured light does not tint the skin;
22
+ * - a band inside the face edge, `FACE_TRANSFER_EDGE_BAND × edgeSoftness`
23
+ * wide after the inset, always takes the target's tone and light by
24
+ * `edgeMatch`, so no seam shows;
25
+ * - the gain is clamped to `FACE_TRANSFER_GAIN_RANGE`.
26
+ */
27
+ /** Clamp of the colour gain, per channel. */
28
+ export declare const FACE_TRANSFER_GAIN_RANGE: readonly [0.25, 4];
29
+ /**
30
+ * Coverage (blurred alpha) of a `low` statistics read: below the first value
31
+ * the skin mean is used instead, above the second the local value, blended
32
+ * smoothly between (no hard seam in the gain).
33
+ */
34
+ export declare const FACE_TRANSFER_LOW_COVERAGE: readonly [0.15, 0.3];
35
+ /** Strength of the colour (chroma) part of the local lighting ratio. Brightness is at full strength. */
36
+ export declare const FACE_TRANSFER_CHROMA = 0.5;
37
+ /** The colour edge band is this many `edgeSoftness` wide (the alpha fade is one). */
38
+ export declare const FACE_TRANSFER_EDGE_BAND = 2;
39
+ /** Luminance weights of linear sRGB / Rec. 709 primaries. */
40
+ export declare const FACE_TRANSFER_LUMA: readonly [0.2126, 0.7152, 0.0722];
41
+ /** Floor of every division. */
42
+ export declare const FACE_TRANSFER_EPSILON = 0.0001;
43
+ /** Mip LOD bias at `detail` 0 (none at `detail` 1). */
44
+ export declare const FACE_TRANSFER_DETAIL_MAX_BIAS = 2;
45
+ /** One RGBA read of a statistics texture: linear light, premultiplied by its skin coverage (alpha). */
46
+ export type FaceStatsSample = readonly [number, number, number, number];
47
+ export type FaceTransferGainStats = {
48
+ /** The source's `mean` (1×1). */
49
+ sourceMean: FaceStatsSample;
50
+ /** The target's `mean` (1×1). */
51
+ targetMean: FaceStatsSample;
52
+ /**
53
+ * The source's `low` (64²) at the UV the source is read at, or its mirror
54
+ * twin's where the source was not seen there (`faceTransferSourceLow`).
55
+ */
56
+ sourceLow: FaceStatsSample;
57
+ /** The target's `low` at the vertex's own face atlas UV (the geometry's `uv`). */
58
+ targetLow: FaceStatsSample;
59
+ /** cm inside the smoothed face outline (the geometry's `edge`). */
60
+ edge: number;
61
+ };
62
+ export type FaceTransferGainSettings = {
63
+ matchSkinTone: number;
64
+ matchLighting: number;
65
+ edgeMatch: number;
66
+ edgeInset: number;
67
+ edgeSoftness: number;
68
+ };
69
+ /**
70
+ * The colour gain the transfer multiplies the source by, per channel, in
71
+ * linear light. The CPU reference of `faceTransferGain` in
72
+ * `FACE_TRANSFER_MATH_GLSL` (the vertex shader runs it per vertex).
73
+ */
74
+ export declare const faceTransferGain: (stats: FaceTransferGainStats, settings: FaceTransferGainSettings, out?: [number, number, number]) => [number, number, number];
75
+ /**
76
+ * The source's local skin a vertex divides out (the `sourceLow` of
77
+ * `faceTransferGain`): the source's `low` where its map is read (`read`),
78
+ * falling back to the `low` of that point's mirror twin (`twin`) where the
79
+ * source's own skin was not seen there. A mirror-filled map (a turned live
80
+ * face, a photo) holds the twin's pixels in that place, with the twin's
81
+ * light baked in, so the twin's light is what must be divided out. Blended
82
+ * by the read's coverage over `FACE_TRANSFER_LOW_COVERAGE` (the twin below
83
+ * the first value, the read above the second). Where neither was seen the
84
+ * result keeps a low coverage and the gain falls back to the mean. The CPU
85
+ * reference of `faceTransferSourceLow` in `FACE_TRANSFER_MATH_GLSL`.
86
+ */
87
+ export declare const faceTransferSourceLow: (read: FaceStatsSample, twin: FaceStatsSample, out?: [number, number, number, number]) => [number, number, number, number];
88
+ export type FaceTransferAlphaInput = {
89
+ /** The source map's alpha where it is read (its coverage: 0 where the source face was not seen). */
90
+ coverage: number;
91
+ /** How squarely the target faces the camera there, 0..1. */
92
+ facing: number;
93
+ /** cm inside the smoothed face outline. */
94
+ edge: number;
95
+ /** cm outside the nearest eye ring (0 on the ring). */
96
+ eyeCm: number;
97
+ /** cm outside the inner-lip ring (0 on the ring). */
98
+ mouthCm: number;
99
+ };
100
+ export type FaceTransferAlphaSettings = {
101
+ amount: number;
102
+ edgeInset: number;
103
+ edgeSoftness: number;
104
+ ownEyes: boolean;
105
+ ownMouth: boolean;
106
+ featureSoftness: number;
107
+ };
108
+ /**
109
+ * The transfer's alpha: amount × source coverage × facing × the edge fade
110
+ * (`edgeInset`, then `edgeSoftness` wide) × soft rims around the target's
111
+ * own eyes and mouth when they are kept. The CPU reference of
112
+ * `transferAlpha` in `FACE_TRANSFER_MATH_GLSL` (run per fragment).
113
+ */
114
+ export declare const transferAlpha: (input: FaceTransferAlphaInput, settings: FaceTransferAlphaSettings) => number;
115
+ /** Mip LOD bias the source map is read with: 0 at `detail` 1, softer below. */
116
+ export declare const faceTransferDetailBias: (detail: number) => number;
117
+ /** How the transfer treats the target's edge-on parts (`FaceTransfer.setUnseen`). */
118
+ export type FaceTransferUnseen = "fade" | "cover";
119
+ /**
120
+ * How a face texture is laid onto a face. Left and right are the person's
121
+ * OWN sides on every feed.
122
+ * - `asIs`: as it is.
123
+ * - `flip`: left and right swapped.
124
+ * - `leftLeft` / `rightRight`: one half of the face, mirrored onto the other.
125
+ * - `upsideDown`: each eye and the mouth flipped top to bottom in place.
126
+ */
127
+ export declare const FACE_TEXTURE_LAYOUTS: readonly ["asIs", "flip", "leftLeft", "rightRight", "upsideDown"];
128
+ export type FaceTextureLayout = (typeof FACE_TEXTURE_LAYOUTS)[number];
129
+ /**
130
+ * Whether a vertex reads the source at its mirrored UV (`uvMirror`) or its
131
+ * own (`uv`): the CPU reference of the vertex shader's choice.
132
+ *
133
+ * - `sourceMirror` is `resolveFaceSourceMirror(source.mirrored, feedMirrored)`:
134
+ * whether the source's sides must be swapped to land on the target's own
135
+ * sides (false for a live face drawn on its own feed).
136
+ * - `flip` swaps every vertex.
137
+ * - `leftLeft` / `rightRight` keep the vertices on the person's own left
138
+ * (right) half and mirror the rest. The person's own left is canonical
139
+ * `personLeftSign(feedMirrored)` × X: −X (landmark 33's side) on the
140
+ * mirrored webcam, +X (landmark 263's side) on an unmirrored feed.
141
+ * - `faceSide` is the vertex's canonical side: the sign of its canonical x
142
+ * (+1 = landmark 263's side), 0 on the midline (never mirrored by a half
143
+ * layout; its mirror is itself).
144
+ */
145
+ export declare const faceTransferReadsMirror: (layout: FaceTextureLayout, sourceMirror: boolean, feedMirrored: boolean, faceSide: number) => boolean;
146
+ /**
147
+ * The half a `leftLeft` / `rightRight` layout keeps, as a canonical X sign
148
+ * (+1 = landmark 263's side), or 0 for any other layout: the person's own
149
+ * left is `personLeftSign(feedMirrored)`. A uniform for the vertex shader:
150
+ * a vertex with `faceSide × keptSide < 0` toggles its mirror.
151
+ */
152
+ export declare const faceTransferKeptSide: (layout: FaceTextureLayout, feedMirrored: boolean) => -1 | 0 | 1;
153
+ /**
154
+ * `upsideDown`: the fraction of each ellipse's radius, inside its rim, over
155
+ * which the flipped feature blends back into the face.
156
+ */
157
+ export declare const FACE_TRANSFER_UPSIDE_DOWN_SOFTNESS = 0.3;
158
+ /** One `upsideDown` ellipse in source UV: `[cu, cv, radiusU, radiusV]`. */
159
+ export type FaceTransferEllipse = readonly [number, number, number, number];
160
+ /**
161
+ * How much of the flipped read a point takes in one ellipse: 1 inside
162
+ * `1 − FACE_TRANSFER_UPSIDE_DOWN_SOFTNESS` of its radius, 0 on and outside
163
+ * the rim, a smoothstep between. The CPU reference of `ftSoftEllipse`.
164
+ */
165
+ export declare const faceTransferSoftEllipse: (u: number, v: number, ellipse: FaceTransferEllipse) => number;
166
+ /**
167
+ * `upsideDown` (the Thatcher effect): each eye and the mouth flipped top to
168
+ * bottom in place. For a source UV, writes `[u, v′, weight]` to `out`: the
169
+ * second read is at `(u, v′)` with `v′ = 2·cv − v` about the centre of the
170
+ * ellipse the point is in (the one with the largest weight; they do not
171
+ * overlap), and the fragment shader mixes it over the plain read by
172
+ * `weight`. Outside every ellipse the weight is 0 and `v′ = v` (identity).
173
+ * `ellipses` are in the source map's UV (from the transfer geometry). The
174
+ * CPU reference of `faceTransferUpsideDown` in `FACE_TRANSFER_MATH_GLSL`.
175
+ */
176
+ export declare const faceTransferUpsideDownUv: (u: number, v: number, ellipses: readonly FaceTransferEllipse[], out?: [number, number, number]) => [number, number, number];
177
+ /**
178
+ * GLSL ES 3.00 of the functions above, built from the same constants, for
179
+ * the transfer shaders to include:
180
+ * - `vec3 faceTransferGain(vec4 sourceMean, vec4 targetMean, vec4 sourceLow,
181
+ * vec4 targetLow, float edge, float matchSkinTone, float matchLighting,
182
+ * float edgeMatch, float edgeInset, float edgeSoftness)`;
183
+ * - `vec4 faceTransferSourceLow(vec4 read, vec4 twin)`;
184
+ * - `float transferAlpha(float coverage, float facing, float edge,
185
+ * float eyeCm, float mouthCm, float amount, float edgeInset,
186
+ * float edgeSoftness, bool ownEyes, bool ownMouth, float featureSoftness)`;
187
+ * - `float faceTransferDetailBias(float detail)`;
188
+ * - `bool faceTransferReadsMirror(bool mirror, float keptSide, float faceSide)`,
189
+ * with `mirror = sourceMirror != (layout == flip)` and `keptSide` from
190
+ * `faceTransferKeptSide`;
191
+ * - `float ftSoftEllipse(vec2 uv, vec4 ellipse)` and
192
+ * `vec3 faceTransferUpsideDown(vec2 uv, vec4 ellipses[3])` (returns the
193
+ * second read's UV in `xy` and its weight in `z`).
194
+ * `edgeSoftness` and `featureSoftness` must be above 0 (the resolved settings are).
195
+ */
196
+ export declare const FACE_TRANSFER_MATH_GLSL: string;
197
+ /** Texels of a transfer's live map: one per unwrap vertex (the 468 landmarks, then the 3 opening centres). */
198
+ export declare const FACE_TRANSFER_LIVE_MAP_WIDTH: number;
199
+ /**
200
+ * How squarely the target must face the camera to be drawn over (cosines,
201
+ * as `FaceUnwrapFrameOptions.facing`): a cheek seen edge-on fades out, so
202
+ * the real face shows at the silhouette of a turned head.
203
+ */
204
+ export declare const FACE_TRANSFER_TARGET_FACING: readonly [number, number];
205
+ /** Clip-space z of the transfer mesh: just behind the near plane, so `HandCutout`'s near-plane depth (z −1) stays in front. */
206
+ export declare const FACE_TRANSFER_DEPTH = -0.999;
207
+ /**
208
+ * Writes a target face's live map: `(x, y, facing, 1)` per unwrap vertex
209
+ * (`FACE_TRANSFER_LIVE_MAP_WIDTH` texels, RGBA), where `x, y` are the
210
+ * landmark in feed or picture space (0..1, y down) and `facing` how squarely
211
+ * it faces the camera (0..1, `FACE_TRANSFER_TARGET_FACING`). The opening
212
+ * centres sit at the average of their ring, as in the unwrap, so a face
213
+ * drawn back where it was unwrapped lands exactly on itself. `landmarks` has
214
+ * at least 468 points; `aspect` is the image's width / height. Returns
215
+ * `out`; allocates nothing.
216
+ */
217
+ export declare const writeFaceTransferLiveMap: (landmarks: ArrayLike<FaceImageLandmark>, aspect: number, out: Float32Array, facing?: readonly [number, number]) => Float32Array;
218
+ /** A live map texture (`FACE_TRANSFER_LIVE_MAP_WIDTH` × 1, RGBA32F, nearest): write `image.data`, then set `needsUpdate`. */
219
+ export declare const createFaceTransferLiveMap: () => THREE.DataTexture;
220
+ /**
221
+ * The transfer's vertex shader (three's `ShaderMaterial` prefix supplies
222
+ * `uv`). Per vertex: its place on screen from three texels of the target's
223
+ * live map (`ftCorners` blended by `ftBary`), how squarely it faces the
224
+ * camera, which UV the source is read at (`uv` or `ftUvMirror`, per layout
225
+ * and sides), and the colour gain (`faceTransferGain`, from the source's and
226
+ * target's skin statistics). The source's local skin is read where its map
227
+ * is read, or at the mirror twin where that skin was not seen
228
+ * (`faceTransferSourceLow`: a mirror-filled map holds the twin's light).
229
+ * `uSourceFlat` 1 reads the source's local skin as its mean (painted faces:
230
+ * the paint keeps its own shading).
231
+ */
232
+ export declare const FACE_TRANSFER_VERTEX_SHADER: string;
233
+ /**
234
+ * The transfer's fragment shader: one read of the source map (two in
235
+ * `upsideDown`, mixed per fragment so the flipped eyes and mouth stay
236
+ * crisp), un-premultiplied, times the vertex's gain; alpha from
237
+ * `transferAlpha`. Writes straight alpha for `faceSurfaceBlending`.
238
+ */
239
+ export declare const FACE_TRANSFER_FRAGMENT_SHADER: string;
240
+ /** The transfer's per-vertex attributes (besides three's `position` and `uv`). */
241
+ export declare const FACE_TRANSFER_ATTRIBUTES: readonly ["ftCorners", "ftBary", "ftUvMirror", "ftFaceSide", "ftEdge", "ftEyeCm", "ftMouthCm"];
242
+ export type FaceTransferUniforms = {
243
+ uLiveMap: THREE.IUniform<THREE.Texture | null>;
244
+ uSourceMap: THREE.IUniform<THREE.Texture | null>;
245
+ uSourceLow: THREE.IUniform<THREE.Texture | null>;
246
+ uSourceMean: THREE.IUniform<THREE.Texture | null>;
247
+ uTargetLow: THREE.IUniform<THREE.Texture | null>;
248
+ uTargetMean: THREE.IUniform<THREE.Texture | null>;
249
+ uSourceFlat: THREE.IUniform<number>;
250
+ uMirror: THREE.IUniform<number>;
251
+ uKeptSide: THREE.IUniform<number>;
252
+ uMatchSkinTone: THREE.IUniform<number>;
253
+ uMatchLighting: THREE.IUniform<number>;
254
+ uEdgeMatch: THREE.IUniform<number>;
255
+ uEdgeInset: THREE.IUniform<number>;
256
+ uEdgeSoftness: THREE.IUniform<number>;
257
+ uFeatureSoftness: THREE.IUniform<number>;
258
+ uFacingFloor: THREE.IUniform<number>;
259
+ uDetail: THREE.IUniform<number>;
260
+ uOwnEyes: THREE.IUniform<number>;
261
+ uOwnMouth: THREE.IUniform<number>;
262
+ uAmount: THREE.IUniform<number>;
263
+ uUpsideDown: THREE.IUniform<number>;
264
+ uEllipses: THREE.IUniform<THREE.Vector4[]>;
265
+ uDepth: THREE.IUniform<number>;
266
+ };
267
+ /** Every uniform the transfer shaders declare, at neutral values (nothing bound, nothing drawn). */
268
+ export declare const createFaceTransferUniforms: () => FaceTransferUniforms;
269
+ /** The settings a transfer draws with: `FaceSwapSettings` without the preset, smoothing and amount. */
270
+ export type FaceTransferSettings = Pick<FaceSwapSettings, "matchSkinTone" | "matchLighting" | "edgeMatch" | "edgeSoftness" | "edgeInset" | "ownEyes" | "ownMouth" | "featureSoftness" | "detail">;
271
+ /**
272
+ * The transfer mesh's geometry at a level, with its own buffer attributes
273
+ * (their arrays are the memoised geometry's: shared, never written). The
274
+ * index drops the eye fills (`ownEyes`) and the mouth fill (`ownMouth`).
275
+ */
276
+ export declare const createFaceTransferGeometry: (level: FaceTransferLevel, ownEyes: boolean, ownMouth: boolean) => THREE.BufferGeometry;
277
+ export type FaceTransferOptions = {
278
+ /** Subdivision of the mesh: 2 (default) = 14.5k triangles, 1 = 3.6k. */
279
+ level?: FaceTransferLevel;
280
+ };
281
+ /**
282
+ * Draws a face texture (`setSource`) onto a target face (`setTarget`, or a
283
+ * shared live map with `setTargetMap`) in screen space, with colour
284
+ * transfer, soft edges, the target's own eyes and mouth kept, and a layout
285
+ * (`asIs`, `flip`, `leftLeft`, `rightRight`, `upsideDown`). Positions come
286
+ * from the target's landmarks in feed or picture space (0..1, y down), so
287
+ * the same mesh draws over the live feed (add `mesh` to the scene) or into a
288
+ * render target the size of a picture. No React needed.
289
+ *
290
+ * - The mesh draws at `FACE_SURFACE_RENDER_ORDER` (−2) in the opaque pass
291
+ * with `faceSurfaceBlending`, depth-tested (hands drawn by `HandCutout`
292
+ * stay in front) and writing no depth (accessories draw over it). Its
293
+ * triangles are ordered back to front, so the nose covers the far cheek of
294
+ * a turned head.
295
+ * - It shows only when everything it needs is set: a target, a source whose
296
+ * `map` is ready, the target's statistics (`setTargetStats`) and
297
+ * `amount > 0`. Live sources change in place: call `update()` once a frame
298
+ * (`<FaceTextureLayer>` does) so `mesh.visible` follows them.
299
+ *
300
+ * ```ts
301
+ * const transfer = new FaceTransfer();
302
+ * transfer.setSource(face); // a FaceTexture (createFaceTexture, useLiveFaceTexture)
303
+ * transfer.setTarget(pictureLandmarks, picture.width / picture.height);
304
+ * transfer.setTargetStats(pictureFace); // its low and mean
305
+ * transfer.setLayout("asIs", false);
306
+ * renderer.setRenderTarget(pictureTarget);
307
+ * renderer.render(transfer.mesh, camera); // any camera: the mesh is in clip space
308
+ * ```
309
+ */
310
+ export declare class FaceTransfer {
311
+ /** The screen-space mesh. Add it to a scene, or render it into a target. */
312
+ readonly mesh: THREE.Mesh<THREE.BufferGeometry, THREE.ShaderMaterial>;
313
+ /** The shaders' uniforms (the setters keep them; read-only for callers). */
314
+ readonly uniforms: FaceTransferUniforms;
315
+ private levelValue;
316
+ private readonly liveData;
317
+ private ownLiveMap;
318
+ private sharedLiveMap;
319
+ private ownTarget;
320
+ private source;
321
+ private targetStats;
322
+ private amountValue;
323
+ private layoutValue;
324
+ private feedMirrored;
325
+ private unseenValue;
326
+ private readonly settings;
327
+ constructor(options?: FaceTransferOptions);
328
+ /** The mesh's subdivision level. */
329
+ get level(): FaceTransferLevel;
330
+ /** The layout set last. */
331
+ get layout(): FaceTextureLayout;
332
+ /** The settings in use (resolved and clamped; do not mutate). */
333
+ get currentSettings(): Readonly<FaceTransferSettings>;
334
+ /**
335
+ * Everything the draw needs is set: a target, a source with a ready map,
336
+ * and the target's statistics.
337
+ */
338
+ get ready(): boolean;
339
+ /** Swaps the mesh to another subdivision level (a quality change). */
340
+ setLevel(level: FaceTransferLevel): void;
341
+ /**
342
+ * A new geometry for the level and the own eyes / mouth (the index drops
343
+ * or restores their fills). The old one is disposed, which frees all its
344
+ * GL buffers, the index included (replacing only the index would leave the
345
+ * old index buffer on the GPU until garbage collection).
346
+ */
347
+ private rebuildGeometry;
348
+ /**
349
+ * The target face: its landmarks (≥ 468) in feed or picture space (0..1,
350
+ * y down) and that image's width / height. How squarely each point faces
351
+ * the camera is computed here. Replaces a `setTargetMap` map.
352
+ */
353
+ setTarget(landmarks: ArrayLike<FaceImageLandmark>, aspect: number, facing?: readonly [number, number]): void;
354
+ /**
355
+ * Draws on a live map kept elsewhere (`writeFaceTransferLiveMap` into a
356
+ * `createFaceTransferLiveMap` texture; the live-face registry keeps one per
357
+ * tracked face). `null` goes back to the last `setTarget`.
358
+ */
359
+ setTargetMap(map: THREE.Texture | null): void;
360
+ /** The face texture to draw (it stays the caller's to dispose). `null` draws nothing. */
361
+ setSource(face: FaceTexture | null): void;
362
+ /** The target's skin statistics (its `low` and `mean`). `null` draws nothing. */
363
+ setTargetStats(stats: FaceTextureStatistics | null): void;
364
+ /**
365
+ * How the source is laid on the target. `feedMirrored` is the target
366
+ * feed's (or picture's) mirroring, `useXRMirrored()` for the live feed:
367
+ * with the source's own `mirrored` it decides which side is the person's
368
+ * own left (`resolveFaceSourceMirror`, `faceTransferKeptSide`).
369
+ */
370
+ setLayout(layout: FaceTextureLayout, feedMirrored: boolean): void;
371
+ /**
372
+ * Colour, edge, feature and detail settings (any subset of
373
+ * `FaceSwapSettings`; clamped to their ranges). `preset`, `smoothing` and
374
+ * `amount` are ignored here (`setAmount` sets the amount).
375
+ */
376
+ setSettings(settings: Partial<FaceSwapSettings>): void;
377
+ /**
378
+ * The parts of the target the camera sees edge-on (nostril undersides,
379
+ * the lips' seam, the far side of the nose): `"fade"` (default) leaves
380
+ * them to the camera, `"cover"` draws the source there too, for a fill
381
+ * that must hide the features (`<Faceless>`).
382
+ */
383
+ setUnseen(unseen: FaceTransferUnseen): void;
384
+ /** Overall strength, 0..1. */
385
+ setAmount(amount: number): void;
386
+ /**
387
+ * Re-reads a live source (its `map`, `mirrored`, `ready`) and sets
388
+ * `mesh.visible`. The setters do this; call it once a frame when the
389
+ * source or the target's statistics change in place.
390
+ */
391
+ update(): void;
392
+ /** Frees the geometry, the own live map and the material. The source and statistics stay the caller's. */
393
+ dispose(): void;
394
+ /** Binds the current state into the uniforms; `visibility` also sets `mesh.visible`. */
395
+ private sync;
396
+ }
@@ -0,0 +1,109 @@
1
+ import { FaceTransferEllipse } from './faceTransfer';
2
+ /**
3
+ * The face transfer mesh (FACE-2): the filled canonical face
4
+ * (`getFaceUnwrapMesh()`, 471 vertices: the 468 landmarks and the centres of
5
+ * the eye and mouth openings) subdivided 1 or 2 times, drawn in screen space
6
+ * over a target face. Pure data, memoised per level and shared (do not
7
+ * mutate it); the transfer layer turns it into GPU buffers.
8
+ *
9
+ * - **Placement:** every vertex blends three unwrap vertices (`corners`) by
10
+ * `bary`, so the vertex shader places it from a 471-texel position texture
11
+ * of the target's live landmarks. Subdivision is linear (the vertices lie
12
+ * on the parent triangles); it only gives the per-vertex colour, edge and
13
+ * feature terms more samples.
14
+ * - **Draw order:** parent triangles (each with its `4^level` children,
15
+ * contiguous) are sorted back to front by canonical centroid z, so without
16
+ * depth writes the nose covers the far cheek on a turned head and soft
17
+ * edges blend in order. The eye and mouth fills are sorted with the rest,
18
+ * so the nose bridge and lids also cover them.
19
+ * - **Index variants:** `getFaceTransferIndex(level, ownEyes, ownMouth)` drops
20
+ * the eye fills and / or the mouth fill, so the target's own live eyes or
21
+ * mouth show through.
22
+ * - **Static attributes**, all in the face atlas (`FACE_ATLAS_UVS`, v up) and
23
+ * the canonical head frame (cm, +X toward landmark 263): `uv`, `uvMirror`,
24
+ * `faceSide`, `edge`, `eyeCm`, `mouthCm` (see `FaceTransferGeometry`).
25
+ */
26
+ export declare const FACE_TRANSFER_LEVELS: readonly [1, 2];
27
+ /** Subdivision level of the transfer mesh: each parent triangle becomes `4^level` triangles. */
28
+ export type FaceTransferLevel = (typeof FACE_TRANSFER_LEVELS)[number];
29
+ /** Samples of the smoothed face outline the `edge` attribute is measured to. */
30
+ export declare const FACE_TRANSFER_OUTLINE_SAMPLES = 720;
31
+ /** Samples per ring segment of the smoothed eye rings and inner-lip ring. */
32
+ export declare const FACE_TRANSFER_FEATURE_SAMPLES_PER_SEGMENT = 16;
33
+ /** What a parent triangle covers: the face skin, an eye opening's fill, or the mouth opening's fill. */
34
+ export declare const FACE_TRANSFER_PARENT_KIND: {
35
+ readonly face: 0;
36
+ readonly eye: 1;
37
+ readonly mouth: 2;
38
+ };
39
+ /**
40
+ * The subdivided face for the transfer. Per-vertex arrays are flat; vertices
41
+ * `0 … 470` are the unwrap vertices themselves, in order.
42
+ */
43
+ export type FaceTransferGeometry = {
44
+ level: FaceTransferLevel;
45
+ vertexCount: number;
46
+ /** Three unwrap vertices (0 … 470) per vertex: the live positions it blends. */
47
+ corners: Uint16Array;
48
+ /** Their barycentric weights (three per vertex, summing to 1). */
49
+ bary: Float32Array;
50
+ /** Rest position in the canonical head frame, cm (three per vertex). */
51
+ position: Float32Array;
52
+ /** Face atlas UV (`FACE_ATLAS_UVS`, v up; two per vertex). */
53
+ uv: Float32Array;
54
+ /**
55
+ * Face atlas UV of the vertex's mirror point `(−x, y, z)` (two per vertex):
56
+ * where a mirrored read samples the source. Exact through the landmark
57
+ * mirror map where the mirror triangle exists; for the 12 canonical
58
+ * triangles whose mirror quad is split the other way, the point is found
59
+ * on the front-projected (x, y) face. Midline vertices keep their own UV.
60
+ */
61
+ uvMirror: Float32Array;
62
+ /** The vertex's canonical side: +1 on landmark 263's side (+X), −1 on 33's, 0 on the midline. */
63
+ faceSide: Float32Array;
64
+ /**
65
+ * cm to the smoothed face outline (a centripetal Catmull-Rom loop through
66
+ * the 36 oval landmarks, `FACE_TRANSFER_OUTLINE_SAMPLES` samples), straight
67
+ * line in 3D: 0 on the outline, positive inside, so fades follow a smooth
68
+ * curve instead of the 36-segment polygon.
69
+ */
70
+ edge: Float32Array;
71
+ /** cm outside the nearer smoothed eye ring (lash line): 0 on it, negative inside the opening. */
72
+ eyeCm: Float32Array;
73
+ /** cm outside the smoothed inner-lip ring: 0 on it, negative inside the mouth opening. */
74
+ mouthCm: Float32Array;
75
+ /** Triangles per parent: `4^level`. */
76
+ trianglesPerParent: number;
77
+ /**
78
+ * Draw slots, back to front: the unwrap triangle (`getFaceUnwrapMesh().index / 3`)
79
+ * of each. Slot `t`'s children are triangles `[t·4^level, (t+1)·4^level)` of `index`.
80
+ */
81
+ parents: Uint16Array;
82
+ /** Per slot: `FACE_TRANSFER_PARENT_KIND` (face, eye fill or mouth fill). */
83
+ parentKinds: Uint8Array;
84
+ /** Every triangle in draw order (three vertex indices each): eyes and mouth filled. */
85
+ index: Uint16Array;
86
+ };
87
+ /**
88
+ * The transfer mesh at a subdivision level: level 1 has 1 845 vertices and
89
+ * 3 616 triangles, level 2 has 7 305 vertices and 14 464 triangles. Built
90
+ * once per level (tens of milliseconds) and shared: do not mutate it.
91
+ */
92
+ export declare const getFaceTransferGeometry: (level: FaceTransferLevel) => FaceTransferGeometry;
93
+ /**
94
+ * The transfer mesh's triangles in draw order, without the eye fills
95
+ * (`ownEyes`: the target keeps its live eyes) and / or the mouth fill
96
+ * (`ownMouth`: the target keeps its live mouth interior). One of four
97
+ * memoised arrays per level; `ownEyes` and `ownMouth` both false is the
98
+ * geometry's own `index`. Shared: do not mutate it.
99
+ */
100
+ export declare const getFaceTransferIndex: (level: FaceTransferLevel, ownEyes: boolean, ownMouth: boolean) => Uint16Array;
101
+ /**
102
+ * The `upsideDown` ellipses in face atlas UV, `[cu, cv, radiusU, radiusV]`:
103
+ * the +X eye (landmark 263's), the −X eye (33's) and the mouth, each centred
104
+ * on its opening's centre and covering `faceReprojectionRegionEllipses()`
105
+ * (the lids and a little brow bone; the lips) as seen on the face. Each eye
106
+ * and the mouth is flipped top to bottom about its own centre, in place; a
107
+ * flipped read stays inside its ellipse. Built once and shared.
108
+ */
109
+ export declare const getFaceTransferUpsideDownEllipses: () => readonly [FaceTransferEllipse, FaceTransferEllipse, FaceTransferEllipse];
@@ -0,0 +1,94 @@
1
+ import * as THREE from "three";
2
+ /**
3
+ * A GPU self-test of the face transfer (FACE-2) on this device's WebGL2:
4
+ *
5
+ * 1. **compile**: both transfer shaders (`FACE_TRANSFER_VERTEX_SHADER` /
6
+ * `FACE_TRANSFER_FRAGMENT_SHADER`, with `FACE_TRANSFER_MATH_GLSL`) link
7
+ * and draw, in every layout, with no shader or GL error.
8
+ * 2. **parity**: `faceTransferGain`, `faceTransferSourceLow`,
9
+ * `transferAlpha` and `faceTransferUpsideDown` run on the GPU for many
10
+ * input tuples and match their TypeScript references.
11
+ * 3. **asIs equals the camera**: a synthetic clip (a textured canonical head
12
+ * turning, drawn by a perspective camera, its 468 landmarks projected)
13
+ * runs through the live-face registry (`LiveFaceEntry`: smoothing, live
14
+ * map, unwrap, skin statistics) and a `FaceTransfer` with layout `asIs`
15
+ * draws the face back on itself: the frame must equal the camera frame
16
+ * within resampling, far below a one-pixel shift.
17
+ * 4. **layouts**: on the frontal frame, `flip` equals the head painted with
18
+ * mirrored UVs, and `leftLeft` / `rightRight` keep the right half as the
19
+ * camera has it and draw a symmetric face.
20
+ * 5. **mirror fill**: a side-lit source turned 30°, its far cheek filled
21
+ * from the near side, takes the target's light there (the twin read).
22
+ * 6. **latency**: results whose landmarks are two frames older than the
23
+ * camera frame they arrive with (a moving head) still give the camera
24
+ * back with `asIs`.
25
+ * 7. **between results** (reported): the face between two 15 Hz results
26
+ * over a moving 30 fps camera.
27
+ * 8. **bakes**: asIs with a painted face (`canonicalTexture`, the clip's
28
+ * own paint, preset `raw`) and a photo bake of a frame (known landmarks).
29
+ * 9. **faceless**: the frontal frame's live face through `FacelessTexture`
30
+ * (FACE-5): its shader links; the features are erased and opaque, the
31
+ * rest is the live map unchanged; `smooth` changes the whole face; grain
32
+ * adds texture only where it should.
33
+ *
34
+ * The headless smoke run drives it (`example/smoke/face-transfer.spec.ts`);
35
+ * open `/smoke/face-transfer.html` on the dev server to run it on a device.
36
+ */
37
+ export type FaceTransferSelfTestCheck = {
38
+ name: string;
39
+ ok: boolean;
40
+ detail: string;
41
+ };
42
+ export type FaceTransferSelfTestResult = {
43
+ ok: boolean;
44
+ /** A thrown error, if the test could not run. */
45
+ error: string | null;
46
+ checks: FaceTransferSelfTestCheck[];
47
+ };
48
+ /** The synthetic clip and the pass thresholds. */
49
+ export declare const FACE_TRANSFER_SELF_TEST_SCENE: Readonly<{
50
+ width: 480;
51
+ height: 360;
52
+ /** Vertical field of view (degrees). */
53
+ fov: 40;
54
+ /** Head distance (cm). */
55
+ distance: 55;
56
+ /** Per frame: yaw, pitch, roll (degrees), x / y offset (cm). */
57
+ poses: readonly [readonly [0, 0, 0, 0, 0], readonly [12, -4, 3, 1.5, 0.5], readonly [-18, 6, -4, -1, -0.5], readonly [28, 2, 5, 2, 1], readonly [-30, -6, -2, -2, 0], readonly [6, 10, 8, 0.5, -1], readonly [-8, -10, -6, -0.5, 1], readonly [20, -3, 0, 1, 0]];
58
+ /** Atlas paint size (px, square). */
59
+ paintSize: 512;
60
+ /** asIs: mean |Δ| per channel over the face (8-bit sRGB levels) must stay below this… */
61
+ maxMeanDiff: 1.5;
62
+ /** …and below this share of a one-pixel shift's mean |Δ| (registration well under a pixel). */
63
+ maxShiftShare: 0.5;
64
+ /** Drawn alone, the layer is opaque over at least this share of the face's box (it really draws). */
65
+ minCoverage: 0.3;
66
+ /** GPU vs TypeScript: largest relative error of the gain and alpha. */
67
+ parityTolerance: 0.002;
68
+ parityTuples: 64;
69
+ /**
70
+ * The mirror-fill case, over the outer strip of each side (from
71
+ * `stripFrom` × the half-width out): the far strip's least opaque share,
72
+ * its largest brightness bias from the target (8-bit levels), and the
73
+ * least bias with the twin read removed (the case really fills the cheek).
74
+ */
75
+ mirrorFill: Readonly<{
76
+ stripFrom: 0.6;
77
+ minCoverage: 0.1;
78
+ maxFarBias: 2.5;
79
+ minPlainBias: 5;
80
+ }>;
81
+ /** The latency case: how many 30 fps frames the landmarks lag the camera, over how many frames. */
82
+ latency: Readonly<{
83
+ latencyFrames: 2;
84
+ frames: 6;
85
+ }>;
86
+ }>;
87
+ /**
88
+ * Runs every check (see the module comment) on `renderer`, or on a new
89
+ * offscreen renderer that it disposes. Never rejects: failures and thrown
90
+ * errors are in the result.
91
+ */
92
+ export declare const runFaceTransferSelfTest: (options?: {
93
+ renderer?: THREE.WebGLRenderer;
94
+ }) => Promise<FaceTransferSelfTestResult>;