@needle-tools/engine 5.1.0-alpha → 5.1.0-canary.0d9f44e

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 (195) hide show
  1. package/.needle/generated/needle-bindings.gen.d.ts +5 -0
  2. package/CHANGELOG.md +9 -1
  3. package/SKILL.md +39 -21
  4. package/components.needle.json +1 -1
  5. package/dist/{gltf-progressive-DJBMx-zB.umd.cjs → gltf-progressive-BmblPzFj.umd.cjs} +4 -4
  6. package/dist/{gltf-progressive-BryRjllq.min.js → gltf-progressive-CN_mbb66.min.js} +2 -2
  7. package/dist/{gltf-progressive-Cl167Vjx.js → gltf-progressive-DUlhxdv4.js} +5 -2
  8. package/dist/{needle-engine.bundle-CwhCzjep.js → needle-engine.bundle-B35n_IHX.js} +13637 -13081
  9. package/dist/{needle-engine.bundle-wM-BWPX9.umd.cjs → needle-engine.bundle-CDj15wRB.umd.cjs} +250 -174
  10. package/dist/needle-engine.bundle-D5zzggEG.min.js +1732 -0
  11. package/dist/needle-engine.d.ts +316 -26
  12. package/dist/needle-engine.js +569 -563
  13. package/dist/needle-engine.min.js +1 -1
  14. package/dist/needle-engine.umd.cjs +1 -1
  15. package/dist/{postprocessing-B_9sKVU7.min.js → postprocessing-B571qGWR.min.js} +34 -34
  16. package/dist/{postprocessing-WDc9WwI3.js → postprocessing-CfrLAbLX.js} +0 -1
  17. package/dist/{postprocessing-B2wb6pzI.umd.cjs → postprocessing-CiGkAeM9.umd.cjs} +17 -17
  18. package/dist/three-examples.js +4289 -3778
  19. package/dist/three-examples.min.js +301 -14
  20. package/dist/three-examples.umd.cjs +301 -14
  21. package/dist/{vendor-CAcsI0eU.js → vendor-BFrMaK9q.js} +8983 -9136
  22. package/dist/vendor-CJmyOrCq.min.js +1116 -0
  23. package/dist/vendor-DkMW3WY4.umd.cjs +1116 -0
  24. package/lib/engine/api.d.ts +12 -0
  25. package/lib/engine/api.js +2 -0
  26. package/lib/engine/api.js.map +1 -1
  27. package/lib/engine/debug/debug_environment.js +1 -1
  28. package/lib/engine/debug/debug_environment.js.map +1 -1
  29. package/lib/engine/engine_application.js +8 -6
  30. package/lib/engine/engine_application.js.map +1 -1
  31. package/lib/engine/engine_components.js +5 -1
  32. package/lib/engine/engine_components.js.map +1 -1
  33. package/lib/engine/engine_constants.js +6 -0
  34. package/lib/engine/engine_constants.js.map +1 -1
  35. package/lib/engine/engine_context.d.ts +31 -2
  36. package/lib/engine/engine_context.js +43 -2
  37. package/lib/engine/engine_context.js.map +1 -1
  38. package/lib/engine/engine_context_registry.js +1 -1
  39. package/lib/engine/engine_context_registry.js.map +1 -1
  40. package/lib/engine/engine_init.js +7 -0
  41. package/lib/engine/engine_init.js.map +1 -1
  42. package/lib/engine/engine_input.d.ts +3 -2
  43. package/lib/engine/engine_input.js +3 -2
  44. package/lib/engine/engine_input.js.map +1 -1
  45. package/lib/engine/engine_license.d.ts +2 -0
  46. package/lib/engine/engine_license.js +25 -15
  47. package/lib/engine/engine_license.js.map +1 -1
  48. package/lib/engine/engine_lifecycle_functions_internal.js +5 -0
  49. package/lib/engine/engine_lifecycle_functions_internal.js.map +1 -1
  50. package/lib/engine/engine_networking_blob.d.ts +1 -1
  51. package/lib/engine/engine_networking_blob.js +5 -11
  52. package/lib/engine/engine_networking_blob.js.map +1 -1
  53. package/lib/engine/engine_physics_rapier.d.ts +3 -0
  54. package/lib/engine/engine_physics_rapier.js +13 -10
  55. package/lib/engine/engine_physics_rapier.js.map +1 -1
  56. package/lib/engine/engine_pmrem.js +2 -2
  57. package/lib/engine/engine_pmrem.js.map +1 -1
  58. package/lib/engine/engine_scenedata.d.ts +34 -0
  59. package/lib/engine/engine_scenedata.js +135 -0
  60. package/lib/engine/engine_scenedata.js.map +1 -0
  61. package/lib/engine/engine_ssr.d.ts +18 -0
  62. package/lib/engine/engine_ssr.js +40 -0
  63. package/lib/engine/engine_ssr.js.map +1 -0
  64. package/lib/engine/engine_three_utils.d.ts +14 -7
  65. package/lib/engine/engine_three_utils.js +14 -7
  66. package/lib/engine/engine_three_utils.js.map +1 -1
  67. package/lib/engine/engine_types.d.ts +2 -0
  68. package/lib/engine/engine_types.js.map +1 -1
  69. package/lib/engine/engine_utils.js +4 -2
  70. package/lib/engine/engine_utils.js.map +1 -1
  71. package/lib/engine/engine_utils_hash.d.ts +9 -0
  72. package/lib/engine/engine_utils_hash.js +112 -0
  73. package/lib/engine/engine_utils_hash.js.map +1 -0
  74. package/lib/engine/webcomponents/logo-element.d.ts +10 -1
  75. package/lib/engine/webcomponents/logo-element.js +2 -1
  76. package/lib/engine/webcomponents/logo-element.js.map +1 -1
  77. package/lib/engine/webcomponents/needle menu/needle-menu.d.ts +12 -4
  78. package/lib/engine/webcomponents/needle menu/needle-menu.js +2 -1
  79. package/lib/engine/webcomponents/needle menu/needle-menu.js.map +1 -1
  80. package/lib/engine/webcomponents/needle-button.d.ts +15 -1
  81. package/lib/engine/webcomponents/needle-button.js +2 -1
  82. package/lib/engine/webcomponents/needle-button.js.map +1 -1
  83. package/lib/engine/webcomponents/needle-engine.d.ts +7 -1
  84. package/lib/engine/webcomponents/needle-engine.js +2 -1
  85. package/lib/engine/webcomponents/needle-engine.js.map +1 -1
  86. package/lib/engine/xr/NeedleXRSession.d.ts +1 -0
  87. package/lib/engine/xr/NeedleXRSession.js +5 -5
  88. package/lib/engine/xr/NeedleXRSession.js.map +1 -1
  89. package/lib/engine/xr/events.d.ts +30 -3
  90. package/lib/engine/xr/events.js +38 -0
  91. package/lib/engine/xr/events.js.map +1 -1
  92. package/lib/engine/xr/init.js +1 -7
  93. package/lib/engine/xr/init.js.map +1 -1
  94. package/lib/engine-components/AnimatorController.d.ts +135 -2
  95. package/lib/engine-components/AnimatorController.js +218 -2
  96. package/lib/engine-components/AnimatorController.js.map +1 -1
  97. package/lib/engine-components/GroundProjection.d.ts +1 -0
  98. package/lib/engine-components/GroundProjection.js +184 -48
  99. package/lib/engine-components/GroundProjection.js.map +1 -1
  100. package/lib/engine-components/Light.d.ts +25 -8
  101. package/lib/engine-components/Light.js +132 -27
  102. package/lib/engine-components/Light.js.map +1 -1
  103. package/lib/engine-components/RigidBody.js +3 -3
  104. package/lib/engine-components/RigidBody.js.map +1 -1
  105. package/lib/engine-components/SceneSwitcher.js +2 -0
  106. package/lib/engine-components/SceneSwitcher.js.map +1 -1
  107. package/lib/engine-components/api.d.ts +1 -0
  108. package/lib/engine-components/api.js +1 -0
  109. package/lib/engine-components/api.js.map +1 -1
  110. package/lib/engine-components/codegen/components.d.ts +1 -0
  111. package/lib/engine-components/codegen/components.js +1 -0
  112. package/lib/engine-components/codegen/components.js.map +1 -1
  113. package/lib/engine-components/postprocessing/Effects/BloomEffect.d.ts +1 -1
  114. package/lib/engine-components/postprocessing/Effects/Sharpening.js +1 -2
  115. package/lib/engine-components/postprocessing/Effects/Sharpening.js.map +1 -1
  116. package/lib/engine-components/postprocessing/PostProcessingHandler.js +5 -6
  117. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
  118. package/lib/engine-components/web/ScrollFollow.d.ts +0 -1
  119. package/lib/engine-components/web/ScrollFollow.js +3 -2
  120. package/lib/engine-components/web/ScrollFollow.js.map +1 -1
  121. package/lib/needle-engine.d.ts +1 -0
  122. package/lib/needle-engine.js +1 -0
  123. package/lib/needle-engine.js.map +1 -1
  124. package/package.json +7 -5
  125. package/plugins/common/logger.js +42 -19
  126. package/plugins/dts-generator/dts.codegen.js +334 -0
  127. package/plugins/dts-generator/dts.scan.js +99 -0
  128. package/plugins/dts-generator/dts.writer.js +59 -0
  129. package/plugins/dts-generator/glb.discovery.js +279 -0
  130. package/plugins/dts-generator/glb.extractor.js +215 -0
  131. package/plugins/dts-generator/glb.reader.js +167 -0
  132. package/plugins/dts-generator/index.js +36 -0
  133. package/plugins/dts-generator/manifest.types.js +174 -0
  134. package/plugins/types/index.d.ts +2 -1
  135. package/plugins/types/needle-bindings.d.ts +30 -0
  136. package/plugins/types/userconfig.d.ts +21 -2
  137. package/plugins/vite/asap.js +1 -1
  138. package/plugins/vite/dependency-watcher.d.ts +2 -2
  139. package/plugins/vite/dependency-watcher.js +3 -4
  140. package/plugins/vite/drop.d.ts +2 -2
  141. package/plugins/vite/drop.js +3 -4
  142. package/plugins/vite/dts-generator.d.ts +7 -0
  143. package/plugins/vite/dts-generator.js +191 -0
  144. package/plugins/vite/index.d.ts +10 -3
  145. package/plugins/vite/index.js +27 -10
  146. package/plugins/vite/logger.client.js +4 -3
  147. package/plugins/vite/logging.js +2 -2
  148. package/plugins/vite/meta.js +4 -2
  149. package/plugins/vite/poster.d.ts +2 -2
  150. package/plugins/vite/poster.js +3 -5
  151. package/plugins/vite/reload.d.ts +2 -2
  152. package/plugins/vite/reload.js +5 -5
  153. package/src/engine/api.ts +15 -1
  154. package/src/engine/debug/debug_environment.ts +1 -1
  155. package/src/engine/engine_application.ts +8 -6
  156. package/src/engine/engine_components.ts +7 -4
  157. package/src/engine/engine_constants.ts +11 -6
  158. package/src/engine/engine_context.ts +47 -2
  159. package/src/engine/engine_context_registry.ts +1 -1
  160. package/src/engine/engine_init.ts +6 -0
  161. package/src/engine/engine_input.ts +3 -2
  162. package/src/engine/engine_license.ts +23 -19
  163. package/src/engine/engine_lifecycle_functions_internal.ts +7 -0
  164. package/src/engine/engine_networking_blob.ts +5 -11
  165. package/src/engine/engine_physics_rapier.ts +14 -12
  166. package/src/engine/engine_pmrem.ts +3 -3
  167. package/src/engine/engine_scenedata.ts +133 -0
  168. package/src/engine/engine_ssr.ts +48 -0
  169. package/src/engine/engine_three_utils.ts +15 -7
  170. package/src/engine/engine_types.ts +2 -0
  171. package/src/engine/engine_utils.ts +3 -2
  172. package/src/engine/engine_utils_hash.ts +65 -0
  173. package/src/engine/webcomponents/logo-element.ts +10 -1
  174. package/src/engine/webcomponents/needle menu/needle-menu.ts +11 -2
  175. package/src/engine/webcomponents/needle-button.ts +15 -1
  176. package/src/engine/webcomponents/needle-engine.ts +8 -1
  177. package/src/engine/xr/NeedleXRSession.ts +6 -6
  178. package/src/engine/xr/events.ts +44 -1
  179. package/src/engine/xr/init.ts +0 -7
  180. package/src/engine-components/AnimatorController.ts +286 -4
  181. package/src/engine-components/GroundProjection.ts +226 -52
  182. package/src/engine-components/Light.ts +132 -27
  183. package/src/engine-components/RigidBody.ts +3 -3
  184. package/src/engine-components/SceneSwitcher.ts +1 -0
  185. package/src/engine-components/api.ts +1 -0
  186. package/src/engine-components/codegen/components.ts +1 -0
  187. package/src/engine-components/postprocessing/Effects/BloomEffect.ts +1 -1
  188. package/src/engine-components/postprocessing/Effects/Sharpening.ts +1 -2
  189. package/src/engine-components/postprocessing/PostProcessingHandler.ts +4 -8
  190. package/src/engine-components/web/ScrollFollow.ts +2 -2
  191. package/src/needle-engine.ts +2 -0
  192. package/src/vite-env.d.ts +16 -0
  193. package/dist/needle-engine.bundle-qDahLTqW.min.js +0 -1656
  194. package/dist/vendor-CEM38hLE.umd.cjs +0 -1116
  195. package/dist/vendor-HRlxIBga.min.js +0 -1116
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { ShaderMaterial, Texture } from "three";
7
+ import { CubeUVReflectionMapping, ShaderMaterial, Texture } from "three";
8
8
  import { GroundedSkybox as GroundProjection } from 'three/examples/jsm/objects/GroundedSkybox.js';
9
9
  import { Gizmos } from "../engine/engine_gizmos.js";
10
10
  import { serializable } from "../engine/engine_serialization_decorator.js";
@@ -12,6 +12,142 @@ import { getBoundingBox, getTempVector, getWorldScale, Graphics, setVisibleInCus
12
12
  import { delayForFrames, getParam, Watch as Watch } from "../engine/engine_utils.js";
13
13
  import { Behaviour } from "./Component.js";
14
14
  const debug = getParam("debuggroundprojection");
15
+ const needleCubeUvMapVarying = /* glsl */ `
16
+ #ifdef NEEDLE_USE_CUBE_UV_MAP
17
+ varying vec3 vNeedleGroundProjectionWorldDirection;
18
+ #endif
19
+ `;
20
+ const needleGroundProjectionFragmentPars = /* glsl */ `
21
+ ${needleCubeUvMapVarying}
22
+ uniform float needleGroundProjectionBlurriness;
23
+ uniform float needleGroundProjectionBlending;
24
+ uniform float needleGroundProjectionAlphaFactor;
25
+ uniform float needleGroundProjectionBackgroundIntensity;
26
+
27
+ float needleGroundProjectionSmoothstep(float edge0, float edge1, float x) {
28
+ float t = clamp((x - edge0) / max(edge1 - edge0, 0.000001), 0.0, 1.0);
29
+ return t * t * (3.0 - 2.0 * t);
30
+ }
31
+
32
+ float needleGroundProjectionDistance() {
33
+ return length(vec2(0.0, vMapUv.y));
34
+ }
35
+
36
+ float needleGroundProjectionBlurFactor(float needleGroundProjectionDistanceValue) {
37
+ return clamp(needleGroundProjectionSmoothstep(0.5, 1.0, needleGroundProjectionDistanceValue * 2.0), 0.0, 1.0);
38
+ }
39
+ `;
40
+ const needleCubeUvMapFragment = /* glsl */ `
41
+ #ifdef USE_MAP
42
+
43
+ float needleGroundProjectionDistanceValue = needleGroundProjectionDistance();
44
+ float needleGroundProjectionBlurFactorValue = needleGroundProjectionBlurFactor(needleGroundProjectionDistanceValue);
45
+ vec4 sampledDiffuseColor;
46
+
47
+ #ifdef NEEDLE_USE_CUBE_UV_MAP
48
+ sampledDiffuseColor = textureCubeUV(
49
+ map,
50
+ normalize( vNeedleGroundProjectionWorldDirection ),
51
+ needleGroundProjectionBlurriness * needleGroundProjectionBlurFactorValue
52
+ );
53
+ #else
54
+ #ifdef USE_MIPMAP_BIAS
55
+ sampledDiffuseColor = texture2D( map, vMapUv, mipmapBias );
56
+ #else
57
+ sampledDiffuseColor = texture2D( map, vMapUv );
58
+ #endif
59
+ #endif
60
+
61
+ #ifdef DECODE_VIDEO_TEXTURE
62
+
63
+ // use inline sRGB decode until browsers properly support SRGB8_ALPHA8 with video textures (#26516)
64
+
65
+ sampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );
66
+
67
+ #endif
68
+
69
+ sampledDiffuseColor.rgb *= mix(1.0, needleGroundProjectionBackgroundIntensity, needleGroundProjectionBlurFactorValue);
70
+ diffuseColor *= sampledDiffuseColor;
71
+
72
+ #endif
73
+ `;
74
+ const needleGroundProjectionAlphaFragment = /* glsl */ `
75
+ #ifdef USE_MAP
76
+ if (needleGroundProjectionBlending > 0.000001) {
77
+ float needleGroundProjectionBrightness = dot(diffuseColor.rgb, vec3(0.299, 0.587, 0.114));
78
+ float needleGroundProjectionStepFactor = needleGroundProjectionBlending - needleGroundProjectionBrightness * 0.1;
79
+ diffuseColor.a *= pow(
80
+ 1.0 - needleGroundProjectionBlending * needleGroundProjectionSmoothstep(
81
+ 0.35 * needleGroundProjectionStepFactor,
82
+ 0.45 * needleGroundProjectionStepFactor,
83
+ needleGroundProjectionDistanceValue
84
+ ),
85
+ 5.0
86
+ );
87
+ }
88
+ #endif
89
+ diffuseColor.a *= needleGroundProjectionAlphaFactor;
90
+ `;
91
+ function getCubeUvSize(texture) {
92
+ const imageHeight = texture.image?.height;
93
+ if (!imageHeight)
94
+ return null;
95
+ const maxMip = Math.log2(imageHeight) - 2;
96
+ const texelHeight = 1 / imageHeight;
97
+ const texelWidth = 1 / (3 * Math.max(Math.pow(2, maxMip), 7 * 16));
98
+ return { texelWidth, texelHeight, maxMip };
99
+ }
100
+ function getGroundProjectionShaderUniforms(material) {
101
+ const userData = material.userData;
102
+ return userData.needleGroundProjectionUniforms ??= {
103
+ needleGroundProjectionBlurriness: { value: 0 },
104
+ needleGroundProjectionBlending: { value: 0 },
105
+ needleGroundProjectionAlphaFactor: { value: 1 },
106
+ needleGroundProjectionBackgroundIntensity: { value: 1 }
107
+ };
108
+ }
109
+ function configureGroundProjectionMaterial(material, texture) {
110
+ const projectionUniforms = getGroundProjectionShaderUniforms(material);
111
+ material.onBeforeCompile = shader => {
112
+ shader.uniforms.needleGroundProjectionBlurriness = projectionUniforms.needleGroundProjectionBlurriness;
113
+ shader.uniforms.needleGroundProjectionBlending = projectionUniforms.needleGroundProjectionBlending;
114
+ shader.uniforms.needleGroundProjectionAlphaFactor = projectionUniforms.needleGroundProjectionAlphaFactor;
115
+ shader.uniforms.needleGroundProjectionBackgroundIntensity = projectionUniforms.needleGroundProjectionBackgroundIntensity;
116
+ shader.vertexShader = shader.vertexShader
117
+ .replace("#include <uv_pars_vertex>", `#include <uv_pars_vertex>\n${needleCubeUvMapVarying}`)
118
+ .replace("#include <worldpos_vertex>", `#include <worldpos_vertex>
119
+ #ifdef NEEDLE_USE_CUBE_UV_MAP
120
+ // GroundedSkybox mirrors geometry on Z, so undo that before deriving the sampling direction.
121
+ vNeedleGroundProjectionWorldDirection = transformDirection( vec3( position.x, position.y, -position.z ), modelMatrix );
122
+ #endif`);
123
+ shader.fragmentShader = shader.fragmentShader
124
+ .replace("#include <map_pars_fragment>", `#include <map_pars_fragment>
125
+ ${needleGroundProjectionFragmentPars}
126
+ #include <cube_uv_reflection_fragment>`)
127
+ .replace("#include <map_fragment>", needleCubeUvMapFragment)
128
+ .replace("#include <opaque_fragment>", `${needleGroundProjectionAlphaFragment}\n#include <opaque_fragment>`);
129
+ };
130
+ const defines = material.defines ??= {};
131
+ const prevDefineState = JSON.stringify(defines);
132
+ const cubeUvSize = texture.mapping === CubeUVReflectionMapping ? getCubeUvSize(texture) : null;
133
+ if (cubeUvSize) {
134
+ defines.NEEDLE_USE_CUBE_UV_MAP = 1;
135
+ defines.ENVMAP_TYPE_CUBE_UV = 1;
136
+ defines.CUBEUV_TEXEL_WIDTH = cubeUvSize.texelWidth;
137
+ defines.CUBEUV_TEXEL_HEIGHT = cubeUvSize.texelHeight;
138
+ defines.CUBEUV_MAX_MIP = `${cubeUvSize.maxMip}.0`;
139
+ }
140
+ else {
141
+ delete defines.NEEDLE_USE_CUBE_UV_MAP;
142
+ delete defines.ENVMAP_TYPE_CUBE_UV;
143
+ delete defines.CUBEUV_TEXEL_WIDTH;
144
+ delete defines.CUBEUV_TEXEL_HEIGHT;
145
+ delete defines.CUBEUV_MAX_MIP;
146
+ }
147
+ if (prevDefineState !== JSON.stringify(defines)) {
148
+ material.needsUpdate = true;
149
+ }
150
+ }
15
151
  /**
16
152
  * The [GroundProjectedEnv](https://engine.needle.tools/docs/api/GroundProjectedEnv) projects the environment map onto a virtual ground plane.
17
153
  * Creates a realistic floor from 360° panoramas/HDRIs by deforming the skybox
@@ -138,12 +274,10 @@ export class GroundProjectedEnv extends Behaviour {
138
274
  if (this._projection && this.scene.backgroundRotation) {
139
275
  this._projection.rotation.copy(this.scene.backgroundRotation);
140
276
  }
141
- const blurrinessChanged = this.context.scene.backgroundBlurriness !== undefined && this._lastBlurriness != this.context.scene.backgroundBlurriness && this.context.scene.backgroundBlurriness > 0.001;
142
- if (blurrinessChanged) {
143
- this.updateProjection();
144
- }
145
- else if (this._needsTextureUpdate && this.context.scene.background instanceof Texture) {
146
- this.updateBlurriness(this.context.scene.background, this.context.scene.backgroundBlurriness);
277
+ if (this._projection && this.context.scene.background instanceof Texture) {
278
+ const blurriness = this.context.scene.backgroundBlurriness ?? 0;
279
+ const blurrinessChanged = this._lastBlurriness !== blurriness;
280
+ this.updateProjectionMaterial(this.context.scene.background, blurrinessChanged || this._needsTextureUpdate);
147
281
  }
148
282
  }
149
283
  updateAndCreate() {
@@ -184,6 +318,7 @@ export class GroundProjectedEnv extends Behaviour {
184
318
  this._projection?.removeFromParent();
185
319
  try {
186
320
  this._projection = new GroundProjection(backgroundTexture, this._height, this._radius, 64);
321
+ configureGroundProjectionMaterial(this._projection.material, backgroundTexture);
187
322
  }
188
323
  catch (e) {
189
324
  console.error("Error creating three GroundProjection", e);
@@ -219,9 +354,7 @@ export class GroundProjectedEnv extends Behaviour {
219
354
  this.env.radius = this._radius;
220
355
  this.env.height = this._height;
221
356
  */
222
- if (this.context.scene.backgroundBlurriness > 0.001 && this._needsTextureUpdate) {
223
- this.updateBlurriness(backgroundTexture, this.context.scene.backgroundBlurriness);
224
- }
357
+ this.updateProjectionMaterial(backgroundTexture, true);
225
358
  this._lastBackground = backgroundTexture;
226
359
  this._lastHeight = this._height;
227
360
  this._lastRadius = this._radius;
@@ -229,23 +362,51 @@ export class GroundProjectedEnv extends Behaviour {
229
362
  }
230
363
  _blurrynessShader = null;
231
364
  _lastBlurriness = -1;
232
- updateBlurriness(texture, blurriness) {
365
+ updateProjectionMaterial(texture, forceTextureUpdate = false) {
233
366
  if (!this._projection) {
234
367
  return;
235
368
  }
236
- else if (!texture) {
237
- return;
369
+ const blurriness = this.context.scene.backgroundBlurriness ?? 0;
370
+ const useCubeUvBlur = texture.mapping === CubeUVReflectionMapping;
371
+ let targetTexture = texture;
372
+ if (!useCubeUvBlur && blurriness > 0.001) {
373
+ const hasBlurredTextureAssigned = !!this._projection.material.map && this._projection.material.map !== texture;
374
+ if (forceTextureUpdate || !hasBlurredTextureAssigned) {
375
+ targetTexture = this.updateBlurriness(texture, blurriness);
376
+ }
377
+ else if (this._projection.material.map) {
378
+ targetTexture = this._projection.material.map;
379
+ }
380
+ }
381
+ if (this._projection.material.map !== targetTexture) {
382
+ this._projection.material.map = targetTexture;
238
383
  }
384
+ const appliedTexture = this._projection.material.map ?? texture;
385
+ appliedTexture.mapping = texture.mapping;
386
+ configureGroundProjectionMaterial(this._projection.material, appliedTexture);
387
+ const shaderUniforms = getGroundProjectionShaderUniforms(this._projection.material);
388
+ shaderUniforms.needleGroundProjectionBlurriness.value = useCubeUvBlur ? blurriness : 0;
389
+ shaderUniforms.needleGroundProjectionBackgroundIntensity.value = this.context.scene.backgroundIntensity ?? 1;
390
+ const wasTransparent = this._projection.material.transparent;
391
+ this._projection.material.transparent = (this.context.xr?.isAR === true && this.arBlending > 0.000001) ?? false;
392
+ shaderUniforms.needleGroundProjectionBlending.value = this._projection.material.transparent ? this.arBlending : 0;
393
+ shaderUniforms.needleGroundProjectionAlphaFactor.value = this.context.isInPassThrough ? 0.95 : 1;
394
+ if (wasTransparent !== this._projection.material.transparent) {
395
+ this._projection.material.needsUpdate = true;
396
+ }
397
+ this._projection.material.depthTest = true;
398
+ this._projection.material.depthWrite = false;
399
+ this._lastBlurriness = blurriness;
239
400
  this._needsTextureUpdate = false;
401
+ }
402
+ updateBlurriness(texture, blurriness) {
240
403
  if (debug)
241
404
  console.log("Update Blurriness", blurriness);
242
405
  this._blurrynessShader ??= new ShaderMaterial({
243
406
  name: "GroundProjectionBlurriness",
244
407
  uniforms: {
245
408
  map: { value: texture },
246
- blurriness: { value: blurriness },
247
- blending: { value: 0 },
248
- alphaFactor: { value: 1 }
409
+ blurriness: { value: blurriness }
249
410
  },
250
411
  vertexShader: blurVertexShader,
251
412
  fragmentShader: blurFragmentShader
@@ -253,31 +414,10 @@ export class GroundProjectedEnv extends Behaviour {
253
414
  this._blurrynessShader.depthWrite = false;
254
415
  this._blurrynessShader.uniforms.map.value = texture;
255
416
  this._blurrynessShader.uniforms.blurriness.value = blurriness;
256
- this._lastBlurriness = blurriness;
257
417
  texture.needsUpdate = true;
258
- const wasTransparent = this._projection.material.transparent;
259
- this._projection.material.transparent = (this.context.xr?.isAR === true && this.arBlending > 0.000001) ?? false;
260
- if (this._projection.material.transparent) {
261
- this._blurrynessShader.uniforms.blending.value = this.arBlending;
262
- }
263
- else {
264
- this._blurrynessShader.uniforms.blending.value = 0;
265
- }
266
- if (this.context.isInPassThrough) {
267
- // Make the ground slightly transparent in passthrough mode
268
- this._blurrynessShader.uniforms.alphaFactor.value = 0.95;
269
- }
270
- else {
271
- this._blurrynessShader.uniforms.alphaFactor.value = 1;
272
- }
273
- // Make sure the material is updated if the transparency changed
274
- if (wasTransparent !== this._projection.material.transparent) {
275
- this._projection.material.needsUpdate = true;
276
- }
277
- // Update the texture
278
- this._projection.material.map = Graphics.copyTexture(texture, this._blurrynessShader);
279
- this._projection.material.depthTest = true;
280
- this._projection.material.depthWrite = false;
418
+ const blurredTexture = Graphics.copyTexture(texture, this._blurrynessShader);
419
+ blurredTexture.mapping = texture.mapping;
420
+ return blurredTexture;
281
421
  }
282
422
  }
283
423
  __decorate([
@@ -307,8 +447,6 @@ const blurVertexShader = `
307
447
  const blurFragmentShader = `
308
448
  uniform sampler2D map;
309
449
  uniform float blurriness;
310
- uniform float alphaFactor;
311
- uniform float blending;
312
450
  varying vec2 vUv;
313
451
 
314
452
  const float PI = 3.14159265359;
@@ -339,6 +477,10 @@ const blurFragmentShader = `
339
477
  vec4 color = vec4(0.0);
340
478
  float totalWeight = 0.0;
341
479
  int blurSize = int(60.0 * min(1.0, blurriness) * blurAmount); // Adjust blur size based on distance and blurriness
480
+ if (blurSize <= 0) {
481
+ gl_FragColor = texture2D(map, vUv);
482
+ return;
483
+ }
342
484
  float lodLevel = log2(float(blurSize)) * 0.5; // Compute LOD level
343
485
 
344
486
  for (int x = -blurSize; x <= blurSize; x++) {
@@ -354,12 +496,6 @@ const blurFragmentShader = `
354
496
 
355
497
  gl_FragColor = color;
356
498
 
357
- float brightness = dot(gl_FragColor.rgb, vec3(0.299, 0.587, 0.114));
358
- float stepFactor = blending - brightness * .1;
359
- gl_FragColor.a = pow(1.0 - blending * customSmoothstep(0.35 * stepFactor, 0.45 * stepFactor, distance), 5.);
360
- gl_FragColor.a *= alphaFactor;
361
- // gl_FragColor.rgb = vec3(1.0);
362
-
363
499
  // #include <tonemapping_fragment>
364
500
  // #include <colorspace_fragment>
365
501
 
@@ -1 +1 @@
1
- {"version":3,"file":"GroundProjection.js","sourceRoot":"","sources":["../../src/engine-components/GroundProjection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GroundProjection.js","sourceRoot":"","sources":["../../src/engine-components/GroundProjection.ts"],"names":[],"mappings":"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"}
@@ -81,10 +81,13 @@ declare enum LightShadows {
81
81
  */
82
82
  export declare class Light extends Behaviour implements ILight {
83
83
  /**
84
- * The type of light (spot, directional, point, etc.)
85
- * Can not be changed at runtime.
84
+ * The type of light as a lowercase string: `"directional"`, `"point"`, `"spot"`.
85
+ * Implements {@link ILight.type}. Can not be changed at runtime.
86
86
  */
87
- private type;
87
+ get type(): ILight["type"];
88
+ /** Numeric LightType serialized from Unity/Blender — converts to string on write */
89
+ set type(value: LightType | ILight["type"]);
90
+ private _type;
88
91
  /**
89
92
  * The maximum distance the light affects.
90
93
  * Only applicable for spot and point lights.
@@ -164,6 +167,19 @@ export declare class Light extends Behaviour implements ILight {
164
167
  get shadowResolution(): number;
165
168
  set shadowResolution(val: number);
166
169
  private _shadowResolution?;
170
+ /**
171
+ * Number of shadow cascade levels (only used when `useCascades` is true)
172
+ */
173
+ cascades: number;
174
+ /**
175
+ * Cascade split mode (only used when `useCascades` is true):
176
+ * - `practical` — balanced (default, recommended)
177
+ * - `logarithmic` — more resolution close up
178
+ * - `uniform` — equal splits
179
+ */
180
+ cascadeMode: "practical" | "logarithmic" | "uniform";
181
+ private _csm?;
182
+ private _csmHelper?;
167
183
  /**
168
184
  * Whether this light's illumination is entirely baked into lightmaps
169
185
  */
@@ -185,16 +201,12 @@ export declare class Light extends Behaviour implements ILight {
185
201
  awake(): void;
186
202
  onEnable(): void;
187
203
  onDisable(): void;
204
+ onBeforeRender(): void;
188
205
  /**
189
206
  * Creates the appropriate three.js light based on the configured light type
190
207
  * and applies all settings like shadows, intensity, and color.
191
208
  */
192
209
  createLight(): void;
193
- /**
194
- * Coroutine that updates the main light reference in the context
195
- * if this directional light should be the main light
196
- */
197
- updateMainLightRoutine(): Generator<undefined, void, unknown>;
198
210
  /**
199
211
  * Controls whether the renderer's shadow map type can be changed when soft shadows are used
200
212
  */
@@ -210,6 +222,11 @@ export declare class Light extends Behaviour implements ILight {
210
222
  * When the rig is scaled, world-space distances change proportionally
211
223
  * causing lights to appear brighter or dimmer due to distance falloff. */
212
224
  private applyXRScale;
225
+ /**
226
+ * Creates and initializes a CSM instance for this directional light.
227
+ * CSM manages its own cascade DirectionalLights internally.
228
+ */
229
+ private createCSM;
213
230
  /**
214
231
  * Configures a directional light by adding and positioning its target
215
232
  * @param dirLight The directional light to set up