illutions 0.32.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
- # Changelog
2
-
1
+ # Changelog
2
+
3
+ ## 0.33.0
4
+
5
+ ### Added
6
+
7
+ - Added `Scene.setMaterialsProps()` and `Scene.animMaterialsTo()` with `obj` and optional `recursive` to update or animate all assigned material slots once per material; `Mesh3D` provides object-bound counterparts. Animation events remain per material.
8
+
9
+ ### Renamed
10
+
11
+ - `Scene.animMaterialNumeric()` → `Scene.animMaterialTo()`
12
+ - `AnimFadeEvent` → `AnimMaterialEvent`, `Anim_Fade_Start` → `Anim_Material_Start`, `Anim_Fade_Complete` → `Anim_Material_Complete`, and `objName` → `materialName` for material animation events.
13
+ - `Scene.stopAnimClip()` → `Scene.stopClip()`; `fadeOut` → `speedTime` and `ease` → `speedEase`.
14
+ - Renamed parameters in `Scene.playClip()` and `Scene.playClipCam()`: `blendMode` → `modeBlend`, `loopMode` → `modeLoop`, `stopMode` → `modeStop`, `fadeDuration` → `fadeTime`, `startSpeed` → `speedStart`, `endSpeed` → `speedEnd`, `duration` → `speedTime`, and `ease` → `speedEase`. For `Scene.playClip()`, also renamed `finishMode` → `modeFinish` and `fadeDurationFinish` → `fadeTimeFinish`.
15
+ - `duration` → `time` in `Scene.animCamTo()`, `Scene.animCamCurveTo()`, and `Scene.animTransformTo()`; material animation methods now also use `time`.
16
+ - `fade` → `time` in `Audio.loadAndPlay()`, `Audio.play()`, `Audio.pause()`, and `Audio.stop()`.
17
+
18
+ ### Changed
19
+
20
+ - Removed the optional `startValue` parameter from `Scene.animMaterialTo()`; it always animates from the current material value to the target value.
21
+ - Changed `Scene.animMaterialTo()` to accept only a material name through `name` instead of `mesh`; assigned materials are resolved by name, including material slots.
22
+ - Changed `Scene.setMaterialProps()` to accept `name` instead of `obj` and removed its `recursive` option; use `Scene.setMaterialsProps()` for object-wide updates. Renamed `Mesh3D.setMaterialProps()` to `Mesh3D.setMaterialsProps()`.
23
+ - Merged numeric and color material animation into `Scene.animMaterialTo()` and removed the singular material animation methods from `Mesh3D`; components use `this.scene.animMaterialTo()` for one named material. Multiple properties share one tween, duration, easing, and repeat setting.
24
+ - Material animations now emit one `AnimMaterialEvent` per start, completion, or cancellation with a `values` snapshot instead of individual `property` and `value` fields; colors are hex strings.
25
+ - Added `Anim_Material_Cancel`: a new valid material animation cancels the entire previous animation of the same material. Unknown materials, unknown easing functions, and empty property lists leave the current tween unchanged; property names and target values are the caller's responsibility; zero duration applies values immediately, and infinite repeats do not emit completion.
26
+
3
27
  ## 0.32.0
4
28
 
5
29
  ### Added
@@ -28,234 +52,233 @@
28
52
 
29
53
  - Fixed `Audio.play()` and `Audio.resume()` to resume interrupted audio contexts in addition to suspended contexts.
30
54
 
31
- ## 0.31.0
32
-
33
- ### Added
34
-
35
- - Added the optional `recursive` parameter to `Engine.setMaterialProps()` and `Mesh3D.setMaterialProps()` to include all descendant meshes.
36
- - Added `Coll3D` and `Coll3DParams` for persistent mesh-based raycast colliders with `hidden`, `pickable`, and `occluder` roles and an optional `target` that maps raycast events to another `Mesh3D`.
37
- - Added `Obj3DParams` and the persistent `Obj3D.hidden` state, which hides the rendered object without disabling raycasting and is included in combined visibility events.
38
- - Added optional `{ class, params }` entries through `SceneEntry` and `WebEntry`; `WebParams` values are assigned to matching custom-element instances during app initialization.
39
- - Added `CompsInsts` to map Scene Component and Web Component definitions to their runtime instances.
40
- - Added `EnvLoadedEvent` with `Env_Loaded` after the initial environment is applied and all progressive background loading attempts complete; failed background maps may be skipped, and canceled or superseded loads do not emit the event.
41
- - Added `cfg.render.adaptiveGfx`, `cfg.render.ecoMode`, and `cfg.render.fpsMin` for adaptive graphics quality and Eco mode configuration.
42
- - Added the exported `AaMode`, `WebGlAaMode`, `WebGpuAaMode`, `WebGlSslMode`, `WebGpuSslMode`, `DebugLog`, and `MsaaMode` configuration types.
43
- - Added WebGPU SSGI with AO and GI output, adaptive warm-up, configuration, and Inspector controls.
44
-
45
- ### Renamed
46
-
47
- - `Engine.setMaterialProperties()` → `Engine.setMaterialProps()` and `Mesh3D.setMaterialProperties()` → `Mesh3D.setMaterialProps()`
48
-
49
- - `Classes` → `Comps`
50
- - `Comp` → `Web`
51
- - `CompEvent` → `WebEvent`
52
- - `CompOverlapEvent` → `WebOverlapEvent`
53
- - `CompVisibleEvent` → `WebVisibleEvent`
54
- - `Comp_Overlap_Changed` → `Web_Overlap_Changed`
55
- - `Comp_Visible_Changed` → `Web_Visible_Changed`
56
- - `CompOverlapEvent.comp` → `WebOverlapEvent.web`
57
- - `CompVisibleEvent.comp` → `WebVisibleEvent.web`
58
- - `CompClass` → `WebClass`
59
- - `Obj3DClass` → `SceneClass`
60
- - `CompInsts` → `WebInsts`
61
- - `Obj3DInsts` → `SceneInsts`
62
- - `Comp.comps` → `Web.webs`
63
-
55
+ ## 0.31.0
56
+
57
+ ### Added
58
+
59
+ - Added the optional `recursive` parameter to `Engine.setMaterialProps()` and `Mesh3D.setMaterialProps()` to include all descendant meshes.
60
+ - Added `Coll3D` and `Coll3DParams` for persistent mesh-based raycast colliders with `hidden`, `pickable`, and `occluder` roles and an optional `target` that maps raycast events to another `Mesh3D`.
61
+ - Added `Obj3DParams` and the persistent `Obj3D.hidden` state, which hides the rendered object without disabling raycasting and is included in combined visibility events.
62
+ - Added optional `{ class, params }` entries through `SceneEntry` and `WebEntry`; `WebParams` values are assigned to matching custom-element instances during app initialization.
63
+ - Added `CompsInsts` to map Scene Component and Web Component definitions to their runtime instances.
64
+ - Added `EnvLoadedEvent` with `Env_Loaded` after the initial environment is applied and all progressive background loading attempts complete; failed background maps may be skipped, and canceled or superseded loads do not emit the event.
65
+ - Added `cfg.render.adaptiveGfx`, `cfg.render.ecoMode`, and `cfg.render.fpsMin` for adaptive graphics quality and Eco mode configuration.
66
+ - Added the exported `AaMode`, `WebGlAaMode`, `WebGpuAaMode`, `WebGlSslMode`, `WebGpuSslMode`, `DebugLog`, and `MsaaMode` configuration types.
67
+ - Added WebGPU SSGI with AO and GI output, adaptive warm-up, configuration, and Inspector controls.
68
+
69
+ ### Renamed
70
+
71
+ - `Engine.setMaterialProperties()` → `Engine.setMaterialProps()` and `Mesh3D.setMaterialProperties()` → `Mesh3D.setMaterialProps()`
72
+
73
+ - `Classes` → `Comps`
74
+ - `Comp` → `Web`
75
+ - `CompEvent` → `WebEvent`
76
+ - `CompOverlapEvent` → `WebOverlapEvent`
77
+ - `CompVisibleEvent` → `WebVisibleEvent`
78
+ - `Comp_Overlap_Changed` → `Web_Overlap_Changed`
79
+ - `Comp_Visible_Changed` → `Web_Visible_Changed`
80
+ - `CompOverlapEvent.comp` → `WebOverlapEvent.web`
81
+ - `CompVisibleEvent.comp` → `WebVisibleEvent.web`
82
+ - `CompClass` → `WebClass`
83
+ - `Obj3DClass` → `SceneClass`
84
+ - `CompInsts` → `WebInsts`
85
+ - `Obj3DInsts` → `SceneInsts`
86
+ - `Comp.comps` → `Web.webs`
87
+
64
88
  ### Changed
65
89
 
66
- - Replaced the `objs3D` and `comps` registry groups with `comps.scene` and `comps.web`; initialized instances are now exposed through `app.comps.scene` and `app.comps.web`.
67
- - Changed `Raycast.setColliders()` and `Raycast.clearColliders()` to accept arrays of registered `Coll3D` instances and use or reset their persistent collider roles; removed the exported `Collider` interface.
68
- - Replaced the individual post-processing enable settings with typed `cfg.render.profile.webgl` and `cfg.render.profile.webgpu` settings for MSAA, AA, SSL, and SSR.
69
- - Renamed `cfg.post.ssao` to `cfg.post.ssl` and simplified the exported post-processing config type names to `SslCfg`, `SsaoCfg`, `GtaoCfg`, `SsgiCfg`, `WebGlSsrCfg`, and `WebGpuSsrCfg`.
70
- - Renamed `cfg.post.webgpu.ssao` to `cfg.post.webgpu.gtao` and removed the obsolete `distanceExponent` and `distanceFallOff` settings.
71
- - Replaced `cfg.render.params.antialias` with renderer-specific `profile.msaa` settings, supporting `'none'`, `'render'`, and `'post'`.
72
- - Replaced `cfg.render.fpsLimiter` and `cfg.render.fpsMax` with `cfg.render.adaptiveGfx`, `cfg.render.ecoMode`, and `cfg.render.fpsMin`.
90
+ - Replaced the `objs3D` and `comps` registry groups with `comps.scene` and `comps.web`; initialized instances are now exposed through `app.comps.scene` and `app.comps.web`.
91
+ - Changed `Raycast.setColliders()` and `Raycast.clearColliders()` to accept arrays of registered `Coll3D` instances and use or reset their persistent collider roles; removed the exported `Collider` interface.
92
+ - Replaced the individual post-processing enable settings with typed `cfg.render.profile.webgl` and `cfg.render.profile.webgpu` settings for MSAA, AA, SSL, and SSR.
93
+ - Renamed `cfg.post.ssao` to `cfg.post.ssl` and simplified the exported post-processing config type names to `SslCfg`, `SsaoCfg`, `GtaoCfg`, `SsgiCfg`, `WebGlSsrCfg`, and `WebGpuSsrCfg`.
94
+ - Renamed `cfg.post.webgpu.ssao` to `cfg.post.webgpu.gtao` and removed the obsolete `distanceExponent` and `distanceFallOff` settings.
95
+ - Replaced `cfg.render.params.antialias` with renderer-specific `profile.msaa` settings, supporting `'none'`, `'render'`, and `'post'`.
96
+ - Replaced `cfg.render.fpsLimiter` and `cfg.render.fpsMax` with `cfg.render.adaptiveGfx`, `cfg.render.ecoMode`, and `cfg.render.fpsMin`.
73
97
  - Changed the default value of `cfg.render.deltaTimesMax` from `10` to `20`.
74
98
  - Updated the peer dependencies to Three.js r186 (`~0.186.0`) and XState 5.33 (`~5.33.2`).
75
- - Removed the `detect-gpu` runtime dependency.
76
- - `Model_Loading` and numbered progressive loading events now fire only when the rounded percentage changes within each model load.
77
-
78
- ## 0.30.0
79
-
99
+ - Removed the `detect-gpu` runtime dependency.
100
+ - `Model_Loading` and numbered progressive loading events now fire only when the rounded percentage changes within each model load.
101
+
102
+ ## 0.30.0
103
+
80
104
  ### Changed
81
105
 
82
- - Replaced `Mesh3D.setTexture()` and `TextureSlot` with `requestImageTexture()` and `getImageTexture()` to separate requesting unused GLTF images from accessing their initialized Three.js textures and assigning them directly to material slots.
83
- - Textures created from unused GLTF images now remain stable across progressive model levels while their image and mipmap data is updated.
84
-
85
- ### Fixed
86
-
87
- - Fixed the `Obj3D.onStart()` lifecycle so it is called before GLTF model loading begins, as documented.
88
-
89
- ## 0.29.1
90
-
91
- ### Fixed
92
-
93
- - Fixed progressive model loading so textures belonging to materials not currently assigned to a mesh are updated through all model quality levels.
94
-
95
- ## 0.29.0
96
-
97
- ### Added
98
-
99
- - Added protected `Mesh3D.setTexture()` to assign unused GLTF images by name to the `ColorMap`, `LightMap`, or `AlphaMap` material slot, with optional UV channel and light map intensity settings; registered textures are updated across progressive model levels.
100
- - Added the exported `TextureSlot` union for the supported material slots.
101
-
102
- ## 0.28.0
103
-
104
- ### Added
105
-
106
- - Added `Mesh3D.animMaterialColor()`, `Mesh3D.animMaterialNumeric()`, and `Mesh3D.setMaterialProperties()` as object-bound counterparts to the existing `Engine` material methods.
107
- - Added the optional `needsUpdate` parameter to `Engine.animMaterialNumeric()`, `Engine.setMaterialProperties()`, `Mesh3D.animMaterialNumeric()`, and `Mesh3D.setMaterialProperties()` to request material recompilation.
108
- - Added degree-based horizontal orbit constraints through `orbitCtrls.minAzimuthAngle` and `orbitCtrls.maxAzimuthAngle`.
109
- - Added `ModelLoadedEvent` with `Model_Loaded` for a single model and numbered `Model1_Loaded`, `Model2_Loaded`, etc. events for progressive models.
110
- - Added the `Model_Ready` event after the final progressive model variant has been applied and rendered.
111
- - Added the exported `Collider` configuration and `Raycast.setColliders()` and `Raycast.clearColliders()` to configure named scene objects or `Obj3D` instances as occluders, pickables, or hidden colliders.
112
-
106
+ - Replaced `Mesh3D.setTexture()` and `TextureSlot` with `requestImageTexture()` and `getImageTexture()` to separate requesting unused GLTF images from accessing their initialized Three.js textures and assigning them directly to material slots.
107
+ - Textures created from unused GLTF images now remain stable across progressive model levels while their image and mipmap data is updated.
108
+
109
+ ### Fixed
110
+
111
+ - Fixed the `Obj3D.onStart()` lifecycle so it is called before GLTF model loading begins, as documented.
112
+
113
+ ## 0.29.1
114
+
115
+ ### Fixed
116
+
117
+ - Fixed progressive model loading so textures belonging to materials not currently assigned to a mesh are updated through all model quality levels.
118
+
119
+ ## 0.29.0
120
+
121
+ ### Added
122
+
123
+ - Added protected `Mesh3D.setTexture()` to assign unused GLTF images by name to the `ColorMap`, `LightMap`, or `AlphaMap` material slot, with optional UV channel and light map intensity settings; registered textures are updated across progressive model levels.
124
+ - Added the exported `TextureSlot` union for the supported material slots.
125
+
126
+ ## 0.28.0
127
+
128
+ ### Added
129
+
130
+ - Added `Mesh3D.animMaterialColor()`, `Mesh3D.animMaterialNumeric()`, and `Mesh3D.setMaterialProperties()` as object-bound counterparts to the existing `Engine` material methods.
131
+ - Added the optional `needsUpdate` parameter to `Engine.animMaterialNumeric()`, `Engine.setMaterialProperties()`, `Mesh3D.animMaterialNumeric()`, and `Mesh3D.setMaterialProperties()` to request material recompilation.
132
+ - Added degree-based horizontal orbit constraints through `orbitCtrls.minAzimuthAngle` and `orbitCtrls.maxAzimuthAngle`.
133
+ - Added `ModelLoadedEvent` with `Model_Loaded` for a single model and numbered `Model1_Loaded`, `Model2_Loaded`, etc. events for progressive models.
134
+ - Added the `Model_Ready` event after the final progressive model variant has been applied and rendered.
135
+ - Added the exported `Collider` configuration and `Raycast.setColliders()` and `Raycast.clearColliders()` to configure named scene objects or `Obj3D` instances as occluders, pickables, or hidden colliders.
136
+
113
137
  ### Changed
114
138
 
115
- - Replaced `Raycast.setOccluders()`, `Raycast.resetOccluders()`, `Raycast.trackPickables()`, and `Raycast.untrackPickables()` with the unified collider API.
116
- - Renamed `Raycast.enable()` and `Raycast.disable()` to `Raycast.enablePickables()` and `Raycast.disablePickables()`.
117
- - Renamed `raycast.occlInterval` to `raycast.occludeeInterval` and `raycast.occlMoveFactor` to `raycast.occlusionMoveFactor`.
118
- - Changed progressive `ModelLoadingEvent` and `SceneRenderedEvent` types to numbered `Model1_Loading`, `Scene1_Rendered`, etc. events; unnumbered events remain available for a single model.
119
- - Removed the `level` property from `ModelLoadingEvent`; the progressive model level is now identified by the event type.
120
- - Removed the obsolete `fct` property from `ClipEvent`.
121
- - Changed pointer raycasts so that registered occluders block pickables behind them.
122
-
123
- ### Fixed
124
-
125
- - Corrected `CanvasPointerEvent` to expose `Canvas_Click`, `Canvas_Pointer_Enter`, and `Canvas_Pointer_Leave`.
126
- - Added the already emitted `FpvCtrls_Disposed` event to `FpvCtrlsEvent`.
127
- - Delayed the postprocessing noise check until `Model_Ready` so that postprocessing is not disabled before the final progressive model variant is rendered.
128
-
129
- ## 0.27.0
130
-
131
- ### Added
132
-
133
- - Added progressive model loading through ordered model levels in `ModelCfg.file`.
134
-
139
+ - Replaced `Raycast.setOccluders()`, `Raycast.resetOccluders()`, `Raycast.trackPickables()`, and `Raycast.untrackPickables()` with the unified collider API.
140
+ - Renamed `Raycast.enable()` and `Raycast.disable()` to `Raycast.enablePickables()` and `Raycast.disablePickables()`.
141
+ - Renamed `raycast.occlInterval` to `raycast.occludeeInterval` and `raycast.occlMoveFactor` to `raycast.occlusionMoveFactor`.
142
+ - Changed progressive `ModelLoadingEvent` and `SceneRenderedEvent` types to numbered `Model1_Loading`, `Scene1_Rendered`, etc. events; unnumbered events remain available for a single model.
143
+ - Removed the `level` property from `ModelLoadingEvent`; the progressive model level is now identified by the event type.
144
+ - Removed the obsolete `fct` property from `ClipEvent`.
145
+ - Changed pointer raycasts so that registered occluders block pickables behind them.
146
+
147
+ ### Fixed
148
+
149
+ - Corrected `CanvasPointerEvent` to expose `Canvas_Click`, `Canvas_Pointer_Enter`, and `Canvas_Pointer_Leave`.
150
+ - Added the already emitted `FpvCtrls_Disposed` event to `FpvCtrlsEvent`.
151
+ - Delayed the postprocessing noise check until `Model_Ready` so that postprocessing is not disabled before the final progressive model variant is rendered.
152
+
153
+ ## 0.27.0
154
+
155
+ ### Added
156
+
157
+ - Added progressive model loading through ordered model levels in `ModelCfg.file`.
158
+
135
159
  ### Changed
136
160
 
137
- - Changed `ModelCfg.file` from `string | null` to `string[]`; use an empty array when no model should be loaded.
138
- - Added the one-based `level` parameter to `ModelLoadingEvent` to identify the model level currently loading.
139
- - Changed state names to `snake_case` and event names to `Pascal_Snake_Case`.
140
- - Updated debug console output to use `State:` and `Event:` labels and the new naming conventions.
141
-
142
- ## 0.26.0
143
-
144
- ### Added
145
-
146
- - Added TRAA as a WebGPU anti-aliasing mode through `cfg.post.aa.mode = 'traa'`.
147
- - Added the `raycast.occlInterval` configuration to distribute pending marker occlusion checks evenly over a configurable time interval.
148
- - Added the `raycast.occlMoveFactor` configuration to trigger new occlusion checks only after the object or camera exceeds a distance-relative movement threshold.
149
- - Added `Raycast.setOccluders()` and `Raycast.resetOccluders()` to optionally restrict occlusion checks to selected scene objects.
150
- - Added `Comp.trackOverlap()` and `Comp.untrackOverlap()` to manage component overlaps in screen space through the internal `CompCtrls`.
151
- - Added `cfg.light.rectArea` to lazily load and initialize renderer-specific LTC data for `RectAreaLight` support.
152
-
161
+ - Changed `ModelCfg.file` from `string | null` to `string[]`; use an empty array when no model should be loaded.
162
+ - Added the one-based `level` parameter to `ModelLoadingEvent` to identify the model level currently loading.
163
+ - Changed state names to `snake_case` and event names to `Pascal_Snake_Case`.
164
+ - Updated debug console output to use `State:` and `Event:` labels and the new naming conventions.
165
+
166
+ ## 0.26.0
167
+
168
+ ### Added
169
+
170
+ - Added TRAA as a WebGPU anti-aliasing mode through `cfg.post.aa.mode = 'traa'`.
171
+ - Added the `raycast.occlInterval` configuration to distribute pending marker occlusion checks evenly over a configurable time interval.
172
+ - Added the `raycast.occlMoveFactor` configuration to trigger new occlusion checks only after the object or camera exceeds a distance-relative movement threshold.
173
+ - Added `Raycast.setOccluders()` and `Raycast.resetOccluders()` to optionally restrict occlusion checks to selected scene objects.
174
+ - Added `Comp.trackOverlap()` and `Comp.untrackOverlap()` to manage component overlaps in screen space through the internal `CompCtrls`.
175
+ - Added `cfg.light.rectArea` to lazily load and initialize renderer-specific LTC data for `RectAreaLight` support.
176
+
153
177
  ### Changed
154
178
 
155
- - Moved the shared SSR settings `maxDistance`, `thickness`, and `resolutionScale` from `cfg.post.webgl.ssr` and `cfg.post.webgpu.ssr` to `cfg.post.ssr`.
156
- - Renamed the public `Raycast.trackSelectables()` and `Raycast.untrackSelectable()` methods to `Raycast.trackPickables()` and `Raycast.untrackPickables()`.
157
-
158
- ### Fixed
159
-
160
- - Fixed the Inspector showing TRAA or an empty anti-aliasing mode for WebGL by falling back to FXAA when `cfg.post.aa.mode` is set to `'traa'`.
161
-
162
- ## 0.25.0
163
-
164
- ### Added
165
-
166
- - Added `CanvasPointerLeave` handling to the `Obj3D_Pointer_Leave` event.
167
- - Added `ActionCtrls` for centralized animation action lifecycle, layer grouping, and interruptible fades.
168
- - Extended `ClipEvent` with `Clip_Cancel`, `Clip_Fade_Start`, `Clip_Fade_Complete`, `Clip_Speed_Start`, and `Clip_Speed_Complete` events.
169
-
170
- ### Fixed
171
-
172
- - Fixed `Obj3D_Pointer_Leave` being emitted during pointer movement with a pressed mouse button and ensured touch pointers emit it after `Obj3D_Pointer_Up` when contact ends.
173
-
174
- ## 0.24.1
175
-
176
- ### Added
177
-
178
- - Added the `ProgressBar_Hidden` event.
179
-
179
+ - Moved the shared SSR settings `maxDistance`, `thickness`, and `resolutionScale` from `cfg.post.webgl.ssr` and `cfg.post.webgpu.ssr` to `cfg.post.ssr`.
180
+ - Renamed the public `Raycast.trackSelectables()` and `Raycast.untrackSelectable()` methods to `Raycast.trackPickables()` and `Raycast.untrackPickables()`.
181
+
182
+ ### Fixed
183
+
184
+ - Fixed the Inspector showing TRAA or an empty anti-aliasing mode for WebGL by falling back to FXAA when `cfg.post.aa.mode` is set to `'traa'`.
185
+
186
+ ## 0.25.0
187
+
188
+ ### Added
189
+
190
+ - Added `CanvasPointerLeave` handling to the `Obj3D_Pointer_Leave` event.
191
+ - Extended `ClipEvent` with `Clip_Cancel`, `Clip_Fade_Start`, `Clip_Fade_Complete`, `Clip_Speed_Start`, and `Clip_Speed_Complete` events.
192
+
193
+ ### Fixed
194
+
195
+ - Fixed `Obj3D_Pointer_Leave` being emitted during pointer movement with a pressed mouse button and ensured touch pointers emit it after `Obj3D_Pointer_Up` when contact ends.
196
+
197
+ ## 0.24.1
198
+
199
+ ### Added
200
+
201
+ - Added the `ProgressBar_Hidden` event.
202
+
180
203
  ### Changed
181
204
 
182
- - Renamed the `aaCfg` interface to `AaCfg`.
183
-
184
- ### Fixed
185
-
186
- - Fixed an incorrect `objTarget.position` when enabling orbit or FPV controls after setting it in `Cam3D.onReady()`.
187
-
188
- ## 0.24.0
189
-
190
- ### Added
191
-
192
- - Added animation modes `BlendMode`, `FinishMode`, `LoopMode`, `StopMode`
193
- - Added `fadeDuration` to `playClip()` and `playClipCam()`.
194
- - Added `Audio.load()` to load audio without starting playback.
195
- - Added the `AudioLoadedEvent` (`Audio_Loaded`) event for handling completed audio loading.
196
-
205
+ - Renamed the `aaCfg` interface to `AaCfg`.
206
+
207
+ ### Fixed
208
+
209
+ - Fixed an incorrect `objTarget.position` when enabling orbit or FPV controls after setting it in `Cam3D.onReady()`.
210
+
211
+ ## 0.24.0
212
+
213
+ ### Added
214
+
215
+ - Added animation modes `BlendMode`, `FinishMode`, `LoopMode`, `StopMode`
216
+ - Added `fadeDuration` to `playClip()` and `playClipCam()`.
217
+ - Added `Audio.load()` to load audio without starting playback.
218
+ - Added the `AudioLoadedEvent` (`Audio_Loaded`) event for handling completed audio loading.
219
+
197
220
  ### Changed
198
221
 
199
- - Replaced `pauseActions` with `stopMode` and `infinite` with `loop` in animation clip playback.
200
- - Renamed `Raycast.trackSelectable()` to `Raycast.trackSelectables()`.
201
- - Changed the `LightCfg` shadow defaults to match the corresponding Three.js defaults, while keeping `castShadow` enabled by default.
202
-
203
- ### Fixed
204
-
205
- - Fixed visual stuttering when transitioning from orbit rotation to panning with damping enabled by keeping `OrbitCtrls` in `lookMode = 'target'` for all OrbitControls interactions.
206
-
207
- ## 0.23.1
208
-
209
- ### FIXED
210
-
211
- - Convert absolute path to the Draco folder to a relative path.
212
-
213
- ## 0.23.0
214
-
215
- ### Added
216
-
217
- - Added progressive environment map loading.
218
- - Added `Cam3D` support to `Audio.setListener()` targets.
219
- - Added support for using the base `Cam3D` class in the `classes.objs3D` registry.
220
-
221
- ### Fixed
222
-
223
- - Fixed WebGL environment maps so PMREM-generated textures are not used for `THREE.Scene.background`.
224
-
225
- ## 0.22.1
226
-
227
- ### Added
228
-
229
- - Added `cfg.render.params` for renderer-specific runtime parameters.
230
- - Added `render.api` output to the infobox.
231
- - Added `.blend` source files to the public example apps.
232
-
222
+ - Replaced `pauseActions` with `stopMode` and `infinite` with `loop` in animation clip playback.
223
+ - Renamed `Raycast.trackSelectable()` to `Raycast.trackSelectables()`.
224
+ - Changed the `LightCfg` shadow defaults to match the corresponding Three.js defaults, while keeping `castShadow` enabled by default.
225
+
226
+ ### Fixed
227
+
228
+ - Fixed visual stuttering when transitioning from orbit rotation to panning with damping enabled by keeping `OrbitCtrls` in `lookMode = 'target'` for all OrbitControls interactions.
229
+
230
+ ## 0.23.1
231
+
232
+ ### FIXED
233
+
234
+ - Convert absolute path to the Draco folder to a relative path.
235
+
236
+ ## 0.23.0
237
+
238
+ ### Added
239
+
240
+ - Added progressive environment map loading.
241
+ - Added `Cam3D` support to `Audio.setListener()` targets.
242
+ - Added support for using the base `Cam3D` class in the `classes.objs3D` registry.
243
+
244
+ ### Fixed
245
+
246
+ - Fixed WebGL environment maps so PMREM-generated textures are not used for `THREE.Scene.background`.
247
+
248
+ ## 0.22.1
249
+
250
+ ### Added
251
+
252
+ - Added `cfg.render.params` for renderer-specific runtime parameters.
253
+ - Added `render.api` output to the infobox.
254
+ - Added `.blend` source files to the public example apps.
255
+
233
256
  ### Changed
234
257
 
235
- - Renamed `cfg.webgl` and `cfg.webgpu` parameter groups to `params`.
236
-
237
- ## 0.22.0
238
-
258
+ - Renamed `cfg.webgl` and `cfg.webgpu` parameter groups to `params`.
259
+
260
+ ## 0.22.0
261
+
239
262
  ### Changed
240
263
 
241
- - Updated the framework to Three.js r185.
242
- - Changed the default renderer selection to `render.api = 'auto'`.
243
- - Added `envCtrls.dataType` to configure environment texture data handling.
244
- - Replaced `SsrWebGpuCfg.opacity` with `SsrWebGpuCfg.intensity`.
245
-
246
- ### Fixed
247
-
248
- - Clarified the WebGL/WebGPU renderer switch behavior.
249
- - Enabled WebGPU renderer loading even when post-processing is disabled.
250
-
251
- ## 0.21.9
252
-
264
+ - Updated the framework to Three.js r185.
265
+ - Changed the default renderer selection to `render.api = 'auto'`.
266
+ - Added `envCtrls.dataType` to configure environment texture data handling.
267
+ - Replaced `SsrWebGpuCfg.opacity` with `SsrWebGpuCfg.intensity`.
268
+
269
+ ### Fixed
270
+
271
+ - Clarified the WebGL/WebGPU renderer switch behavior.
272
+ - Enabled WebGPU renderer loading even when post-processing is disabled.
273
+
274
+ ## 0.21.9
275
+
253
276
  ### Changed
254
277
 
255
- - Removed the `CfgCtrl` class and the related `app.cfgCtrl` access point. Runtime parameters are now updated through the responsible feature APIs, such as `app.audio.set(...)`.
256
-
257
- ## 0.21.8
258
-
278
+ - Removed the `CfgCtrl` class and the related `app.cfgCtrl` access point. Runtime parameters are now updated through the responsible feature APIs, such as `app.audio.set(...)`.
279
+
280
+ ## 0.21.8
281
+
259
282
  ### Changed
260
283
 
261
- - Added `cfg.audio.enable` to the configuration.
284
+ - Added `cfg.audio.enable` to the configuration.