@react-three/drei 9.74.13 → 9.74.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/core/CatmullRomLine.js +0 -2
  2. package/core/Cloud.js +0 -3
  3. package/core/CubeCamera.js +0 -1
  4. package/core/CubicBezierLine.js +0 -2
  5. package/core/Environment.js +0 -1
  6. package/core/Example.js +0 -6
  7. package/core/FaceControls.cjs.js +1 -1
  8. package/core/FaceControls.js +0 -2
  9. package/core/FaceLandmarker.cjs.js +1 -1
  10. package/core/FaceLandmarker.js +3 -4
  11. package/core/Facemesh.js +0 -2
  12. package/core/GizmoHelper.js +0 -3
  13. package/core/GizmoViewcube.js +0 -4
  14. package/core/GizmoViewport.js +0 -4
  15. package/core/Gltf.js +0 -4
  16. package/core/MeshDiscardMaterial.js +0 -2
  17. package/core/MeshDistortMaterial.js +1 -2
  18. package/core/MeshReflectorMaterial.js +0 -1
  19. package/core/MeshRefractionMaterial.js +0 -2
  20. package/core/MeshTransmissionMaterial.js +0 -1
  21. package/core/OrthographicCamera.js +0 -1
  22. package/core/PerspectiveCamera.js +0 -1
  23. package/core/QuadraticBezierLine.js +0 -2
  24. package/core/Reflector.js +0 -1
  25. package/core/SpotLight.js +1 -2
  26. package/core/Stage.js +0 -7
  27. package/core/Text3D.js +0 -1
  28. package/core/Wireframe.js +0 -1
  29. package/core/index.cjs.js +1 -1
  30. package/core/index.js +1 -0
  31. package/core/useKTX2.js +0 -1
  32. package/core/useMatcapTexture.js +0 -2
  33. package/core/useNormalTexture.js +0 -1
  34. package/index.cjs.js +1 -1
  35. package/materials/DiscardMaterial.js +0 -1
  36. package/materials/MeshRefractionMaterial.js +1 -1
  37. package/native/index.cjs.js +1 -1
  38. package/native/index.js +1 -0
  39. package/package.json +2 -2
  40. package/web/Loader.js +0 -2
  41. package/web/index.cjs.js +1 -1
  42. package/web/index.js +1 -0
  43. package/web/pivotControls/AxisArrow.js +0 -3
  44. package/web/pivotControls/AxisRotator.js +0 -3
  45. package/web/pivotControls/PlaneSlider.js +0 -3
  46. package/web/pivotControls/index.js +0 -5
  47. package/src/core/AccumulativeShadows.js +0 -311
  48. package/src/core/AdaptiveDpr.js +0 -28
  49. package/src/core/AdaptiveEvents.js +0 -20
  50. package/src/core/ArcballControls.js +0 -67
  51. package/src/core/AsciiRenderer.js +0 -60
  52. package/src/core/BBAnchor.js +0 -37
  53. package/src/core/Backdrop.js +0 -36
  54. package/src/core/BakeShadows.js +0 -16
  55. package/src/core/Billboard.js +0 -41
  56. package/src/core/Bounds.js +0 -245
  57. package/src/core/CameraControls.js +0 -92
  58. package/src/core/CameraShake.js +0 -61
  59. package/src/core/CatmullRomLine.js +0 -44
  60. package/src/core/Caustics.js +0 -375
  61. package/src/core/Center.js +0 -66
  62. package/src/core/Clone.js +0 -102
  63. package/src/core/Cloud.js +0 -59
  64. package/src/core/ComputedAttribute.js +0 -34
  65. package/src/core/ContactShadows.js +0 -114
  66. package/src/core/CubeCamera.js +0 -43
  67. package/src/core/CubicBezierLine.js +0 -28
  68. package/src/core/CurveModifier.js +0 -34
  69. package/src/core/Decal.js +0 -92
  70. package/src/core/Detailed.js +0 -34
  71. package/src/core/DeviceOrientationControls.js +0 -51
  72. package/src/core/Edges.js +0 -36
  73. package/src/core/Effects.js +0 -93
  74. package/src/core/Environment.js +0 -132
  75. package/src/core/Example.js +0 -42
  76. package/src/core/FaceControls.js +0 -315
  77. package/src/core/FaceLandmarker.js +0 -43
  78. package/src/core/Facemesh.js +0 -4545
  79. package/src/core/FirstPersonControls.js +0 -38
  80. package/src/core/Float.js +0 -36
  81. package/src/core/FlyControls.js +0 -55
  82. package/src/core/GizmoHelper.js +0 -111
  83. package/src/core/GizmoViewcube.js +0 -152
  84. package/src/core/GizmoViewport.js +0 -152
  85. package/src/core/Gltf.js +0 -20
  86. package/src/core/GradientTexture.js +0 -33
  87. package/src/core/Grid.js +0 -112
  88. package/src/core/Hud.js +0 -58
  89. package/src/core/Image.js +0 -119
  90. package/src/core/Instances.js +0 -215
  91. package/src/core/Lightformer.js +0 -51
  92. package/src/core/Line.js +0 -68
  93. package/src/core/MapControls.js +0 -64
  94. package/src/core/MarchingCubes.js +0 -76
  95. package/src/core/Mask.js +0 -42
  96. package/src/core/MeshDiscardMaterial.js +0 -15
  97. package/src/core/MeshDistortMaterial.js +0 -79
  98. package/src/core/MeshPortalMaterial.js +0 -381
  99. package/src/core/MeshReflectorMaterial.js +0 -182
  100. package/src/core/MeshRefractionMaterial.js +0 -79
  101. package/src/core/MeshTransmissionMaterial.js +0 -395
  102. package/src/core/MeshWobbleMaterial.js +0 -65
  103. package/src/core/OrbitControls.js +0 -82
  104. package/src/core/OrthographicCamera.js +0 -77
  105. package/src/core/PerformanceMonitor.js +0 -121
  106. package/src/core/PerspectiveCamera.js +0 -73
  107. package/src/core/PointMaterial.js +0 -36
  108. package/src/core/PointerLockControls.js +0 -90
  109. package/src/core/Points.js +0 -227
  110. package/src/core/PositionalAudio.js +0 -51
  111. package/src/core/Preload.js +0 -45
  112. package/src/core/QuadraticBezierLine.js +0 -44
  113. package/src/core/Reflector.js +0 -182
  114. package/src/core/RenderTexture.js +0 -96
  115. package/src/core/Resize.js +0 -39
  116. package/src/core/RoundedBox.js +0 -52
  117. package/src/core/Sampler.js +0 -85
  118. package/src/core/ScreenQuad.js +0 -24
  119. package/src/core/ScreenSpace.js +0 -25
  120. package/src/core/Segments.js +0 -102
  121. package/src/core/Shadow.js +0 -42
  122. package/src/core/Sky.js +0 -39
  123. package/src/core/Sparkles.js +0 -139
  124. package/src/core/SpotLight.js +0 -231
  125. package/src/core/SpriteAnimator.js +0 -342
  126. package/src/core/Stage.js +0 -135
  127. package/src/core/Stars.js +0 -108
  128. package/src/core/Stats.js +0 -30
  129. package/src/core/Svg.js +0 -59
  130. package/src/core/Text.js +0 -58
  131. package/src/core/Text3D.js +0 -76
  132. package/src/core/TrackballControls.js +0 -72
  133. package/src/core/Trail.js +0 -161
  134. package/src/core/TransformControls.js +0 -106
  135. package/src/core/Wireframe.js +0 -185
  136. package/src/core/meshBounds.js +0 -38
  137. package/src/core/shaderMaterial.js +0 -39
  138. package/src/core/shapes.js +0 -68
  139. package/src/core/softShadows.js +0 -161
  140. package/src/core/useAnimations.js +0 -56
  141. package/src/core/useAspect.js +0 -10
  142. package/src/core/useBVH.js +0 -90
  143. package/src/core/useBoxProjectedEnv.js +0 -98
  144. package/src/core/useCamera.js +0 -27
  145. package/src/core/useContextBridge.js +0 -21
  146. package/src/core/useCubeCamera.js +0 -49
  147. package/src/core/useCubeTexture.js +0 -18
  148. package/src/core/useDepthBuffer.js +0 -38
  149. package/src/core/useDetectGPU.js +0 -6
  150. package/src/core/useEnvironment.js +0 -48
  151. package/src/core/useFBO.js +0 -53
  152. package/src/core/useFBX.js +0 -12
  153. package/src/core/useFont.js +0 -20
  154. package/src/core/useGLTF.js +0 -37
  155. package/src/core/useHelper.js +0 -31
  156. package/src/core/useIntersect.js +0 -39
  157. package/src/core/useKTX2.js +0 -38
  158. package/src/core/useMatcapTexture.js +0 -45
  159. package/src/core/useNormalTexture.js +0 -30
  160. package/src/core/useProgress.js +0 -50
  161. package/src/core/useTexture.js +0 -35
  162. package/src/core/useTrailTexture.js +0 -164
  163. package/src/core/useVideoTexture.js +0 -41
  164. package/src/helpers/environment-assets.js +0 -14
  165. package/src/helpers/useEffectfulState.js +0 -18
  166. package/src/materials/BlurPass.js +0 -75
  167. package/src/materials/ConvolutionMaterial.js +0 -99
  168. package/src/materials/DiscardMaterial.js +0 -5
  169. package/src/materials/MeshReflectorMaterial.js +0 -290
  170. package/src/materials/MeshRefractionMaterial.js +0 -171
  171. package/src/materials/SpotLightMaterial.js +0 -111
  172. package/src/materials/WireframeMaterial.js +0 -235
  173. package/src/web/CycleRaycast.js +0 -97
  174. package/src/web/Html.js +0 -417
  175. package/src/web/KeyboardControls.js +0 -101
  176. package/src/web/Loader.js +0 -98
  177. package/src/web/PresentationControls.js +0 -86
  178. package/src/web/ScrollControls.js +0 -246
  179. package/src/web/Select.js +0 -175
  180. package/src/web/View.js +0 -206
  181. package/src/web/pivotControls/AxisArrow.js +0 -202
  182. package/src/web/pivotControls/AxisRotator.js +0 -235
  183. package/src/web/pivotControls/PlaneSlider.js +0 -211
  184. package/src/web/pivotControls/context.js +0 -5
  185. package/src/web/pivotControls/index.js +0 -223
  186. package/src/web/useCursor.js +0 -12
  187. /package/{src/helpers → helpers}/glsl/DefaultSpotlightShadowShadows.glsl.js +0 -0
  188. /package/{src/helpers → helpers}/glsl/distort.vert.glsl.js +0 -0
  189. /package/{src/index.js → index.js} +0 -0
@@ -1,76 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as THREE from 'three';
3
- import * as React from 'react';
4
- import mergeRefs from 'react-merge-refs';
5
- import { MarchingCubes as MarchingCubes$1 } from 'three-stdlib';
6
- import { useFrame } from '@react-three/fiber';
7
-
8
- const globalContext = /*#__PURE__*/React.createContext(null);
9
- const MarchingCubes = /*#__PURE__*/React.forwardRef(({
10
- resolution = 28,
11
- maxPolyCount = 10000,
12
- enableUvs = false,
13
- enableColors = false,
14
- children,
15
- ...props
16
- }, ref) => {
17
- const marchingCubesRef = React.useRef(null);
18
- const marchingCubes = React.useMemo(() => new MarchingCubes$1(resolution, null, enableUvs, enableColors, maxPolyCount), [resolution, maxPolyCount, enableUvs, enableColors]);
19
- const api = React.useMemo(() => ({
20
- getParent: () => marchingCubesRef
21
- }), []);
22
- useFrame(() => {
23
- marchingCubes.update();
24
- marchingCubes.reset();
25
- }, -1); // To make sure the reset runs before the balls or planes are added
26
-
27
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("primitive", _extends({
28
- object: marchingCubes,
29
- ref: mergeRefs([marchingCubesRef, ref])
30
- }, props), /*#__PURE__*/React.createElement(globalContext.Provider, {
31
- value: api
32
- }, children)));
33
- });
34
- const MarchingCube = /*#__PURE__*/React.forwardRef(({
35
- strength = 0.5,
36
- subtract = 12,
37
- color,
38
- ...props
39
- }, ref) => {
40
- const {
41
- getParent
42
- } = React.useContext(globalContext);
43
- const parentRef = React.useMemo(() => getParent(), [getParent]);
44
- const cubeRef = React.useRef();
45
- const vec = new THREE.Vector3();
46
- useFrame(state => {
47
- if (!parentRef.current || !cubeRef.current) return;
48
- cubeRef.current.getWorldPosition(vec);
49
- parentRef.current.addBall(0.5 + vec.x * 0.5, 0.5 + vec.y * 0.5, 0.5 + vec.z * 0.5, strength, subtract, color);
50
- });
51
- return /*#__PURE__*/React.createElement("group", _extends({
52
- ref: mergeRefs([ref, cubeRef])
53
- }, props));
54
- });
55
- const MarchingPlane = /*#__PURE__*/React.forwardRef(({
56
- planeType: _planeType = 'x',
57
- strength = 0.5,
58
- subtract = 12,
59
- ...props
60
- }, ref) => {
61
- const {
62
- getParent
63
- } = React.useContext(globalContext);
64
- const parentRef = React.useMemo(() => getParent(), [getParent]);
65
- const wallRef = React.useRef();
66
- const planeType = React.useMemo(() => _planeType === 'x' ? 'addPlaneX' : _planeType === 'y' ? 'addPlaneY' : 'addPlaneZ', [_planeType]);
67
- useFrame(() => {
68
- if (!parentRef.current || !wallRef.current) return;
69
- parentRef.current[planeType](strength, subtract);
70
- });
71
- return /*#__PURE__*/React.createElement("group", _extends({
72
- ref: mergeRefs([ref, wallRef])
73
- }, props));
74
- });
75
-
76
- export { MarchingCube, MarchingCubes, MarchingPlane };
package/src/core/Mask.js DELETED
@@ -1,42 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as THREE from 'three';
3
- import * as React from 'react';
4
-
5
- const Mask = /*#__PURE__*/React.forwardRef(({
6
- id = 1,
7
- colorWrite = false,
8
- depthWrite = false,
9
- ...props
10
- }, fref) => {
11
- const ref = React.useRef(null);
12
- const spread = React.useMemo(() => ({
13
- colorWrite,
14
- depthWrite,
15
- stencilWrite: true,
16
- stencilRef: id,
17
- stencilFunc: THREE.AlwaysStencilFunc,
18
- stencilFail: THREE.ReplaceStencilOp,
19
- stencilZFail: THREE.ReplaceStencilOp,
20
- stencilZPass: THREE.ReplaceStencilOp
21
- }), [id, colorWrite, depthWrite]);
22
- React.useLayoutEffect(() => {
23
- Object.assign(ref.current.material, spread);
24
- });
25
- React.useImperativeHandle(fref, () => ref.current, []);
26
- return /*#__PURE__*/React.createElement("mesh", _extends({
27
- ref: ref,
28
- renderOrder: -id
29
- }, props));
30
- });
31
- function useMask(id, inverse = false) {
32
- return {
33
- stencilWrite: true,
34
- stencilRef: id,
35
- stencilFunc: inverse ? THREE.NotEqualStencilFunc : THREE.EqualStencilFunc,
36
- stencilFail: THREE.KeepStencilOp,
37
- stencilZFail: THREE.KeepStencilOp,
38
- stencilZPass: THREE.KeepStencilOp
39
- };
40
- }
41
-
42
- export { Mask, useMask };
@@ -1,15 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as React from 'react';
3
- import { extend } from '@react-three/fiber';
4
- import { DiscardMaterial } from '../materials/DiscardMaterial.js';
5
-
6
- const MeshDiscardMaterial = /*#__PURE__*/React.forwardRef((props, fref) => {
7
- extend({
8
- DiscardMaterialImpl: DiscardMaterial
9
- });
10
- return /*#__PURE__*/React.createElement("discardMaterialImpl", _extends({
11
- ref: fref
12
- }, props));
13
- });
14
-
15
- export { MeshDiscardMaterial };
@@ -1,79 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as React from 'react';
3
- import { MeshPhysicalMaterial } from 'three';
4
- import { useFrame } from '@react-three/fiber';
5
- import distort from '../helpers/glsl/distort.vert.glsl.js';
6
-
7
- class DistortMaterialImpl extends MeshPhysicalMaterial {
8
- constructor(parameters = {}) {
9
- super(parameters);
10
- this.setValues(parameters);
11
- this._time = {
12
- value: 0
13
- };
14
- this._distort = {
15
- value: 0.4
16
- };
17
- this._radius = {
18
- value: 1
19
- };
20
- }
21
-
22
- onBeforeCompile(shader) {
23
- shader.uniforms.time = this._time;
24
- shader.uniforms.radius = this._radius;
25
- shader.uniforms.distort = this._distort;
26
- shader.vertexShader = `
27
- uniform float time;
28
- uniform float radius;
29
- uniform float distort;
30
- ${distort}
31
- ${shader.vertexShader}
32
- `;
33
- shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `
34
- float updateTime = time / 50.0;
35
- float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));
36
- vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));
37
- `);
38
- }
39
-
40
- get time() {
41
- return this._time.value;
42
- }
43
-
44
- set time(v) {
45
- this._time.value = v;
46
- }
47
-
48
- get distort() {
49
- return this._distort.value;
50
- }
51
-
52
- set distort(v) {
53
- this._distort.value = v;
54
- }
55
-
56
- get radius() {
57
- return this._radius.value;
58
- }
59
-
60
- set radius(v) {
61
- this._radius.value = v;
62
- }
63
-
64
- }
65
-
66
- const MeshDistortMaterial = /*#__PURE__*/React.forwardRef(({
67
- speed = 1,
68
- ...props
69
- }, ref) => {
70
- const [material] = React.useState(() => new DistortMaterialImpl());
71
- useFrame(state => material && (material.time = state.clock.getElapsedTime() * speed));
72
- return /*#__PURE__*/React.createElement("primitive", _extends({
73
- object: material,
74
- ref: ref,
75
- attach: "material"
76
- }, props));
77
- });
78
-
79
- export { MeshDistortMaterial };
@@ -1,381 +0,0 @@
1
- import _extends from '@babel/runtime/helpers/esm/extends';
2
- import * as THREE from 'three';
3
- import * as React from 'react';
4
- import { extend, useThree, useFrame } from '@react-three/fiber';
5
- import { useFBO } from './useFBO.js';
6
- import { RenderTexture } from './RenderTexture.js';
7
- import { shaderMaterial } from './shaderMaterial.js';
8
- import { FullScreenQuad } from 'three-stdlib';
9
-
10
- const PortalMaterialImpl = shaderMaterial({
11
- blur: 0,
12
- map: null,
13
- sdf: null,
14
- size: 0,
15
- resolution: new THREE.Vector2()
16
- }, `varying vec2 vUv;
17
- void main() {
18
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
19
- vUv = uv;
20
- }`, `uniform sampler2D sdf;
21
- uniform sampler2D map;
22
- uniform float blur;
23
- uniform float size;
24
- uniform float time;
25
- uniform vec2 resolution;
26
- varying vec2 vUv;
27
- #include <packing>
28
- void main() {
29
- vec2 uv = gl_FragCoord.xy / resolution.xy;
30
- vec4 t = texture2D(map, uv);
31
- float k = blur;
32
- float d = texture2D(sdf, vUv).r/size;
33
- float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0));
34
- gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha);
35
- #include <tonemapping_fragment>
36
- #include <encodings_fragment>
37
- }`);
38
- const MeshPortalMaterial = /*#__PURE__*/React.forwardRef(({
39
- children,
40
- blur = 0,
41
- eventPriority,
42
- renderPriority,
43
- worldUnits = false,
44
- resolution = 512,
45
- ...props
46
- }, fref) => {
47
- extend({
48
- PortalMaterialImpl
49
- });
50
- const ref = React.useRef(null);
51
- const {
52
- gl,
53
- size,
54
- events,
55
- viewport
56
- } = useThree();
57
- const maskRenderTarget = useFBO(resolution, resolution);
58
- React.useLayoutEffect(() => {
59
- var _ref$current;
60
-
61
- let mask = (_ref$current = ref.current) == null ? void 0 : _ref$current.__r3f.parent;
62
- if (!mask) return; // Apply the SDF mask only once
63
-
64
- if (blur && ref.current.sdf === null) {
65
- const tempMesh = new THREE.Mesh(mask.geometry, new THREE.MeshBasicMaterial());
66
- const boundingBox = new THREE.Box3().setFromBufferAttribute(tempMesh.geometry.attributes.position);
67
- const orthoCam = new THREE.OrthographicCamera(boundingBox.min.x * (1 + 2 / resolution), boundingBox.max.x * (1 + 2 / resolution), boundingBox.max.y * (1 + 2 / resolution), boundingBox.min.y * (1 + 2 / resolution), 0.1, 1000);
68
- orthoCam.position.set(0, 0, 1);
69
- orthoCam.lookAt(0, 0, 0);
70
- gl.setRenderTarget(maskRenderTarget);
71
- gl.render(tempMesh, orthoCam);
72
- const sg = makeSDFGenerator(resolution, resolution, gl);
73
- const sdf = sg(maskRenderTarget.texture);
74
- const readSdf = new Float32Array(resolution * resolution);
75
- gl.readRenderTargetPixels(sdf, 0, 0, resolution, resolution, readSdf); // Get smallest value in sdf
76
-
77
- let min = Infinity;
78
-
79
- for (let i = 0; i < readSdf.length; i++) {
80
- if (readSdf[i] < min) min = readSdf[i];
81
- }
82
-
83
- min = -min;
84
- ref.current.size = min;
85
- ref.current.sdf = sdf.texture;
86
- gl.setRenderTarget(null);
87
- }
88
- }, [resolution, blur]);
89
- React.useImperativeHandle(fref, () => ref.current);
90
- return /*#__PURE__*/React.createElement("portalMaterialImpl", _extends({
91
- ref: ref,
92
- blur: blur,
93
- resolution: [size.width * viewport.dpr, size.height * viewport.dpr],
94
- toneMapped: false,
95
- attach: "material"
96
- }, props), /*#__PURE__*/React.createElement(RenderTexture, {
97
- attach: "map",
98
- eventPriority: eventPriority,
99
- renderPriority: renderPriority,
100
- compute: events.compute
101
- }, children, /*#__PURE__*/React.createElement(CopyMatrix, {
102
- material: ref,
103
- worldUnits: worldUnits
104
- })));
105
- });
106
-
107
- function CopyMatrix({
108
- material,
109
- worldUnits
110
- }) {
111
- const scene = useThree(state => state.scene);
112
- React.useLayoutEffect(() => {
113
- scene.matrixAutoUpdate = false;
114
- }, []);
115
- useFrame(() => {
116
- var _material$current;
117
-
118
- let parent = material == null ? void 0 : (_material$current = material.current) == null ? void 0 : _material$current.__r3f.parent;
119
-
120
- if (parent) {
121
- if (!worldUnits) scene.matrixWorld.copy(parent.matrixWorld);else scene.matrixWorld.identity();
122
- }
123
- });
124
- return /*#__PURE__*/React.createElement(React.Fragment, null);
125
- }
126
-
127
- const makeSDFGenerator = (clientWidth, clientHeight, renderer) => {
128
- let finalTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {
129
- minFilter: THREE.LinearMipmapLinearFilter,
130
- magFilter: THREE.LinearFilter,
131
- type: THREE.FloatType,
132
- format: THREE.RedFormat,
133
- generateMipmaps: true
134
- });
135
- let outsideRenderTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {
136
- minFilter: THREE.NearestFilter,
137
- magFilter: THREE.NearestFilter
138
- });
139
- let insideRenderTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {
140
- minFilter: THREE.NearestFilter,
141
- magFilter: THREE.NearestFilter
142
- });
143
- let outsideRenderTarget2 = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {
144
- minFilter: THREE.NearestFilter,
145
- magFilter: THREE.NearestFilter
146
- });
147
- let insideRenderTarget2 = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {
148
- minFilter: THREE.NearestFilter,
149
- magFilter: THREE.NearestFilter
150
- });
151
- let outsideRenderTargetFinal = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {
152
- minFilter: THREE.NearestFilter,
153
- magFilter: THREE.NearestFilter,
154
- type: THREE.FloatType,
155
- format: THREE.RedFormat
156
- });
157
- let insideRenderTargetFinal = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {
158
- minFilter: THREE.NearestFilter,
159
- magFilter: THREE.NearestFilter,
160
- type: THREE.FloatType,
161
- format: THREE.RedFormat
162
- });
163
- const uvRender = new FullScreenQuad(new THREE.ShaderMaterial({
164
- uniforms: {
165
- tex: {
166
- value: null
167
- }
168
- },
169
- vertexShader:
170
- /*glsl*/
171
- `
172
- varying vec2 vUv;
173
- void main() {
174
- vUv = uv;
175
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
176
- }`,
177
- fragmentShader:
178
- /*glsl*/
179
- `
180
- uniform sampler2D tex;
181
- varying vec2 vUv;
182
- #include <packing>
183
- void main() {
184
- gl_FragColor = pack2HalfToRGBA(vUv * (round(texture2D(tex, vUv).x)));
185
- }`
186
- }));
187
- const uvRenderInside = new FullScreenQuad(new THREE.ShaderMaterial({
188
- uniforms: {
189
- tex: {
190
- value: null
191
- }
192
- },
193
- vertexShader:
194
- /*glsl*/
195
- `
196
- varying vec2 vUv;
197
- void main() {
198
- vUv = uv;
199
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
200
- }`,
201
- fragmentShader:
202
- /*glsl*/
203
- `
204
- uniform sampler2D tex;
205
- varying vec2 vUv;
206
- #include <packing>
207
- void main() {
208
- gl_FragColor = pack2HalfToRGBA(vUv * (1.0 - round(texture2D(tex, vUv).x)));
209
- }`
210
- }));
211
- const jumpFloodRender = new FullScreenQuad(new THREE.ShaderMaterial({
212
- uniforms: {
213
- tex: {
214
- value: null
215
- },
216
- offset: {
217
- value: 0.0
218
- },
219
- level: {
220
- value: 0.0
221
- },
222
- maxSteps: {
223
- value: 0.0
224
- }
225
- },
226
- vertexShader:
227
- /*glsl*/
228
- `
229
- varying vec2 vUv;
230
- void main() {
231
- vUv = uv;
232
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
233
- }`,
234
- fragmentShader:
235
- /*glsl*/
236
- `
237
- varying vec2 vUv;
238
- uniform sampler2D tex;
239
- uniform float offset;
240
- uniform float level;
241
- uniform float maxSteps;
242
- #include <packing>
243
- void main() {
244
- float closestDist = 9999999.9;
245
- vec2 closestPos = vec2(0.0);
246
- for (float x = -1.0; x <= 1.0; x += 1.0) {
247
- for (float y = -1.0; y <= 1.0; y += 1.0) {
248
- vec2 voffset = vUv;
249
- voffset += vec2(x, y) * vec2(${1 / clientWidth}, ${1 / clientHeight}) * offset;
250
- vec2 pos = unpackRGBATo2Half(texture2D(tex, voffset));
251
- float dist = distance(pos.xy, vUv);
252
- if(pos.x != 0.0 && pos.y != 0.0 && dist < closestDist) {
253
- closestDist = dist;
254
- closestPos = pos;
255
- }
256
- }
257
- }
258
- gl_FragColor = pack2HalfToRGBA(closestPos);
259
- }`
260
- }));
261
- const distanceFieldRender = new FullScreenQuad(new THREE.ShaderMaterial({
262
- uniforms: {
263
- tex: {
264
- value: null
265
- },
266
- size: {
267
- value: new THREE.Vector2(clientWidth, clientHeight)
268
- }
269
- },
270
- vertexShader:
271
- /*glsl*/
272
- `
273
- varying vec2 vUv;
274
- void main() {
275
- vUv = uv;
276
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
277
- }`,
278
- fragmentShader:
279
- /*glsl*/
280
- `
281
- varying vec2 vUv;
282
- uniform sampler2D tex;
283
- uniform vec2 size;
284
- #include <packing>
285
- void main() {
286
- gl_FragColor = vec4(distance(size * unpackRGBATo2Half(texture2D(tex, vUv)), size * vUv), 0.0, 0.0, 0.0);
287
- }`
288
- }));
289
- const compositeRender = new FullScreenQuad(new THREE.ShaderMaterial({
290
- uniforms: {
291
- inside: {
292
- value: insideRenderTargetFinal.texture
293
- },
294
- outside: {
295
- value: outsideRenderTargetFinal.texture
296
- },
297
- tex: {
298
- value: null
299
- }
300
- },
301
- vertexShader:
302
- /*glsl*/
303
- `
304
- varying vec2 vUv;
305
- void main() {
306
- vUv = uv;
307
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
308
- }`,
309
- fragmentShader:
310
- /*glsl*/
311
- `
312
- varying vec2 vUv;
313
- uniform sampler2D inside;
314
- uniform sampler2D outside;
315
- uniform sampler2D tex;
316
- #include <packing>
317
- void main() {
318
- float i = texture2D(inside, vUv).x;
319
- float o =texture2D(outside, vUv).x;
320
- if (texture2D(tex, vUv).x == 0.0) {
321
- gl_FragColor = vec4(o, 0.0, 0.0, 0.0);
322
- } else {
323
- gl_FragColor = vec4(-i, 0.0, 0.0, 0.0);
324
- }
325
- }`
326
- }));
327
- return image => {
328
- let ft = finalTarget;
329
- image.minFilter = THREE.NearestFilter;
330
- image.magFilter = THREE.NearestFilter;
331
- uvRender.material.uniforms.tex.value = image;
332
- renderer.setRenderTarget(outsideRenderTarget);
333
- uvRender.render(renderer);
334
- const passes = Math.ceil(Math.log(Math.max(clientWidth, clientHeight)) / Math.log(2.0));
335
- let lastTarget = outsideRenderTarget;
336
- let target = null;
337
-
338
- for (let i = 0; i < passes; i++) {
339
- const offset = Math.pow(2, passes - i - 1);
340
- target = lastTarget === outsideRenderTarget ? outsideRenderTarget2 : outsideRenderTarget;
341
- jumpFloodRender.material.uniforms.level.value = i;
342
- jumpFloodRender.material.uniforms.maxSteps.value = passes;
343
- jumpFloodRender.material.uniforms.offset.value = offset;
344
- jumpFloodRender.material.uniforms.tex.value = lastTarget.texture;
345
- renderer.setRenderTarget(target);
346
- jumpFloodRender.render(renderer);
347
- lastTarget = target;
348
- }
349
-
350
- renderer.setRenderTarget(outsideRenderTargetFinal);
351
- distanceFieldRender.material.uniforms.tex.value = target.texture;
352
- distanceFieldRender.render(renderer);
353
- uvRenderInside.material.uniforms.tex.value = image;
354
- renderer.setRenderTarget(insideRenderTarget);
355
- uvRenderInside.render(renderer);
356
- lastTarget = insideRenderTarget;
357
-
358
- for (let i = 0; i < passes; i++) {
359
- const offset = Math.pow(2, passes - i - 1);
360
- target = lastTarget === insideRenderTarget ? insideRenderTarget2 : insideRenderTarget;
361
- jumpFloodRender.material.uniforms.level.value = i;
362
- jumpFloodRender.material.uniforms.maxSteps.value = passes;
363
- jumpFloodRender.material.uniforms.offset.value = offset;
364
- jumpFloodRender.material.uniforms.tex.value = lastTarget.texture;
365
- renderer.setRenderTarget(target);
366
- jumpFloodRender.render(renderer);
367
- lastTarget = target;
368
- }
369
-
370
- renderer.setRenderTarget(insideRenderTargetFinal);
371
- distanceFieldRender.material.uniforms.tex.value = target.texture;
372
- distanceFieldRender.render(renderer);
373
- renderer.setRenderTarget(ft);
374
- compositeRender.material.uniforms.tex.value = image;
375
- compositeRender.render(renderer);
376
- renderer.setRenderTarget(null);
377
- return ft;
378
- };
379
- };
380
-
381
- export { MeshPortalMaterial };