@tresjs/cientos 5.7.2 → 5.8.0

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * name: @tresjs/cientos
3
- * version: v5.7.2
3
+ * version: v5.8.0
4
4
  * (c) 2026
5
5
  * description: Collection of useful helpers and fully functional, ready-made abstractions for Tres
6
6
  * author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
@@ -8,7 +8,7 @@
8
8
  import { Fragment, Suspense, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, isReactive, isRef, mergeDefaults, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onUnmounted, openBlock, provide, reactive, ref, render, renderList, renderSlot, shallowReactive, shallowRef, toDisplayString, toRaw, toRefs, toValue, triggerRef, unref, useAttrs, useSlots, useTemplateRef, vShow, watch, watchEffect, withAsyncContext, withCtx, withDirectives, withModifiers } from "vue";
9
9
  import { buildGraph, createTimer, extend, isObject3D, logError, logWarning, normalizeColor, normalizeVectorFlexibleParam, useLoader, useLoop, useTres, useTresContext } from "@tresjs/core";
10
10
  import * as THREE from "three";
11
- import { AdditiveBlending, AlwaysStencilFunc, AnimationMixer, Audio, AudioListener, AudioLoader, BackSide, Box2, Box3, BoxGeometry, BufferAttribute, BufferGeometry, Camera, CatmullRomCurve3, ClampToEdgeWrapping, Color, CubeCamera, CubeReflectionMapping, CubeTextureLoader, CubicBezierCurve3, DataTexture, DefaultLoadingManager, DepthTexture, DirectionalLight, DoubleSide, EdgesGeometry, EqualStencilFunc, EquirectangularReflectionMapping, Euler, FloatType, FramebufferTexture, FrontSide, Group, HalfFloatType, IcosahedronGeometry, InstancedMesh, InterleavedBuffer, InterleavedBufferAttribute, KeepStencilOp, LOD, LinearFilter, MOUSE, MathUtils, Matrix4, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshLambertMaterial, MeshStandardMaterial, NearestFilter, NoBlending, NotEqualStencilFunc, Object3D, OrthographicCamera, PerspectiveCamera, Plane, PlaneGeometry, Points, PointsMaterial, QuadraticBezierCurve3, Quaternion, REVISION, RGBAFormat, RawShaderMaterial, Raycaster, RepeatWrapping, ReplaceStencilOp, Scene, ShaderChunk, ShaderMaterial, ShapeGeometry, SkinnedMesh, Sphere, Spherical, TOUCH, TangentSpaceNormalMap, Texture, TextureLoader, UVMapping, Uniform, UniformsUtils, UnsignedByteType, Vector2, Vector3, Vector4, VideoTexture, WebGLCubeRenderTarget, WebGLRenderTarget, WebGLRenderer } from "three";
11
+ import { AdditiveBlending, AlwaysStencilFunc, AnimationMixer, Audio, AudioListener, AudioLoader, BackSide, Box2, Box3, BoxGeometry, BufferAttribute, BufferGeometry, Camera, CatmullRomCurve3, ClampToEdgeWrapping, Color, CubeCamera, CubeReflectionMapping, CubeTextureLoader, CubicBezierCurve3, DataTexture, DefaultLoadingManager, DepthTexture, DirectionalLight, DoubleSide, EdgesGeometry, EqualStencilFunc, EquirectangularReflectionMapping, Euler, FloatType, FramebufferTexture, FrontSide, Group, HalfFloatType, IcosahedronGeometry, InstancedMesh, InterleavedBuffer, InterleavedBufferAttribute, KeepStencilOp, LOD, LinearFilter, MOUSE, MathUtils, Matrix4, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshLambertMaterial, MeshPhysicalMaterial, MeshStandardMaterial, NearestFilter, NoBlending, NoToneMapping, NotEqualStencilFunc, Object3D, OrthographicCamera, PerspectiveCamera, Plane, PlaneGeometry, Points, PointsMaterial, QuadraticBezierCurve3, Quaternion, REVISION, RGBAFormat, RawShaderMaterial, Raycaster, RepeatWrapping, ReplaceStencilOp, Scene, ShaderChunk, ShaderMaterial, ShapeGeometry, SkinnedMesh, Sphere, Spherical, TOUCH, TangentSpaceNormalMap, Texture, TextureLoader, UVMapping, Uniform, UniformsUtils, UnsignedByteType, Vector2, Vector3, Vector4, VideoTexture, WebGLCubeRenderTarget, WebGLRenderTarget, WebGLRenderer } from "three";
12
12
  import { onKeyStroke, tryOnScopeDispose, useDebounceFn, useDraggable, useElementSize, useEventListener, useMagicKeys, useMouse, useResizeObserver, useScroll, useWindowScroll, useWindowSize, watchThrottled, whenever } from "@vueuse/core";
13
13
  import { DRACOLoader, DecalGeometry, FBXLoader, FontLoader, GLTFExporter, GLTFLoader, HorizontalBlurShader, Line2, LineGeometry, LineMaterial, MapControls, MarchingCubes, MeshSurfaceSampler, OrbitControls, PointerLockControls, PositionalAudioHelper, RGBELoader, Reflector, RoundedBoxGeometry, SVGLoader, SimplexNoise, Sky, TextGeometry, TransformControls, VerticalBlurShader, Water, toCreasedNormals } from "three-stdlib";
14
14
  import BaseCameraControls, { default as CameraControls } from "camera-controls";
@@ -1162,7 +1162,7 @@ function useDecalEditor() {
1162
1162
 
1163
1163
  //#endregion
1164
1164
  //#region src/core/abstractions/Decal/DecalItem.vue?vue&type=script&setup=true&lang.ts
1165
- const _hoisted_1$62 = [
1165
+ const _hoisted_1$63 = [
1166
1166
  "name",
1167
1167
  "render-order",
1168
1168
  "material-polygonOffsetFactor"
@@ -1389,7 +1389,7 @@ var DecalItem_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
1389
1389
  color: __props.edgeColor,
1390
1390
  "depth-test": false,
1391
1391
  transparent: true
1392
- }, null, 8, _hoisted_3$9)], 8, _hoisted_2$31)) : createCommentVNode("v-if", true)], 40, _hoisted_1$62);
1392
+ }, null, 8, _hoisted_3$9)], 8, _hoisted_2$31)) : createCommentVNode("v-if", true)], 40, _hoisted_1$63);
1393
1393
  };
1394
1394
  }
1395
1395
  });
@@ -1400,7 +1400,7 @@ var DecalItem_default = DecalItem_vue_vue_type_script_setup_true_lang_default;
1400
1400
 
1401
1401
  //#endregion
1402
1402
  //#region src/core/abstractions/Decal/DecalEditor.vue?vue&type=script&setup=true&lang.ts
1403
- const _hoisted_1$61 = ["visible"];
1403
+ const _hoisted_1$62 = ["visible"];
1404
1404
  const DRAG_THRESHOLD_SQ = 25;
1405
1405
  var DecalEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1406
1406
  __name: "DecalEditor",
@@ -1683,7 +1683,7 @@ var DecalEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
1683
1683
  color: "#0000ff",
1684
1684
  "depth-test": false,
1685
1685
  transparent: true
1686
- }, null, -1)])], 8, _hoisted_1$61), renderSlot(_ctx.$slots, "default")], 64);
1686
+ }, null, -1)])], 8, _hoisted_1$62), renderSlot(_ctx.$slots, "default")], 64);
1687
1687
  };
1688
1688
  }
1689
1689
  });
@@ -2141,7 +2141,7 @@ function getTextureLabel(tex) {
2141
2141
 
2142
2142
  //#endregion
2143
2143
  //#region src/core/abstractions/Decal/DebugUI/Handle.vue?vue&type=script&setup=true&lang.ts
2144
- const _hoisted_1$60 = {
2144
+ const _hoisted_1$61 = {
2145
2145
  class: "snap-vignette",
2146
2146
  "aria-hidden": "true"
2147
2147
  };
@@ -2340,7 +2340,7 @@ var Handle_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
2340
2340
  style: normalizeStyle(innerStyle.value),
2341
2341
  class: "handle-inner"
2342
2342
  }, [
2343
- withDirectives(createElementVNode("div", _hoisted_1$60, null, 512), [[vShow, unref(isSnapEnabled)]]),
2343
+ withDirectives(createElementVNode("div", _hoisted_1$61, null, 512), [[vShow, unref(isSnapEnabled)]]),
2344
2344
  withDirectives((openBlock(), createElementBlock("svg", _hoisted_2$30, [(openBlock(true), createElementBlock(Fragment, null, renderList(snapTicks.value, (angle, i) => {
2345
2345
  return openBlock(), createElementBlock("g", {
2346
2346
  key: i,
@@ -2378,7 +2378,7 @@ var Handle_default = Handle_vue_vue_type_script_setup_true_lang_default;
2378
2378
 
2379
2379
  //#endregion
2380
2380
  //#region src/core/abstractions/Decal/DebugUI/Dock.vue?vue&type=script&setup=true&lang.ts
2381
- const _hoisted_1$59 = {
2381
+ const _hoisted_1$60 = {
2382
2382
  key: 0,
2383
2383
  class: "dock"
2384
2384
  };
@@ -2555,7 +2555,7 @@ var Dock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCom
2555
2555
  return openBlock(), createElementBlock("div", { class: normalizeClass(["dock-stack", isVisible.value ? "is-visible" : ""]) }, [
2556
2556
  createCommentVNode(" Top row: edit-only tools, slides in/out as edits start/end. "),
2557
2557
  createVNode(Transition, { name: "edit-dock" }, {
2558
- default: withCtx(() => [isEditing.value && !isDraggingTexture.value ? (openBlock(), createElementBlock("div", _hoisted_1$59, [
2558
+ default: withCtx(() => [isEditing.value && !isDraggingTexture.value ? (openBlock(), createElementBlock("div", _hoisted_1$60, [
2559
2559
  createElementVNode("button", {
2560
2560
  class: normalizeClass(["icon-btn", { "is-active": unref(isSnapEnabled) }]),
2561
2561
  title: "Snap rotation (15°)",
@@ -2925,7 +2925,7 @@ var Dock_default = Dock_vue_vue_type_script_setup_true_lang_default;
2925
2925
 
2926
2926
  //#endregion
2927
2927
  //#region src/core/abstractions/Decal/DebugUI/LayerList.vue?vue&type=script&setup=true&lang.ts
2928
- const _hoisted_1$58 = { class: "dock decal-list" };
2928
+ const _hoisted_1$59 = { class: "dock decal-list" };
2929
2929
  const _hoisted_2$28 = { class: "list-header" };
2930
2930
  const _hoisted_3$6 = { class: "list-header__count" };
2931
2931
  const _hoisted_4$4 = {
@@ -3095,7 +3095,7 @@ var LayerList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
3095
3095
  dragOverPosition.value = null;
3096
3096
  }
3097
3097
  return (_ctx, _cache) => {
3098
- return openBlock(), createElementBlock("div", _hoisted_1$58, [
3098
+ return openBlock(), createElementBlock("div", _hoisted_1$59, [
3099
3099
  createElementVNode("header", _hoisted_2$28, [_cache[2] || (_cache[2] = createElementVNode("span", { class: "list-header__title" }, "Layers", -1)), createElementVNode("span", _hoisted_3$6, toDisplayString(totalCount.value), 1)]),
3100
3100
  totalCount.value === 0 ? (openBlock(), createElementBlock("div", _hoisted_4$4, " No decals yet ")) : createCommentVNode("v-if", true),
3101
3101
  (openBlock(true), createElementBlock(Fragment, null, renderList(groups.value, (group) => {
@@ -3386,7 +3386,7 @@ var DecalDebugUI_default = DecalDebugUI_vue_vue_type_script_setup_true_lang_defa
3386
3386
 
3387
3387
  //#endregion
3388
3388
  //#region src/core/abstractions/Edges.vue?vue&type=script&setup=true&lang.ts
3389
- const _hoisted_1$57 = ["color"];
3389
+ const _hoisted_1$58 = ["color"];
3390
3390
  var Edges_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
3391
3391
  __name: "Edges",
3392
3392
  props: {
@@ -3424,7 +3424,7 @@ var Edges_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
3424
3424
  return openBlock(), createElementBlock("TresLineSegments", {
3425
3425
  ref_key: "lineSegmentsRef",
3426
3426
  ref: lineSegmentsRef
3427
- }, [renderSlot(_ctx.$slots, "default", {}, () => [createElementVNode("TresLineBasicMaterial", { color: unref(color) }, null, 8, _hoisted_1$57)])], 512);
3427
+ }, [renderSlot(_ctx.$slots, "default", {}, () => [createElementVNode("TresLineBasicMaterial", { color: unref(color) }, null, 8, _hoisted_1$58)])], 512);
3428
3428
  };
3429
3429
  }
3430
3430
  });
@@ -3598,7 +3598,7 @@ var Levioso_default = Levioso_vue_vue_type_script_setup_true_lang_default;
3598
3598
 
3599
3599
  //#endregion
3600
3600
  //#region src/core/abstractions/Mask/component.vue?vue&type=script&setup=true&lang.ts
3601
- const _hoisted_1$56 = ["render-order"];
3601
+ const _hoisted_1$57 = ["render-order"];
3602
3602
  var component_vue_vue_type_script_setup_true_lang_default$18 = /* @__PURE__ */ defineComponent({
3603
3603
  __name: "component",
3604
3604
  props: {
@@ -3640,7 +3640,7 @@ var component_vue_vue_type_script_setup_true_lang_default$18 = /* @__PURE__ */ d
3640
3640
  ref_key: "meshRef",
3641
3641
  ref: meshRef,
3642
3642
  "render-order": -props.id
3643
- }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_1$56);
3643
+ }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_1$57);
3644
3644
  };
3645
3645
  }
3646
3646
  });
@@ -3944,7 +3944,7 @@ var component_vue_vue_type_script_setup_true_lang_default$16 = /* @__PURE__ */ d
3944
3944
  invalidate();
3945
3945
  });
3946
3946
  watchEffect(() => {
3947
- instancedRef.value = props.instanceMesh ?? samplerRef.value?.children.find((c) => Object.prototype.hasOwnProperty.call(c, "instanceMatrix"));
3947
+ instancedRef.value = props.instanceMesh ?? samplerRef.value?.children.find((c) => Object.hasOwn(c, "instanceMatrix"));
3948
3948
  meshToSampleRef.value = props.mesh ?? samplerRef.value?.children.find((c) => c.type === "Mesh");
3949
3949
  useSurfaceSampler(meshToSampleRef.value, props.count, instancedRef.value, props.weight, props.transform);
3950
3950
  });
@@ -4030,7 +4030,7 @@ var ScreenSizer_default = ScreenSizer_vue_vue_type_script_setup_true_lang_defaul
4030
4030
 
4031
4031
  //#endregion
4032
4032
  //#region src/core/abstractions/ScreenSpace.vue?vue&type=script&setup=true&lang.ts
4033
- const _hoisted_1$55 = ["position"];
4033
+ const _hoisted_1$56 = ["position"];
4034
4034
  var ScreenSpace_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
4035
4035
  __name: "ScreenSpace",
4036
4036
  props: {
@@ -4097,7 +4097,7 @@ var ScreenSpace_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
4097
4097
  return openBlock(), createElementBlock("TresGroup", {
4098
4098
  ref_key: "outerRef",
4099
4099
  ref: outerRef
4100
- }, [createElementVNode("TresGroup", { position: innerPosition.value }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_1$55)], 512);
4100
+ }, [createElementVNode("TresGroup", { position: innerPosition.value }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_1$56)], 512);
4101
4101
  };
4102
4102
  }
4103
4103
  });
@@ -4131,7 +4131,7 @@ const isOrthographicCamera$1 = (camera) => Boolean(camera && camera.isOrthograph
4131
4131
 
4132
4132
  //#endregion
4133
4133
  //#region src/core/controls/CameraControls.vue?vue&type=script&setup=true&lang.ts
4134
- const _hoisted_1$54 = [
4134
+ const _hoisted_1$55 = [
4135
4135
  "min-polar-angle",
4136
4136
  "max-polar-angle",
4137
4137
  "min-azimuth-angle",
@@ -4400,7 +4400,7 @@ var CameraControls_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
4400
4400
  args: [__props.camera || unref(activeCamera), __props.domElement || unref(renderer).domElement],
4401
4401
  "mouse-buttons": mouseButtons.value,
4402
4402
  touches: touches.value
4403
- }, null, 8, _hoisted_1$54)) : createCommentVNode("v-if", true);
4403
+ }, null, 8, _hoisted_1$55)) : createCommentVNode("v-if", true);
4404
4404
  };
4405
4405
  }
4406
4406
  });
@@ -4568,7 +4568,7 @@ function useOrbitLikeControls(controlsRef, props, emit) {
4568
4568
 
4569
4569
  //#endregion
4570
4570
  //#region src/core/controls/MapControls.vue?vue&type=script&setup=true&lang.ts
4571
- const _hoisted_1$53 = [
4571
+ const _hoisted_1$54 = [
4572
4572
  "args",
4573
4573
  "target",
4574
4574
  "auto-rotate",
@@ -4756,7 +4756,7 @@ var MapControls_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
4756
4756
  "rotate-speed": __props.rotateSpeed,
4757
4757
  "mouse-buttons": __props.mouseButtons,
4758
4758
  "screen-space-panning": __props.screenSpacePanning
4759
- }, null, 8, _hoisted_1$53)) : createCommentVNode("v-if", true);
4759
+ }, null, 8, _hoisted_1$54)) : createCommentVNode("v-if", true);
4760
4760
  };
4761
4761
  }
4762
4762
  });
@@ -4767,7 +4767,7 @@ var MapControls_default = MapControls_vue_vue_type_script_setup_true_lang_defaul
4767
4767
 
4768
4768
  //#endregion
4769
4769
  //#region src/core/controls/OrbitControls.vue?vue&type=script&setup=true&lang.ts
4770
- const _hoisted_1$52 = [
4770
+ const _hoisted_1$53 = [
4771
4771
  "args",
4772
4772
  "target",
4773
4773
  "auto-rotate",
@@ -4955,7 +4955,7 @@ var OrbitControls_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
4955
4955
  "rotate-speed": __props.rotateSpeed,
4956
4956
  "mouse-buttons": __props.mouseButtons,
4957
4957
  "screen-space-panning": __props.screenSpacePanning
4958
- }, null, 8, _hoisted_1$52)) : createCommentVNode("v-if", true);
4958
+ }, null, 8, _hoisted_1$53)) : createCommentVNode("v-if", true);
4959
4959
  };
4960
4960
  }
4961
4961
  });
@@ -4966,7 +4966,7 @@ var OrbitControls_default = OrbitControls_vue_vue_type_script_setup_true_lang_de
4966
4966
 
4967
4967
  //#endregion
4968
4968
  //#region src/core/controls/PointerLockControls.vue?vue&type=script&setup=true&lang.ts
4969
- const _hoisted_1$51 = ["args"];
4969
+ const _hoisted_1$52 = ["args"];
4970
4970
  var PointerLockControls_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
4971
4971
  __name: "PointerLockControls",
4972
4972
  props: {
@@ -4999,29 +4999,36 @@ var PointerLockControls_vue_vue_type_script_setup_true_lang_default = /* @__PURE
4999
4999
  const controlsRef = shallowRef(null);
5000
5000
  let triggerSelector;
5001
5001
  extend$1({ PointerLockControls });
5002
- const isLockEmitter = (event) => {
5003
- emit("isLock", event);
5004
- };
5005
- watch(controlsRef, (value) => {
5006
- if (value && props.makeDefault) controls.value = value;
5007
- else controls.value = null;
5002
+ const onLock = () => emit("isLock", true);
5003
+ const onUnlock = () => emit("isLock", false);
5004
+ const onChange = () => invalidate();
5005
+ watch(controlsRef, (value, oldValue) => {
5006
+ if (oldValue) {
5007
+ oldValue.removeEventListener("lock", onLock);
5008
+ oldValue.removeEventListener("unlock", onUnlock);
5009
+ oldValue.removeEventListener("change", onChange);
5010
+ }
5011
+ if (!value) {
5012
+ controls.value = null;
5013
+ return;
5014
+ }
5015
+ if (props.makeDefault) controls.value = value;
5016
+ value.addEventListener("lock", onLock);
5017
+ value.addEventListener("unlock", onUnlock);
5018
+ value.addEventListener("change", onChange);
5008
5019
  triggerSelector = document.getElementById(props.selector || "") || renderer.domElement;
5009
5020
  useEventListener(triggerSelector, "click", () => {
5010
- if (controlsRef.value) {
5011
- controlsRef.value.lock();
5012
- controlsRef.value.addEventListener("lock", () => isLockEmitter(true));
5013
- controlsRef.value.addEventListener("unlock", () => isLockEmitter(false));
5014
- controlsRef.value.addEventListener("change", () => invalidate());
5015
- invalidate();
5016
- }
5021
+ value.lock();
5022
+ invalidate();
5017
5023
  });
5018
5024
  });
5019
5025
  onUnmounted(() => {
5020
- const controls$1 = controlsRef.value;
5021
- if (controls$1) {
5022
- controls$1.removeEventListener("lock", () => isLockEmitter(true));
5023
- controls$1.removeEventListener("unlock", () => isLockEmitter(false));
5024
- controls$1.dispose();
5026
+ const instance = controlsRef.value;
5027
+ if (instance) {
5028
+ instance.removeEventListener("lock", onLock);
5029
+ instance.removeEventListener("unlock", onUnlock);
5030
+ instance.removeEventListener("change", onChange);
5031
+ instance.dispose();
5025
5032
  }
5026
5033
  });
5027
5034
  __expose({ instance: controls });
@@ -5031,7 +5038,7 @@ var PointerLockControls_vue_vue_type_script_setup_true_lang_default = /* @__PURE
5031
5038
  ref_key: "controlsRef",
5032
5039
  ref: controlsRef,
5033
5040
  args: [__props.camera || unref(activeCamera), __props.domElement || unref(renderer).domElement]
5034
- }, null, 8, _hoisted_1$51)) : createCommentVNode("v-if", true);
5041
+ }, null, 8, _hoisted_1$52)) : createCommentVNode("v-if", true);
5035
5042
  };
5036
5043
  }
5037
5044
  });
@@ -5184,7 +5191,7 @@ var ScrollControls_default = ScrollControls_vue_vue_type_script_setup_true_lang_
5184
5191
 
5185
5192
  //#endregion
5186
5193
  //#region src/core/controls/TransformControls.vue?vue&type=script&setup=true&lang.ts
5187
- const _hoisted_1$50 = [
5194
+ const _hoisted_1$51 = [
5188
5195
  "object",
5189
5196
  "args",
5190
5197
  "mode",
@@ -5347,7 +5354,7 @@ var TransformControls_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
5347
5354
  "show-y": unref(showY),
5348
5355
  "show-z": unref(showZ),
5349
5356
  visible: true
5350
- }, null, 8, _hoisted_1$50)) : createCommentVNode("v-if", true);
5357
+ }, null, 8, _hoisted_1$51)) : createCommentVNode("v-if", true);
5351
5358
  };
5352
5359
  }
5353
5360
  });
@@ -5755,7 +5762,7 @@ var RandomizedLights = class extends Group {
5755
5762
 
5756
5763
  //#endregion
5757
5764
  //#region src/core/light-shadow/RandomizedLights/component.vue?vue&type=script&setup=true&lang.ts
5758
- const _hoisted_1$49 = [
5765
+ const _hoisted_1$50 = [
5759
5766
  "count",
5760
5767
  "radius",
5761
5768
  "intensity",
@@ -5856,7 +5863,7 @@ var component_vue_vue_type_script_setup_true_lang_default$14 = /* @__PURE__ */ d
5856
5863
  near: __props.near,
5857
5864
  far: __props.far,
5858
5865
  position: pos.value
5859
- }, null, 8, _hoisted_1$49);
5866
+ }, null, 8, _hoisted_1$50);
5860
5867
  };
5861
5868
  }
5862
5869
  });
@@ -6020,7 +6027,7 @@ const SoftShadowMaterial = /* @__PURE__ */ shaderMaterial({
6020
6027
 
6021
6028
  //#endregion
6022
6029
  //#region src/core/light-shadow/AccumulativeShadows/component.vue?vue&type=script&setup=true&lang.ts
6023
- const _hoisted_1$48 = ["scale", "rotation"];
6030
+ const _hoisted_1$49 = ["scale", "rotation"];
6024
6031
  const _hoisted_2$27 = [
6025
6032
  "alpha-test",
6026
6033
  "blend",
@@ -6219,7 +6226,7 @@ var component_vue_vue_type_script_setup_true_lang_default$13 = /* @__PURE__ */ d
6219
6226
  opacity: __props.opacity,
6220
6227
  "tone-mapped": __props.toneMapped,
6221
6228
  transparent: true
6222
- }, null, 8, _hoisted_2$27)], 8, _hoisted_1$48)], 512);
6229
+ }, null, 8, _hoisted_2$27)], 8, _hoisted_1$49)], 512);
6223
6230
  };
6224
6231
  }
6225
6232
  });
@@ -6245,7 +6252,7 @@ const BakeShadows = defineComponent({
6245
6252
 
6246
6253
  //#endregion
6247
6254
  //#region src/core/light-shadow/CircleShadow.vue?vue&type=script&setup=true&lang.ts
6248
- const _hoisted_1$47 = ["rotation-x"];
6255
+ const _hoisted_1$48 = ["rotation-x"];
6249
6256
  const _hoisted_2$26 = [
6250
6257
  "opacity",
6251
6258
  "fog",
@@ -6319,7 +6326,7 @@ var CircleShadow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
6319
6326
  "depth-write": __props.depthWrite,
6320
6327
  side: unref(DoubleSide),
6321
6328
  map: unref(texture$1)
6322
- }, null, 8, _hoisted_2$26)], 8, _hoisted_1$47);
6329
+ }, null, 8, _hoisted_2$26)], 8, _hoisted_1$48);
6323
6330
  };
6324
6331
  }
6325
6332
  });
@@ -6330,7 +6337,7 @@ var CircleShadow_default = CircleShadow_vue_vue_type_script_setup_true_lang_defa
6330
6337
 
6331
6338
  //#endregion
6332
6339
  //#region src/core/light-shadow/ContactShadows.vue?vue&type=script&setup=true&lang.ts
6333
- const _hoisted_1$46 = ["object"];
6340
+ const _hoisted_1$47 = ["object"];
6334
6341
  var ContactShadows_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6335
6342
  __name: "ContactShadows",
6336
6343
  props: {
@@ -6538,7 +6545,7 @@ var ContactShadows_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
6538
6545
  });
6539
6546
  __expose({ instance: pool.shadowGroup });
6540
6547
  return (_ctx, _cache) => {
6541
- return openBlock(), createElementBlock("primitive", { object: unref(pool).shadowGroup }, null, 8, _hoisted_1$46);
6548
+ return openBlock(), createElementBlock("primitive", { object: unref(pool).shadowGroup }, null, 8, _hoisted_1$47);
6542
6549
  };
6543
6550
  }
6544
6551
  });
@@ -7565,7 +7572,7 @@ function useSVG(path, options = {}) {
7565
7572
 
7566
7573
  //#endregion
7567
7574
  //#region src/core/loaders/useSVG/component.vue?vue&type=script&setup=true&lang.ts
7568
- const _hoisted_1$45 = { key: 0 };
7575
+ const _hoisted_1$46 = { key: 0 };
7569
7576
  const _hoisted_2$25 = ["geometry", "render-order"];
7570
7577
  var component_vue_vue_type_script_setup_true_lang_default$11 = /* @__PURE__ */ defineComponent({
7571
7578
  __name: "component",
@@ -7623,7 +7630,7 @@ var component_vue_vue_type_script_setup_true_lang_default$11 = /* @__PURE__ */ d
7623
7630
  dispose();
7624
7631
  });
7625
7632
  return (_ctx, _cache) => {
7626
- return !unref(isLoading) ? (openBlock(), createElementBlock("TresGroup", _hoisted_1$45, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(layers), ({ geometry, material, isStroke }, i) => {
7633
+ return !unref(isLoading) ? (openBlock(), createElementBlock("TresGroup", _hoisted_1$46, [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(layers), ({ geometry, material, isStroke }, i) => {
7627
7634
  return openBlock(), createElementBlock("TresMesh", mergeProps({ key: `${i}` }, { ref_for: true }, isStroke ? props.strokeMeshProps : props.fillMeshProps, {
7628
7635
  geometry,
7629
7636
  "render-order": props.depth === "renderOrder" ? i : 0
@@ -7674,7 +7681,7 @@ function useFBX(path, options) {
7674
7681
 
7675
7682
  //#endregion
7676
7683
  //#region src/core/loaders/useFBX/component.vue?vue&type=script&setup=true&lang.ts
7677
- const _hoisted_1$44 = ["object"];
7684
+ const _hoisted_1$45 = ["object"];
7678
7685
  var component_vue_vue_type_script_setup_true_lang_default$10 = /* @__PURE__ */ defineComponent({
7679
7686
  __name: "component",
7680
7687
  props: {
@@ -7709,7 +7716,7 @@ var component_vue_vue_type_script_setup_true_lang_default$10 = /* @__PURE__ */ d
7709
7716
  return !unref(isLoading) && unref(model) ? (openBlock(), createElementBlock("primitive", {
7710
7717
  key: 0,
7711
7718
  object: unref(model)
7712
- }, null, 8, _hoisted_1$44)) : createCommentVNode("v-if", true);
7719
+ }, null, 8, _hoisted_1$45)) : createCommentVNode("v-if", true);
7713
7720
  };
7714
7721
  }
7715
7722
  });
@@ -7764,7 +7771,7 @@ function useGLTF(path, options) {
7764
7771
 
7765
7772
  //#endregion
7766
7773
  //#region src/core/loaders/useGLTF/component.vue?vue&type=script&setup=true&lang.ts
7767
- const _hoisted_1$43 = ["object"];
7774
+ const _hoisted_1$44 = ["object"];
7768
7775
  var component_vue_vue_type_script_setup_true_lang_default$9 = /* @__PURE__ */ defineComponent({
7769
7776
  __name: "component",
7770
7777
  props: {
@@ -7812,7 +7819,7 @@ var component_vue_vue_type_script_setup_true_lang_default$9 = /* @__PURE__ */ de
7812
7819
  return !unref(isLoading) && unref(state)?.scene ? (openBlock(), createElementBlock("primitive", {
7813
7820
  key: 0,
7814
7821
  object: unref(state)?.scene
7815
- }, null, 8, _hoisted_1$43)) : createCommentVNode("v-if", true);
7822
+ }, null, 8, _hoisted_1$44)) : createCommentVNode("v-if", true);
7816
7823
  };
7817
7824
  }
7818
7825
  });
@@ -8013,8 +8020,8 @@ function useTextures(paths) {
8013
8020
 
8014
8021
  //#endregion
8015
8022
  //#region src/core/materials/customShaderMaterial/index.vue?vue&type=script&setup=true&lang.ts
8016
- const _hoisted_1$42 = ["args"];
8017
- var index_vue_vue_type_script_setup_true_lang_default$6 = /* @__PURE__ */ defineComponent({
8023
+ const _hoisted_1$43 = ["args"];
8024
+ var index_vue_vue_type_script_setup_true_lang_default$7 = /* @__PURE__ */ defineComponent({
8018
8025
  __name: "index",
8019
8026
  props: {
8020
8027
  baseMaterial: {
@@ -8052,14 +8059,14 @@ var index_vue_vue_type_script_setup_true_lang_default$6 = /* @__PURE__ */ define
8052
8059
  ref_key: "customShaderMaterialClass",
8053
8060
  ref: customShaderMaterialClass,
8054
8061
  args: [props]
8055
- }, null, 8, _hoisted_1$42);
8062
+ }, null, 8, _hoisted_1$43);
8056
8063
  };
8057
8064
  }
8058
8065
  });
8059
8066
 
8060
8067
  //#endregion
8061
8068
  //#region src/core/materials/customShaderMaterial/index.vue
8062
- var customShaderMaterial_default = index_vue_vue_type_script_setup_true_lang_default$6;
8069
+ var customShaderMaterial_default = index_vue_vue_type_script_setup_true_lang_default$7;
8063
8070
 
8064
8071
  //#endregion
8065
8072
  //#region src/core/materials/holographicMaterial/HolographicMaterialParameters.ts
@@ -8240,7 +8247,7 @@ var HolographicMaterialParameters_default = HolographicMaterial;
8240
8247
 
8241
8248
  //#endregion
8242
8249
  //#region src/core/materials/holographicMaterial/index.vue?vue&type=script&setup=true&lang.ts
8243
- const _hoisted_1$41 = [
8250
+ const _hoisted_1$42 = [
8244
8251
  "uniforms-fresnelAmount-value",
8245
8252
  "uniforms-enableBlinking-value",
8246
8253
  "uniforms-fresnelOpacity-value",
@@ -8253,7 +8260,7 @@ const _hoisted_1$41 = [
8253
8260
  "enableAdditive",
8254
8261
  "side"
8255
8262
  ];
8256
- var index_vue_vue_type_script_setup_true_lang_default$5 = /* @__PURE__ */ defineComponent({
8263
+ var index_vue_vue_type_script_setup_true_lang_default$6 = /* @__PURE__ */ defineComponent({
8257
8264
  __name: "index",
8258
8265
  props: {
8259
8266
  fresnelAmount: {
@@ -8341,18 +8348,18 @@ var index_vue_vue_type_script_setup_true_lang_default$5 = /* @__PURE__ */ define
8341
8348
  "uniforms-blinkFresnelOnly-value": props.blinkFresnelOnly,
8342
8349
  enableAdditive: props.enableAdditive,
8343
8350
  side: props.side
8344
- }, null, 8, _hoisted_1$41);
8351
+ }, null, 8, _hoisted_1$42);
8345
8352
  };
8346
8353
  }
8347
8354
  });
8348
8355
 
8349
8356
  //#endregion
8350
8357
  //#region src/core/materials/holographicMaterial/index.vue
8351
- var holographicMaterial_default = index_vue_vue_type_script_setup_true_lang_default$5;
8358
+ var holographicMaterial_default = index_vue_vue_type_script_setup_true_lang_default$6;
8352
8359
 
8353
8360
  //#endregion
8354
8361
  //#region src/core/materials/meshDiscardMaterial/index.vue?vue&type=script&setup=true&lang.ts
8355
- var index_vue_vue_type_script_setup_true_lang_default$4 = /* @__PURE__ */ defineComponent({
8362
+ var index_vue_vue_type_script_setup_true_lang_default$5 = /* @__PURE__ */ defineComponent({
8356
8363
  __name: "index",
8357
8364
  setup(__props, { expose: __expose }) {
8358
8365
  const meshDiscardMaterialRef = shallowRef();
@@ -8370,7 +8377,7 @@ var index_vue_vue_type_script_setup_true_lang_default$4 = /* @__PURE__ */ define
8370
8377
 
8371
8378
  //#endregion
8372
8379
  //#region src/core/materials/meshDiscardMaterial/index.vue
8373
- var meshDiscardMaterial_default = index_vue_vue_type_script_setup_true_lang_default$4;
8380
+ var meshDiscardMaterial_default = index_vue_vue_type_script_setup_true_lang_default$5;
8374
8381
 
8375
8382
  //#endregion
8376
8383
  //#region src/core/materials/meshGlassMaterial/material.ts
@@ -8472,7 +8479,7 @@ var material_default = MeshGlassMaterial;
8472
8479
 
8473
8480
  //#endregion
8474
8481
  //#region src/core/materials/meshGlassMaterial/index.vue?vue&type=script&setup=true&lang.ts
8475
- var index_vue_vue_type_script_setup_true_lang_default$3 = /* @__PURE__ */ defineComponent({
8482
+ var index_vue_vue_type_script_setup_true_lang_default$4 = /* @__PURE__ */ defineComponent({
8476
8483
  __name: "index",
8477
8484
  setup(__props, { expose: __expose }) {
8478
8485
  const MeshGlassMaterialClass = shallowRef();
@@ -8490,7 +8497,7 @@ var index_vue_vue_type_script_setup_true_lang_default$3 = /* @__PURE__ */ define
8490
8497
 
8491
8498
  //#endregion
8492
8499
  //#region src/core/materials/meshGlassMaterial/index.vue
8493
- var meshGlassMaterial_default = index_vue_vue_type_script_setup_true_lang_default$3;
8500
+ var meshGlassMaterial_default = index_vue_vue_type_script_setup_true_lang_default$4;
8494
8501
 
8495
8502
  //#endregion
8496
8503
  //#region src/utils/constants.ts
@@ -8909,7 +8916,7 @@ var MeshReflectionMaterial = class extends MeshStandardMaterial {
8909
8916
 
8910
8917
  //#endregion
8911
8918
  //#region src/core/materials/meshReflectionMaterial/index.vue?vue&type=script&setup=true&lang.ts
8912
- const _hoisted_1$40 = [
8919
+ const _hoisted_1$41 = [
8913
8920
  "texture-matrix",
8914
8921
  "t-sharp",
8915
8922
  "t-depth",
@@ -8918,7 +8925,7 @@ const _hoisted_1$40 = [
8918
8925
  "defines-USE_DEPTH",
8919
8926
  "defines-USE_DISTORTION"
8920
8927
  ];
8921
- var index_vue_vue_type_script_setup_true_lang_default$2 = /* @__PURE__ */ defineComponent({
8928
+ var index_vue_vue_type_script_setup_true_lang_default$3 = /* @__PURE__ */ defineComponent({
8922
8929
  __name: "index",
8923
8930
  props: {
8924
8931
  resolution: {
@@ -9315,14 +9322,473 @@ var index_vue_vue_type_script_setup_true_lang_default$2 = /* @__PURE__ */ define
9315
9322
  "defines-USE_BLUR": hasBlur.value ? "" : void 0,
9316
9323
  "defines-USE_DEPTH": hasDepth.value ? "" : void 0,
9317
9324
  "defines-USE_DISTORTION": hasDistortion.value ? "" : void 0
9318
- }), null, 16, _hoisted_1$40);
9325
+ }), null, 16, _hoisted_1$41);
9319
9326
  };
9320
9327
  }
9321
9328
  });
9322
9329
 
9323
9330
  //#endregion
9324
9331
  //#region src/core/materials/meshReflectionMaterial/index.vue
9325
- var meshReflectionMaterial_default = index_vue_vue_type_script_setup_true_lang_default$2;
9332
+ var meshReflectionMaterial_default = index_vue_vue_type_script_setup_true_lang_default$3;
9333
+
9334
+ //#endregion
9335
+ //#region src/core/materials/meshTransmissionMaterial/material.ts
9336
+ var MeshTransmissionMaterial = class extends MeshPhysicalMaterial {
9337
+ uniforms;
9338
+ constructor({ samples = 6, transmissionSampler = false, chromaticAberration = .05, transmission = 0, _transmission = 1, transmissionMap = null, roughness = 0, thickness = 0, thicknessMap = null, attenuationDistance = Infinity, attenuationColor = new Color("white"), anisotropicBlur = .1, time = 0, distortion = 0, distortionScale = .5, temporalDistortion = 0, buffer = null } = {}) {
9339
+ super();
9340
+ this.uniforms = {
9341
+ chromaticAberration: new Uniform(chromaticAberration),
9342
+ transmission: new Uniform(transmission),
9343
+ _transmission: new Uniform(_transmission),
9344
+ transmissionMap: new Uniform(transmissionMap),
9345
+ roughness: new Uniform(roughness),
9346
+ thickness: new Uniform(thickness),
9347
+ thicknessMap: new Uniform(thicknessMap),
9348
+ attenuationDistance: new Uniform(attenuationDistance),
9349
+ attenuationColor: new Uniform(attenuationColor),
9350
+ anisotropicBlur: new Uniform(anisotropicBlur),
9351
+ time: new Uniform(time),
9352
+ distortion: new Uniform(distortion),
9353
+ distortionScale: new Uniform(distortionScale),
9354
+ temporalDistortion: new Uniform(temporalDistortion),
9355
+ buffer: new Uniform(buffer)
9356
+ };
9357
+ this.onBeforeCompile = (shader) => {
9358
+ shader.uniforms = {
9359
+ ...shader.uniforms,
9360
+ ...this.uniforms
9361
+ };
9362
+ shader.defines = shader.defines ?? {};
9363
+ if (transmissionSampler) shader.defines.USE_SAMPLER = "";
9364
+ else shader.defines.USE_TRANSMISSION = "";
9365
+ shader.fragmentShader = `
9366
+ uniform float chromaticAberration;
9367
+ uniform float anisotropicBlur;
9368
+ uniform float time;
9369
+ uniform float distortion;
9370
+ uniform float distortionScale;
9371
+ uniform float temporalDistortion;
9372
+ uniform sampler2D buffer;
9373
+
9374
+ vec3 random3(vec3 c) {
9375
+ float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));
9376
+ vec3 r;
9377
+ r.z = fract(512.0*j);
9378
+ j *= .125;
9379
+ r.x = fract(512.0*j);
9380
+ j *= .125;
9381
+ r.y = fract(512.0*j);
9382
+ return r-0.5;
9383
+ }
9384
+
9385
+ uint hash( uint x ) {
9386
+ x += ( x << 10u );
9387
+ x ^= ( x >> 6u );
9388
+ x += ( x << 3u );
9389
+ x ^= ( x >> 11u );
9390
+ x += ( x << 15u );
9391
+ return x;
9392
+ }
9393
+
9394
+ uint hash( uvec2 v ) { return hash( v.x ^ hash(v.y) ); }
9395
+ uint hash( uvec3 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ); }
9396
+ uint hash( uvec4 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ^ hash(v.w) ); }
9397
+
9398
+ float floatConstruct( uint m ) {
9399
+ const uint ieeeMantissa = 0x007FFFFFu;
9400
+ const uint ieeeOne = 0x3F800000u;
9401
+ m &= ieeeMantissa;
9402
+ m |= ieeeOne;
9403
+ float f = uintBitsToFloat( m );
9404
+ return f - 1.0;
9405
+ }
9406
+
9407
+ float randomBase( float x ) { return floatConstruct(hash(floatBitsToUint(x))); }
9408
+ float randomBase( vec2 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
9409
+ float randomBase( vec3 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
9410
+ float randomBase( vec4 v ) { return floatConstruct(hash(floatBitsToUint(v))); }
9411
+ float rand(float seed) {
9412
+ float result = randomBase(vec3(gl_FragCoord.xy, seed));
9413
+ return result;
9414
+ }
9415
+
9416
+ const float F3 = 0.3333333;
9417
+ const float G3 = 0.1666667;
9418
+
9419
+ float snoise(vec3 p) {
9420
+ vec3 s = floor(p + dot(p, vec3(F3)));
9421
+ vec3 x = p - s + dot(s, vec3(G3));
9422
+ vec3 e = step(vec3(0.0), x - x.yzx);
9423
+ vec3 i1 = e*(1.0 - e.zxy);
9424
+ vec3 i2 = 1.0 - e.zxy*(1.0 - e);
9425
+ vec3 x1 = x - i1 + G3;
9426
+ vec3 x2 = x - i2 + 2.0*G3;
9427
+ vec3 x3 = x - 1.0 + 3.0*G3;
9428
+ vec4 w, d;
9429
+ w.x = dot(x, x);
9430
+ w.y = dot(x1, x1);
9431
+ w.z = dot(x2, x2);
9432
+ w.w = dot(x3, x3);
9433
+ w = max(0.6 - w, 0.0);
9434
+ d.x = dot(random3(s), x);
9435
+ d.y = dot(random3(s + i1), x1);
9436
+ d.z = dot(random3(s + i2), x2);
9437
+ d.w = dot(random3(s + 1.0), x3);
9438
+ w *= w;
9439
+ w *= w;
9440
+ d *= w;
9441
+ return dot(d, vec4(52.0));
9442
+ }
9443
+
9444
+ float snoiseFractal(vec3 m) {
9445
+ return 0.5333333* snoise(m)
9446
+ +0.2666667* snoise(2.0*m)
9447
+ +0.1333333* snoise(4.0*m)
9448
+ +0.0666667* snoise(8.0*m);
9449
+ }
9450
+ ${shader.fragmentShader}`;
9451
+ shader.fragmentShader = shader.fragmentShader.replace("#include <transmission_pars_fragment>", `
9452
+ #ifdef USE_TRANSMISSION
9453
+ uniform float _transmission;
9454
+ uniform float thickness;
9455
+ uniform float attenuationDistance;
9456
+ uniform vec3 attenuationColor;
9457
+ #ifdef USE_TRANSMISSIONMAP
9458
+ uniform sampler2D transmissionMap;
9459
+ #endif
9460
+ #ifdef USE_THICKNESSMAP
9461
+ uniform sampler2D thicknessMap;
9462
+ #endif
9463
+ uniform vec2 transmissionSamplerSize;
9464
+ uniform sampler2D transmissionSamplerMap;
9465
+ uniform mat4 modelMatrix;
9466
+ uniform mat4 projectionMatrix;
9467
+ varying vec3 vWorldPosition;
9468
+ vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {
9469
+ vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );
9470
+ vec3 modelScale;
9471
+ modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
9472
+ modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
9473
+ modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
9474
+ return normalize( refractionVector ) * thickness * modelScale;
9475
+ }
9476
+ float applyIorToRoughness( const in float roughness, const in float ior ) {
9477
+ return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
9478
+ }
9479
+ vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {
9480
+ float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
9481
+ #ifdef USE_SAMPLER
9482
+ #ifdef texture2DLodEXT
9483
+ return texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod);
9484
+ #else
9485
+ return texture2D(transmissionSamplerMap, fragCoord.xy, framebufferLod);
9486
+ #endif
9487
+ #else
9488
+ return texture2D(buffer, fragCoord.xy);
9489
+ #endif
9490
+ }
9491
+ vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {
9492
+ if ( isinf( attenuationDistance ) ) {
9493
+ return radiance;
9494
+ } else {
9495
+ vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;
9496
+ vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );
9497
+ return transmittance * radiance;
9498
+ }
9499
+ }
9500
+ vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,
9501
+ const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,
9502
+ const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,
9503
+ const in vec3 attenuationColor, const in float attenuationDistance ) {
9504
+ vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
9505
+ vec3 refractedRayExit = position + transmissionRay;
9506
+ vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
9507
+ vec2 refractionCoords = ndcPos.xy / ndcPos.w;
9508
+ refractionCoords += 1.0;
9509
+ refractionCoords /= 2.0;
9510
+ vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );
9511
+ vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );
9512
+ vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );
9513
+ return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );
9514
+ }
9515
+ #endif
9516
+ `);
9517
+ shader.fragmentShader = shader.fragmentShader.replace("#include <transmission_fragment>", `
9518
+ material.transmission = _transmission;
9519
+ material.transmissionAlpha = 1.0;
9520
+ material.thickness = thickness;
9521
+ material.attenuationDistance = attenuationDistance;
9522
+ material.attenuationColor = attenuationColor;
9523
+ #ifdef USE_TRANSMISSIONMAP
9524
+ material.transmission *= texture2D( transmissionMap, vUv ).r;
9525
+ #endif
9526
+ #ifdef USE_THICKNESSMAP
9527
+ material.thickness *= texture2D( thicknessMap, vUv ).g;
9528
+ #endif
9529
+
9530
+ vec3 pos = vWorldPosition;
9531
+ float runningSeed = 0.0;
9532
+ vec3 v = normalize( cameraPosition - pos );
9533
+ vec3 n = inverseTransformDirection( normal, viewMatrix );
9534
+ vec3 transmission = vec3(0.0);
9535
+ float transmissionR, transmissionB, transmissionG;
9536
+ float randomCoords = rand(runningSeed++);
9537
+ float thickness_smear = thickness * max(pow(roughnessFactor, 0.33), anisotropicBlur);
9538
+ vec3 distortionNormal = vec3(0.0);
9539
+ vec3 temporalOffset = vec3(time, -time, -time) * temporalDistortion;
9540
+ if (distortion > 0.0) {
9541
+ distortionNormal = distortion * vec3(snoiseFractal(vec3((pos * distortionScale + temporalOffset))), snoiseFractal(vec3(pos.zxy * distortionScale - temporalOffset)), snoiseFractal(vec3(pos.yxz * distortionScale + temporalOffset)));
9542
+ }
9543
+ for (float i = 0.0; i < ${samples}.0; i ++) {
9544
+ vec3 sampleNorm = normalize(n + roughnessFactor * roughnessFactor * 2.0 * normalize(vec3(rand(runningSeed++) - 0.5, rand(runningSeed++) - 0.5, rand(runningSeed++) - 0.5)) * pow(rand(runningSeed++), 0.33) + distortionNormal);
9545
+ transmissionR = getIBLVolumeRefraction(
9546
+ sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
9547
+ pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
9548
+ material.attenuationColor, material.attenuationDistance
9549
+ ).r;
9550
+ transmissionG = getIBLVolumeRefraction(
9551
+ sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
9552
+ pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + chromaticAberration * (i + randomCoords) / float(${samples})), material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
9553
+ material.attenuationColor, material.attenuationDistance
9554
+ ).g;
9555
+ transmissionB = getIBLVolumeRefraction(
9556
+ sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,
9557
+ pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + 2.0 * chromaticAberration * (i + randomCoords) / float(${samples})), material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),
9558
+ material.attenuationColor, material.attenuationDistance
9559
+ ).b;
9560
+ transmission.r += transmissionR;
9561
+ transmission.g += transmissionG;
9562
+ transmission.b += transmissionB;
9563
+ }
9564
+ transmission /= ${samples}.0;
9565
+ totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );
9566
+ `);
9567
+ };
9568
+ Object.keys(this.uniforms).forEach((name) => {
9569
+ Object.defineProperty(this, name, {
9570
+ get: () => this.uniforms[name].value,
9571
+ set: (v) => {
9572
+ this.uniforms[name].value = v;
9573
+ }
9574
+ });
9575
+ });
9576
+ }
9577
+ };
9578
+
9579
+ //#endregion
9580
+ //#region src/core/materials/meshTransmissionMaterial/index.vue?vue&type=script&setup=true&lang.ts
9581
+ const _hoisted_1$40 = ["args"];
9582
+ var index_vue_vue_type_script_setup_true_lang_default$2 = /* @__PURE__ */ defineComponent({
9583
+ __name: "index",
9584
+ props: {
9585
+ samples: {
9586
+ type: Number,
9587
+ required: false,
9588
+ default: 6
9589
+ },
9590
+ transmissionSampler: {
9591
+ type: Boolean,
9592
+ required: false,
9593
+ default: false
9594
+ },
9595
+ transmission: {
9596
+ type: Number,
9597
+ required: false,
9598
+ default: 1
9599
+ },
9600
+ thickness: {
9601
+ type: Number,
9602
+ required: false,
9603
+ default: 0
9604
+ },
9605
+ backsideThickness: {
9606
+ type: Number,
9607
+ required: false,
9608
+ default: 0
9609
+ },
9610
+ roughness: {
9611
+ type: Number,
9612
+ required: false,
9613
+ default: 0
9614
+ },
9615
+ chromaticAberration: {
9616
+ type: Number,
9617
+ required: false,
9618
+ default: .03
9619
+ },
9620
+ anisotropicBlur: {
9621
+ type: Number,
9622
+ required: false,
9623
+ default: .1
9624
+ },
9625
+ distortion: {
9626
+ type: Number,
9627
+ required: false,
9628
+ default: 0
9629
+ },
9630
+ distortionScale: {
9631
+ type: Number,
9632
+ required: false,
9633
+ default: .5
9634
+ },
9635
+ temporalDistortion: {
9636
+ type: Number,
9637
+ required: false,
9638
+ default: 0
9639
+ },
9640
+ ior: {
9641
+ type: Number,
9642
+ required: false,
9643
+ default: 1.5
9644
+ },
9645
+ color: {
9646
+ type: null,
9647
+ required: false
9648
+ },
9649
+ clearcoat: {
9650
+ type: Number,
9651
+ required: false
9652
+ },
9653
+ clearcoatRoughness: {
9654
+ type: Number,
9655
+ required: false
9656
+ },
9657
+ attenuationDistance: {
9658
+ type: Number,
9659
+ required: false
9660
+ },
9661
+ attenuationColor: {
9662
+ type: null,
9663
+ required: false
9664
+ },
9665
+ resolution: {
9666
+ type: Number,
9667
+ required: false,
9668
+ default: 256
9669
+ },
9670
+ backsideResolution: {
9671
+ type: Number,
9672
+ required: false
9673
+ },
9674
+ backside: {
9675
+ type: Boolean,
9676
+ required: false,
9677
+ default: false
9678
+ },
9679
+ background: {
9680
+ type: [Object, null],
9681
+ required: false
9682
+ },
9683
+ buffer: {
9684
+ type: [Object, null],
9685
+ required: false
9686
+ }
9687
+ },
9688
+ setup(__props, { expose: __expose }) {
9689
+ const props = __props;
9690
+ const { extend: extend$1, invalidate } = useTres();
9691
+ extend$1({ MeshTransmissionMaterial });
9692
+ const materialRef = shallowRef();
9693
+ watch(() => [props.samples, props.transmissionSampler], () => {
9694
+ logWarning("MeshTransmissionMaterial: samples and transmissionSampler are baked into the shader at compile time. Changes require remounting the component.");
9695
+ });
9696
+ const constructorArgs = computed(() => [{
9697
+ samples: props.samples,
9698
+ transmissionSampler: props.transmissionSampler
9699
+ }]);
9700
+ const constructorKey = computed(() => `${props.samples}-${props.transmissionSampler}`);
9701
+ const tresProps = computed(() => {
9702
+ const { transmission, transmissionSampler: _ts, samples: _s, resolution: _r, backsideResolution: _br, backside: _bs, backsideThickness: _bt, background: _bg, buffer: _buf, ...rest } = props;
9703
+ return {
9704
+ ...Object.fromEntries(Object.entries(rest).filter(([, value]) => value !== void 0)),
9705
+ _transmission: transmission,
9706
+ transmission: 0
9707
+ };
9708
+ });
9709
+ const fboMain = new WebGLRenderTarget(props.resolution, props.resolution, {
9710
+ minFilter: LinearFilter,
9711
+ magFilter: LinearFilter,
9712
+ type: HalfFloatType
9713
+ });
9714
+ const fboBack = new WebGLRenderTarget(props.backsideResolution ?? props.resolution, props.backsideResolution ?? props.resolution, {
9715
+ minFilter: LinearFilter,
9716
+ magFilter: LinearFilter,
9717
+ type: HalfFloatType
9718
+ });
9719
+ watch(() => props.resolution, (res) => {
9720
+ fboMain.setSize(res, res);
9721
+ });
9722
+ watch(() => props.backsideResolution ?? props.resolution, (res) => {
9723
+ fboBack.setSize(res, res);
9724
+ });
9725
+ const discardMat = new MeshDiscardMaterial();
9726
+ const backsideMat = new MeshPhysicalMaterial({
9727
+ side: BackSide,
9728
+ transparent: true
9729
+ });
9730
+ const { onBeforeRender } = useLoop();
9731
+ onBeforeRender(({ renderer, scene, camera, elapsed }) => {
9732
+ const mat = materialRef.value;
9733
+ if (!mat) return;
9734
+ if ("isWebGPURenderer" in renderer && renderer.isWebGPURenderer === true) {
9735
+ logWarning("MeshTransmissionMaterial: WebGPURenderer is not supported yet");
9736
+ return;
9737
+ }
9738
+ if (!(renderer instanceof WebGLRenderer)) return;
9739
+ const parent = mat?.__tres?.parent;
9740
+ if (!parent) return;
9741
+ mat.time = elapsed;
9742
+ if (props.transmissionSampler) return;
9743
+ if (!camera.value) return;
9744
+ if (props.buffer) {
9745
+ mat.buffer = props.buffer;
9746
+ return;
9747
+ }
9748
+ invalidate();
9749
+ const oldBg = toValue(scene).background;
9750
+ const oldTone = renderer.toneMapping;
9751
+ const savedMaterial = parent.material;
9752
+ if (props.background) toValue(scene).background = props.background;
9753
+ renderer.toneMapping = NoToneMapping;
9754
+ if (props.backside) {
9755
+ parent.material = backsideMat;
9756
+ renderer.setRenderTarget(fboBack);
9757
+ renderer.render(toValue(scene), camera.value);
9758
+ mat.buffer = fboBack.texture;
9759
+ mat.thickness = props.backsideThickness;
9760
+ parent.material = discardMat;
9761
+ } else parent.material = discardMat;
9762
+ renderer.setRenderTarget(fboMain);
9763
+ renderer.render(toValue(scene), camera.value);
9764
+ mat.buffer = fboMain.texture;
9765
+ if (props.backside) mat.thickness = props.thickness;
9766
+ parent.material = savedMaterial;
9767
+ renderer.toneMapping = oldTone;
9768
+ toValue(scene).background = oldBg;
9769
+ renderer.setRenderTarget(null);
9770
+ });
9771
+ onBeforeUnmount(() => {
9772
+ fboMain.dispose();
9773
+ fboBack.dispose();
9774
+ discardMat.dispose();
9775
+ backsideMat.dispose();
9776
+ });
9777
+ __expose({ instance: materialRef });
9778
+ return (_ctx, _cache) => {
9779
+ return openBlock(), createElementBlock("TresMeshTransmissionMaterial", mergeProps({
9780
+ key: constructorKey.value,
9781
+ ref_key: "materialRef",
9782
+ ref: materialRef,
9783
+ args: constructorArgs.value
9784
+ }, tresProps.value), null, 16, _hoisted_1$40);
9785
+ };
9786
+ }
9787
+ });
9788
+
9789
+ //#endregion
9790
+ //#region src/core/materials/meshTransmissionMaterial/index.vue
9791
+ var meshTransmissionMaterial_default = index_vue_vue_type_script_setup_true_lang_default$2;
9326
9792
 
9327
9793
  //#endregion
9328
9794
  //#region src/core/materials/meshWobbleMaterial/material.ts
@@ -10337,7 +10803,8 @@ async function getTextureAndAtlasAsync(imagePathOrImageData, atlasPathOrAtlasish
10337
10803
  });
10338
10804
  const atlasishPromise = typeof atlasPathOrAtlasish !== "string" ? new Promise((resolve) => resolve(atlasPathOrAtlasish)) : fetch(atlasPathOrAtlasish).then((response) => response.json()).catch((e) => logError(`Cientos Atlas - ${e}`));
10339
10805
  return Promise.all([texturePromise, atlasishPromise]).then(([texture$1, atlasish]) => {
10340
- return [texture$1, getAtlas(atlasish, texture$1.image.width, texture$1.image.height)];
10806
+ const image = texture$1.image;
10807
+ return [texture$1, getAtlas(atlasish, image.width, image.height)];
10341
10808
  });
10342
10809
  }
10343
10810
  function getAtlas(atlasish, textureWidth, textureHeight) {
@@ -10466,7 +10933,7 @@ function groupAtlasFramesByKey(frames) {
10466
10933
  const result = {};
10467
10934
  for (const frame of frames) if (getNumbersFromEnd(frame.name) !== null) {
10468
10935
  const key = stripUnderscoresNumbersFromEnd(frame.name);
10469
- if (Object.prototype.hasOwnProperty.call(result, key)) result[key].push(frame);
10936
+ if (Object.hasOwn(result, key)) result[key].push(frame);
10470
10937
  else result[key] = [frame];
10471
10938
  }
10472
10939
  for (const entry of Object.values(result)) entry.sort((a, b) => a.name.localeCompare(b.name));
@@ -11030,15 +11497,37 @@ var GradientTexture_default = GradientTexture_vue_vue_type_script_setup_true_lan
11030
11497
 
11031
11498
  //#endregion
11032
11499
  //#region src/core/objects/html/shaders/fragment.glsl
11033
- var fragment_default = "void main() {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n}";
11500
+ var fragment_default = `void main() {
11501
+ gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
11502
+ }`;
11034
11503
 
11035
11504
  //#endregion
11036
11505
  //#region src/core/objects/html/shaders/vertex.glsl
11037
- var vertex_default = "#include <common>\n\nuniform float uWidth;\nuniform float uHeight;\n\nvoid main() {\n\n vec4 mvPosition = modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0);\n\n vec2 quad = position.xy;\n\n vec2 alignedPosition = quad * vec2(uWidth, uHeight);\n\n mvPosition.xy += alignedPosition;\n\n gl_Position = projectionMatrix * mvPosition;\n}";
11506
+ var vertex_default = `#include <common>
11507
+
11508
+ uniform float uWidth;
11509
+ uniform float uHeight;
11510
+
11511
+ void main() {
11512
+
11513
+ vec4 mvPosition = modelViewMatrix * vec4(0.0, 0.0, 0.0, 1.0);
11514
+
11515
+ vec2 quad = position.xy;
11516
+
11517
+ vec2 alignedPosition = quad * vec2(uWidth, uHeight);
11518
+
11519
+ mvPosition.xy += alignedPosition;
11520
+
11521
+ gl_Position = projectionMatrix * mvPosition;
11522
+ }`;
11038
11523
 
11039
11524
  //#endregion
11040
11525
  //#region src/core/objects/html/shaders/passthrough-vertex.glsl
11041
- var passthrough_vertex_default = "#include <common>\n\nvoid main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}";
11526
+ var passthrough_vertex_default = `#include <common>
11527
+
11528
+ void main() {
11529
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
11530
+ }`;
11042
11531
 
11043
11532
  //#endregion
11044
11533
  //#region src/core/objects/html/utils.ts
@@ -11595,7 +12084,7 @@ const ImageMaterialImpl = /* @__PURE__ */ shaderMaterial({
11595
12084
  vec2 res = vec2(scale * resolution);
11596
12085
  vec2 halfRes = 0.5 * res;
11597
12086
  float b = udRoundBox(vUv.xy * res - halfRes, halfRes, resolution * radius);
11598
- vec3 a = mix(vec3(1.0,0.0,0.0), vec3(0.0,0.0,0.0), smoothstep(0.0, 1.0, b));
12087
+ float a = 1.0 - smoothstep(0.0, 1.0, b);
11599
12088
  gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity * a), grayscale);
11600
12089
 
11601
12090
  #include <tonemapping_fragment>
@@ -11696,12 +12185,15 @@ var component_vue_vue_type_script_setup_true_lang_default$2 = /* @__PURE__ */ de
11696
12185
  const texture$1 = shallowRef(props.texture ?? null);
11697
12186
  const { sizes: size, renderer } = useTres();
11698
12187
  const planeBounds = computed(() => Array.isArray(props.scale) ? [props.scale[0], props.scale[1]] : [props.scale, props.scale]);
11699
- const imageBounds = computed(() => [texture$1.value?.image?.width ?? 0, texture$1.value?.image?.height ?? 0]);
12188
+ const imageBounds = computed(() => {
12189
+ const image = texture$1.value?.image;
12190
+ return [image?.width ?? 1, image?.height ?? 1];
12191
+ });
11700
12192
  const resolution = computed(() => Math.max(size.width.value, size.height.value));
11701
- const { state, isLoading } = useTexture(props.url);
12193
+ const { state, isLoading } = useTexture(computed(() => props.url));
11702
12194
  watchEffect(() => {
11703
12195
  if (props.texture) texture$1.value = props.texture;
11704
- if (!isLoading.value) {
12196
+ else if (!isLoading.value) {
11705
12197
  texture$1.value = state.value;
11706
12198
  texture$1.value.colorSpace = renderer.outputColorSpace;
11707
12199
  }
@@ -11943,7 +12435,7 @@ var Reflector_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
11943
12435
  const reflectorRef = shallowRef();
11944
12436
  extend$1({ Reflector });
11945
12437
  const { color, textureWidth, textureHeight, clipBias, multisample, shader } = toRefs(props);
11946
- const colorValue = computed(() => new Color(color.value));
12438
+ const colorValue = computed(() => Array.isArray(color.value) ? new Color(...color.value) : new Color(color.value));
11947
12439
  watch(props, () => {
11948
12440
  invalidate();
11949
12441
  });
@@ -13615,19 +14107,23 @@ var Backdrop_default = Backdrop_vue_vue_type_script_setup_true_lang_default;
13615
14107
 
13616
14108
  //#endregion
13617
14109
  //#region src/core/staging/useEnvironment/const.ts
14110
+ /**
14111
+ * Base paths (without resolution suffix) for the preset HDRs hosted in `Tresjs/assets`.
14112
+ * The loader appends `_${quality}.hdr` to resolve the final file.
14113
+ */
13618
14114
  const environmentPresets = {
13619
- sunset: "venice/venice_sunset_1k.hdr",
13620
- studio: "studio/poly_haven_studio_1k.hdr",
13621
- city: "city/canary_wharf_1k.hdr",
13622
- umbrellas: "outdoor/outdoor_umbrellas_1k.hdr",
13623
- night: "outdoor/satara_night_1k.hdr",
13624
- forest: "outood/mossy_forest_1k.hdr",
13625
- snow: "outdoor/snowy_forest_path_01_1k.hdr",
13626
- dawn: "kiara/kiara_1_dawn_1k.hdr",
13627
- hangar: "indoor/small_hangar_01_1k.hdr",
13628
- urban: "indoor/abandoned_games_room_02_1k.hdr",
13629
- modern: "city/modern_buildings_2_1k.hdr",
13630
- shangai: "city/shanghai_bund_1k.hdr"
14115
+ sunset: "venice/venice_sunset",
14116
+ studio: "studio/poly_haven_studio",
14117
+ city: "city/canary_wharf",
14118
+ umbrellas: "outdoor/outdoor_umbrellas",
14119
+ night: "outdoor/satara_night",
14120
+ forest: "outdoor/mossy_forest",
14121
+ snow: "outdoor/snowy_forest_path_01",
14122
+ dawn: "kiara/kiara_1_dawn",
14123
+ hangar: "indoor/small_hangar_01",
14124
+ urban: "indoor/abandoned_games_room_02",
14125
+ modern: "city/modern_buildings_2",
14126
+ shangai: "city/shanghai_bund"
13631
14127
  };
13632
14128
 
13633
14129
  //#endregion
@@ -13676,7 +14172,7 @@ function updateMaterials(scene) {
13676
14172
  */
13677
14173
  async function useEnvironment(options, fbo) {
13678
14174
  const { scene, invalidate } = useTres();
13679
- const { preset, blur, files = ref([]), path = ref(""), background, backgroundIntensity = ref(1), environmentIntensity = ref(1), backgroundRotation = ref([
14175
+ const { preset, quality = ref("1k"), blur, files = ref([]), path = ref(""), background, backgroundIntensity = ref(1), environmentIntensity = ref(1), backgroundRotation = ref([
13680
14176
  0,
13681
14177
  0,
13682
14178
  0
@@ -13750,10 +14246,11 @@ async function useEnvironment(options, fbo) {
13750
14246
  }
13751
14247
  }
13752
14248
  }, { immediate: true });
13753
- watch(() => preset?.value, async (value) => {
14249
+ watch([() => preset?.value, () => quality?.value], async ([value]) => {
13754
14250
  if (value && value in environmentPresets) {
13755
14251
  const _path = PRESET_ROOT;
13756
- const _files = environmentPresets[value];
14252
+ const _quality = quality?.value;
14253
+ const _files = `${environmentPresets[value]}_${_quality}.hdr`;
13757
14254
  try {
13758
14255
  rgbeLoader.setPath(_path);
13759
14256
  texture$1.value = await new Promise((resolve, reject) => {
@@ -13838,6 +14335,11 @@ var component_vue_vue_type_script_setup_true_lang_default$1 = /* @__PURE__ */ de
13838
14335
  required: false,
13839
14336
  default: void 0
13840
14337
  },
14338
+ quality: {
14339
+ type: String,
14340
+ required: false,
14341
+ default: "1k"
14342
+ },
13841
14343
  resolution: {
13842
14344
  type: Number,
13843
14345
  required: false,
@@ -14172,7 +14674,7 @@ var Ocean_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
14172
14674
  watch(alpha, changeAlpha);
14173
14675
  __expose({ instance: waterRef });
14174
14676
  scene.value.traverse((child) => {
14175
- if (Object.prototype.hasOwnProperty.call(child, "isSky")) sunRef.value = child;
14677
+ if (Object.hasOwn(child, "isSky")) sunRef.value = child;
14176
14678
  });
14177
14679
  onMounted(async () => {
14178
14680
  await nextTick();
@@ -15599,7 +16101,7 @@ var Stars_default = Stars_vue_vue_type_script_setup_true_lang_default;
15599
16101
  */
15600
16102
  function pick(obj, props) {
15601
16103
  const pickedProperties = {};
15602
- for (const prop of props) if (Object.prototype.hasOwnProperty.call(obj, prop)) pickedProperties[prop] = obj[prop];
16104
+ for (const prop of props) if (Object.hasOwn(obj, prop)) pickedProperties[prop] = obj[prop];
15603
16105
  return pickedProperties;
15604
16106
  }
15605
16107
  /**
@@ -15621,4 +16123,4 @@ function extractBindingPosition(binding) {
15621
16123
  }
15622
16124
 
15623
16125
  //#endregion
15624
- export { component_default as AccumulativeShadows, Align_default as Align, component_default$1 as AnimatedSprite, Backdrop_default as Backdrop, BakeShadows, BaseCameraControls, Billboard_default as Billboard, component_default$2 as Bounds, Box_default as Box, CameraControls_default as CameraControls, CameraShake_default as CameraShake, CatmullRomCurve3_default as CatmullRomCurve3, Circle_default as Circle, CircleShadow_default as CircleShadow, Cone_default as Cone, ContactShadows_default as ContactShadows, component_default$3 as CubeCamera, CubicBezierLine_default as CubicBezierLine, customShaderMaterial_default as CustomShaderMaterial, Cylinder_default as Cylinder, Decal_default as Decal, DecalDebugUI_default as DecalDebugUI, Dodecahedron_default as Dodecahedron, Edges_default as Edges, component_default$4 as Environment, component_default$5 as FBXModel, component_default$6 as Fbo, Fit_default as Fit, component_default$7 as GLTFModel, GlobalAudio, GradientTexture_default as GradientTexture, Grid_default as Grid, component_default$8 as Helper, holographicMaterial_default as HolographicMaterial, HTML_default as Html, Icosahedron_default as Icosahedron, component_default$9 as Image, KeyboardControls_default as KeyboardControls, LOD_default as LOD, component_default$10 as Lensflare, Levioso_default as Levioso, lightformer_default as Lightformer, Line2_default as Line2, MapControls_default as MapControls, MarchingCube_default as MarchingCube, MarchingCubes_default as MarchingCubes, MarchingPlane_default as MarchingPlane, component_default$11 as Mask, meshDiscardMaterial_default as MeshDiscardMaterial, meshGlassMaterial_default as MeshGlassMaterial, meshReflectionMaterial_default as MeshReflectionMaterial, meshWobbleMaterial_default as MeshWobbleMaterial, MouseParallax_default as MouseParallax, Ocean_default as Ocean, Octahedron_default as Octahedron, OrbitControls_default as OrbitControls, component_default$12 as Outline, Plane_default as Plane, component_default$13 as PointMaterial, PointerLockControls_default as PointerLockControls, PositionalAudio_default as PositionalAudio, Precipitation_default as Precipitation, QuadraticBezierLine_default as QuadraticBezierLine, component_default$14 as RandomizedLights, Reflector_default as Reflector, Ring_default as Ring, RoundedBox_default as RoundedBox, component_default$15 as Sampler, ScreenQuad_default as ScreenQuad, ScreenSizer_default as ScreenSizer, ScreenSpace_default as ScreenSpace, ScrollControls_default as ScrollControls, Sky_default as Sky, Smoke_default as Smoke, SoftShadows_default as SoftShadows, component_default$16 as Sparkles, Sphere_default as Sphere, Stage_default as Stage, Stars_default as Stars, Stats, StatsGl, Superformula_default as Superformula, Tetrahedron_default as Tetrahedron, Text3D_default as Text3D, Torus_default as Torus, TorusKnot_default as TorusKnot, TransformControls_default as TransformControls, Tube_default as Tube, component_default$17 as UseSVG, component_default$18 as UseTexture, ensureTextureNames, extractBindingPosition, getTextureAspect, getTextureName, hasSetter, invalidateDecalGeometry, pick, useAnimations, useBVH, useDecalEditor, useEnvironment, useFBO, useFBX, useGLTF, useGLTFExporter, useHelper, useIntersect, useMask, useProgress, useSVG, useSurfaceSampler, useTexture, useTextures, useVideoTexture };
16126
+ export { component_default as AccumulativeShadows, Align_default as Align, component_default$1 as AnimatedSprite, Backdrop_default as Backdrop, BakeShadows, BaseCameraControls, Billboard_default as Billboard, component_default$2 as Bounds, Box_default as Box, CameraControls_default as CameraControls, CameraShake_default as CameraShake, CatmullRomCurve3_default as CatmullRomCurve3, Circle_default as Circle, CircleShadow_default as CircleShadow, Cone_default as Cone, ContactShadows_default as ContactShadows, component_default$3 as CubeCamera, CubicBezierLine_default as CubicBezierLine, customShaderMaterial_default as CustomShaderMaterial, Cylinder_default as Cylinder, Decal_default as Decal, DecalDebugUI_default as DecalDebugUI, Dodecahedron_default as Dodecahedron, Edges_default as Edges, component_default$4 as Environment, component_default$5 as FBXModel, component_default$6 as Fbo, Fit_default as Fit, component_default$7 as GLTFModel, GlobalAudio, GradientTexture_default as GradientTexture, Grid_default as Grid, component_default$8 as Helper, holographicMaterial_default as HolographicMaterial, HTML_default as Html, Icosahedron_default as Icosahedron, component_default$9 as Image, KeyboardControls_default as KeyboardControls, LOD_default as LOD, component_default$10 as Lensflare, Levioso_default as Levioso, lightformer_default as Lightformer, Line2_default as Line2, MapControls_default as MapControls, MarchingCube_default as MarchingCube, MarchingCubes_default as MarchingCubes, MarchingPlane_default as MarchingPlane, component_default$11 as Mask, meshDiscardMaterial_default as MeshDiscardMaterial, meshGlassMaterial_default as MeshGlassMaterial, meshReflectionMaterial_default as MeshReflectionMaterial, meshTransmissionMaterial_default as MeshTransmissionMaterial, meshWobbleMaterial_default as MeshWobbleMaterial, MouseParallax_default as MouseParallax, Ocean_default as Ocean, Octahedron_default as Octahedron, OrbitControls_default as OrbitControls, component_default$12 as Outline, Plane_default as Plane, component_default$13 as PointMaterial, PointerLockControls_default as PointerLockControls, PositionalAudio_default as PositionalAudio, Precipitation_default as Precipitation, QuadraticBezierLine_default as QuadraticBezierLine, component_default$14 as RandomizedLights, Reflector_default as Reflector, Ring_default as Ring, RoundedBox_default as RoundedBox, component_default$15 as Sampler, ScreenQuad_default as ScreenQuad, ScreenSizer_default as ScreenSizer, ScreenSpace_default as ScreenSpace, ScrollControls_default as ScrollControls, Sky_default as Sky, Smoke_default as Smoke, SoftShadows_default as SoftShadows, component_default$16 as Sparkles, Sphere_default as Sphere, Stage_default as Stage, Stars_default as Stars, Stats, StatsGl, Superformula_default as Superformula, Tetrahedron_default as Tetrahedron, Text3D_default as Text3D, Torus_default as Torus, TorusKnot_default as TorusKnot, TransformControls_default as TransformControls, Tube_default as Tube, component_default$17 as UseSVG, component_default$18 as UseTexture, ensureTextureNames, extractBindingPosition, getTextureAspect, getTextureName, hasSetter, invalidateDecalGeometry, pick, useAnimations, useBVH, useDecalEditor, useEnvironment, useFBO, useFBX, useGLTF, useGLTFExporter, useHelper, useIntersect, useMask, useProgress, useSVG, useSurfaceSampler, useTexture, useTextures, useVideoTexture };