@vincentt-xr/sdk 2.0.0-alpha.4 → 2.0.0-alpha.6

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 (67) hide show
  1. package/GROUNDING.md +11 -4
  2. package/README.md +85 -52
  3. package/dist/{DebuggerUI-DhKTXTY2.js → DebuggerUI-C_rbLdkh.js} +1 -1
  4. package/dist/{DebuggerUI-bnGHSSOb.cjs → DebuggerUI-DYT_dk1E.cjs} +1 -1
  5. package/dist/FaceMeshRenderer-D1WsrTLA.cjs +155 -0
  6. package/dist/FaceMeshRenderer-DSCd1H55.js +1264 -0
  7. package/dist/{FaceRetouch-Bg-OBU4n.js → FaceRetouch-CMJbGThL.js} +30 -30
  8. package/dist/{FaceRetouch-TZeBGIqW.cjs → FaceRetouch-DsE0Dbw-.cjs} +1 -1
  9. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +11 -1
  10. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +1 -1
  11. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +1 -0
  12. package/dist/components/LipEffect/LipEffect.d.ts +2 -0
  13. package/dist/components/LipEffect/LipEffectMaterial.d.ts +10 -0
  14. package/dist/components/LipEffect/defaults.d.ts +9 -0
  15. package/dist/components/LipEffect/index.d.ts +4 -0
  16. package/dist/components/LipEffect/types.d.ts +22 -0
  17. package/dist/{contexts-B2_NsTnk.js → contexts-DvQI4PqI.js} +6 -3
  18. package/dist/contexts-h-9TRH0r.cjs +1 -0
  19. package/dist/debug-ui/media-source.cjs +1 -1
  20. package/dist/debug-ui/media-source.js +1 -1
  21. package/dist/debug-ui.cjs +1 -1
  22. package/dist/debug-ui.js +10 -10
  23. package/dist/entries/face-effects.d.ts +2 -0
  24. package/dist/face-effects.cjs +1 -1
  25. package/dist/face-effects.js +621 -508
  26. package/dist/{getFaceInfo-4DhcPZDJ.js → getFaceInfo-B43Cwq4n.js} +1 -1
  27. package/dist/{getFaceInfo-QOQ_dc-W.cjs → getFaceInfo-DEzcL_Ub.cjs} +1 -1
  28. package/dist/{index-D1kj6uc-.js → index-B-s4YbWu.js} +1 -1
  29. package/dist/index-C0-fg1Hk.cjs +1 -0
  30. package/dist/{index-C9yQVzAh.cjs → index-CY7Z8cHV.cjs} +1 -1
  31. package/dist/{index-ZaDEzDtR.cjs → index-CxMEeCRP.cjs} +1 -1
  32. package/dist/{index-WPPnlFO1.cjs → index-D67hHm44.cjs} +1 -1
  33. package/dist/{index-CNGzE49z.cjs → index-DPPpU5By.cjs} +1 -1
  34. package/dist/{index-g250Tqme.js → index-DYfY9ljy.js} +1 -1
  35. package/dist/{index-Cj3fGDtZ.js → index-G_5h_FJQ.js} +8 -8
  36. package/dist/{index-BMeBJ0dV.js → index-I4eF5TKT.js} +227 -191
  37. package/dist/{index-72Wb15Ca.js → index-uE3sKczj.js} +1 -1
  38. package/dist/{internal-Dtvo4WYo.cjs → internal-MvKrz0Nt.cjs} +1 -1
  39. package/dist/{internal-34pb7djs.js → internal-ldPYiUF0.js} +3 -3
  40. package/dist/internal.cjs +1 -1
  41. package/dist/internal.js +1 -1
  42. package/dist/low-level.cjs +1 -1
  43. package/dist/low-level.js +11 -11
  44. package/dist/main.cjs +1 -1
  45. package/dist/main.js +12 -12
  46. package/dist/{renderGroups-jSUOY1Oq.cjs → renderGroups-BJsx32q5.cjs} +1 -1
  47. package/dist/{renderGroups-CPWUX6z9.js → renderGroups-CFt1yYLB.js} +1 -1
  48. package/dist/{renderPasses-CLlYRdMk.js → renderPasses-C72MbZ-a.js} +4 -4
  49. package/dist/{renderPasses-KUJUSevp.cjs → renderPasses-D-Krl6D0.cjs} +1 -1
  50. package/dist/scene-object.cjs +1 -1
  51. package/dist/scene-object.js +2 -2
  52. package/dist/{selectors-DLxL8Q66.js → selectors-ByKNTXeA.js} +1 -1
  53. package/dist/{selectors-S8g25ke9.cjs → selectors-CAwmL9VW.cjs} +1 -1
  54. package/dist/{session-DP8AF7Rg.cjs → session-CANvoLD6.cjs} +1 -1
  55. package/dist/{session-CbtvwiaD.js → session-Dhi0OqZo.js} +1 -1
  56. package/dist/tracking.cjs +1 -1
  57. package/dist/tracking.js +9 -9
  58. package/dist/{useFaceInfo-BvZeUBsL.cjs → useFaceInfo-BSZq7AO1.cjs} +1 -1
  59. package/dist/{useFaceInfo-C06EyScd.js → useFaceInfo-FVQBBNdY.js} +3 -3
  60. package/dist/{useFaceResults-CCNiH7VZ.cjs → useFaceResults-C3oZkn2Z.cjs} +1 -1
  61. package/dist/{useFaceResults-C1Ppc8rS.js → useFaceResults-D62STzT1.js} +1 -1
  62. package/dist/utils/visionWasm.d.ts +18 -0
  63. package/package.json +2 -2
  64. package/dist/FaceMeshRenderer-B2i2NW71.js +0 -1195
  65. package/dist/FaceMeshRenderer-BSOq1OnG.cjs +0 -155
  66. package/dist/contexts-BgWfyxre.cjs +0 -1
  67. package/dist/index-Da7uycur.cjs +0 -1
@@ -1,1195 +0,0 @@
1
- import { jsx as p, jsxs as _e, Fragment as Ve } from "react/jsx-runtime";
2
- import { useLoader as ce, useThree as Dt, useFrame as Pt } from "@react-three/fiber";
3
- import { useMemo as q, useRef as l, useState as We, useCallback as Ge, useEffect as Te } from "react";
4
- import * as g from "three";
5
- import { MathUtils as Xe, Color as Gt, Vector2 as ze } from "three";
6
- import { l as ne, f as zt, X as Nt } from "./index-BMeBJ0dV.js";
7
- import { c as Ht, u as Bt } from "./selectors-DLxL8Q66.js";
8
- import { t as Vt, p as Wt, b as Xt } from "./index-D1kj6uc-.js";
9
- import { TransformControls as jt } from "@react-three/drei";
10
- const Re = 8, K = {
11
- type: "linear",
12
- stops: [
13
- { offset: 0, color: "#38bdf8" },
14
- { offset: 1, color: "#a78bfa" }
15
- ],
16
- angle: 0,
17
- center: { x: 0.5, y: 0.5 },
18
- radius: 0.5
19
- }, Yt = (e) => {
20
- const n = e.slice(0, Re).map((t) => ({ ...t, offset: Xe.clamp(t.offset, 0, 1) })).sort((t, r) => t.offset - r.offset);
21
- return n.length >= 2 ? n : K.stops.map((t) => ({ ...t }));
22
- }, Kt = (e) => ({
23
- ...K,
24
- ...e,
25
- center: { ...K.center, ...e == null ? void 0 : e.center },
26
- radius: Math.max(0.01, (e == null ? void 0 : e.radius) ?? K.radius),
27
- stops: Yt((e == null ? void 0 : e.stops) ?? K.stops)
28
- }), $t = `
29
- varying vec2 vPosition;
30
- void main() {
31
- vPosition = position.xy;
32
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
33
- }
34
- `, Qt = `
35
- #define MAX_STOPS 8
36
- uniform vec3 stopColors[MAX_STOPS];
37
- uniform float stopOffsets[MAX_STOPS];
38
- uniform int stopCount;
39
- uniform int gradientType;
40
- uniform vec2 direction;
41
- uniform vec2 center;
42
- uniform float radius;
43
- uniform float angleOffset;
44
- uniform float opacity;
45
- varying vec2 vPosition;
46
-
47
- vec3 sampleGradient(float amount) {
48
- vec3 color = stopColors[0];
49
- for (int index = 1; index < MAX_STOPS; index++) {
50
- if (index >= stopCount) break;
51
- if (amount <= stopOffsets[index]) {
52
- float width = max(0.0001, stopOffsets[index] - stopOffsets[index - 1]);
53
- return mix(stopColors[index - 1], stopColors[index], clamp((amount - stopOffsets[index - 1]) / width, 0.0, 1.0));
54
- }
55
- color = stopColors[index];
56
- }
57
- return color;
58
- }
59
-
60
- void main() {
61
- vec2 delta = vPosition - center;
62
- float amount;
63
- if (gradientType == 1) {
64
- amount = clamp(length(delta) / radius, 0.0, 1.0);
65
- } else if (gradientType == 2) {
66
- amount = fract(atan(delta.y, delta.x) / 6.28318530718 + 0.5 + angleOffset);
67
- } else {
68
- amount = clamp(dot(delta, direction) + 0.5, 0.0, 1.0);
69
- }
70
- gl_FragColor = vec4(sampleGradient(amount), opacity);
71
- }
72
- `, qt = { linear: 0, radial: 1, angular: 2 }, Zt = ({ opacity: e = 1, value: n }) => {
73
- const t = q(() => {
74
- const r = Kt(n), a = Xe.degToRad(r.angle), o = r.stops.map((i) => new Gt(i.color)), s = r.stops.map((i) => i.offset);
75
- for (; o.length < Re; ) o.push(o[o.length - 1]);
76
- for (; s.length < Re; ) s.push(1);
77
- return {
78
- stopColors: { value: o },
79
- stopOffsets: { value: s },
80
- stopCount: { value: r.stops.length },
81
- gradientType: { value: qt[r.type] },
82
- direction: { value: new ze(Math.cos(a), Math.sin(a)) },
83
- center: { value: new ze(r.center.x - 0.5, 0.5 - r.center.y) },
84
- radius: { value: r.radius },
85
- angleOffset: { value: r.angle / 360 },
86
- opacity: { value: e }
87
- };
88
- }, [e, n]);
89
- return /* @__PURE__ */ p(
90
- "shaderMaterial",
91
- {
92
- uniforms: t,
93
- vertexShader: $t,
94
- fragmentShader: Qt,
95
- transparent: e < 1,
96
- depthTest: !1,
97
- depthWrite: !1,
98
- toneMapped: !1
99
- }
100
- );
101
- }, Jt = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO2YpZcAAAAASUVORK5CYII=", zn = {
102
- source: "solid",
103
- color: "#ffffff",
104
- opacity: 1,
105
- textureUrl: "",
106
- gradient: K
107
- }, je = (e) => ({
108
- ...K,
109
- stops: [
110
- { offset: 0, color: "#ffffff" },
111
- { offset: 1, color: e }
112
- ]
113
- }), en = ({
114
- depthTest: e,
115
- depthWrite: n,
116
- settings: t,
117
- side: r,
118
- toneMapped: a
119
- }) => {
120
- const o = ce(
121
- g.TextureLoader,
122
- t.textureUrl || Jt
123
- );
124
- return /* @__PURE__ */ p(
125
- "meshBasicMaterial",
126
- {
127
- color: t.color,
128
- map: o,
129
- transparent: !0,
130
- opacity: t.opacity,
131
- side: r,
132
- depthWrite: n,
133
- depthTest: e,
134
- toneMapped: a
135
- }
136
- );
137
- }, tn = ({
138
- depthTest: e = !1,
139
- depthWrite: n = !1,
140
- settings: t,
141
- side: r,
142
- toneMapped: a = !1
143
- }) => {
144
- const o = q(
145
- () => t.gradient ?? je(t.color),
146
- [t.color, t.gradient]
147
- );
148
- return t.source === "gradient" ? /* @__PURE__ */ p(Zt, { value: o, opacity: t.opacity }) : t.source === "texture" ? /* @__PURE__ */ p(
149
- en,
150
- {
151
- settings: t,
152
- side: r,
153
- depthTest: e,
154
- depthWrite: n,
155
- toneMapped: a
156
- }
157
- ) : /* @__PURE__ */ p(
158
- "meshBasicMaterial",
159
- {
160
- color: t.color,
161
- transparent: !0,
162
- opacity: t.opacity,
163
- side: r,
164
- depthWrite: n,
165
- depthTest: e,
166
- toneMapped: a
167
- }
168
- );
169
- }, be = Math.PI / 180, ge = 180 / Math.PI, G = (e) => Number(e.toFixed(6)), Ne = {
170
- enabled: !0,
171
- linked: {
172
- position: !1,
173
- rotation: !1,
174
- scale: !1
175
- },
176
- showTransformControls: !1,
177
- transformControlMode: "translate",
178
- transformControlSpace: "local",
179
- position: { x: 0, y: 0, z: 0 },
180
- rotation: { x: 0, y: 0, z: 0 },
181
- scale: { x: 1, y: 1, z: 1 },
182
- visible: !0
183
- }, Nn = ({ children: e, objectRef: n, onChange: t, value: r }) => {
184
- const a = l(null), o = l(n);
185
- o.current = n;
186
- const [s, i] = We(null), C = Ge((d) => {
187
- var S;
188
- a.current = d, i(d), (S = o.current) == null || S.call(o, d);
189
- }, []), E = Ge(() => {
190
- const d = a.current;
191
- !d || !t || t({
192
- ...r,
193
- position: {
194
- x: G(d.position.x),
195
- y: G(d.position.y),
196
- z: G(d.position.z)
197
- },
198
- rotation: {
199
- x: G(d.rotation.x * ge),
200
- y: G(d.rotation.y * ge),
201
- z: G(d.rotation.z * ge)
202
- },
203
- scale: {
204
- x: G(d.scale.x),
205
- y: G(d.scale.y),
206
- z: G(d.scale.z)
207
- }
208
- });
209
- }, [t, r]);
210
- return r.enabled ? /* @__PURE__ */ _e(Ve, { children: [
211
- /* @__PURE__ */ p(
212
- "group",
213
- {
214
- ref: C,
215
- position: [r.position.x, r.position.y, r.position.z],
216
- rotation: [
217
- r.rotation.x * be,
218
- r.rotation.y * be,
219
- r.rotation.z * be
220
- ],
221
- scale: [r.scale.x, r.scale.y, r.scale.z],
222
- visible: r.visible,
223
- children: e
224
- }
225
- ),
226
- s && r.showTransformControls && /* @__PURE__ */ p(
227
- jt,
228
- {
229
- object: s,
230
- mode: r.transformControlMode,
231
- space: r.transformControlSpace,
232
- size: 0.85,
233
- onMouseUp: E,
234
- onObjectChange: E
235
- }
236
- )
237
- ] }) : null;
238
- }, ee = (e) => Math.min(1, Math.max(0, e)), k = (e, n, t) => ee(1 - Math.abs(e - n) / t), nn = (e) => {
239
- let n = 1 / 0, t = -1 / 0, r = 1 / 0, a = -1 / 0;
240
- for (const i of e)
241
- n = Math.min(n, i.x), t = Math.max(t, i.x), r = Math.min(r, i.y), a = Math.max(a, i.y);
242
- const o = Math.max(t - n, 1e-3), s = Math.max(a - r, 1e-3);
243
- return {
244
- centerX: n + o * 0.5,
245
- centerY: r + s * 0.5,
246
- width: o,
247
- height: s
248
- };
249
- }, rn = (e) => e != null && e.enabled ? (e.strength ?? 1) !== 0 && Object.entries(e).some(
250
- ([n, t]) => n !== "enabled" && n !== "strength" && typeof t == "number" && t !== 0
251
- ) : !1, an = (e, n, t, r) => {
252
- const a = t.enabled ? t.strength ?? 1 : 0;
253
- if (a === 0)
254
- return r.x = e.x, r.y = e.y, r.z = e.z, r;
255
- const o = (e.x - n.centerX) / n.width, s = (e.y - n.centerY) / n.height, i = Math.abs(o), C = ee((-s + 0.42) / 0.55), E = k(s, -0.02, 0.34), d = k(s, -0.24, 0.16) * ee((i - 0.05) / 0.28), S = k(s, 0.02, 0.26) * k(i, 0, 0.18), _ = k(s, 0.29, 0.18) * k(i, 0, 0.36), O = ee((s - 0.16) / 0.36), A = E * k(i, 0.34, 0.22), h = C * k(i, 0, 0.48), v = k(s, -0.19, 0.1) * ee((i - 0.05) / 0.3), W = k(s, 0.48, 0.2) * k(i, 0, 0.26);
256
- let f = e.x, c = e.y, u = e.z;
257
- const M = (Y, w = 1) => {
258
- f += o * n.width * Y * a * w;
259
- }, y = (Y, w = 1) => {
260
- c += s * n.height * Y * a * w;
261
- };
262
- M(t.faceWidth ?? 0), y(t.faceHeight ?? 0), M(t.faceRoundness ?? 0, E * (1 - i)), c -= n.height * (t.midfaceHeight ?? 0) * a * E * 0.25, y(-(t.foreheadHeight ?? 0), h), M(t.foreheadWidth ?? 0, h), M(
263
- t.cheekboneWidth ?? 0,
264
- k(s, -0.06, 0.16) * k(i, 0.34, 0.2)
265
- ), M(t.cheekWidth ?? 0, A), M(t.jawWidth ?? 0, O), y(t.chinHeight ?? 0, W), c -= n.height * (t.scalpHeight ?? 0) * a * C * 0.3, u -= (t.midfaceDepth ?? 0) * a * E * 0.08, u += (t.cheekHollowness ?? 0) * a * A * 0.06, u -= (t.browDepth ?? 0) * a * v * 0.05, c -= n.height * (t.browHeight ?? 0) * a * v * 0.2, f += Math.sign(o || 1) * n.width * (t.browDistance ?? 0) * a * v * 0.16;
266
- const T = (t.headCurve ?? 0) * a * (s + 0.1);
267
- u -= T * T * 0.04 * Math.sign(t.headCurve ?? 0), f += n.width * (t.faceTwist ?? 0) * a * s * 0.18;
268
- const z = (t.faceSwirl ?? 0) * a * 0.22;
269
- f += -s * n.width * z, c += o * n.height * z;
270
- const X = o < 0 ? t.leftEyeSize ?? 0 : t.rightEyeSize ?? 0, L = ((t.eyeSize ?? 0) + X) * a * d;
271
- f += o * n.width * L * 0.45, c += (s + 0.24) * n.height * L * 0.7, f += Math.sign(o || 1) * n.width * (t.eyeDistance ?? 0) * a * d * 0.2, f += n.width * (o < 0 ? t.leftEyeX ?? 0 : t.rightEyeX ?? 0) * a * d * 0.15, c += n.height * (o < 0 ? t.leftEyeY ?? 0 : t.rightEyeY ?? 0) * a * d * 0.15;
272
- const j = (t.noseSize ?? 0) * a * S;
273
- return f += o * n.width * j * 0.7, c += (s - 0.02) * n.height * j * 0.5, c += n.height * (t.noseLength ?? 0) * a * S * Math.max(s + 0.08, 0) * 0.4, u -= (t.noseSize ?? 0) * a * S * 0.08, f += o * n.width * (t.mouthWidth ?? 0) * a * _, c += (s - 0.29) * n.height * (t.mouthHeight ?? 0) * a * _, r.x = f, r.y = c, r.z = u, r;
274
- }, Me = /* @__PURE__ */ new Set([
275
- 61,
276
- 146,
277
- 91,
278
- 181,
279
- 84,
280
- 17,
281
- 314,
282
- 405,
283
- 321,
284
- 375,
285
- 291,
286
- 78,
287
- 95,
288
- 88,
289
- 178,
290
- 87,
291
- 14,
292
- 317,
293
- 402,
294
- 318,
295
- 324,
296
- 308,
297
- 191,
298
- 80,
299
- 81,
300
- 82,
301
- 13,
302
- 312,
303
- 311,
304
- 310,
305
- 415
306
- ]), Ae = /* @__PURE__ */ new Set([
307
- 33,
308
- 7,
309
- 163,
310
- 144,
311
- 145,
312
- 153,
313
- 154,
314
- 155,
315
- 133,
316
- 173,
317
- 157,
318
- 158,
319
- 159,
320
- 160,
321
- 161,
322
- 246
323
- ]), ve = /* @__PURE__ */ new Set([
324
- 362,
325
- 382,
326
- 381,
327
- 380,
328
- 374,
329
- 373,
330
- 390,
331
- 249,
332
- 263,
333
- 466,
334
- 388,
335
- 387,
336
- 386,
337
- 385,
338
- 384,
339
- 398
340
- ]), on = /* @__PURE__ */ new Set([814, 815, 816, 817, 818, 819, 830, 831, 832, 833]), sn = (e, n, t) => {
341
- const r = Me.has(e) && Me.has(n) && Me.has(t), a = Ae.has(e) && Ae.has(n) && Ae.has(t), o = ve.has(e) && ve.has(n) && ve.has(t);
342
- return r ? "mouth" : a ? "leftEye" : o ? "rightEye" : "base";
343
- }, cn = (e) => {
344
- const n = [], t = [], r = [], a = [], o = [], s = [], i = [];
345
- let C = 0, E = 0;
346
- e.split(`
347
- `).forEach((A) => {
348
- const h = A.trim();
349
- if (!h) return;
350
- if (h.startsWith("v ")) {
351
- C += 1;
352
- return;
353
- }
354
- if (h.startsWith("vt ")) {
355
- const [, c, u] = h.split(/\s+/);
356
- s.push([Number(c), Number(u)]);
357
- return;
358
- }
359
- if (!h.startsWith("f ")) return;
360
- const v = E;
361
- E += 1;
362
- const [, ...W] = h.split(/\s+/), f = W.map((c) => {
363
- const [u, M] = c.split("/"), y = Number(u) - 1, T = Number(M) - 1;
364
- return T >= 0 && s[T] && !i[y] && (i[y] = s[T]), y;
365
- });
366
- if (!(f.length < 3))
367
- for (let c = 1; c < f.length - 1; c += 1) {
368
- const u = f[0], M = f[c], y = f[c + 1], T = sn(u, M, y);
369
- on.has(v) ? o.push(u, M, y) : T === "mouth" ? t.push(u, M, y) : T === "leftEye" ? r.push(u, M, y) : T === "rightEye" ? a.push(u, M, y) : n.push(u, M, y);
370
- }
371
- });
372
- const d = [];
373
- for (let A = 0; A < C; A += 1) {
374
- const [h, v] = i[A] ?? [0, 0];
375
- d.push(h, v);
376
- }
377
- const S = new Uint16Array(r), _ = new Uint16Array(a), O = new Uint16Array(r.length + a.length);
378
- return O.set(S), O.set(_, S.length), {
379
- baseIndices: new Uint16Array(n),
380
- mouthIndices: new Uint16Array(t),
381
- leftEyeIndices: S,
382
- rightEyeIndices: _,
383
- eyeIndices: O,
384
- noseIndices: new Uint16Array(o),
385
- uvs: new Float32Array(d),
386
- vertexCount: C
387
- };
388
- }, ln = "canonical_face_model.obj", dn = new TextDecoder("utf-8"), xe = /* @__PURE__ */ new Map(), fn = (e) => {
389
- const n = xe.get(e);
390
- if (n) return n;
391
- const t = zt(e).then((r) => cn(dn.decode(r))).catch((r) => {
392
- throw xe.delete(e), r;
393
- });
394
- return xe.set(e, t), t;
395
- }, un = (e) => {
396
- const { mesh: n, url: t } = e ?? {}, r = t ?? `${ne.sdkAssetsBaseUrl}/${ln}`, [a, o] = We(n ?? null);
397
- return Te(() => {
398
- if (n) {
399
- o(n);
400
- return;
401
- }
402
- let s = !1;
403
- return fn(r).then((i) => {
404
- s || o(i);
405
- }).catch((i) => {
406
- s || console.error(`${ne.loggerPrefix} canonical face mesh load failed`, i);
407
- }), () => {
408
- s = !0;
409
- };
410
- }, [n, r]), a;
411
- }, x = {
412
- basic: "basic",
413
- standard: "standard",
414
- physical: "physical",
415
- toon: "toon",
416
- normal: "normal",
417
- matcap: "matcap",
418
- wireframe: "wireframe",
419
- shader: "shader"
420
- }, B = {
421
- originalFace: "originalFace",
422
- composite: "composite"
423
- }, V = {
424
- none: "none",
425
- canonical: "canonical",
426
- style2: "style2"
427
- }, Z = {
428
- none: "none",
429
- canonical: "canonical"
430
- }, re = {
431
- solid: "solid",
432
- gradient: "gradient",
433
- imageUrl: "imageUrl",
434
- mediaUrl: "mediaUrl"
435
- }, te = {
436
- front: "front",
437
- back: "back",
438
- double: "double"
439
- }, Ye = {
440
- normal: "normal",
441
- add: "add",
442
- subtract: "subtract",
443
- multiply: "multiply",
444
- screen: "screen",
445
- overlay: "overlay",
446
- softLight: "softLight",
447
- hardLight: "hardLight",
448
- lighten: "lighten",
449
- darken: "darken",
450
- difference: "difference",
451
- exclusion: "exclusion"
452
- }, hn = {
453
- textureMap: V.canonical,
454
- alphaMap: Z.canonical,
455
- alphaOpacity: 1
456
- }, He = {
457
- ...hn,
458
- blendMode: Ye.hardLight,
459
- blendOpacity: 0.85,
460
- baseColor: "#ffffff",
461
- opacity: 1,
462
- compositeShading: !0
463
- }, I = {
464
- materialType: x.basic,
465
- shaderPreset: B.originalFace,
466
- textureMap: V.none,
467
- alphaMap: Z.none,
468
- alphaOpacity: 1,
469
- side: te.front,
470
- blendMode: Ye.normal,
471
- blendOpacity: 1,
472
- baseColor: "#38bdf8",
473
- opacity: 0.45,
474
- compositeShading: !1
475
- };
476
- x.shader, B.composite, te.front;
477
- const Ee = {
478
- mouth: !0,
479
- eyes: !0,
480
- nose: !0
481
- }, J = {
482
- textureSource: re.solid,
483
- color: "#111111",
484
- opacity: 0.5
485
- }, mn = 24, Ke = 10, Fe = (e, n, t) => e !== x.shader ? "none" : n === B.originalFace ? "originalFace" : n === B.composite ? t === V.none ? "originalFace" : "composite" : "none", Hn = (e, n) => e === x.basic || e === x.standard || e === x.physical || e === x.toon || e === x.shader && n === B.composite, Bn = (e, n, t = V.canonical) => Fe(e, n, t) === "composite", pn = (e, n, t) => Fe(e, n, t) === "originalFace", Ce = (e) => e === re.imageUrl || e === re.mediaUrl, yn = (e) => e === re.solid || e === re.gradient, Be = {
486
- normal: 0,
487
- add: 1,
488
- subtract: 2,
489
- multiply: 3,
490
- screen: 4,
491
- overlay: 5,
492
- softLight: 6,
493
- hardLight: 7,
494
- lighten: 8,
495
- darken: 9,
496
- difference: 10,
497
- exclusion: 11
498
- }, Se = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO2YpZcAAAAASUVORK5CYII=", bn = () => {
499
- const e = new Uint8Array([
500
- 32,
501
- 32,
502
- 32,
503
- 255,
504
- 96,
505
- 96,
506
- 96,
507
- 255,
508
- 176,
509
- 176,
510
- 176,
511
- 255,
512
- 255,
513
- 255,
514
- 255,
515
- 255
516
- ]), n = new g.DataTexture(e, 4, 1, g.RGBAFormat);
517
- return n.minFilter = g.NearestFilter, n.magFilter = g.NearestFilter, n.generateMipmaps = !1, n.needsUpdate = !0, n;
518
- }, gn = () => {
519
- const e = document.createElement("canvas");
520
- e.width = 256, e.height = 256;
521
- const n = e.getContext("2d");
522
- if (!n)
523
- return new g.CanvasTexture(e);
524
- const t = n.createRadialGradient(96, 80, 10, 128, 128, 128);
525
- t.addColorStop(0, "#ffffff"), t.addColorStop(0.18, "#f7d794"), t.addColorStop(0.45, "#d97706"), t.addColorStop(0.72, "#78350f"), t.addColorStop(1, "#120701"), n.fillStyle = t, n.fillRect(0, 0, e.width, e.height);
526
- const r = new g.CanvasTexture(e);
527
- return r.needsUpdate = !0, r;
528
- }, Mn = `
529
- attribute vec2 faceUv;
530
- varying vec2 vUv;
531
- varying vec2 vFaceUv;
532
- varying vec3 vNormal;
533
-
534
- void main() {
535
- vUv = uv;
536
- vFaceUv = faceUv;
537
- vNormal = normalize(normalMatrix * normal);
538
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
539
- }
540
- `, An = `
541
- uniform sampler2D cameraTexture;
542
- uniform sampler2D canonicalTexture;
543
- uniform sampler2D alphaMask;
544
- uniform vec3 textureTint;
545
- uniform float opacity;
546
- uniform int blendMode;
547
- uniform float blendOpacity;
548
- uniform float useCanonicalTexture;
549
- uniform float useAlphaMask;
550
- uniform float alphaOpacity;
551
- uniform float compositeShading;
552
- uniform vec3 lightDirection;
553
- uniform float ambientStrength;
554
- uniform float directionalStrength;
555
- varying vec2 vUv;
556
- varying vec2 vFaceUv;
557
- varying vec3 vNormal;
558
-
559
- vec3 linearToSrgb(vec3 value) {
560
- vec3 low = value * 12.92;
561
- vec3 high = 1.055 * pow(max(value, vec3(0.0)), vec3(1.0 / 2.4)) - 0.055;
562
- return mix(high, low, step(value, vec3(0.0031308)));
563
- }
564
-
565
- vec3 srgbToLinear(vec3 value) {
566
- vec3 low = value / 12.92;
567
- vec3 high = pow(max((value + 0.055) / 1.055, vec3(0.0)), vec3(2.4));
568
- return mix(high, low, step(value, vec3(0.04045)));
569
- }
570
-
571
- float overlayChannel(float base, float blend) {
572
- return base < 0.5 ? 2.0 * base * blend : 1.0 - 2.0 * (1.0 - base) * (1.0 - blend);
573
- }
574
-
575
- float hardLightChannel(float base, float blend) {
576
- return blend < 0.5 ? 2.0 * base * blend : 1.0 - 2.0 * (1.0 - base) * (1.0 - blend);
577
- }
578
-
579
- float softLightChannel(float base, float blend) {
580
- if (blend <= 0.5) {
581
- return base - (1.0 - 2.0 * blend) * base * (1.0 - base);
582
- }
583
-
584
- float d = base <= 0.25
585
- ? ((16.0 * base - 12.0) * base + 4.0) * base
586
- : sqrt(base);
587
-
588
- return base + (2.0 * blend - 1.0) * (d - base);
589
- }
590
-
591
- vec3 applyBlendMode(vec3 base, vec3 blend, int mode) {
592
- if (mode == 0) return blend;
593
- if (mode == 1) return min(base + blend, 1.0);
594
- if (mode == 2) return max(base - blend, 0.0);
595
- if (mode == 3) return base * blend;
596
- if (mode == 4) return 1.0 - (1.0 - base) * (1.0 - blend);
597
- if (mode == 5) {
598
- return vec3(
599
- overlayChannel(base.r, blend.r),
600
- overlayChannel(base.g, blend.g),
601
- overlayChannel(base.b, blend.b)
602
- );
603
- }
604
- if (mode == 6) {
605
- return vec3(
606
- softLightChannel(base.r, blend.r),
607
- softLightChannel(base.g, blend.g),
608
- softLightChannel(base.b, blend.b)
609
- );
610
- }
611
- if (mode == 7) {
612
- return vec3(
613
- hardLightChannel(base.r, blend.r),
614
- hardLightChannel(base.g, blend.g),
615
- hardLightChannel(base.b, blend.b)
616
- );
617
- }
618
- if (mode == 8) return max(base, blend);
619
- if (mode == 9) return min(base, blend);
620
- if (mode == 10) return abs(base - blend);
621
- return base + blend - 2.0 * base * blend;
622
- }
623
-
624
- void main() {
625
- vec3 base = linearToSrgb(texture2D(cameraTexture, vFaceUv).rgb);
626
- vec4 textureSample = texture2D(canonicalTexture, vUv);
627
- vec3 blend = linearToSrgb(textureSample.rgb) * textureTint;
628
- float light = ambientStrength + max(dot(normalize(vNormal), normalize(lightDirection)), 0.0) * directionalStrength;
629
- blend *= mix(1.0, clamp(light, 0.35, 1.35), compositeShading);
630
- float maskSample = texture2D(alphaMask, vUv).r;
631
- float mask = useAlphaMask > 0.5 ? mix(1.0, maskSample, alphaOpacity) : 1.0;
632
- float textureAlpha = useCanonicalTexture > 0.5 ? textureSample.a : 1.0;
633
- vec3 blended = applyBlendMode(base, blend, blendMode);
634
- vec3 color = useCanonicalTexture > 0.5 ? mix(base, blended, blendOpacity) : base;
635
- gl_FragColor = vec4(srgbToLinear(color), opacity * mask * textureAlpha);
636
- }
637
- `, vn = ({
638
- alphaMap: e,
639
- alphaOpacity: n,
640
- blendMode: t,
641
- blendOpacity: r,
642
- cameraTexture: a,
643
- color: o,
644
- compositeShading: s,
645
- faceAlphaMaskUrl: i,
646
- faceTextureStyle2Url: C,
647
- faceTextureUrl: E,
648
- masked: d = !1,
649
- maskColor: S,
650
- maskOpacity: _,
651
- maskSourceUrl: O,
652
- maskTextureSource: A,
653
- materialType: h,
654
- opacity: v,
655
- shaderPreset: W,
656
- side: f,
657
- textureMap: c
658
- }) => {
659
- const u = ce(
660
- g.TextureLoader,
661
- E || Se
662
- ), M = ce(
663
- g.TextureLoader,
664
- C || E || Se
665
- ), y = ce(
666
- g.TextureLoader,
667
- i || Se
668
- ), T = q(() => bn(), []), z = q(() => gn(), []);
669
- Te(
670
- () => () => {
671
- T.dispose(), z.dispose();
672
- },
673
- [z, T]
674
- );
675
- const X = c === V.style2 ? M : u, L = c !== V.none, j = Fe(h, W, c), Y = [
676
- "composite-material",
677
- c,
678
- e,
679
- n,
680
- t,
681
- r,
682
- s ? "lit" : "flat",
683
- o,
684
- v,
685
- E,
686
- C,
687
- i
688
- ].join("|"), w = {
689
- side: f,
690
- transparent: !0,
691
- opacity: v,
692
- wireframe: !1
693
- }, le = q(
694
- () => ({
695
- source: Ce(A) ? "texture" : A,
696
- color: yn(A) ? S : "#ffffff",
697
- opacity: _,
698
- textureUrl: Ce(A) ? O : "",
699
- gradient: je(S)
700
- }),
701
- [S, _, O, A]
702
- ), R = q(
703
- () => ({
704
- cameraTexture: { value: null },
705
- canonicalTexture: { value: null },
706
- alphaMask: { value: null },
707
- textureTint: { value: new g.Color(o) },
708
- opacity: { value: v },
709
- blendMode: { value: Be[t] },
710
- blendOpacity: { value: r },
711
- useCanonicalTexture: { value: L ? 1 : 0 },
712
- useAlphaMask: { value: e === Z.canonical ? 1 : 0 },
713
- alphaOpacity: { value: n },
714
- compositeShading: { value: s ? 1 : 0 },
715
- lightDirection: { value: new g.Vector3(0.3, 0.65, 0.7).normalize() },
716
- ambientStrength: { value: 0.78 },
717
- directionalStrength: { value: 0.38 }
718
- }),
719
- [
720
- e,
721
- n,
722
- t,
723
- r,
724
- o,
725
- s,
726
- L,
727
- v
728
- ]
729
- );
730
- if (Te(() => {
731
- R.cameraTexture.value = a ?? u, R.canonicalTexture.value = X, R.alphaMask.value = y, R.textureTint.value.set(o), R.opacity.value = v, R.blendMode.value = Be[t], R.blendOpacity.value = r, R.useCanonicalTexture.value = L ? 1 : 0, R.useAlphaMask.value = e === Z.canonical ? 1 : 0, R.alphaOpacity.value = n, R.compositeShading.value = s ? 1 : 0;
732
- }, [
733
- e,
734
- y,
735
- n,
736
- t,
737
- r,
738
- a,
739
- o,
740
- s,
741
- R,
742
- u,
743
- L,
744
- v,
745
- X
746
- ]), d)
747
- return /* @__PURE__ */ p(
748
- tn,
749
- {
750
- settings: le,
751
- side: f
752
- },
753
- `masked-${A}-material`
754
- );
755
- if (h === x.wireframe)
756
- return /* @__PURE__ */ p(
757
- "meshBasicMaterial",
758
- {
759
- color: o,
760
- transparent: !0,
761
- opacity: v,
762
- side: f,
763
- depthWrite: !1,
764
- depthTest: !1,
765
- wireframe: !0,
766
- toneMapped: !1
767
- },
768
- "wireframe-material"
769
- );
770
- if (j === "originalFace" && a)
771
- return /* @__PURE__ */ p(
772
- "meshBasicMaterial",
773
- {
774
- map: a,
775
- alphaMap: y,
776
- transparent: !0,
777
- opacity: v,
778
- side: f,
779
- depthWrite: !1,
780
- depthTest: !0,
781
- toneMapped: !1
782
- },
783
- "use-original-face-material"
784
- );
785
- if (j === "composite" && a)
786
- return /* @__PURE__ */ p(
787
- "shaderMaterial",
788
- {
789
- uniforms: R,
790
- vertexShader: Mn,
791
- fragmentShader: An,
792
- transparent: !0,
793
- side: f,
794
- depthWrite: !1,
795
- depthTest: !0,
796
- toneMapped: !1
797
- },
798
- Y
799
- );
800
- const N = L ? X : null, $ = e === Z.canonical && n > 0 ? y : null, H = `${h}-${c}-${e}-${n > 0 ? "alpha-on" : "alpha-off"}`;
801
- return h === x.standard ? /* @__PURE__ */ p(
802
- "meshStandardMaterial",
803
- {
804
- ...w,
805
- color: o,
806
- map: N ?? void 0,
807
- alphaMap: $ ?? void 0,
808
- depthWrite: !0,
809
- depthTest: !0,
810
- metalness: 0.05,
811
- roughness: 0.72
812
- },
813
- H
814
- ) : h === x.physical ? /* @__PURE__ */ p(
815
- "meshPhysicalMaterial",
816
- {
817
- ...w,
818
- color: o,
819
- map: N ?? void 0,
820
- alphaMap: $ ?? void 0,
821
- depthWrite: !0,
822
- depthTest: !0,
823
- roughness: 0.58,
824
- metalness: 0.08,
825
- clearcoat: 0.35,
826
- clearcoatRoughness: 0.4
827
- },
828
- H
829
- ) : h === x.toon ? /* @__PURE__ */ p(
830
- "meshToonMaterial",
831
- {
832
- ...w,
833
- color: o,
834
- map: N ?? void 0,
835
- alphaMap: $ ?? void 0,
836
- gradientMap: T,
837
- depthWrite: !0,
838
- depthTest: !0
839
- },
840
- H
841
- ) : h === x.normal ? /* @__PURE__ */ p(
842
- "meshNormalMaterial",
843
- {
844
- ...w,
845
- depthWrite: !0,
846
- depthTest: !0,
847
- flatShading: !1
848
- },
849
- "normal-material"
850
- ) : h === x.matcap ? /* @__PURE__ */ p(
851
- "meshMatcapMaterial",
852
- {
853
- ...w,
854
- color: o,
855
- matcap: z,
856
- depthWrite: !0,
857
- depthTest: !0
858
- },
859
- "matcap-material"
860
- ) : /* @__PURE__ */ p(
861
- "meshBasicMaterial",
862
- {
863
- ...w,
864
- color: o,
865
- map: N ?? void 0,
866
- alphaMap: $ ?? void 0,
867
- depthWrite: !1,
868
- depthTest: c !== V.none || e !== Z.none,
869
- toneMapped: !1
870
- },
871
- H
872
- );
873
- }, xn = [
874
- {
875
- key: "base",
876
- getIndices: (e) => e.baseIndices,
877
- masked: !1,
878
- renderOrderOffset: 0
879
- },
880
- {
881
- key: "mouth",
882
- getIndices: (e) => e.mouthIndices,
883
- masked: !1,
884
- renderOrderOffset: 2
885
- },
886
- {
887
- key: "left-eye",
888
- getIndices: (e) => e.leftEyeIndices,
889
- masked: !1,
890
- renderOrderOffset: 2
891
- },
892
- {
893
- key: "right-eye",
894
- getIndices: (e) => e.rightEyeIndices,
895
- masked: !1,
896
- renderOrderOffset: 2
897
- },
898
- {
899
- key: "nose",
900
- getIndices: (e) => e.noseIndices,
901
- masked: !1,
902
- renderOrderOffset: 2
903
- },
904
- {
905
- key: "mouth-mask",
906
- getIndices: (e) => e.mouthIndices,
907
- masked: !0,
908
- renderOrderOffset: 3
909
- },
910
- {
911
- key: "left-eye-mask",
912
- getIndices: (e) => e.leftEyeIndices,
913
- masked: !0,
914
- renderOrderOffset: 3
915
- },
916
- {
917
- key: "right-eye-mask",
918
- getIndices: (e) => e.rightEyeIndices,
919
- masked: !0,
920
- renderOrderOffset: 3
921
- },
922
- {
923
- key: "nose-mask",
924
- getIndices: (e) => e.noseIndices,
925
- masked: !0,
926
- renderOrderOffset: 3
927
- }
928
- ], En = {
929
- [te.front]: g.FrontSide,
930
- [te.back]: g.BackSide,
931
- [te.double]: g.DoubleSide
932
- }, Sn = (e, n, t) => {
933
- e.setAttribute("position", n.position), e.setAttribute("uv", n.uv), e.setAttribute("faceUv", n.faceUv), e.setIndex(new g.BufferAttribute(t, 1));
934
- }, Tn = ({
935
- faceIndex: e = 0,
936
- baseColor: n,
937
- color: t = I.baseColor,
938
- opacity: r = I.opacity,
939
- materialType: a = I.materialType,
940
- shaderPreset: o = I.shaderPreset,
941
- textureMap: s = I.textureMap,
942
- alphaMap: i = I.alphaMap,
943
- alphaOpacity: C = I.alphaOpacity,
944
- side: E = I.side,
945
- blendMode: d = I.blendMode,
946
- blendOpacity: S = I.blendOpacity,
947
- showOverlayMask: _ = !1,
948
- showMouthMask: O = Ee.mouth,
949
- showEyeMask: A = Ee.eyes,
950
- showLeftEyeMask: h,
951
- showRightEyeMask: v,
952
- showNoseMask: W = Ee.nose,
953
- showEyeGeometry: f = !0,
954
- showLeftEyeGeometry: c,
955
- showRightEyeGeometry: u,
956
- showMouthGeometry: M = !0,
957
- showNoseGeometry: y = !0,
958
- maskTextureSource: T = J.textureSource,
959
- maskSourceUrl: z = "",
960
- maskColor: X = J.color,
961
- maskOpacity: L = J.opacity,
962
- faceTextureUrl: j = "",
963
- faceTextureStyle2Url: Y = "",
964
- faceAlphaMaskUrl: w = "",
965
- compositeShading: le = !1,
966
- faceWarp3D: R,
967
- transform: N,
968
- renderOrder: $ = Ke,
969
- externalScale: H = 1,
970
- mesh: $e,
971
- meshUrl: Qe
972
- }) => {
973
- const de = Ht(Nt.FACE_TRACKER), qe = Bt(), { camera: Ze } = Dt(), D = un({ mesh: $e, url: Qe }), ke = l(null), Je = l(null), et = l(null), tt = l(null), nt = l(null), rt = l(null), at = l(null), ot = l(null), st = l(null), it = l(null), ct = l(null), lt = l(null), dt = l(null), ft = l(null), ut = l(null), ht = l(null), mt = l(null), pt = l(null), fe = l(null), ue = l(null), he = l(null), we = l(null), yt = l(new g.Vector3()), bt = l({ x: 0, y: 0, z: 0 }), gt = l({ x: 0, y: 0, z: 0 }), Mt = l({ x: 0, y: 0, z: 0 }), ae = l(!1), At = En[E], vt = n ?? t, xt = c ?? f, Et = u ?? f, St = _ || (h ?? A), Tt = _ || (v ?? A), Rt = _ || O, Ct = _ || W, _t = {
974
- base: ke,
975
- mouth: Je,
976
- "left-eye": et,
977
- "right-eye": tt,
978
- nose: nt,
979
- "mouth-mask": rt,
980
- "left-eye-mask": at,
981
- "right-eye-mask": ot,
982
- "nose-mask": st
983
- }, Ft = {
984
- base: it,
985
- mouth: ct,
986
- "left-eye": lt,
987
- "right-eye": dt,
988
- nose: ft,
989
- "mouth-mask": ut,
990
- "left-eye-mask": ht,
991
- "right-eye-mask": mt,
992
- "nose-mask": pt
993
- }, kt = {
994
- base: !0,
995
- mouth: M,
996
- "left-eye": xt,
997
- "right-eye": Et,
998
- nose: y,
999
- "mouth-mask": Rt,
1000
- "left-eye-mask": St,
1001
- "right-eye-mask": Tt,
1002
- "nose-mask": Ct
1003
- }, wt = (b) => /* @__PURE__ */ p(
1004
- vn,
1005
- {
1006
- alphaMap: i,
1007
- alphaOpacity: C,
1008
- blendMode: d,
1009
- blendOpacity: S,
1010
- cameraTexture: qe,
1011
- color: vt,
1012
- compositeShading: le,
1013
- faceAlphaMaskUrl: w,
1014
- faceTextureStyle2Url: Y,
1015
- faceTextureUrl: j,
1016
- masked: b,
1017
- maskColor: X,
1018
- maskOpacity: L,
1019
- maskSourceUrl: z,
1020
- maskTextureSource: T,
1021
- materialType: a,
1022
- opacity: r,
1023
- shaderPreset: o,
1024
- side: At,
1025
- textureMap: s
1026
- }
1027
- ), Q = xn.map(
1028
- (b) => ({
1029
- ...b,
1030
- geometryRef: _t[b.key],
1031
- meshRef: Ft[b.key],
1032
- visible: kt[b.key]
1033
- })
1034
- ), Ut = (b) => Wt(b, Ze, yt.current);
1035
- return Pt(() => {
1036
- var Le, De;
1037
- const b = ke.current, P = (De = (Le = de == null ? void 0 : de.detectionResults) == null ? void 0 : Le.faceLandmarks) == null ? void 0 : De[e], It = Q.every(
1038
- (m) => m.geometryRef.current && m.meshRef.current
1039
- );
1040
- if (!D || !b || !It) return;
1041
- if (!P || P.length < D.vertexCount) {
1042
- Q.forEach((m) => {
1043
- m.meshRef.current.visible = !1;
1044
- });
1045
- return;
1046
- }
1047
- if (we.current !== D) {
1048
- fe.current = new Float32Array(D.vertexCount * 3), ue.current = new Float32Array(D.uvs), he.current = new Float32Array(D.vertexCount * 2);
1049
- const m = {
1050
- position: new g.BufferAttribute(fe.current, 3),
1051
- uv: new g.BufferAttribute(ue.current, 2),
1052
- faceUv: new g.BufferAttribute(he.current, 2)
1053
- };
1054
- Q.forEach((F) => {
1055
- Sn(F.geometryRef.current, m, F.getIndices(D));
1056
- }), m.uv.needsUpdate = !0, we.current = D, ae.current = !1;
1057
- }
1058
- const oe = fe.current, me = he.current, se = ue.current;
1059
- if (!oe || !me || !se) return;
1060
- const Ue = pn(a, o, s), Ie = rn(R), Oe = Ie ? nn(P) : null, U = N ? Mt.current : null;
1061
- if (U) {
1062
- U.x = 0, U.y = 0, U.z = 0;
1063
- for (let m = 0; m < P.length; m++) {
1064
- const F = P[m];
1065
- U.x += F.x, U.y += F.y, U.z += F.z;
1066
- }
1067
- U.x /= P.length, U.y /= P.length, U.z /= P.length;
1068
- }
1069
- const Ot = Math.min(P.length, D.vertexCount);
1070
- for (let m = 0; m < Ot; m++) {
1071
- const F = P[m], Pe = Ie && Oe ? an(F, Oe, R, bt.current) : F, Lt = N && U ? Vt(
1072
- Pe,
1073
- U,
1074
- N,
1075
- gt.current
1076
- ) : Pe, pe = m * 3, ie = m * 2, ye = Ut(Lt);
1077
- oe[pe] = ye.x, oe[pe + 1] = ye.y, oe[pe + 2] = ye.z, me[ie] = F.x, me[ie + 1] = 1 - F.y, Ue && (se[ie] = F.x, se[ie + 1] = 1 - F.y);
1078
- }
1079
- Ue ? (b.attributes.uv.needsUpdate = !0, ae.current = !0) : ae.current && (se.set(D.uvs), b.attributes.uv.needsUpdate = !0, ae.current = !1), Q.forEach((m) => {
1080
- m.meshRef.current.visible = m.visible;
1081
- }), b.attributes.position.needsUpdate = !0, b.attributes.faceUv.needsUpdate = !0, Q.forEach((m) => {
1082
- m.geometryRef.current.computeVertexNormals();
1083
- });
1084
- }), /* @__PURE__ */ p("group", { scale: [H, H, H], children: Q.map((b) => /* @__PURE__ */ _e(
1085
- "mesh",
1086
- {
1087
- ref: b.meshRef,
1088
- renderOrder: $ + b.renderOrderOffset,
1089
- frustumCulled: !1,
1090
- children: [
1091
- /* @__PURE__ */ p("bufferGeometry", { ref: b.geometryRef }),
1092
- wt(b.masked)
1093
- ]
1094
- },
1095
- b.key
1096
- )) });
1097
- }, Rn = `${ne.sdkAssetsBaseUrl}/Canonical_Face_Color.png`, Cn = `${ne.sdkAssetsBaseUrl}/Canonical_Face_Color_style_2.png`, _n = `${ne.sdkAssetsBaseUrl}/Canonical_Face_Color_Mask.png`, Fn = {
1098
- ...Ne,
1099
- position: { ...Ne.position, y: 1e-3 }
1100
- }, Vn = {
1101
- enabled: !0,
1102
- faceIndex: 0,
1103
- targetFps: mn,
1104
- ...I,
1105
- showLeftEyeGeometry: !0,
1106
- showRightEyeGeometry: !0,
1107
- showMouthGeometry: !0,
1108
- showNoseGeometry: !0,
1109
- externalScale: 1,
1110
- showOverlayMask: !1,
1111
- showMouthMask: !1,
1112
- showLeftEyeMask: !1,
1113
- showRightEyeMask: !1,
1114
- showNoseMask: !1,
1115
- maskTextureSource: J.textureSource,
1116
- maskSourceUrl: "",
1117
- maskColor: J.color,
1118
- maskOpacity: J.opacity,
1119
- faceTextureUrl: Rn,
1120
- faceTextureStyle2Url: Cn,
1121
- faceAlphaMaskUrl: _n,
1122
- renderOrder: Ke
1123
- }, kn = (e) => {
1124
- const { externalMeshUrl: n, ...t } = e;
1125
- return { ...t, color: t.baseColor, meshUrl: n };
1126
- }, Wn = (e, n) => {
1127
- const t = { ...e, ...n };
1128
- return n.maskTextureSource && !Ce(n.maskTextureSource) && (t.maskSourceUrl = ""), t.materialType === x.shader && n.shaderPreset === B.composite ? {
1129
- ...t,
1130
- ...He,
1131
- materialType: x.shader,
1132
- shaderPreset: B.composite
1133
- } : t.materialType === x.shader && t.shaderPreset === B.composite && t.textureMap === V.none ? {
1134
- ...t,
1135
- textureMap: He.textureMap
1136
- } : t;
1137
- }, Xn = ({
1138
- transform: e,
1139
- value: n
1140
- }) => n.enabled ? /* @__PURE__ */ _e(Ve, { children: [
1141
- /* @__PURE__ */ p(
1142
- Xt,
1143
- {
1144
- active: n.enabled,
1145
- faceIndex: n.faceIndex,
1146
- numFaces: n.faceIndex + 1,
1147
- targetFps: n.targetFps
1148
- }
1149
- ),
1150
- /* @__PURE__ */ p(
1151
- Tn,
1152
- {
1153
- ...kn(n),
1154
- transform: e ?? Fn
1155
- }
1156
- )
1157
- ] }) : null;
1158
- export {
1159
- Ne as A,
1160
- Re as B,
1161
- Tn as C,
1162
- I as D,
1163
- yn as E,
1164
- Z as F,
1165
- Ce as G,
1166
- tn as M,
1167
- Zt as S,
1168
- Nn as T,
1169
- Vn as a,
1170
- Be as b,
1171
- Fn as c,
1172
- Ee as d,
1173
- Ye as e,
1174
- re as f,
1175
- x as g,
1176
- B as h,
1177
- te as i,
1178
- V as j,
1179
- Bn as k,
1180
- vn as l,
1181
- Xn as m,
1182
- _n as n,
1183
- Cn as o,
1184
- Rn as p,
1185
- xn as q,
1186
- kn as r,
1187
- Hn as s,
1188
- Wn as t,
1189
- un as u,
1190
- cn as v,
1191
- K as w,
1192
- Kt as x,
1193
- zn as y,
1194
- je as z
1195
- };