@tresjs/cientos 5.7.2 → 5.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/trescientos.d.ts +8699 -3193
- package/dist/trescientos.js +607 -105
- package/package.json +23 -23
package/dist/trescientos.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/cientos
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.8.1
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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.
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
watch(controlsRef, (value) => {
|
|
5006
|
-
if (
|
|
5007
|
-
|
|
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
|
-
|
|
5011
|
-
|
|
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
|
|
5021
|
-
if (
|
|
5022
|
-
|
|
5023
|
-
|
|
5024
|
-
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
8017
|
-
var index_vue_vue_type_script_setup_true_lang_default$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
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.
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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(() =>
|
|
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/
|
|
13620
|
-
studio: "studio/
|
|
13621
|
-
city: "city/
|
|
13622
|
-
umbrellas: "outdoor/
|
|
13623
|
-
night: "outdoor/
|
|
13624
|
-
forest: "
|
|
13625
|
-
snow: "outdoor/
|
|
13626
|
-
dawn: "kiara/
|
|
13627
|
-
hangar: "indoor/
|
|
13628
|
-
urban: "indoor/
|
|
13629
|
-
modern: "city/
|
|
13630
|
-
shangai: "city/
|
|
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
|
|
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.
|
|
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.
|
|
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 };
|