@zephyr3d/scene 0.9.3 → 0.9.5

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 (188) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring/spring_particle.js +4 -4
  38. package/dist/animation/spring/spring_particle.js.map +1 -1
  39. package/dist/animation/spring_modifier.js.map +1 -1
  40. package/dist/animation/translationtrack.js +3 -0
  41. package/dist/animation/translationtrack.js.map +1 -1
  42. package/dist/app/engine.js +129 -17
  43. package/dist/app/engine.js.map +1 -1
  44. package/dist/app/scriptregistry.js +251 -80
  45. package/dist/app/scriptregistry.js.map +1 -1
  46. package/dist/asset/assetmanager.js +133 -102
  47. package/dist/asset/assetmanager.js.map +1 -1
  48. package/dist/asset/loaders/gltf/gltf_loader.js +18 -14
  49. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  50. package/dist/asset/loaders/loader.js +1 -6
  51. package/dist/asset/loaders/loader.js.map +1 -1
  52. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  53. package/dist/asset/model.js +1052 -183
  54. package/dist/asset/model.js.map +1 -1
  55. package/dist/avatar/wardrobe.js +474 -0
  56. package/dist/avatar/wardrobe.js.map +1 -0
  57. package/dist/index.d.ts +1810 -233
  58. package/dist/index.js +13 -3
  59. package/dist/index.js.map +1 -1
  60. package/dist/material/material.js +1 -1
  61. package/dist/material/material.js.map +1 -1
  62. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  63. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  64. package/dist/material/mixins/pbr/common.js +72 -15
  65. package/dist/material/mixins/pbr/common.js.map +1 -1
  66. package/dist/material/msdf_text.js +180 -0
  67. package/dist/material/msdf_text.js.map +1 -0
  68. package/dist/material/msdf_text_sprite.js +64 -0
  69. package/dist/material/msdf_text_sprite.js.map +1 -0
  70. package/dist/material/pbrblueprint.js +21 -6
  71. package/dist/material/pbrblueprint.js.map +1 -1
  72. package/dist/material/shader/helper.js +277 -277
  73. package/dist/material/shader/helper.js.map +1 -1
  74. package/dist/material/sprite_sdf.js +106 -0
  75. package/dist/material/sprite_sdf.js.map +1 -0
  76. package/dist/posteffect/ssr.js +1 -0
  77. package/dist/posteffect/ssr.js.map +1 -1
  78. package/dist/render/abuffer_oit.js +1 -0
  79. package/dist/render/abuffer_oit.js.map +1 -1
  80. package/dist/render/cluster_light.js.map +1 -1
  81. package/dist/render/cull_visitor.js +28 -0
  82. package/dist/render/cull_visitor.js.map +1 -1
  83. package/dist/render/drawable.js.map +1 -1
  84. package/dist/render/drawable_mixin.js +1 -0
  85. package/dist/render/drawable_mixin.js.map +1 -1
  86. package/dist/render/envlight.js +54 -1
  87. package/dist/render/envlight.js.map +1 -1
  88. package/dist/render/fbm_wavegenerator.js +1 -0
  89. package/dist/render/fbm_wavegenerator.js.map +1 -1
  90. package/dist/render/gerstner_wavegenerator.js +1 -0
  91. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  92. package/dist/render/globalbindgroup_allocator.js +1 -0
  93. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  94. package/dist/render/render_queue.js +1 -0
  95. package/dist/render/render_queue.js.map +1 -1
  96. package/dist/render/sky.js +9 -0
  97. package/dist/render/sky.js.map +1 -1
  98. package/dist/scene/basesprite.js +1 -5
  99. package/dist/scene/basesprite.js.map +1 -1
  100. package/dist/scene/batchgroup.js +18 -8
  101. package/dist/scene/batchgroup.js.map +1 -1
  102. package/dist/scene/environment.js +16 -2
  103. package/dist/scene/environment.js.map +1 -1
  104. package/dist/scene/mesh.js +164 -102
  105. package/dist/scene/mesh.js.map +1 -1
  106. package/dist/scene/meshdrawable.js +96 -0
  107. package/dist/scene/meshdrawable.js.map +1 -0
  108. package/dist/scene/msdftext.js +341 -0
  109. package/dist/scene/msdftext.js.map +1 -0
  110. package/dist/scene/msdftextsprite.js +349 -0
  111. package/dist/scene/msdftextsprite.js.map +1 -0
  112. package/dist/scene/particlesys.js +1 -0
  113. package/dist/scene/particlesys.js.map +1 -1
  114. package/dist/scene/scene.js +2 -0
  115. package/dist/scene/scene.js.map +1 -1
  116. package/dist/scene/scene_node.js +437 -230
  117. package/dist/scene/scene_node.js.map +1 -1
  118. package/dist/scene/sdftextsprite.js +322 -0
  119. package/dist/scene/sdftextsprite.js.map +1 -0
  120. package/dist/scene/terrain-cm/grass.js +1 -0
  121. package/dist/scene/terrain-cm/grass.js.map +1 -1
  122. package/dist/scene/terrain-cm/grassmaterial.js +1 -0
  123. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  124. package/dist/scene/terrain-cm/terrain-cm.js +1 -0
  125. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  126. package/dist/scene/textsprite.js +120 -0
  127. package/dist/scene/textsprite.js.map +1 -0
  128. package/dist/scene/water.js +1 -0
  129. package/dist/scene/water.js.map +1 -1
  130. package/dist/shadow/shader.js +1 -0
  131. package/dist/shadow/shader.js.map +1 -1
  132. package/dist/text/font/font_asset.js +884 -0
  133. package/dist/text/font/font_asset.js.map +1 -0
  134. package/dist/text/font/sfnt_reader.js +43 -0
  135. package/dist/text/font/sfnt_reader.js.map +1 -0
  136. package/dist/text/msdf/generator.js +417 -0
  137. package/dist/text/msdf/generator.js.map +1 -0
  138. package/dist/text/msdf/shape.js +146 -0
  139. package/dist/text/msdf/shape.js.map +1 -0
  140. package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
  141. package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
  142. package/dist/text/runtime/msdf_text_atlas_manager.js +50 -0
  143. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
  144. package/dist/text/runtime/text_layout.js +96 -0
  145. package/dist/text/runtime/text_layout.js.map +1 -0
  146. package/dist/utility/blueprint/material/inputs.js +188 -1
  147. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  148. package/dist/utility/blueprint/material/ir.js +16 -1
  149. package/dist/utility/blueprint/material/ir.js.map +1 -1
  150. package/dist/utility/blueprint/material/pbr.js +32 -0
  151. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  152. package/dist/utility/bounding_volume.js.map +1 -1
  153. package/dist/utility/pmrem.js +34 -8
  154. package/dist/utility/pmrem.js.map +1 -1
  155. package/dist/utility/serialization/manager.js +340 -283
  156. package/dist/utility/serialization/manager.js.map +1 -1
  157. package/dist/utility/serialization/scene/animation.js +702 -7
  158. package/dist/utility/serialization/scene/animation.js.map +1 -1
  159. package/dist/utility/serialization/scene/batch.js +2 -0
  160. package/dist/utility/serialization/scene/batch.js.map +1 -1
  161. package/dist/utility/serialization/scene/camera.js +2 -0
  162. package/dist/utility/serialization/scene/camera.js.map +1 -1
  163. package/dist/utility/serialization/scene/light.js +2 -0
  164. package/dist/utility/serialization/scene/light.js.map +1 -1
  165. package/dist/utility/serialization/scene/material.js +1 -0
  166. package/dist/utility/serialization/scene/material.js.map +1 -1
  167. package/dist/utility/serialization/scene/mesh.js +66 -4
  168. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  169. package/dist/utility/serialization/scene/node.js +189 -8
  170. package/dist/utility/serialization/scene/node.js.map +1 -1
  171. package/dist/utility/serialization/scene/particle.js +2 -0
  172. package/dist/utility/serialization/scene/particle.js.map +1 -1
  173. package/dist/utility/serialization/scene/primitive.js +1 -0
  174. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  175. package/dist/utility/serialization/scene/sprite.js +2 -0
  176. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  177. package/dist/utility/serialization/scene/terrain.js +2 -0
  178. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  179. package/dist/utility/serialization/scene/text.js +516 -0
  180. package/dist/utility/serialization/scene/text.js.map +1 -0
  181. package/dist/utility/serialization/scene/water.js +2 -0
  182. package/dist/utility/serialization/scene/water.js.map +1 -1
  183. package/dist/utility/serialization/types.js.map +1 -1
  184. package/dist/utility/textures/sheenlut.js +138 -0
  185. package/dist/utility/textures/sheenlut.js.map +1 -0
  186. package/dist/values.js +48 -48
  187. package/dist/values.js.map +1 -1
  188. package/package.json +3 -3
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as _zephyr3d_device from '@zephyr3d/device';
2
- import { TextureCube, FrameBuffer, Texture2D, GPUDataBuffer, PrimitiveType, TextureSampler, BindGroupLayout, ProgramBuilder, PBInsideFunctionScope, PBShaderExp, PBGlobalScope, VertexSemantic, StructuredBuffer, VertexAttribFormat, VertexStepMode, IndexBuffer, BindGroup, GPUProgram, RenderStateSet, FaceMode, PBFunctionScope, Texture2DArray, BaseTexture, ShaderTypeFunc, TextureFormat, AbstractDevice, ColorState, SamplerOptions, DeviceBackend, TextureAddressMode, TextureFilterMode } from '@zephyr3d/device';
2
+ import { TextureCube, FrameBuffer, Texture2D, GPUDataBuffer, PrimitiveType, TextureSampler, BindGroupLayout, ProgramBuilder, PBInsideFunctionScope, PBShaderExp, PBGlobalScope, VertexSemantic, StructuredBuffer, VertexAttribFormat, VertexStepMode, IndexBuffer, BindGroup, GPUProgram, RenderStateSet, FaceMode, PBFunctionScope, Texture2DArray, BaseTexture, ShaderTypeFunc, TextureFormat, AbstractDevice, ColorState, TextureAddressMode, TextureFilterMode, SamplerOptions, TextureAtlasManager, DeviceBackend } from '@zephyr3d/device';
3
3
  import * as _zephyr3d_base from '@zephyr3d/base';
4
4
  import { Disposable, TypedArray, Ray, AABB, Matrix4x4, Plane, Frustum, Vector3, Nullable, GenericConstructor, RequireOptionals, Immutable, Vector4, Clonable, IDisposable, Vector2, IEventTarget, Observable, DRef, Rect, CubeFace, Quaternion, Interpolator, InterpolationMode, InterpolatorScalar, DeepPartial, VFS, HttpRequest, WriteOptions, ReadOptions, DeepRequireOptionals } from '@zephyr3d/base';
5
5
  import { DecoderModule, Metadata as Metadata$1 } from 'draco3d';
6
6
 
7
- type DistributionType = 'lambertian' | 'ggx';
7
+ type DistributionType = 'lambertian' | 'ggx' | 'charlie';
8
8
  /**
9
9
  * Prefilters an environment cubemap
10
10
  *
@@ -205,7 +205,7 @@ declare class BoundingBox extends AABB implements BoundingVolume {
205
205
  /** {@inheritDoc BoundingVolume.behindPlane} */
206
206
  behindPlane(plane: Plane): boolean;
207
207
  /** {@inheritDoc BoundingVolume.clone} */
208
- clone(): BoundingBox;
208
+ clone(): this;
209
209
  /** {@inheritDoc BoundingVolume.transform} */
210
210
  transform(matrix: Matrix4x4): BoundingBox;
211
211
  /** {@inheritDoc BoundingVolume.outsideFrustum} */
@@ -282,7 +282,7 @@ type PropertyValue = {
282
282
  *
283
283
  * @public
284
284
  */
285
- type PropEdit = 'aabb' | 'quaternion' | 'proptrack';
285
+ type PropEdit = 'aabb' | 'quaternion' | 'proptrack' | 'curve1f';
286
286
  /**
287
287
  * Extra scene-node picker hints for a property.
288
288
  *
@@ -310,6 +310,8 @@ type PropertyAccessorOptions = {
310
310
  minValue?: number;
311
311
  /** Maximum numeric value (for sliders/spinners). */
312
312
  maxValue?: number;
313
+ /** Whether string property is multiline. */
314
+ multiline?: boolean;
313
315
  /** Step/speed for numeric editing UI. */
314
316
  speed?: number;
315
317
  /** Whether the property can be animated/keyframed. */
@@ -3254,6 +3256,9 @@ declare class MaterialBlueprintIR {
3254
3256
  private rotateAboutAxis;
3255
3257
  /** Converts a panner node to IR */
3256
3258
  private panner;
3259
+ private vertexOutput;
3260
+ private vertexIndex;
3261
+ private instanceIndex;
3257
3262
  /** Converts a vertex color input node to IR */
3258
3263
  private vertexColor;
3259
3264
  /** Converts a vertex UV input node to IR */
@@ -3417,6 +3422,8 @@ type IMixinPBRCommon = {
3417
3422
  getCommonDatasStruct(scope: PBInsideFunctionScope): ShaderTypeFunc;
3418
3423
  calculateEmissiveColor(scope: PBInsideFunctionScope): PBShaderExp;
3419
3424
  getF0(scope: PBInsideFunctionScope): PBShaderExp;
3425
+ getSheenAlbedoScaling(scope: PBInsideFunctionScope, Ndot: PBShaderExp, sheenColor: PBShaderExp, sheenRoughness: PBShaderExp): PBShaderExp;
3426
+ getSheenAlbedoScalingForDirect(scope: PBInsideFunctionScope, NoV: PBShaderExp, NoL: PBShaderExp, sheenColor: PBShaderExp, sheenRoughness: PBShaderExp): PBShaderExp;
3420
3427
  directLighting(scope: PBInsideFunctionScope, lightDir: PBShaderExp, lightColor: PBShaderExp, normal: PBShaderExp, viewVec: PBShaderExp, commonData: PBShaderExp, diffuseScale: PBShaderExp, specularScale: PBShaderExp, sourceRadiusFactor: PBShaderExp, outColor: PBShaderExp): void;
3421
3428
  directRectLight(scope: PBInsideFunctionScope, worldPos: PBShaderExp, normal: PBShaderExp, viewVec: PBShaderExp, commonData: PBShaderExp, posRange: PBShaderExp, axisX: PBShaderExp, axisY: PBShaderExp, colorIntensity: PBShaderExp, outColor: PBShaderExp): void;
3422
3429
  indirectLighting(scope: PBInsideFunctionScope, normal: PBShaderExp, viewVec: PBShaderExp, commonData: PBShaderExp, outColor: PBShaderExp, outRoughness?: PBShaderExp): void;
@@ -3961,6 +3968,57 @@ declare class StandardSpriteMaterial extends SpriteMaterial implements Clonable<
3961
3968
  protected onDispose(): void;
3962
3969
  }
3963
3970
 
3971
+ /**
3972
+ * Atlas-based MSDF text material.
3973
+ *
3974
+ * @public
3975
+ */
3976
+ declare class MSDFTextMaterial extends MeshMaterial implements Clonable<MSDFTextMaterial> {
3977
+ static FEATURE_TEXT_ATLAS: number;
3978
+ private _atlas;
3979
+ private _textColor;
3980
+ private _outlineColor;
3981
+ private _distanceRange;
3982
+ private _atlasSize;
3983
+ private _smallGlyphThreshold;
3984
+ private _outlineWidth;
3985
+ constructor();
3986
+ get atlasTexture(): _zephyr3d_base.Nullable<Texture2D<unknown>>;
3987
+ set atlasTexture(tex: _zephyr3d_base.Nullable<Texture2D<unknown>>);
3988
+ get textColor(): Immutable<Vector3>;
3989
+ set textColor(value: Immutable<Vector3>);
3990
+ get outlineColor(): Immutable<Vector3>;
3991
+ set outlineColor(value: Immutable<Vector3>);
3992
+ get distanceRange(): number;
3993
+ set distanceRange(value: number);
3994
+ get smallGlyphThreshold(): number;
3995
+ set smallGlyphThreshold(value: number);
3996
+ get outlineWidth(): number;
3997
+ set outlineWidth(value: number);
3998
+ clone(): MSDFTextMaterial;
3999
+ copyFrom(other: this): void;
4000
+ vertexShader(scope: PBFunctionScope): void;
4001
+ fragmentShader(scope: PBFunctionScope): void;
4002
+ applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void;
4003
+ protected onDispose(): void;
4004
+ }
4005
+
4006
+ /**
4007
+ * Billboard MSDF text material.
4008
+ *
4009
+ * @public
4010
+ */
4011
+ declare class MSDFTextSpriteMaterial extends MSDFTextMaterial implements Clonable<MSDFTextSpriteMaterial> {
4012
+ private _rotation;
4013
+ constructor();
4014
+ get rotation(): number;
4015
+ set rotation(value: number);
4016
+ clone(): MSDFTextSpriteMaterial;
4017
+ copyFrom(other: this): void;
4018
+ vertexShader(scope: PBFunctionScope): void;
4019
+ applyUniformValues(bindGroup: BindGroup, ctx: DrawContext, pass: number): void;
4020
+ }
4021
+
3964
4022
  /**
3965
4023
  * Sprite material driven by a blueprint graph.
3966
4024
  *
@@ -4632,6 +4690,13 @@ declare class SkyRenderer extends Disposable {
4632
4690
  * Radiance map of the sky.
4633
4691
  */
4634
4692
  get radianceMap(): TextureCube<unknown>;
4693
+ /**
4694
+ * Radiance map of the sky reused for sheen.
4695
+ *
4696
+ * @remarks
4697
+ * Dynamic sky is smooth enough that the GGX-prefiltered radiance map is a practical approximation for sheen.
4698
+ */
4699
+ get sheenRadianceMap(): TextureCube<unknown>;
4635
4700
  /**
4636
4701
  * Irradiance SH coeffecients buffer
4637
4702
  */
@@ -4702,6 +4767,16 @@ declare abstract class EnvironmentLighting extends Disposable {
4702
4767
  * @returns The radiance for the fragment
4703
4768
  */
4704
4769
  abstract getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp): Nullable<PBShaderExp>;
4770
+ /**
4771
+ * Get Charlie-filtered sheen radiance for a fragment
4772
+ *
4773
+ * @param scope - The shader scope
4774
+ * @param refl - Reflection vector
4775
+ * @param roughness - Sheen roughness
4776
+ *
4777
+ * @returns The sheen radiance for the fragment
4778
+ */
4779
+ abstract getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp): Nullable<PBShaderExp>;
4705
4780
  /**
4706
4781
  * Get irradiance for a fragment
4707
4782
  *
@@ -4715,6 +4790,10 @@ declare abstract class EnvironmentLighting extends Disposable {
4715
4790
  * Returns whether this environment lighting supports reflective light
4716
4791
  */
4717
4792
  abstract hasRadiance(): boolean;
4793
+ /**
4794
+ * Returns whether this environment lighting supports sheen reflective light
4795
+ */
4796
+ abstract hasSheenRadiance(): boolean;
4718
4797
  /**
4719
4798
  * Returns whether this environment lighting supports diffuse light
4720
4799
  */
@@ -4730,7 +4809,7 @@ declare class EnvShIBL extends EnvironmentLighting {
4730
4809
  * @param radianceMap - The radiance map
4731
4810
  * @param irradianceSH - The irradiance SH
4732
4811
  */
4733
- constructor(radianceMap?: TextureCube, irradianceSH?: GPUDataBuffer, irradianceSHFB?: FrameBuffer);
4812
+ constructor(radianceMap?: TextureCube, irradianceSH?: GPUDataBuffer, irradianceSHFB?: FrameBuffer, sheenRadianceMap?: TextureCube);
4734
4813
  /**
4735
4814
  * {@inheritDoc EnvironmentLighting.getType}
4736
4815
  * @override
@@ -4739,6 +4818,9 @@ declare class EnvShIBL extends EnvironmentLighting {
4739
4818
  /** The radiance map */
4740
4819
  get radianceMap(): Nullable<TextureCube<unknown>>;
4741
4820
  set radianceMap(tex: Nullable<TextureCube<unknown>>);
4821
+ /** The Charlie-filtered sheen radiance map */
4822
+ get sheenRadianceMap(): Nullable<TextureCube<unknown>>;
4823
+ set sheenRadianceMap(tex: Nullable<TextureCube<unknown>>);
4742
4824
  /** The irradiance sh coeffecients */
4743
4825
  get irradianceSH(): Nullable<GPUDataBuffer<unknown>>;
4744
4826
  set irradianceSH(value: Nullable<GPUDataBuffer<unknown>>);
@@ -4763,6 +4845,11 @@ declare class EnvShIBL extends EnvironmentLighting {
4763
4845
  * @override
4764
4846
  */
4765
4847
  getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp): PBShaderExp;
4848
+ /**
4849
+ * {@inheritDoc EnvironmentLighting.getSheenRadiance}
4850
+ * @override
4851
+ */
4852
+ getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp): PBShaderExp;
4766
4853
  /**
4767
4854
  * {@inheritDoc EnvironmentLighting.getIrradiance}
4768
4855
  * @override
@@ -4773,6 +4860,11 @@ declare class EnvShIBL extends EnvironmentLighting {
4773
4860
  * @override
4774
4861
  */
4775
4862
  hasRadiance(): boolean;
4863
+ /**
4864
+ * {@inheritDoc EnvironmentLighting.hasSheenRadiance}
4865
+ * @override
4866
+ */
4867
+ hasSheenRadiance(): boolean;
4776
4868
  /**
4777
4869
  * {@inheritDoc EnvironmentLighting.hasIrradiance}
4778
4870
  * @override
@@ -4817,6 +4909,11 @@ declare class EnvConstantAmbient extends EnvironmentLighting {
4817
4909
  * @override
4818
4910
  */
4819
4911
  getRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp): null;
4912
+ /**
4913
+ * {@inheritDoc EnvironmentLighting.getSheenRadiance}
4914
+ * @override
4915
+ */
4916
+ getSheenRadiance(_scope: PBInsideFunctionScope, _refl: PBShaderExp, _roughness: PBShaderExp): null;
4820
4917
  /**
4821
4918
  * {@inheritDoc EnvironmentLighting.getIrradiance}
4822
4919
  * @override
@@ -4827,6 +4924,11 @@ declare class EnvConstantAmbient extends EnvironmentLighting {
4827
4924
  * @override
4828
4925
  */
4829
4926
  hasRadiance(): boolean;
4927
+ /**
4928
+ * {@inheritDoc EnvironmentLighting.hasSheenRadiance}
4929
+ * @override
4930
+ */
4931
+ hasSheenRadiance(): boolean;
4830
4932
  /**
4831
4933
  * {@inheritDoc EnvironmentLighting.hasIrradiance}
4832
4934
  * @override
@@ -4870,6 +4972,11 @@ declare class EnvHemisphericAmbient extends EnvironmentLighting {
4870
4972
  * @override
4871
4973
  */
4872
4974
  getRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, _roughness: PBShaderExp): PBShaderExp;
4975
+ /**
4976
+ * {@inheritDoc EnvironmentLighting.getSheenRadiance}
4977
+ * @override
4978
+ */
4979
+ getSheenRadiance(scope: PBInsideFunctionScope, refl: PBShaderExp, roughness: PBShaderExp): PBShaderExp;
4873
4980
  /**
4874
4981
  * {@inheritDoc EnvironmentLighting.getIrradiance}
4875
4982
  * @override
@@ -4880,6 +4987,11 @@ declare class EnvHemisphericAmbient extends EnvironmentLighting {
4880
4987
  * @override
4881
4988
  */
4882
4989
  hasRadiance(): boolean;
4990
+ /**
4991
+ * {@inheritDoc EnvironmentLighting.hasSheenRadiance}
4992
+ * @override
4993
+ */
4994
+ hasSheenRadiance(): boolean;
4883
4995
  /**
4884
4996
  * {@inheritDoc EnvironmentLighting.hasIrradiance}
4885
4997
  * @override
@@ -5633,6 +5745,8 @@ declare class CullVisitor implements Visitor<SceneNode | OctreeNode> {
5633
5745
  */
5634
5746
  visit(target: SceneNode | OctreeNode): boolean;
5635
5747
  visitSprite(node: Sprite): boolean;
5748
+ visitMSDFText(node: MSDFText): boolean;
5749
+ visitMSDFTextSprite(node: MSDFTextSprite): boolean;
5636
5750
  }
5637
5751
 
5638
5752
  /**
@@ -8111,6 +8225,7 @@ declare class EnvLightWrapper extends Disposable {
8111
8225
  private readonly _ambientDown;
8112
8226
  private readonly _ambientUp;
8113
8227
  private readonly _radianceMap;
8228
+ private readonly _sheenRadianceMap;
8114
8229
  private readonly _irradianceMap;
8115
8230
  private readonly _irradianceSH;
8116
8231
  private readonly _irradianceSHFB;
@@ -8131,6 +8246,9 @@ declare class EnvLightWrapper extends Disposable {
8131
8246
  /** Radiance map for environment light type ibl */
8132
8247
  get radianceMap(): Nullable<TextureCube<unknown>>;
8133
8248
  set radianceMap(tex: Nullable<TextureCube<unknown>>);
8249
+ /** Charlie-filtered sheen radiance map for environment light type ibl */
8250
+ get sheenRadianceMap(): Nullable<TextureCube<unknown>>;
8251
+ set sheenRadianceMap(tex: Nullable<TextureCube<unknown>>);
8134
8252
  /** Irradiance SH buffer for environment light type ibl */
8135
8253
  get irradianceSH(): Nullable<GPUDataBuffer<unknown>>;
8136
8254
  set irradianceSH(value: Nullable<GPUDataBuffer<unknown>>);
@@ -8548,8 +8666,6 @@ type MorphInfo = {
8548
8666
  * @public
8549
8667
  */
8550
8668
  interface Drawable {
8551
- /** Gets the display name of the drawable object (for debugging/UI). */
8552
- getName(): string;
8553
8669
  /** Unique, stable identifier for the drawable, used in caches and picking. */
8554
8670
  getDrawableId(): number;
8555
8671
  /** Returns the owning scene node (transform and hierarchy). */
@@ -8712,10 +8828,10 @@ declare abstract class SkeletonModifier {
8712
8828
  * Implementations should modify joint transforms and blend with the current state
8713
8829
  * using the processor's weight.
8714
8830
  *
8715
- * @param skeleton - The skeleton to process
8831
+ * @param skeleton - The shared rig to process
8716
8832
  * @param deltaTime - Time elapsed since last frame (in seconds)
8717
8833
  */
8718
- abstract apply(skeleton: Skeleton, deltaTime: number): void;
8834
+ abstract apply(skeleton: SkeletonRig, deltaTime: number): void;
8719
8835
  /**
8720
8836
  * Reset the processor to its initial state.
8721
8837
  *
@@ -8828,11 +8944,69 @@ type HumanoidJointMapping<T extends {
8828
8944
  leftHand?: Record<HumanoidHandRig, T>;
8829
8945
  rightHand?: Record<HumanoidHandRig, T>;
8830
8946
  };
8947
+ /** @public */
8948
+ type SkeletonBindPose = {
8949
+ rotation: Quaternion;
8950
+ scale: Vector3;
8951
+ position: Vector3;
8952
+ };
8953
+ /** @public */
8954
+ type SkeletonRigOptions = {
8955
+ rootJoint?: Nullable<SceneNode>;
8956
+ rootBindPose?: SkeletonBindPose;
8957
+ };
8958
+ /**
8959
+ * Shared joint rig for skeletal animation.
8960
+ *
8961
+ * A rig owns the animated joint nodes, bind pose, humanoid mapping and procedural
8962
+ * modifiers. Multiple skin bindings may reference the same rig with different
8963
+ * inverse bind matrices.
8964
+ *
8965
+ * @public
8966
+ */
8967
+ declare class SkeletonRig extends Disposable {
8968
+ private static readonly _registry;
8969
+ protected _id: string;
8970
+ protected _joints: SceneNode[];
8971
+ protected _bindPoseByJoint: Map<SceneNode, SkeletonBindPose>;
8972
+ protected _bindPose: SkeletonBindPose[];
8973
+ protected _rootJoint: Nullable<SceneNode>;
8974
+ protected _rootBindPose: SkeletonBindPose;
8975
+ protected _playing: boolean;
8976
+ protected _modifiers: SkeletonModifier[];
8977
+ protected _humanoidJointMapping: Nullable<HumanoidJointMapping<SceneNode>>;
8978
+ protected _humanoidRootRotation: Quaternion;
8979
+ constructor(joints: SceneNode[], bindPose: SkeletonBindPose[], options?: SkeletonRigOptions);
8980
+ static getRigKey(joints: SceneNode[], rootJoint?: Nullable<SceneNode>): string;
8981
+ static findRigById(id: string): Nullable<SkeletonRig>;
8982
+ get persistentId(): string;
8983
+ set persistentId(val: string);
8984
+ get joints(): SceneNode[];
8985
+ get bindPose(): SkeletonBindPose[];
8986
+ get rootJoint(): Nullable<SceneNode>;
8987
+ set rootJoint(joint: Nullable<SceneNode>);
8988
+ get rootBindPose(): SkeletonBindPose;
8989
+ getBindPoseForJoint(joint: SceneNode): SkeletonBindPose | null;
8990
+ get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>>;
8991
+ get humanoidRootRotation(): Quaternion;
8992
+ get modifiers(): SkeletonModifier[];
8993
+ get playing(): boolean;
8994
+ set playing(b: boolean);
8995
+ getJointIndex(joint: SceneNode): number;
8996
+ getJointIndexByName(jointName: string): number;
8997
+ computeBindPose(): void;
8998
+ apply(deltaTime: number): void;
8999
+ reset(): void;
9000
+ protected onDispose(): void;
9001
+ private findRootJoint;
9002
+ private getNodeBindPose;
9003
+ }
8831
9004
  /**
8832
- * Skeleton for skinned animation.
9005
+ * Skin binding for skinned animation.
8833
9006
  *
8834
9007
  * Responsibilities:
8835
- * - Maintains joint transforms: inverse bind, bind pose, and current skinning matrices.
9008
+ * - References a shared SkeletonRig.
9009
+ * - Maintains inverse bind and current skinning matrices for one skin.
8836
9010
  * - Provides a texture containing joint matrices for GPU skinning.
8837
9011
  * - Applies skinning state to associated meshes each frame.
8838
9012
  * - Computes animated axis-aligned bounding boxes using representative skinned vertices.
@@ -8844,25 +9018,24 @@ type HumanoidJointMapping<T extends {
8844
9018
  * and `_jointOffsets[1]` (previous).
8845
9019
  *
8846
9020
  * Usage:
8847
- * - Construct with joints, bind data, meshes and submesh bounding info.
9021
+ * - Construct with a rig, bind data, meshes and submesh bounding info.
8848
9022
  * - Call `apply()` each frame to update joint texture, bind to meshes, and update bounds.
8849
9023
  * - Call `reset()` to clear skinning on meshes.
8850
9024
  *
8851
9025
  * @public
8852
9026
  */
8853
- declare class Skeleton extends Disposable {
9027
+ declare class SkinBinding extends Disposable {
8854
9028
  /**
8855
- * Create a skeleton instance.
9029
+ * Create a skin binding instance.
8856
9030
  *
9031
+ * @param rig - Shared skeleton rig that owns animated joint transforms.
8857
9032
  * @param joints - Joint scene nodes (one per joint), ordered to match skin data.
8858
9033
  * @param inverseBindMatrices - Inverse bind matrices for each joint.
8859
9034
  * @param bindPoseMatrices - Bind pose matrices for each joint (model-space).
8860
9035
  */
8861
- constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPose: {
8862
- rotation: Quaternion;
8863
- scale: Vector3;
8864
- position: Vector3;
8865
- }[]);
9036
+ constructor(rig: SkeletonRig, inverseBindMatrices: Matrix4x4[], joints?: SceneNode[], bindPose?: SkeletonBindPose[]);
9037
+ static findSkeletonById(id: string): Nullable<SkinBinding>;
9038
+ get rig(): SkeletonRig;
8866
9039
  /** Gets joint nodes */
8867
9040
  get joints(): SceneNode[];
8868
9041
  /** Gets the humanoid joint mapping */
@@ -8904,6 +9077,7 @@ declare class Skeleton extends Disposable {
8904
9077
  * - Clears matrix arrays and joint references.
8905
9078
  */
8906
9079
  protected onDispose(): void;
9080
+ private _syncJointMatrixArray;
8907
9081
  /**
8908
9082
  * Build representative skinned bounding data for a submesh.
8909
9083
  *
@@ -8923,7 +9097,6 @@ declare class Skeleton extends Disposable {
8923
9097
  blendIndices: TypedArray;
8924
9098
  weights: TypedArray;
8925
9099
  }): SkinnedBoundingBox;
8926
- private findRootJoint;
8927
9100
  private static normalizeHumanoidJointName;
8928
9101
  private static getHumanoidJointNodeDepth;
8929
9102
  private static collectHumanoidJointNodeInfos;
@@ -8988,6 +9161,97 @@ declare class Skeleton extends Disposable {
8988
9161
  children: T[];
8989
9162
  }>(root: T): HumanoidJointMapping<T> | null;
8990
9163
  }
9164
+ /**
9165
+ * Legacy compatibility name for a skin binding.
9166
+ *
9167
+ * New code should use {@link SkeletonRig} for the shared animated rig and
9168
+ * {@link SkinBinding} for per-skin inverse bind matrices.
9169
+ *
9170
+ * @public
9171
+ */
9172
+ declare class Skeleton extends SkinBinding {
9173
+ constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPose: SkeletonBindPose[]);
9174
+ static tryExtractHumanoidJoints: typeof SkinBinding.tryExtractHumanoidJoints;
9175
+ static tryExtractHumanoidJointsMixamo: typeof SkinBinding.tryExtractHumanoidJointsMixamo;
9176
+ static tryExtractHumanoidJointsVRM: typeof SkinBinding.tryExtractHumanoidJointsVRM;
9177
+ static tryExtractHumanoidJointsUnityHumanoid: typeof SkinBinding.tryExtractHumanoidJointsUnityHumanoid;
9178
+ static tryExtractHumanoidJointsBiped: typeof SkinBinding.tryExtractHumanoidJointsBiped;
9179
+ static findSkeletonById(id: string): Nullable<SkinBinding>;
9180
+ }
9181
+
9182
+ /** @public */
9183
+ type SkeletalAnimationMaskRootMotionMode = 'include' | 'exclude' | 'only';
9184
+ /** @public */
9185
+ type SkeletalAnimationMaskUnsupportedTrackMode = 'skip' | 'error';
9186
+ /** @public */
9187
+ type HumanoidSkeletalAnimationMaskPreset = 'fullBody' | 'upperBody' | 'lowerBody' | 'head' | 'arms' | 'leftArm' | 'rightArm' | 'legs' | 'leftLeg' | 'rightLeg';
9188
+ /** @public */
9189
+ type JointNameMatcher = string | RegExp | ((joint: SceneNode) => boolean);
9190
+ /** @public */
9191
+ type SkeletalAnimationMaskCommonOptions = {
9192
+ /**
9193
+ * How root translation tracks are copied.
9194
+ *
9195
+ * Defaults to `include` for lower/full body humanoid masks and to `exclude` otherwise.
9196
+ */
9197
+ rootMotion?: SkeletalAnimationMaskRootMotionMode;
9198
+ /**
9199
+ * How tracks outside node transform animation should be handled.
9200
+ *
9201
+ * Defaults to `skip`.
9202
+ */
9203
+ unsupportedTracks?: SkeletalAnimationMaskUnsupportedTrackMode;
9204
+ };
9205
+ /** @public */
9206
+ type HumanoidSkeletalAnimationMaskOptions = SkeletalAnimationMaskCommonOptions & {
9207
+ type: 'humanoid';
9208
+ /**
9209
+ * Optional semantic preset used as the initial joint set.
9210
+ */
9211
+ preset?: HumanoidSkeletalAnimationMaskPreset;
9212
+ /**
9213
+ * Boundary joint for `upperBody`. Defaults to `HumanoidBodyRig.Spine`.
9214
+ */
9215
+ boundary?: HumanoidBodyRig;
9216
+ /**
9217
+ * Additional body joints selected by semantic name.
9218
+ */
9219
+ includeBody?: HumanoidBodyRig[];
9220
+ /**
9221
+ * Body joints removed from the selected set.
9222
+ */
9223
+ excludeBody?: HumanoidBodyRig[];
9224
+ includeLeftHand?: HumanoidHandRig[];
9225
+ includeRightHand?: HumanoidHandRig[];
9226
+ excludeLeftHand?: HumanoidHandRig[];
9227
+ excludeRightHand?: HumanoidHandRig[];
9228
+ /**
9229
+ * Whether explicit semantic include/exclude entries affect their descendants.
9230
+ *
9231
+ * Defaults to true for humanoid semantic masks.
9232
+ */
9233
+ includeDescendants?: boolean;
9234
+ };
9235
+ /** @public */
9236
+ type NamedJointsSkeletalAnimationMaskOptions = SkeletalAnimationMaskCommonOptions & {
9237
+ type: 'joints';
9238
+ /**
9239
+ * Joint name matchers. If omitted, all rig joints are selected before exclusions.
9240
+ */
9241
+ include?: JointNameMatcher[];
9242
+ /**
9243
+ * Joint name matchers removed from the selected set.
9244
+ */
9245
+ exclude?: JointNameMatcher[];
9246
+ /**
9247
+ * Whether selected or excluded joints affect their descendants.
9248
+ *
9249
+ * Defaults to false for name masks.
9250
+ */
9251
+ includeDescendants?: boolean;
9252
+ };
9253
+ /** @public */
9254
+ type SkeletalAnimationMaskOptions = HumanoidSkeletalAnimationMaskOptions | NamedJointsSkeletalAnimationMaskOptions;
8991
9255
 
8992
9256
  /**
8993
9257
  * Options for playing an animation.
@@ -9042,6 +9306,45 @@ type StopAnimationOptions = {
9042
9306
  */
9043
9307
  fadeOut?: number;
9044
9308
  };
9309
+ /** @public */
9310
+ type HumanoidRootMotionMode = 'scaled' | 'copy' | 'locked' | 'none';
9311
+ /** @public */
9312
+ type HumanoidRootMotionScaleMode = 'legLength' | 'none' | number;
9313
+ /** @public */
9314
+ type HumanoidRetargetAxisLocks = {
9315
+ x?: boolean;
9316
+ y?: boolean;
9317
+ z?: boolean;
9318
+ };
9319
+ /** @public */
9320
+ type CopyHumanoidAnimationOptions = {
9321
+ /**
9322
+ * Name for the new clip. Ignored when the legacy third `targetName` argument is a string.
9323
+ */
9324
+ targetName?: string;
9325
+ /**
9326
+ * How root translation should be handled.
9327
+ *
9328
+ * - `scaled`: retarget and scale root motion to the destination rig size.
9329
+ * - `copy`: retarget root motion without scale.
9330
+ * - `locked`: write a constant destination bind-pose root translation.
9331
+ * - `none`: do not create a root translation track.
9332
+ */
9333
+ rootMotion?: HumanoidRootMotionMode;
9334
+ /**
9335
+ * Scale used when `rootMotion` is `scaled`.
9336
+ */
9337
+ rootMotionScale?: HumanoidRootMotionScaleMode;
9338
+ /**
9339
+ * Axis locks applied after root motion retargeting. Locked axes stay at the destination bind pose.
9340
+ */
9341
+ lockRootMotionAxes?: HumanoidRetargetAxisLocks;
9342
+ /**
9343
+ * Whether to preserve non-root humanoid translation tracks. These are skipped by default because
9344
+ * retargeting humanoid joints should normally keep the destination skeleton lengths intact.
9345
+ */
9346
+ jointTranslations?: 'skip' | 'preserve';
9347
+ };
9045
9348
  /**
9046
9349
  * Animation set
9047
9350
  *
@@ -9080,7 +9383,17 @@ declare class AnimationSet extends Disposable implements IDisposable {
9080
9383
  /**
9081
9384
  * The skeletons used by animations in this set.
9082
9385
  */
9083
- get skeletons(): DRef<Skeleton>[];
9386
+ get skeletons(): DRef<SkinBinding>[];
9387
+ /**
9388
+ * The shared rigs used by animations in this set.
9389
+ */
9390
+ get rigs(): DRef<SkeletonRig>[];
9391
+ /**
9392
+ * Per-skin bindings used by skinned meshes in this set.
9393
+ */
9394
+ get skinBindings(): DRef<SkinBinding>[];
9395
+ private resolveRigByAnimationBindingId;
9396
+ private resolveClipRig;
9084
9397
  /**
9085
9398
  * Retrieve an animation clip by name.
9086
9399
  *
@@ -9118,7 +9431,7 @@ declare class AnimationSet extends Disposable implements IDisposable {
9118
9431
  * - Enforce repeat limits and apply fade-out termination if configured.
9119
9432
  * - For each animated target, blend active tracks (weighted by clip weight × fade-in × fade-out)
9120
9433
  * and apply the resulting state to the target.
9121
- * - Apply all active skeletons to update skinning transforms.
9434
+ * - Apply shared rig modifiers once, then update skin binding palettes.
9122
9435
  *
9123
9436
  * @param deltaInSeconds - Time step in seconds since last update.
9124
9437
  */
@@ -9174,6 +9487,19 @@ declare class AnimationSet extends Disposable implements IDisposable {
9174
9487
  * @param options - Optional fade-out configuration.
9175
9488
  */
9176
9489
  stopAnimation(name: string, options?: StopAnimationOptions): void;
9490
+ /**
9491
+ * Create a skeletal-only masked clip from an existing clip in this set.
9492
+ *
9493
+ * The generated clip is a regular `AnimationClip`: it contains cloned node transform tracks
9494
+ * for the selected rig joints and can be played/blended through the normal animation system.
9495
+ * Non-skeletal tracks are skipped by default.
9496
+ *
9497
+ * @param sourceName - Name of the source clip.
9498
+ * @param targetName - Name of the generated clip.
9499
+ * @param options - Humanoid semantic or joint-name based mask options.
9500
+ * @returns The generated clip, or null on failure.
9501
+ */
9502
+ createSkeletalMaskedAnimation(sourceName: string, targetName: string, options: SkeletalAnimationMaskOptions): AnimationClip | null;
9177
9503
  /**
9178
9504
  * Copy a humanoid animation clip from another AnimationSet into this one via humanoid rig mapping.
9179
9505
  *
@@ -9187,7 +9513,8 @@ declare class AnimationSet extends Disposable implements IDisposable {
9187
9513
  * @param targetName - Name for the new clip in this set. Defaults to `animationName`.
9188
9514
  * @returns The newly created AnimationClip, or null on failure.
9189
9515
  */
9190
- copyHumanoidAnimationFrom(sourceSet: AnimationSet, animationName: string, targetName?: string): AnimationClip | null;
9516
+ copyHumanoidAnimationFrom(sourceSet: AnimationSet, animationName: string, options?: CopyHumanoidAnimationOptions): AnimationClip | null;
9517
+ copyHumanoidAnimationFrom(sourceSet: AnimationSet, animationName: string, targetName?: string, options?: CopyHumanoidAnimationOptions): AnimationClip | null;
9191
9518
  /**
9192
9519
  * Copy an animation clip from another AnimationSet into this one.
9193
9520
  *
@@ -9202,9 +9529,13 @@ declare class AnimationSet extends Disposable implements IDisposable {
9202
9529
  * skeleton structure matching.
9203
9530
  * @returns The newly created AnimationClip, or null on failure.
9204
9531
  *
9205
- * @deprecated Use the new {@link AnimationSet.copyHumanoidAnimationFrom} method instead.
9532
+ * @deprecated Use AnimationSet.copyHumanoidAnimationFrom instead.
9206
9533
  */
9207
9534
  copyAnimationFrom(sourceSet: AnimationSet, animationName: string, targetName?: string, excludeJoint?: (jointName: string) => boolean): AnimationClip | null;
9535
+ /**
9536
+ * Reset all skeleton modifiers
9537
+ */
9538
+ resetSkeletonModifiers(): void;
9208
9539
  /**
9209
9540
  * Dispose the animation set and release owned resources.
9210
9541
  *
@@ -9264,6 +9595,10 @@ declare abstract class AnimationTrack<StateType = unknown> {
9264
9595
  */
9265
9596
  get jointIndex(): number;
9266
9597
  set jointIndex(index: number);
9598
+ /**
9599
+ * Clone this animation track
9600
+ */
9601
+ abstract clone(): this;
9267
9602
  /**
9268
9603
  * Reset the track to its initial state for the given target.
9269
9604
  *
@@ -9447,6 +9782,8 @@ declare class NodeTranslationTrack extends AnimationTrack<Vector3> {
9447
9782
  }[], embedded?: boolean);
9448
9783
  get interpolator(): Interpolator;
9449
9784
  set interpolator(interp: Interpolator);
9785
+ /** {@inheritDoc AnimationTrack.clone} */
9786
+ clone(): this;
9450
9787
  /** {@inheritDoc AnimationTrack.calculateState} */
9451
9788
  calculateState(target: object, currentTime: number): Vector3;
9452
9789
  /** {@inheritDoc AnimationTrack.applyState} */
@@ -9488,6 +9825,8 @@ declare class NodeRotationTrack extends AnimationTrack<Quaternion> {
9488
9825
  }[], embedded?: boolean);
9489
9826
  get interpolator(): Interpolator;
9490
9827
  set interpolator(interp: Interpolator);
9828
+ /** {@inheritDoc AnimationTrack.clone} */
9829
+ clone(): this;
9491
9830
  /** {@inheritDoc AnimationTrack.calculateState} */
9492
9831
  calculateState(target: object, currentTime: number): Quaternion;
9493
9832
  /** {@inheritDoc AnimationTrack.applyState} */
@@ -9529,6 +9868,8 @@ declare class NodeEulerRotationTrack extends AnimationTrack<Quaternion> {
9529
9868
  }[], embedded?: boolean);
9530
9869
  get interpolator(): Interpolator;
9531
9870
  set interpolator(interp: Interpolator);
9871
+ /** {@inheritDoc AnimationTrack.clone} */
9872
+ clone(): this;
9532
9873
  /** {@inheritDoc AnimationTrack.calculateState} */
9533
9874
  calculateState(target: object, currentTime: number): Quaternion;
9534
9875
  /** {@inheritDoc AnimationTrack.applyState} */
@@ -9570,6 +9911,8 @@ declare class NodeScaleTrack extends AnimationTrack<Vector3> {
9570
9911
  }[], embedded?: boolean);
9571
9912
  get interpolator(): Interpolator;
9572
9913
  set interpolator(interp: Interpolator);
9914
+ /** {@inheritDoc AnimationTrack.clone} */
9915
+ clone(): this;
9573
9916
  /** {@inheritDoc AnimationTrack.calculateState} */
9574
9917
  calculateState(target: object, currentTime: number): Vector3;
9575
9918
  /** {@inheritDoc AnimationTrack.applyState} */
@@ -9621,6 +9964,8 @@ declare class PropertyTrack extends AnimationTrack<number[]> {
9621
9964
  * @throws Error if the property type is unsupported for animation.
9622
9965
  */
9623
9966
  constructor(prop: PropertyAccessor, value?: number[], embedded?: boolean);
9967
+ /** {@inheritDoc AnimationTrack.clone} */
9968
+ clone(): this;
9624
9969
  /**
9625
9970
  * The primary interpolator for the property components.
9626
9971
  *
@@ -9683,6 +10028,7 @@ declare class MorphTargetTrack extends AnimationTrack<MorphState> {
9683
10028
  * Create an instance of MorphTargetTrack from morph parameters
9684
10029
  */
9685
10030
  constructor(interpolator?: Interpolator, defaultMorphWeights?: number[], targetBox?: BoundingBox[], originBox?: AABB, embedded?: boolean);
10031
+ clone(): this;
9686
10032
  get interpolator(): Nullable<Interpolator>;
9687
10033
  set interpolator(interp: Nullable<Interpolator>);
9688
10034
  get boundingBox(): Nullable<BoundingBox[]>;
@@ -9776,6 +10122,7 @@ declare class FixedGeometryCacheTrack extends AnimationTrack<FixedGeometryCacheS
9776
10122
  private _state;
9777
10123
  private readonly _meshBindings;
9778
10124
  constructor(times?: Float32Array, frames?: FixedGeometryCacheFrame[], embedded?: boolean);
10125
+ clone(): this;
9779
10126
  get times(): Float32Array;
9780
10127
  set times(value: Float32Array);
9781
10128
  get frames(): FixedGeometryCacheFrame[];
@@ -9831,6 +10178,7 @@ declare class PCAGeometryCacheTrack extends AnimationTrack<PCAGeometryCacheState
9831
10178
  private _state;
9832
10179
  private readonly _meshBindings;
9833
10180
  constructor(data?: Partial<PCAGeometryCacheTrackData>, embedded?: boolean);
10181
+ clone(): this;
9834
10182
  get times(): Float32Array;
9835
10183
  set times(value: Float32Array);
9836
10184
  get bounds(): [number, number, number, number, number, number][];
@@ -10112,7 +10460,7 @@ declare class IKModifier<Solver extends IKSolver = IKSolver> extends SkeletonMod
10112
10460
  /**
10113
10461
  * Apply IK solving to skeleton joints.
10114
10462
  */
10115
- apply(_skeleton: Skeleton, _deltaTime: number): void;
10463
+ apply(_skeleton: SkeletonRig, _deltaTime: number): void;
10116
10464
  /**
10117
10465
  * Reset the IK solver to initial state.
10118
10466
  */
@@ -10643,7 +10991,7 @@ declare class SpringModifier extends SkeletonModifier {
10643
10991
  /**
10644
10992
  * Apply spring physics to skeleton joints.
10645
10993
  */
10646
- apply(_skeleton: Skeleton, deltaTime: number): void;
10994
+ apply(_skeleton: SkeletonRig, deltaTime: number): void;
10647
10995
  /**
10648
10996
  * Reset the spring system to initial state.
10649
10997
  */
@@ -11695,6 +12043,8 @@ interface ColliderRW {
11695
12043
  localBoundsMax: Vector3;
11696
12044
  /** Scaled radius for current frame (base radius × world scale) */
11697
12045
  radius: number;
12046
+ /** Scaled capsule height for current frame (base height times world scale) */
12047
+ height: number;
11698
12048
  /** Whether this collider is active (0 = disabled, 1 = enabled) */
11699
12049
  enabled: number;
11700
12050
  }
@@ -11849,6 +12199,8 @@ interface TransformAccess {
11849
12199
  setLocalRotation(q: Quaternion): void;
11850
12200
  /** Write local scale */
11851
12201
  setLocalScale(s: Vector3): void;
12202
+ /** Original scene object backing this adapter, when available for serialization. */
12203
+ readonly node?: SceneNode;
11852
12204
  }
11853
12205
  /**
11854
12206
  * Bone hierarchy node for constraint building.
@@ -12212,6 +12564,12 @@ interface ControllerConfig {
12212
12564
  /** Which constraint types to generate and their collision flags */
12213
12565
  constraintOptions: ConstraintBuildOptions;
12214
12566
  }
12567
+ /**
12568
+ * Partial runtime update for JointDynamics controller configuration.
12569
+ *
12570
+ * @public
12571
+ */
12572
+ type ControllerConfigUpdate = DeepPartial<ControllerConfig, 2>;
12215
12573
  /**
12216
12574
  * Stable runtime handle for a JointDynamics collider.
12217
12575
  * @public
@@ -12236,6 +12594,33 @@ interface JointDynamicsGrabberHandle {
12236
12594
  readonly type: 'grabber';
12237
12595
  readonly id: number;
12238
12596
  }
12597
+ /**
12598
+ * Serializable snapshot of a runtime collider.
12599
+ * @public
12600
+ */
12601
+ interface JointDynamicsColliderSnapshot {
12602
+ r: ColliderR;
12603
+ transform: Nullable<SceneNode>;
12604
+ enabled: boolean;
12605
+ }
12606
+ /**
12607
+ * Serializable snapshot of a runtime flat plane.
12608
+ * @public
12609
+ */
12610
+ interface JointDynamicsFlatPlaneSnapshot {
12611
+ up: Vector3;
12612
+ position: Vector3;
12613
+ enabled: boolean;
12614
+ }
12615
+ /**
12616
+ * Serializable snapshot of a runtime grabber.
12617
+ * @public
12618
+ */
12619
+ interface JointDynamicsGrabberSnapshot {
12620
+ r: GrabberR;
12621
+ transform: Nullable<SceneNode>;
12622
+ enabled: boolean;
12623
+ }
12239
12624
  /**
12240
12625
  * High-level controller for joint dynamics simulation.
12241
12626
  *
@@ -12266,6 +12651,10 @@ declare class JointDynamicsSystemController {
12266
12651
  private _previousRootPosition;
12267
12652
  private _previousRootRotation;
12268
12653
  private _rootTransform;
12654
+ private _rootPoints;
12655
+ private _allPoints;
12656
+ private _parentMap;
12657
+ private _maxPointDepth;
12269
12658
  private _pointTransforms;
12270
12659
  private _colliderTransforms;
12271
12660
  private _grabberTransforms;
@@ -12275,6 +12664,10 @@ declare class JointDynamicsSystemController {
12275
12664
  private _colliderHandleToIndex;
12276
12665
  private _flatPlaneHandleToIndex;
12277
12666
  private _grabberHandleToIndex;
12667
+ private _baseSystemScale;
12668
+ private _currentSystemScale;
12669
+ private _basePointParentLengths;
12670
+ private _baseConstraintLengths;
12278
12671
  private _nextColliderHandleId;
12279
12672
  private _nextFlatPlaneHandleId;
12280
12673
  private _nextGrabberHandleId;
@@ -12320,6 +12713,42 @@ declare class JointDynamicsSystemController {
12320
12713
  position: Vector3;
12321
12714
  rotation: Quaternion;
12322
12715
  }>;
12716
+ /**
12717
+ * Returns a detached snapshot of the current runtime configuration.
12718
+ */
12719
+ getConfig(): ControllerConfig;
12720
+ /**
12721
+ * Returns detached collider snapshots for persistence.
12722
+ */
12723
+ getColliderSnapshots(): JointDynamicsColliderSnapshot[];
12724
+ /**
12725
+ * Returns detached flat-plane snapshots for persistence.
12726
+ */
12727
+ getFlatPlaneSnapshots(): JointDynamicsFlatPlaneSnapshot[];
12728
+ /**
12729
+ * Returns detached grabber snapshots for persistence.
12730
+ */
12731
+ getGrabberSnapshots(): JointDynamicsGrabberSnapshot[];
12732
+ /**
12733
+ * Replaces the runtime configuration.
12734
+ *
12735
+ * If the controller is already initialized, cached per-point parameters and generated
12736
+ * constraints are refreshed immediately so editor-driven changes take effect in the next step.
12737
+ *
12738
+ * @param config - Complete controller configuration to apply.
12739
+ */
12740
+ setConfig(config: ControllerConfig): void;
12741
+ /**
12742
+ * Applies a partial runtime configuration update.
12743
+ *
12744
+ * This is intended for editor workflows that tweak one or more simulation parameters live.
12745
+ * The controller updates only the affected caches: global step parameters are applied directly,
12746
+ * per-point curve/gravity changes rebuild cached point coefficients, and constraint option
12747
+ * changes rebuild the generated constraints.
12748
+ *
12749
+ * @param config - Partial configuration update.
12750
+ */
12751
+ updateConfig(config: ControllerConfigUpdate): void;
12323
12752
  /**
12324
12753
  * Compensates for teleportation by resetting the previous root transform to the current one.
12325
12754
  * Call this after a character warp or teleport to avoid a large root-motion impulse on the
@@ -12501,6 +12930,7 @@ declare class JointDynamicsSystemController {
12501
12930
  /** Gets the number of runtime grabbers. */
12502
12931
  get grabberCount(): number;
12503
12932
  private _computeBlendRatio;
12933
+ private _refreshCachedSimulationConfig;
12504
12934
  private _getColliderIndex;
12505
12935
  private _getGrabberIndex;
12506
12936
  private _getFlatPlaneIndex;
@@ -12509,9 +12939,17 @@ declare class JointDynamicsSystemController {
12509
12939
  private _rebuildFlatPlaneHandleMap;
12510
12940
  private _rebuildActiveFlatPlanes;
12511
12941
  private _rebuildGrabberHandleMap;
12942
+ private _rebuildConstraints;
12943
+ private _getSystemUniformScale;
12944
+ private _updateScaleDependentParameters;
12945
+ private _refreshPointParameters;
12512
12946
  private _createPointR;
12947
+ private _applyConfigToPoint;
12513
12948
  private _createPointRW;
12514
12949
  private _createColliderRW;
12950
+ private _cloneControllerConfig;
12951
+ private _cloneInterpolatorScalar;
12952
+ private _sanitizeControllerConfig;
12515
12953
  }
12516
12954
 
12517
12955
  /**
@@ -12522,7 +12960,7 @@ declare class JointDynamicsSystemController {
12522
12960
  *
12523
12961
  * @public
12524
12962
  */
12525
- declare function createTransformAccess(obj: SceneNode): TransformAccess;
12963
+ declare function createTransformAccess(obj: SceneNode, exposeNode?: boolean): TransformAccess;
12526
12964
  /**
12527
12965
  * Describes the bone chains simulated by a JointDynamicsSystem.
12528
12966
  *
@@ -12562,6 +13000,8 @@ type JointDynamicSystemConfig = {
12562
13000
  */
12563
13001
  declare class JointDynamicsSystem {
12564
13002
  private _controller;
13003
+ private _chainConfig;
13004
+ private _bindPose;
12565
13005
  /**
12566
13006
  * Create a joint dynamics system for one or more bone chains.
12567
13007
  *
@@ -12589,10 +13029,30 @@ declare class JointDynamicsSystem {
12589
13029
  * @returns The underlying joint dynamics controller.
12590
13030
  */
12591
13031
  get controller(): JointDynamicsSystemController;
13032
+ /**
13033
+ * Get the node chain topology used to construct this system.
13034
+ */
13035
+ get chainConfig(): JointChainConfig;
13036
+ /**
13037
+ * Returns detached collider snapshots for serialization.
13038
+ */
13039
+ getColliderSnapshots(): JointDynamicsColliderSnapshot[];
13040
+ /**
13041
+ * Returns detached flat-plane snapshots for serialization.
13042
+ */
13043
+ getFlatPlaneSnapshots(): JointDynamicsFlatPlaneSnapshot[];
13044
+ /**
13045
+ * Returns detached grabber snapshots for serialization.
13046
+ */
13047
+ getGrabberSnapshots(): JointDynamicsGrabberSnapshot[];
13048
+ /**
13049
+ * Reset chain nodes to bind pose
13050
+ */
13051
+ resetChains(): void;
12592
13052
  /**
12593
13053
  * Add a fully configured collider at runtime.
12594
13054
  *
12595
- * The collider transform is read from the supplied scene node every simulation step.
13055
+ * The collider transform is read from the supplied scene node every simula ; ion step.
12596
13056
  * If no transform is supplied, the collider is created at the identity transform.
12597
13057
  *
12598
13058
  * @param r - Read-only collider parameters.
@@ -12760,7 +13220,7 @@ declare class JointDynamicsModifier extends SkeletonModifier {
12760
13220
  /**
12761
13221
  * Apply spring physics to skeleton joints.
12762
13222
  */
12763
- apply(_skeleton: Skeleton, deltaTime: number): void;
13223
+ apply(_skeleton: SkeletonRig, deltaTime: number): void;
12764
13224
  /**
12765
13225
  * Reset the spring system to initial state.
12766
13226
  */
@@ -12776,23 +13236,33 @@ declare class JointDynamicsModifier extends SkeletonModifier {
12776
13236
  * @public
12777
13237
  */
12778
13238
  type MeshUpdateCallback = (frameId: number, elapsedInSeconds: number, deltaInSeconds: number) => void;
12779
- declare const Mesh_base: typeof GraphNode & _zephyr3d_base.GenericConstructor<{
13239
+ /**
13240
+ * Bounding data used to update a mesh's local bounding box after morph target weights change.
13241
+ *
13242
+ * @public
13243
+ */
13244
+ interface MorphBoundingInfo {
13245
+ targetBoxes: BoundingBox[];
13246
+ originBox: BoundingBox;
13247
+ }
13248
+ declare const MeshBase: typeof GraphNode & _zephyr3d_base.GenericConstructor<{
12780
13249
  getNode(): SceneNode;
12781
- } & _zephyr3d_base.Disposable> & (new (...args: any[]) => IMixinDrawable);
13250
+ } & _zephyr3d_base.Disposable> & (new (...args: any[]) => IMixinDrawable) & (new (...args: any[]) => _zephyr3d_base.IEventTarget<{
13251
+ primitive_changed: [primitive: Nullable<Primitive>];
13252
+ material_changed: [material: Nullable<MeshMaterial>];
13253
+ } & {
13254
+ dispose: [];
13255
+ }>);
12782
13256
  /**
12783
13257
  * Mesh node
12784
13258
  * @public
12785
13259
  */
12786
- declare class Mesh extends Mesh_base implements BatchDrawable {
13260
+ declare class Mesh extends MeshBase implements BatchDrawable {
12787
13261
  /**
12788
13262
  * Creates an instance of mesh node
12789
13263
  * @param scene - The scene to which the mesh node belongs
12790
13264
  */
12791
13265
  constructor(scene: Scene, primitive?: Primitive, material?: MeshMaterial);
12792
- /**
12793
- * {@inheritDoc Drawable.getName}
12794
- */
12795
- getName(): string;
12796
13266
  /**
12797
13267
  * Returns the batch instance ID for the current render pass.
12798
13268
  */
@@ -12808,15 +13278,17 @@ declare class Mesh extends Mesh_base implements BatchDrawable {
12808
13278
  setPickTarget(node: SceneNode, label?: string): void;
12809
13279
  get skeletonName(): string;
12810
13280
  set skeletonName(name: string);
13281
+ get skinBindingName(): string;
13282
+ set skinBindingName(name: string);
12811
13283
  /** Wether the mesh node casts shadows */
12812
13284
  get castShadow(): boolean;
12813
13285
  set castShadow(b: boolean);
12814
13286
  /** Primitive of the mesh */
12815
- get primitive(): Nullable<Primitive>;
12816
- set primitive(prim: Nullable<Primitive>);
13287
+ get primitive(): Primitive | null;
13288
+ set primitive(prim: Primitive | null);
12817
13289
  /** Material of the mesh */
12818
- get material(): Nullable<MeshMaterial>;
12819
- set material(m: Nullable<MeshMaterial>);
13290
+ get material(): MeshMaterial | null;
13291
+ set material(m: MeshMaterial | null);
12820
13292
  /**
12821
13293
  * {@inheritDoc SceneNode.isMesh}
12822
13294
  */
@@ -12830,6 +13302,15 @@ declare class Mesh extends Mesh_base implements BatchDrawable {
12830
13302
  * Gets the bounding box for animation
12831
13303
  */
12832
13304
  getAnimatedBoundingBox(): BoundingBox | null;
13305
+ /**
13306
+ * Sets morph target bounding data used to update the animated bounding box when weights change.
13307
+ * @param info - Morph target bounding data
13308
+ */
13309
+ setMorphBoundingInfo(info: Nullable<MorphBoundingInfo>): void;
13310
+ /**
13311
+ * Gets morph target bounding data.
13312
+ */
13313
+ getMorphBoundingInfo(): Nullable<MorphBoundingInfo>;
12833
13314
  /**
12834
13315
  * Sets the texture that contains the bone matrices for skeletal animation
12835
13316
  * @param matrices - The texture that contains the bone matrices
@@ -12871,6 +13352,12 @@ declare class Mesh extends Mesh_base implements BatchDrawable {
12871
13352
  * @returns The name of the morph target, or null if not found
12872
13353
  */
12873
13354
  getMorphTargetName(index: number): Nullable<string>;
13355
+ /**
13356
+ * Get the index of the morph target by name
13357
+ * @param name - The name of the morph target
13358
+ * @returns The index of the morph target, or -1 if not found
13359
+ */
13360
+ getMorphTargetIndexByName(name: string): number;
12874
13361
  /**
12875
13362
  * Update morph target weight
12876
13363
  *
@@ -12878,6 +13365,13 @@ declare class Mesh extends Mesh_base implements BatchDrawable {
12878
13365
  * @param weight - The weight of the morph target
12879
13366
  */
12880
13367
  setMorphWeight(name: string, weight: number): void;
13368
+ /**
13369
+ * Update morph target weight by index
13370
+ *
13371
+ * @param index - The index of the morph target
13372
+ * @param weight - The weight of the morph target
13373
+ */
13374
+ setMorphWeightByIndex(index: number, weight: number): void;
12881
13375
  /**
12882
13376
  * Get morph target weight
12883
13377
  *
@@ -12886,7 +13380,7 @@ declare class Mesh extends Mesh_base implements BatchDrawable {
12886
13380
  */
12887
13381
  getMorphWeight(name: string): number;
12888
13382
  /**
12889
- * Update morph target weight
13383
+ * Update morph target weights
12890
13384
  *
12891
13385
  * @param weight - The morph target weights. The length must not exceed the mesh's morph target count.
12892
13386
  */
@@ -12920,11 +13414,11 @@ declare class Mesh extends Mesh_base implements BatchDrawable {
12920
13414
  /**
12921
13415
  * {@inheritDoc Drawable.getMaterial}
12922
13416
  */
12923
- getMaterial(): Nullable<MeshMaterial>;
13417
+ getMaterial(): MeshMaterial | null;
12924
13418
  /**
12925
13419
  * {@inheritDoc Drawable.getPrimitive}
12926
13420
  */
12927
- getPrimitive(): Nullable<Primitive>;
13421
+ getPrimitive(): Primitive | null;
12928
13422
  /**
12929
13423
  * {@inheritDoc Drawable.getBoneMatrices}
12930
13424
  */
@@ -12951,9 +13445,7 @@ declare class BatchGroup extends GraphNode {
12951
13445
  * @param scene - The scene to which the mesh node belongs
12952
13446
  */
12953
13447
  constructor(scene: Scene);
12954
- /**
12955
- * {@inheritDoc Drawable.getName}
12956
- */
13448
+ /** Gets the batch group name. */
12957
13449
  getName(): string;
12958
13450
  /**
12959
13451
  * {@inheritDoc SceneNode.isBatchGroup}
@@ -13186,33 +13678,88 @@ declare class NamedObject {
13186
13678
  constructor(name: string);
13187
13679
  }
13188
13680
  /**
13189
- * Texture information for model loading
13681
+ * Texture sampler settings for model loading.
13190
13682
  * @public
13191
13683
  */
13192
- interface MaterialTextureInfo {
13193
- texture: Nullable<Texture2D>;
13194
- sampler: Nullable<TextureSampler>;
13195
- texCoord: number;
13196
- transform: Nullable<Matrix4x4>;
13684
+ interface AssetSamplerInfo {
13685
+ wrapS: TextureAddressMode;
13686
+ wrapT: TextureAddressMode;
13687
+ magFilter: TextureFilterMode;
13688
+ mipFilter: TextureFilterMode;
13689
+ minFilter: TextureFilterMode;
13197
13690
  }
13198
13691
  /**
13199
- * Common properties of material for model loading
13692
+ * Image payload information for model loading.
13200
13693
  * @public
13201
13694
  */
13202
- interface AssetMaterialCommon {
13203
- vertexColor?: boolean;
13204
- vertexNormal?: boolean;
13205
- useTangent?: boolean;
13206
- alphaMode?: 'blend' | 'mask';
13207
- alphaCutoff?: number;
13208
- doubleSided?: boolean;
13209
- normalMap?: Nullable<MaterialTextureInfo>;
13210
- bumpScale?: number;
13211
- emissiveMap?: Nullable<MaterialTextureInfo>;
13212
- emissiveColor?: Vector3;
13213
- emissiveStrength?: number;
13214
- occlusionMap?: Nullable<MaterialTextureInfo>;
13215
- occlusionStrength?: number;
13695
+ interface AssetImageInfo {
13696
+ uri?: string;
13697
+ data?: Uint8Array<ArrayBuffer>;
13698
+ mimeType?: string;
13699
+ }
13700
+ /**
13701
+ * Vertex buffer payload information for model loading.
13702
+ * @public
13703
+ */
13704
+ interface AssetVertexBufferInfo {
13705
+ attrib: VertexAttribFormat;
13706
+ data: TypedArray;
13707
+ }
13708
+ /**
13709
+ * Primitive geometry information for model loading.
13710
+ * @public
13711
+ */
13712
+ interface AssetPrimitiveInfo {
13713
+ vertices: Record<VertexSemantic, {
13714
+ format: VertexAttribFormat;
13715
+ data: TypedArray;
13716
+ }>;
13717
+ indices: Nullable<Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>>;
13718
+ indexCount: number;
13719
+ type: PrimitiveType;
13720
+ boxMin: Vector3;
13721
+ boxMax: Vector3;
13722
+ path?: string;
13723
+ }
13724
+ /**
13725
+ * Texture information for model loading
13726
+ * @public
13727
+ */
13728
+ interface AssetTextureInfo {
13729
+ image: Nullable<AssetImageInfo>;
13730
+ sRGB?: boolean;
13731
+ sampler: Nullable<AssetSamplerInfo>;
13732
+ texCoord: number;
13733
+ transform: Nullable<Matrix4x4>;
13734
+ }
13735
+ /**
13736
+ * Resolved material texture information.
13737
+ * @public
13738
+ */
13739
+ interface MaterialTextureInfo {
13740
+ texture: Texture2D;
13741
+ sampler: TextureSampler;
13742
+ texCoord: number;
13743
+ transform: Matrix4x4;
13744
+ }
13745
+ /**
13746
+ * Common properties of material for model loading
13747
+ * @public
13748
+ */
13749
+ interface AssetMaterialCommon {
13750
+ vertexColor?: boolean;
13751
+ vertexNormal?: boolean;
13752
+ useTangent?: boolean;
13753
+ alphaMode?: 'blend' | 'mask';
13754
+ alphaCutoff?: number;
13755
+ doubleSided?: boolean;
13756
+ normalMap?: AssetTextureInfo;
13757
+ bumpScale?: number;
13758
+ emissiveMap?: AssetTextureInfo;
13759
+ emissiveColor?: Vector3;
13760
+ emissiveStrength?: number;
13761
+ occlusionMap?: AssetTextureInfo;
13762
+ occlusionStrength?: number;
13216
13763
  }
13217
13764
  /**
13218
13765
  * Base material properties for model loading
@@ -13221,13 +13768,15 @@ interface AssetMaterialCommon {
13221
13768
  interface AssetMaterial {
13222
13769
  type: string;
13223
13770
  common: AssetMaterialCommon;
13771
+ path?: string;
13772
+ material?: DRef<MeshMaterial>;
13224
13773
  }
13225
13774
  /**
13226
13775
  * Unlit related material properties for model loading
13227
13776
  * @public
13228
13777
  */
13229
13778
  interface AssetUnlitMaterial extends AssetMaterial {
13230
- diffuseMap?: Nullable<MaterialTextureInfo>;
13779
+ diffuseMap?: AssetTextureInfo;
13231
13780
  diffuse?: Vector4;
13232
13781
  }
13233
13782
  /**
@@ -13236,9 +13785,9 @@ interface AssetUnlitMaterial extends AssetMaterial {
13236
13785
  */
13237
13786
  interface AssetMaterialSheen {
13238
13787
  sheenColorFactor?: Vector3;
13239
- sheenColorMap?: Nullable<MaterialTextureInfo>;
13788
+ sheenColorMap?: AssetTextureInfo;
13240
13789
  sheenRoughnessFactor?: number;
13241
- sheenRoughnessMap?: Nullable<MaterialTextureInfo>;
13790
+ sheenRoughnessMap?: AssetTextureInfo;
13242
13791
  }
13243
13792
  /**
13244
13793
  * Clearcoat related material properties for model loading
@@ -13246,10 +13795,10 @@ interface AssetMaterialSheen {
13246
13795
  */
13247
13796
  interface AssetMaterialClearcoat {
13248
13797
  clearCoatFactor?: number;
13249
- clearCoatIntensityMap?: Nullable<MaterialTextureInfo>;
13798
+ clearCoatIntensityMap?: AssetTextureInfo;
13250
13799
  clearCoatRoughnessFactor?: number;
13251
- clearCoatRoughnessMap?: Nullable<MaterialTextureInfo>;
13252
- clearCoatNormalMap?: Nullable<MaterialTextureInfo>;
13800
+ clearCoatRoughnessMap?: AssetTextureInfo;
13801
+ clearCoatNormalMap?: AssetTextureInfo;
13253
13802
  }
13254
13803
  /**
13255
13804
  * Transmission related material properties for model loading
@@ -13257,9 +13806,9 @@ interface AssetMaterialClearcoat {
13257
13806
  */
13258
13807
  interface AssetMaterialTransmission {
13259
13808
  transmissionFactor?: number;
13260
- transmissionMap?: Nullable<MaterialTextureInfo>;
13809
+ transmissionMap?: AssetTextureInfo;
13261
13810
  thicknessFactor?: number;
13262
- thicknessMap?: Nullable<MaterialTextureInfo>;
13811
+ thicknessMap?: AssetTextureInfo;
13263
13812
  attenuationColor?: Vector3;
13264
13813
  attenuationDistance?: number;
13265
13814
  }
@@ -13269,11 +13818,11 @@ interface AssetMaterialTransmission {
13269
13818
  */
13270
13819
  interface AssetMaterialIridescence {
13271
13820
  iridescenceFactor?: number;
13272
- iridescenceMap?: Nullable<MaterialTextureInfo>;
13821
+ iridescenceMap?: AssetTextureInfo;
13273
13822
  iridescenceIor?: number;
13274
13823
  iridescenceThicknessMinimum?: number;
13275
13824
  iridescenceThicknessMaximum?: number;
13276
- iridescenceThicknessMap?: Nullable<MaterialTextureInfo>;
13825
+ iridescenceThicknessMap?: AssetTextureInfo;
13277
13826
  }
13278
13827
  /**
13279
13828
  * PBR related material properties for model loading
@@ -13289,11 +13838,11 @@ interface AssetPBRMaterialCommon extends AssetUnlitMaterial {
13289
13838
  interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {
13290
13839
  metallic?: number;
13291
13840
  roughness?: number;
13292
- metallicMap?: Nullable<MaterialTextureInfo>;
13841
+ metallicMap?: AssetTextureInfo;
13293
13842
  metallicIndex?: number;
13294
13843
  roughnessIndex?: number;
13295
- specularMap?: Nullable<MaterialTextureInfo>;
13296
- specularColorMap?: Nullable<MaterialTextureInfo>;
13844
+ specularMap?: AssetTextureInfo;
13845
+ specularColorMap?: AssetTextureInfo;
13297
13846
  specularFactor?: Vector4;
13298
13847
  sheen?: AssetMaterialSheen;
13299
13848
  clearcoat?: AssetMaterialClearcoat;
@@ -13307,16 +13856,15 @@ interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {
13307
13856
  interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {
13308
13857
  specular?: Vector3;
13309
13858
  glossness?: number;
13310
- specularGlossnessMap?: Nullable<MaterialTextureInfo>;
13859
+ specularGlossnessMap?: AssetTextureInfo;
13311
13860
  }
13312
13861
  /**
13313
13862
  * Sub mesh data interface for model loading
13314
13863
  * @public
13315
13864
  */
13316
13865
  interface AssetSubMeshData {
13317
- primitive: DRef<Primitive>;
13318
- material: DRef<MeshMaterial>;
13319
- mesh?: Mesh;
13866
+ primitive: Nullable<AssetPrimitiveInfo>;
13867
+ material: Nullable<AssetMaterial>;
13320
13868
  rawPositions: Nullable<Float32Array>;
13321
13869
  rawBlendIndices: Nullable<TypedArray>;
13322
13870
  rawJointWeights: Nullable<TypedArray>;
@@ -13334,9 +13882,35 @@ interface AssetSubMeshData {
13334
13882
  * @public
13335
13883
  */
13336
13884
  interface AssetMeshData {
13337
- morphWeights?: Nullable<number[]>;
13885
+ morphWeights?: number[];
13886
+ morphNames?: string[];
13338
13887
  subMeshes: AssetSubMeshData[];
13339
13888
  }
13889
+ /**
13890
+ * Morph target binding in a model-level expression/group.
13891
+ * @public
13892
+ */
13893
+ interface AssetMorphTargetBinding {
13894
+ /** Restrict this binding to runtime meshes created from this asset node. */
13895
+ node?: AssetHierarchyNode;
13896
+ /** Restrict this binding to runtime meshes created from this asset mesh. */
13897
+ mesh?: AssetMeshData;
13898
+ /** Morph target index in the source mesh. */
13899
+ targetIndex?: number;
13900
+ /** Morph target name in the source mesh. */
13901
+ targetName?: string;
13902
+ /** Weight contributed by this binding when the group weight is 1. */
13903
+ weight: number;
13904
+ }
13905
+ /**
13906
+ * Model-level morph target group, commonly used as a complete facial expression.
13907
+ * @public
13908
+ */
13909
+ interface AssetMorphTargetGroup {
13910
+ name: string;
13911
+ bindings: AssetMorphTargetBinding[];
13912
+ isBinary?: boolean;
13913
+ }
13340
13914
  /**
13341
13915
  * Animation track interface for model loading
13342
13916
  * @public
@@ -13348,8 +13922,16 @@ interface AssetAnimationTrack {
13348
13922
  defaultMorphWeights?: number[];
13349
13923
  }
13350
13924
  /**
13351
- * Fixed-frame geometry cache animation track data.
13352
- *
13925
+ * A single geometry cache frame.
13926
+ * @public
13927
+ */
13928
+ interface AssetGeometryCacheFrame {
13929
+ positions: Float32Array;
13930
+ normals?: Nullable<Float32Array>;
13931
+ boundingBox: BoundingBox;
13932
+ }
13933
+ /**
13934
+ * Fixed-vertex geometry cache animation track information.
13353
13935
  * @public
13354
13936
  */
13355
13937
  interface AssetFixedGeometryCacheAnimationTrack {
@@ -13358,11 +13940,10 @@ interface AssetFixedGeometryCacheAnimationTrack {
13358
13940
  codec?: 'fixed';
13359
13941
  subMeshIndex: number;
13360
13942
  times: Float32Array;
13361
- frames: FixedGeometryCacheFrame[];
13943
+ frames: AssetGeometryCacheFrame[];
13362
13944
  }
13363
13945
  /**
13364
- * PCA-compressed geometry cache animation track data.
13365
- *
13946
+ * PCA-compressed geometry cache animation track information.
13366
13947
  * @public
13367
13948
  */
13368
13949
  interface AssetPCAGeometryCacheAnimationTrack {
@@ -13381,8 +13962,7 @@ interface AssetPCAGeometryCacheAnimationTrack {
13381
13962
  normalCoefficients?: Nullable<Float32Array[]>;
13382
13963
  }
13383
13964
  /**
13384
- * Geometry cache animation track data.
13385
- *
13965
+ * Geometry cache animation track information.
13386
13966
  * @public
13387
13967
  */
13388
13968
  type AssetGeometryCacheAnimationTrack = AssetFixedGeometryCacheAnimationTrack | AssetPCAGeometryCacheAnimationTrack;
@@ -13444,18 +14024,17 @@ declare class AssetHierarchyNode extends NamedObject {
13444
14024
  private _mesh;
13445
14025
  private _skeleton;
13446
14026
  private _attachToSkeleton;
13447
- private _meshAttached;
13448
14027
  private _matrix;
13449
14028
  private _worldMatrix;
13450
14029
  private _weights;
13451
14030
  private readonly _children;
13452
- private readonly _instances?;
14031
+ private readonly _instances;
13453
14032
  /**
13454
14033
  * Creates an instance of AssetHierarchyNode
13455
14034
  * @param name - Name of the node
13456
14035
  * @param parent - Parent of the node
13457
14036
  */
13458
- constructor(name: string, parent?: Nullable<AssetHierarchyNode>);
14037
+ constructor(name: string, model: SharedModel, parent?: AssetHierarchyNode);
13459
14038
  /** Parent of the node */
13460
14039
  get parent(): Nullable<AssetHierarchyNode>;
13461
14040
  /** Local transformation matrix of the node */
@@ -13470,7 +14049,7 @@ declare class AssetHierarchyNode extends NamedObject {
13470
14049
  t: Vector3;
13471
14050
  s: Vector3;
13472
14051
  r: Quaternion;
13473
- }[] | null;
14052
+ }[];
13474
14053
  /** Default morph target weights */
13475
14054
  get weights(): Nullable<number[]>;
13476
14055
  set weights(val: Nullable<number[]>);
@@ -13486,12 +14065,13 @@ declare class AssetHierarchyNode extends NamedObject {
13486
14065
  /** The scale of the node */
13487
14066
  get scaling(): Vector3;
13488
14067
  set scaling(val: Vector3);
13489
- /** true if the node is parent of a mesh node */
13490
- get meshAttached(): boolean;
13491
14068
  /** Children of the node */
13492
14069
  get children(): AssetHierarchyNode[];
13493
14070
  /** The skeleton to which the node belongs if this is a joint node */
13494
14071
  get skeletonAttached(): Nullable<Set<AssetSkeleton>>;
14072
+ isParentOf(child: Nullable<AssetHierarchyNode>): boolean;
14073
+ getWorldPosition(): Vector3;
14074
+ computeTransforms(parentTransform: Nullable<Matrix4x4>): void;
13495
14075
  /**
13496
14076
  * Adds a child to this node
13497
14077
  * @param child - The child node to be added
@@ -13537,6 +14117,7 @@ declare class AssetSkeleton extends NamedObject {
13537
14117
  * @param inverseBindMatrix - Inverse binding matrix of the joint
13538
14118
  */
13539
14119
  addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4): void;
14120
+ get root(): AssetHierarchyNode;
13540
14121
  }
13541
14122
  /**
13542
14123
  * Scene for model loading
@@ -13551,6 +14132,115 @@ declare class AssetScene extends NamedObject {
13551
14132
  */
13552
14133
  constructor(name: string);
13553
14134
  }
14135
+ /**
14136
+ * Spring bone collider shape information.
14137
+ * @public
14138
+ */
14139
+ type AssetSpringBoneColliderShape = {
14140
+ type: 'sphere';
14141
+ offset: Vector3;
14142
+ radius: number;
14143
+ inside?: boolean;
14144
+ } | {
14145
+ type: 'capsule';
14146
+ offset: Vector3;
14147
+ tail: Vector3;
14148
+ radius: number;
14149
+ inside?: boolean;
14150
+ } | {
14151
+ type: 'plane';
14152
+ offset: Vector3;
14153
+ normal: Vector3;
14154
+ };
14155
+ /**
14156
+ * Spring bone collider information.
14157
+ * @public
14158
+ */
14159
+ interface AssetSpringBoneCollider {
14160
+ name?: string;
14161
+ node: AssetHierarchyNode;
14162
+ shape: AssetSpringBoneColliderShape;
14163
+ }
14164
+ /**
14165
+ * Spring bone collider group information.
14166
+ * @public
14167
+ */
14168
+ interface AssetSpringBoneColliderGroup {
14169
+ name?: string;
14170
+ colliders: AssetSpringBoneCollider[];
14171
+ }
14172
+ /**
14173
+ * Spring bone joint information.
14174
+ * @public
14175
+ */
14176
+ interface AssetSpringBoneJoint {
14177
+ node: AssetHierarchyNode;
14178
+ hitRadius: number;
14179
+ stiffness: number;
14180
+ gravityPower: number;
14181
+ gravityDir: Vector3;
14182
+ dragForce: number;
14183
+ }
14184
+ /**
14185
+ * Spring bone chain information.
14186
+ * @public
14187
+ */
14188
+ interface AssetSpringBone {
14189
+ name?: string;
14190
+ center?: AssetHierarchyNode;
14191
+ joints: AssetSpringBoneJoint[];
14192
+ rootBones?: AssetHierarchyNode[];
14193
+ colliderGroups: AssetSpringBoneColliderGroup[];
14194
+ }
14195
+ /**
14196
+ * Joint dynamics collider information.
14197
+ * @public
14198
+ */
14199
+ interface AssetJointDynamicsCollider {
14200
+ name?: string;
14201
+ node: AssetHierarchyNode;
14202
+ localPosition: Vector3;
14203
+ localRotation: Quaternion;
14204
+ collider: ColliderR;
14205
+ }
14206
+ /**
14207
+ * Joint dynamics chain information.
14208
+ * @public
14209
+ */
14210
+ interface AssetJointDynamicsChain {
14211
+ start: AssetHierarchyNode;
14212
+ end: AssetHierarchyNode;
14213
+ }
14214
+ /**
14215
+ * Joint dynamics flat plane information.
14216
+ * @public
14217
+ */
14218
+ interface AssetJointDynamicsFlatPlane {
14219
+ node: AssetHierarchyNode;
14220
+ position: Vector3;
14221
+ up: Vector3;
14222
+ }
14223
+ /**
14224
+ * Joint dynamics spring bone information.
14225
+ * @public
14226
+ */
14227
+ interface AssetJointDynamicsSpringBone {
14228
+ name?: string;
14229
+ center?: AssetHierarchyNode;
14230
+ chains: AssetJointDynamicsChain[];
14231
+ controllerConfig: DeepPartial<ControllerConfig, 2>;
14232
+ colliders: AssetJointDynamicsCollider[];
14233
+ flatPlanes: AssetJointDynamicsFlatPlane[];
14234
+ }
14235
+ /**
14236
+ * Options controlling which model resources are persisted.
14237
+ * @public
14238
+ */
14239
+ type SaveOptions = {
14240
+ importMeshes: boolean;
14241
+ importSkeletons: boolean;
14242
+ importAnimations: boolean;
14243
+ };
13554
14244
  /**
13555
14245
  * Model information that can be shared by multiple model nodes
13556
14246
  * @public
@@ -13558,31 +14248,58 @@ declare class AssetScene extends NamedObject {
13558
14248
  declare class SharedModel extends Disposable {
13559
14249
  /**
13560
14250
  * Creates an instance of SharedModel
13561
- * @param name - Name of the model
13562
14251
  */
13563
- constructor(name?: string);
13564
- /** Name of the model */
13565
- get name(): string;
13566
- set name(val: string);
14252
+ constructor();
13567
14253
  /** All scenes that the model contains */
13568
14254
  get scenes(): AssetScene[];
14255
+ /** All Primitives that the model contains */
14256
+ get primitives(): AssetPrimitiveInfo[];
14257
+ /** All nodes that the model contains */
14258
+ get nodes(): AssetHierarchyNode[];
13569
14259
  /** All animations that the model contains */
13570
14260
  get animations(): AssetAnimationData[];
13571
14261
  /** All skeletons that the model contains */
13572
14262
  get skeletons(): AssetSkeleton[];
13573
- /** All nodes that the model contains */
13574
- get nodes(): AssetHierarchyNode[];
14263
+ /** All SpringBone colliders that the model contains */
14264
+ get springBoneColliders(): AssetSpringBoneCollider[];
14265
+ /** All SpringBone collider groups that the model contains */
14266
+ get springBoneColliderGroups(): AssetSpringBoneColliderGroup[];
14267
+ /** All SpringBone springs that the model contains */
14268
+ get springBones(): AssetSpringBone[];
14269
+ /** SpringBone colliders converted to Zephyr3D JointDynamics collider format */
14270
+ get jointDynamicsColliders(): AssetJointDynamicsCollider[];
14271
+ /** SpringBone springs converted to Zephyr3D JointDynamics system format */
14272
+ get jointDynamicsSpringBones(): AssetJointDynamicsSpringBone[];
14273
+ /** Model-level morph target groups, commonly facial expressions. */
14274
+ get morphTargetGroups(): AssetMorphTargetGroup[];
13575
14275
  /** The active scene of the model */
13576
14276
  get activeScene(): number;
13577
14277
  set activeScene(val: number);
14278
+ getImage(index: number): AssetImageInfo;
14279
+ setImage(index: number, img: AssetImageInfo): void;
14280
+ getMaterial(hash: string): AssetMaterial;
14281
+ setMaterial(hash: string, material: AssetMaterial): void;
14282
+ addPrimitive(prim: AssetPrimitiveInfo): void;
13578
14283
  /**
13579
- * Adds a node to the scene
13580
- * @param parent - Under which node the node should be added
13581
- * @param index - Index of the node
13582
- * @param name - Name of the node
13583
- * @returns The added node
14284
+ * Adds a model-level morph target group.
14285
+ * @param group - Morph target group to add
14286
+ */
14287
+ addMorphTargetGroup(group: AssetMorphTargetGroup): void;
14288
+ /**
14289
+ * Removes all model-level morph target groups.
14290
+ */
14291
+ clearMorphTargetGroups(): void;
14292
+ /**
14293
+ * Finds a model-level morph target group by name.
14294
+ * @param name - Group name
14295
+ * @returns The matching group, or null if not found
13584
14296
  */
13585
- addNode(parent: Nullable<AssetHierarchyNode>, index: number, name: string): AssetHierarchyNode;
14297
+ getMorphTargetGroup(name: string): Nullable<AssetMorphTargetGroup>;
14298
+ /**
14299
+ * Builds morph target groups by collecting morph target names from every mesh.
14300
+ * @returns Generated morph target groups
14301
+ */
14302
+ buildMorphTargetGroupsByName(): AssetMorphTargetGroup[];
13586
14303
  /**
13587
14304
  * Adds a skeleton to the scene
13588
14305
  * @param skeleton - The skeleton to be added
@@ -13593,7 +14310,14 @@ declare class SharedModel extends Disposable {
13593
14310
  * @param animation - The animation to be added
13594
14311
  */
13595
14312
  addAnimation(animation: AssetAnimationData): void;
13596
- createSceneNode(scene: Scene, instancing: boolean): SceneNode;
14313
+ static writePrimitive(vfs: VFS, primitive: AssetPrimitiveInfo, path: string): Promise<void>;
14314
+ /** preprocess */
14315
+ preprocess(manager: ResourceManager, name: string, destPath: string, srcVFS: VFS, dstVFS: VFS): Promise<void>;
14316
+ createJointDynamics(rootNode: SceneNode, nodeMap: Map<AssetHierarchyNode, SceneNode>): void;
14317
+ private createMorphTargetGroups;
14318
+ private getInitialMorphTargetGroupWeight;
14319
+ private getMorphTargetBindingWeight;
14320
+ createSceneNode(manager: ResourceManager, scene: Scene, instancing: boolean, saveMeshes: boolean, saveSkeletons: boolean, saveAnimations: boolean, saveJointDynamics: boolean, srcVFS: VFS): Promise<SceneNode>;
13597
14321
  private remapGeometryCacheFrames;
13598
14322
  private remapPCAGeometryCacheData;
13599
14323
  private reconstructPCAGeometryCacheReference;
@@ -13604,6 +14328,10 @@ declare class SharedModel extends Disposable {
13604
14328
  private geometryCachePositionKey;
13605
14329
  protected onDispose(): void;
13606
14330
  private setAssetNodeToSceneNode;
14331
+ private image2Texture;
14332
+ private createTexture;
14333
+ private createPrimitive;
14334
+ private createMaterial;
13607
14335
  }
13608
14336
 
13609
14337
  /**
@@ -13653,28 +14381,226 @@ declare abstract class AbstractTextureLoader extends LoaderBase {
13653
14381
  */
13654
14382
  abstract load(mimeType: string, data: ArrayBuffer | TypedArray, srgb: boolean, samplerOptions?: SamplerOptions, texture?: Nullable<BaseTexture>): Promise<Nullable<BaseTexture>>;
13655
14383
  }
14384
+
13656
14385
  /**
13657
- * Base class for any kind of model loaders
14386
+ * Font outline point.
14387
+ *
13658
14388
  * @public
13659
14389
  */
13660
- declare abstract class AbstractModelLoader extends LoaderBase {
13661
- /**
13662
- * Tests whether the loader supports loading a model with given MIME type.
13663
- * @param mimeType - The MIME type to test
13664
- * @returns true if it supports
13665
- */
13666
- abstract supportMIMEType(mimeType: string): boolean;
13667
- /**
13668
- * Loads a model
13669
- * @param assetManager - The instance of AssetManager
13670
- * @param url - The request URL
13671
- * @param mimeType - MIME type for the model data
13672
- * @param data - The model data
13673
- * @returns The loaded model
13674
- */
13675
- abstract load(assetManager: AssetManager, url: string, mimeType: string, data: Blob, dracoDecoderModule?: DecoderModule, VFSs?: VFS[]): Promise<Nullable<SharedModel>>;
14390
+ type GlyphPoint = {
14391
+ x: number;
14392
+ y: number;
14393
+ onCurve: boolean;
14394
+ };
14395
+ /**
14396
+ * Glyph contour represented by ordered quadratic points.
14397
+ *
14398
+ * @public
14399
+ */
14400
+ type GlyphContour = GlyphPoint[];
14401
+ /**
14402
+ * Parsed glyph outline and metrics.
14403
+ *
14404
+ * @public
14405
+ */
14406
+ type GlyphData = {
14407
+ glyphIndex: number;
14408
+ advanceWidth: number;
14409
+ leftSideBearing: number;
14410
+ xMin: number;
14411
+ yMin: number;
14412
+ xMax: number;
14413
+ yMax: number;
14414
+ contours: GlyphContour[];
14415
+ };
14416
+ /**
14417
+ * Minimal font metrics required by runtime text layout.
14418
+ *
14419
+ * @public
14420
+ */
14421
+ type FontMetrics = {
14422
+ unitsPerEm: number;
14423
+ ascent: number;
14424
+ descent: number;
14425
+ lineGap: number;
14426
+ glyphCount: number;
14427
+ };
14428
+
14429
+ /**
14430
+ * MSDF atlas settings associated with a font asset.
14431
+ * @public
14432
+ */
14433
+ type FontAssetMSDFAtlasSettings = Readonly<{
14434
+ pageSize: number;
14435
+ glyphSize: number;
14436
+ }>;
14437
+ /**
14438
+ * Minimal horizontal pair adjustment extracted from GPOS.
14439
+ *
14440
+ * @public
14441
+ */
14442
+ type PairAdjustment = {
14443
+ firstXPlacement: number;
14444
+ firstXAdvance: number;
14445
+ secondXPlacement: number;
14446
+ secondXAdvance: number;
14447
+ };
14448
+ /**
14449
+ * Minimal runtime font asset for TrueType outlines.
14450
+ *
14451
+ * @public
14452
+ */
14453
+ declare class FontAsset {
14454
+ private readonly _reader;
14455
+ private readonly _tables;
14456
+ private readonly _glyphOffsets;
14457
+ private readonly _advanceWidths;
14458
+ private readonly _leftSideBearings;
14459
+ private readonly _glyphCache;
14460
+ private readonly _cmapFormat4;
14461
+ private readonly _cmapFormat12;
14462
+ private readonly _kernPairs;
14463
+ private readonly _gposPairs;
14464
+ private readonly _metrics;
14465
+ private readonly _numberOfHMetrics;
14466
+ private readonly _msdfAtlasSettings;
14467
+ private constructor();
14468
+ static fromBuffer(buffer: ArrayBuffer, options?: FontAssetFetchOptions): FontAsset;
14469
+ get metrics(): FontMetrics;
14470
+ get msdfAtlasSettings(): FontAssetMSDFAtlasSettings;
14471
+ get msdfAtlasPageSize(): number;
14472
+ get msdfGlyphSize(): number;
14473
+ getGlyphIndex(codePoint: number): number;
14474
+ getKerning(leftGlyphIndex: number, rightGlyphIndex: number): number;
14475
+ getPairAdjustment(leftGlyphIndex: number, rightGlyphIndex: number): PairAdjustment | null;
14476
+ getGlyph(glyphIndex: number): GlyphData | null;
14477
+ private getTable;
14478
+ private requireTable;
14479
+ private loadGlyph;
13676
14480
  }
13677
14481
 
14482
+ /**
14483
+ * Signed distance field generation options.
14484
+ *
14485
+ * @public
14486
+ */
14487
+ type MSDFOptions = {
14488
+ width: number;
14489
+ height: number;
14490
+ range: number;
14491
+ padding?: number;
14492
+ };
14493
+ /**
14494
+ * RGB MSDF bitmap and placement information.
14495
+ *
14496
+ * @public
14497
+ */
14498
+ type MSDFBitmap = {
14499
+ width: number;
14500
+ height: number;
14501
+ pixels: Uint8Array<ArrayBuffer>;
14502
+ scale: number;
14503
+ translateX: number;
14504
+ translateY: number;
14505
+ };
14506
+ /**
14507
+ * Edge color mask used by MSDF generation.
14508
+ *
14509
+ * Colors are stored as RGB bit masks, allowing an edge to contribute to
14510
+ * multiple channels (for example cyan = green | blue).
14511
+ *
14512
+ * @public
14513
+ */
14514
+ type EdgeColor = 1 | 2 | 3 | 4 | 5 | 6 | 7;
14515
+ /**
14516
+ * Colored line edge used for MSDF generation.
14517
+ *
14518
+ * @public
14519
+ */
14520
+ type ColoredLineEdge = {
14521
+ kind: 'line';
14522
+ color: EdgeColor;
14523
+ p0: {
14524
+ x: number;
14525
+ y: number;
14526
+ };
14527
+ p1: {
14528
+ x: number;
14529
+ y: number;
14530
+ };
14531
+ };
14532
+ /**
14533
+ * Colored quadratic edge used for MSDF generation.
14534
+ *
14535
+ * @public
14536
+ */
14537
+ type ColoredQuadraticEdge = {
14538
+ kind: 'quadratic';
14539
+ color: EdgeColor;
14540
+ p0: {
14541
+ x: number;
14542
+ y: number;
14543
+ };
14544
+ p1: {
14545
+ x: number;
14546
+ y: number;
14547
+ };
14548
+ p2: {
14549
+ x: number;
14550
+ y: number;
14551
+ };
14552
+ };
14553
+ /**
14554
+ * Colored edge used for MSDF generation.
14555
+ *
14556
+ * @public
14557
+ */
14558
+ type ColoredEdge = ColoredLineEdge | ColoredQuadraticEdge;
14559
+ /**
14560
+ * Converted glyph shape ready for MSDF sampling.
14561
+ *
14562
+ * @public
14563
+ */
14564
+ type MSDFShape = {
14565
+ contours: ColoredEdge[][];
14566
+ sourceContours: GlyphContour[];
14567
+ };
14568
+
14569
+ /**
14570
+ * Builds an MSDF shape from glyph contours.
14571
+ * @public
14572
+ */
14573
+ declare function buildMSDFShape(contours: GlyphContour[]): MSDFShape;
14574
+
14575
+ /**
14576
+ * Generate a runtime RGB(A) distance field bitmap from a parsed glyph.
14577
+ *
14578
+ * Distances are encoded in output texel units, which matches the shader-side
14579
+ * `distanceRange` logic and keeps the field scale-invariant across font sizes.
14580
+ *
14581
+ * @public
14582
+ */
14583
+ declare function generateMSDF(glyph: GlyphData, options: MSDFOptions): MSDFBitmap;
14584
+
14585
+ /**
14586
+ * Base fetch options
14587
+ *
14588
+ * @public
14589
+ */
14590
+ type BaseFetchOptions = {
14591
+ /**
14592
+ * VFS used to fetch file data
14593
+ */
14594
+ overrideVFS?: VFS;
14595
+ };
14596
+ /**
14597
+ * Options for font fetching.
14598
+ * @public
14599
+ */
14600
+ type FontAssetFetchOptions = BaseFetchOptions & {
14601
+ pageSize?: number;
14602
+ glyphSize?: number;
14603
+ };
13678
14604
  /**
13679
14605
  * Options for texture fetching.
13680
14606
  *
@@ -13683,7 +14609,7 @@ declare abstract class AbstractModelLoader extends LoaderBase {
13683
14609
  * @typeParam T - Texture type to be returned, extending BaseTexture.
13684
14610
  * @public
13685
14611
  */
13686
- type TextureFetchOptions<T extends BaseTexture> = {
14612
+ type TextureFetchOptions<T extends BaseTexture> = BaseFetchOptions & {
13687
14613
  /**
13688
14614
  * Explicit MIME type hint. If omitted, the type is inferred from file extension via VFS.
13689
14615
  */
@@ -13711,7 +14637,7 @@ type TextureFetchOptions<T extends BaseTexture> = {
13711
14637
  * Provides decoding and instancing hints used by supported model loaders.
13712
14638
  * @public
13713
14639
  */
13714
- type ModelFetchOptions = {
14640
+ type ModelFetchOptions = BaseFetchOptions & {
13715
14641
  /**
13716
14642
  * Explicit MIME type hint for the model. If omitted, inferred from file extension via VFS.
13717
14643
  */
@@ -13725,6 +14651,26 @@ type ModelFetchOptions = {
13725
14651
  * Default is false.
13726
14652
  */
13727
14653
  enableInstancing?: boolean;
14654
+ /**
14655
+ * If true, meshes will be loaded from this model.
14656
+ * Default is true.
14657
+ */
14658
+ loadMeshes?: boolean;
14659
+ /**
14660
+ * If true, rigs and skin bindings will be loaded from this model.
14661
+ * Default is true.
14662
+ */
14663
+ loadSkeletons?: boolean;
14664
+ /**
14665
+ * If true, animations will be loaded from this model.
14666
+ * Default is true.
14667
+ */
14668
+ loadAnimations?: boolean;
14669
+ /**
14670
+ * If true, automatically create joint dynamics (for VRM models only).
14671
+ * Default is true.
14672
+ */
14673
+ loadJointDynamics?: boolean;
13728
14674
  /**
13729
14675
  * Optional post-process callback applied to the loaded SharedModel before creating nodes.
13730
14676
  * Use this to remap materials, merge meshes, or apply custom data transforms.
@@ -13747,6 +14693,14 @@ type ModelInfo = {
13747
14693
  */
13748
14694
  animationSet: AnimationSet;
13749
14695
  };
14696
+ /**
14697
+ * Interface for model importers
14698
+ *
14699
+ * @public
14700
+ */
14701
+ interface ModelLoader {
14702
+ loadModel(path: string, vfs?: VFS): Promise<SharedModel>;
14703
+ }
13750
14704
  /**
13751
14705
  * Centralized asset manager for loading and caching resources.
13752
14706
  *
@@ -13780,6 +14734,15 @@ declare class AssetManager {
13780
14734
  * if no other owners are holding them.
13781
14735
  */
13782
14736
  clearCache(): void;
14737
+ /**
14738
+ * Removes a cached font asset entry by URL.
14739
+ *
14740
+ * This only evicts the cache entry. It does not dispose any external references to the FontAsset.
14741
+ *
14742
+ * @param url - Resource URL or VFS path.
14743
+ * @returns `true` if a cache entry existed and was removed.
14744
+ */
14745
+ releaseFontAsset(url: string): boolean;
13783
14746
  /**
13784
14747
  * Register a texture loader (highest priority first).
13785
14748
  *
@@ -13790,12 +14753,8 @@ declare class AssetManager {
13790
14753
  static addTextureLoader(loader: AbstractTextureLoader): void;
13791
14754
  /**
13792
14755
  * Register a model loader (highest priority first).
13793
- *
13794
- * Note: This is a static registry shared by all AssetManager instances.
13795
- *
13796
- * @param loader - A concrete model loader implementation.
13797
14756
  */
13798
- static addModelLoader(loader: AbstractModelLoader): void;
14757
+ setModelLoader(mimeType: string, loader: ModelLoader): void;
13799
14758
  /**
13800
14759
  * Fetch a UTF-8 text resource via VFS.
13801
14760
  *
@@ -13808,7 +14767,7 @@ declare class AssetManager {
13808
14767
  * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.
13809
14768
  * @returns A promise that resolves to the loaded (and optionally processed) text.
13810
14769
  */
13811
- fetchTextData(url: string, postProcess?: (text: string) => string, httpRequest?: HttpRequest, VFSs?: VFS[]): Promise<string>;
14770
+ fetchTextData(url: string, postProcess?: (text: string) => string, httpRequest?: HttpRequest, options?: BaseFetchOptions): Promise<string>;
13812
14771
  /**
13813
14772
  * Fetch a JSON resource via VFS.
13814
14773
  *
@@ -13820,7 +14779,7 @@ declare class AssetManager {
13820
14779
  * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.
13821
14780
  * @returns A promise that resolves to the loaded (and optionally processed) JSON value.
13822
14781
  */
13823
- fetchJsonData<T = any>(url: string, postProcess?: (json: T) => T, httpRequest?: HttpRequest, VFSs?: VFS[]): Promise<T>;
14782
+ fetchJsonData<T = any>(url: string, postProcess?: (json: T) => T, httpRequest?: HttpRequest, options?: BaseFetchOptions): Promise<T>;
13824
14783
  /**
13825
14784
  * Fetch a binary resource via VFS.
13826
14785
  *
@@ -13831,8 +14790,26 @@ declare class AssetManager {
13831
14790
  * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.
13832
14791
  * @returns A promise that resolves to the loaded (and optionally processed) ArrayBuffer.
13833
14792
  */
13834
- fetchBinaryData(url: string, postProcess?: Nullable<(data: ArrayBuffer) => ArrayBuffer>, httpRequest?: Nullable<HttpRequest>, VFSs?: VFS[]): Promise<Nullable<ArrayBuffer>>;
13835
- fetchBluePrint(url: string, VFSs?: VFS[]): Promise<Nullable<Record<string, MaterialBlueprintIR>>>;
14793
+ fetchBinaryData(url: string, postProcess?: Nullable<(data: ArrayBuffer) => ArrayBuffer>, httpRequest?: Nullable<HttpRequest>, options?: BaseFetchOptions): Promise<Nullable<ArrayBuffer>>;
14794
+ /**
14795
+ * Fetch a font asset via VFS.
14796
+ *
14797
+ * - Cached per URL only.
14798
+ * - `options` are applied only when the font is first loaded for that URL.
14799
+ * - If the URL is already cached, later calls ignore `options` and reuse the cached FontAsset.
14800
+ *
14801
+ * @param url - Resource URL or VFS path.
14802
+ * @param options - Optional MSDF atlas settings bound to the loaded FontAsset.
14803
+ * @returns A promise that resolves to the loaded (and optionally processed) font asset.
14804
+ */
14805
+ fetchFontAsset(url: string, options?: FontAssetFetchOptions): Promise<Nullable<FontAsset>>;
14806
+ /**
14807
+ * Fetch a font asset via VFS if already cached.
14808
+ * @param url - Resource URL or VFS path.
14809
+ * @returns The cached FontAsset if it exists and is loaded, or null if not cached or still loading.
14810
+ */
14811
+ getFontAsset(url: string): Nullable<FontAsset>;
14812
+ fetchBluePrint(url: string, options?: BaseFetchOptions): Promise<Nullable<Record<string, MaterialBlueprintIR>>>;
13836
14813
  /**
13837
14814
  * Fetch a material resource.
13838
14815
  *
@@ -13840,7 +14817,7 @@ declare class AssetManager {
13840
14817
  * @param url - Resource URL or VFS path.
13841
14818
  * @returns A promise that resolves to the loaded material.
13842
14819
  */
13843
- fetchMaterial<T extends Material = Material>(url: string, VFSs?: VFS[]): Promise<Nullable<T>>;
14820
+ fetchMaterial<T extends Material = Material>(url: string, options?: BaseFetchOptions): Promise<Nullable<T>>;
13844
14821
  /**
13845
14822
  * Fetch a primitive resource.
13846
14823
  *
@@ -13848,7 +14825,7 @@ declare class AssetManager {
13848
14825
  * @param url - Resource URL or VFS path.
13849
14826
  * @returns A promise that resolves to the loaded primitive.
13850
14827
  */
13851
- fetchPrimitive<T extends Primitive = Primitive>(url: string, VFSs?: VFS[]): Promise<Nullable<T>>;
14828
+ fetchPrimitive<T extends Primitive = Primitive>(url: string, options?: BaseFetchOptions): Promise<Nullable<T>>;
13852
14829
  /**
13853
14830
  * Fetch a texture resource via registered loaders.
13854
14831
  *
@@ -13863,24 +14840,8 @@ declare class AssetManager {
13863
14840
  * @param httpRequest - Optional HttpRequest (not used for binary read but may supply URL resolver for hashing).
13864
14841
  * @returns A promise that resolves to the loaded texture.
13865
14842
  */
13866
- fetchTexture<T extends BaseTexture>(url: string, options?: TextureFetchOptions<T>, VFSs?: VFS[]): Promise<T>;
13867
- /**
13868
- * Fetch a model resource and instantiate it under a scene.
13869
- *
13870
- * - Loads or retrieves a cached SharedModel, then creates a SceneNode hierarchy.
13871
- * - Returns both the created group node and any associated AnimationSet.
13872
- *
13873
- * @param scene - Scene into which the model node will be created.
13874
- * @param url - Model URL or VFS path.
13875
- * @param options - Model loader options and instancing hint.
13876
- * @param httpRequest - Optional HttpRequest (unused for binary read; present for API symmetry).
13877
- * @returns A promise with the created node group and animation set info.
13878
- */
13879
- fetchModel(scene: Scene, url: string, options?: ModelFetchOptions, VFSs?: VFS[]): Promise<{
13880
- group: SceneNode;
13881
- animationSet: AnimationSet;
13882
- }>;
13883
- loadPrimitive<T extends Primitive = Primitive>(url: string, VFSs?: VFS[]): Promise<Nullable<T>>;
14843
+ fetchTexture<T extends BaseTexture>(url: string, options?: TextureFetchOptions<T>): Promise<T>;
14844
+ loadPrimitive<T extends Primitive = Primitive>(url: string, vfs?: VFS): Promise<Nullable<T>>;
13884
14845
  reloadBluePrintMaterials(filter?: (m: PBRBluePrintMaterial) => boolean): Promise<void>;
13885
14846
  private loadBluePrintMaterialData;
13886
14847
  private rebuildGraphStructure;
@@ -13898,7 +14859,7 @@ declare class AssetManager {
13898
14859
  order: number[];
13899
14860
  };
13900
14861
  invalidateBluePrint(path: string): void;
13901
- loadBluePrint(path: string, VFSs?: VFS[]): Promise<Record<string, MaterialBlueprintIR> | null>;
14862
+ loadBluePrint(path: string, vfs?: VFS): Promise<Record<string, MaterialBlueprintIR> | null>;
13902
14863
  /**
13903
14864
  * Load a texture directly from an ArrayBuffer or typed array.
13904
14865
  *
@@ -13938,14 +14899,14 @@ declare class AssetManager {
13938
14899
  */
13939
14900
  static setBuiltinTextureLoader(name: string, loader: (assetManager: AssetManager) => BaseTexture): void;
13940
14901
  /**
13941
- * Write file to a list of VFSs
14902
+ * Write file to a VFS
13942
14903
  *
13943
14904
  * @param path - File path
13944
14905
  * @param data - Data to write
13945
14906
  * @param options - Write options
13946
- * @param vfsList - Which VFSs will be written to
14907
+ * @param vfs - VFS to write to
13947
14908
  */
13948
- writeFileToVFSs(path: string, data: ArrayBuffer | string, options: WriteOptions, vfsList?: VFS[]): Promise<void>;
14909
+ writeFileToVFSs(path: string, data: ArrayBuffer | string, options: WriteOptions, vfs?: VFS): Promise<void>;
13949
14910
  }
13950
14911
 
13951
14912
  declare const WaterMaterial_base: typeof MeshMaterial & (new (...args: any[]) => IMixinLight);
@@ -14752,10 +15713,6 @@ declare class BaseSprite<M extends SpriteMaterial> extends BaseSprite_base imple
14752
15713
  * @param scene - The scene to which the mesh node belongs
14753
15714
  */
14754
15715
  constructor(scene: Scene);
14755
- /**
14756
- * {@inheritDoc Drawable.getName}
14757
- */
14758
- getName(): string;
14759
15716
  /**
14760
15717
  * Returns the batch instance ID for the current render pass.
14761
15718
  */
@@ -14876,11 +15833,198 @@ declare class ScriptAttachment {
14876
15833
  constructor(script?: string, config?: ScriptAttachmentConfig);
14877
15834
  }
14878
15835
  /**
14879
- * Normalizes an arbitrary value into an array of script attachments.
15836
+ * Normalizes an arbitrary value into an array of script attachments.
15837
+ *
15838
+ * @public
15839
+ */
15840
+ declare function normalizeScriptAttachments(value: unknown): ScriptAttachment[];
15841
+
15842
+ type MSDFGlyphInfo = {
15843
+ glyphIndex: number;
15844
+ advanceWidth: number;
15845
+ leftSideBearing: number;
15846
+ atlasIndex: number;
15847
+ width: number;
15848
+ height: number;
15849
+ uMin: number;
15850
+ vMin: number;
15851
+ uMax: number;
15852
+ vMax: number;
15853
+ planeLeft: number;
15854
+ planeBottom: number;
15855
+ planeRight: number;
15856
+ planeTop: number;
15857
+ };
15858
+ /**
15859
+ * Runtime dynamic MSDF glyph atlas.
15860
+ *
15861
+ * @public
15862
+ */
15863
+ declare class MSDFGlyphAtlas extends TextureAtlasManager {
15864
+ private readonly _font;
15865
+ private readonly _glyphs;
15866
+ private readonly _range;
15867
+ private readonly _glyphSize;
15868
+ private readonly _padding;
15869
+ constructor(device: AbstractDevice, font: FontAsset, glyphSize?: number, atlasSize?: number, range?: number, padding?: number);
15870
+ get font(): FontAsset;
15871
+ get glyphSize(): number;
15872
+ get distanceRange(): number;
15873
+ getAtlasTexture(index: number): Texture2D | undefined;
15874
+ ensureGlyph(glyphIndex: number): MSDFGlyphInfo | null;
15875
+ private createGlyph;
15876
+ }
15877
+
15878
+ /**
15879
+ * Manages MSDF glyph atlases for font assets.
15880
+ * @public
15881
+ */
15882
+ declare class MSDFTextAtlasManager {
15883
+ private readonly _atlases;
15884
+ constructor();
15885
+ getAtlas(font: FontAsset): MSDFGlyphAtlas;
15886
+ configureAtlas(font: FontAsset, glyphSize: number, atlasSize: number, distanceRange?: number, padding?: number): MSDFGlyphAtlas;
15887
+ releaseAtlas(font: FontAsset): boolean;
15888
+ clear(): void;
15889
+ }
15890
+
15891
+ type TextAlign = 'left' | 'center' | 'right';
15892
+
15893
+ declare class MeshDrawableBase extends Disposable {
15894
+ private _node;
15895
+ constructor(node: SceneNode);
15896
+ getNode(): SceneNode;
15897
+ }
15898
+ declare const MeshDrawable_base: typeof MeshDrawableBase & _zephyr3d_base.GenericConstructor<{
15899
+ getNode(): SceneNode;
15900
+ } & Disposable> & (new (...args: any[]) => IMixinDrawable);
15901
+ declare class MeshDrawable<M extends MeshMaterial> extends MeshDrawable_base implements Drawable {
15902
+ private _material;
15903
+ private _primitive;
15904
+ constructor(node: SceneNode, material: M, primitive: Primitive);
15905
+ get material(): Nullable<M>;
15906
+ set material(mat: Nullable<M>);
15907
+ getMaterial(): Nullable<MeshMaterial>;
15908
+ get primitive(): Nullable<Primitive>;
15909
+ set primitive(prim: Nullable<Primitive>);
15910
+ getPrimitive(): Nullable<Primitive>;
15911
+ getPickTarget(): PickTarget;
15912
+ getBoneMatrices(): Nullable<Texture2D>;
15913
+ getMorphData(): Nullable<MorphData>;
15914
+ getMorphInfo(): Nullable<MorphInfo>;
15915
+ /**
15916
+ * {@inheritDoc Drawable.getSortDistance}
15917
+ */
15918
+ getSortDistance(camera: Camera): number;
15919
+ getQueueType(): number;
15920
+ needSceneColor(): boolean;
15921
+ needSceneDepth(): boolean;
15922
+ isUnlit(): boolean;
15923
+ isBatchable(): this is BatchDrawable;
15924
+ draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>): void;
15925
+ protected onDispose(): void;
15926
+ }
15927
+
15928
+ /**
15929
+ * Billboard MSDF text node.
15930
+ *
15931
+ * @public
15932
+ */
15933
+ declare class MSDFTextSprite extends GraphNode {
15934
+ private _fontAsset;
15935
+ private _atlas;
15936
+ private _text;
15937
+ private _fontSize;
15938
+ private _maxWidth;
15939
+ private _textAlign;
15940
+ private _anchor;
15941
+ private _color;
15942
+ private _outlineWidth;
15943
+ private _outlineColor;
15944
+ private _pageBatches;
15945
+ constructor(scene: Scene);
15946
+ get fontAsset(): FontAsset | null;
15947
+ set fontAsset(font: FontAsset | null);
15948
+ get text(): string;
15949
+ set text(value: string);
15950
+ get fontSize(): number;
15951
+ set fontSize(value: number);
15952
+ get maxWidth(): number;
15953
+ set maxWidth(value: number);
15954
+ get textAlign(): TextAlign;
15955
+ set textAlign(value: TextAlign);
15956
+ get anchorX(): number;
15957
+ set anchorX(value: number);
15958
+ get anchorY(): number;
15959
+ set anchorY(value: number);
15960
+ get anchor(): Immutable<Vector2>;
15961
+ set anchor(value: Immutable<Vector2>);
15962
+ get textColor(): Immutable<Vector3>;
15963
+ set textColor(value: Immutable<Vector3>);
15964
+ get outlineWidth(): number;
15965
+ set outlineWidth(value: number);
15966
+ get outlineColor(): Immutable<Vector3>;
15967
+ set outlineColor(value: Immutable<Vector3>);
15968
+ get batches(): MeshDrawable<MSDFTextSpriteMaterial>[];
15969
+ update(): void;
15970
+ calculateLocalTransform(outMatrix: Matrix4x4): void;
15971
+ computeWorldBoundingVolume(localBV: Nullable<BoundingVolume>): BoundingBox | null;
15972
+ isMSDFTextSprite(): this is MSDFTextSprite;
15973
+ protected onDispose(): void;
15974
+ private ensurePageBatch;
15975
+ private disposePageBatches;
15976
+ }
15977
+
15978
+ /**
15979
+ * Billboard MSDF text node.
14880
15980
  *
14881
15981
  * @public
14882
15982
  */
14883
- declare function normalizeScriptAttachments(value: unknown): ScriptAttachment[];
15983
+ declare class MSDFText extends GraphNode {
15984
+ private _fontAsset;
15985
+ private _atlas;
15986
+ private _castShadow;
15987
+ private _text;
15988
+ private _fontSize;
15989
+ private _maxWidth;
15990
+ private _textAlign;
15991
+ private _anchor;
15992
+ private _color;
15993
+ private _outlineWidth;
15994
+ private _outlineColor;
15995
+ private _pageBatches;
15996
+ constructor(scene: Scene);
15997
+ get castShadow(): boolean;
15998
+ set castShadow(value: boolean);
15999
+ get fontAsset(): FontAsset | null;
16000
+ set fontAsset(font: FontAsset | null);
16001
+ get text(): string;
16002
+ set text(value: string);
16003
+ get fontSize(): number;
16004
+ set fontSize(value: number);
16005
+ get maxWidth(): number;
16006
+ set maxWidth(value: number);
16007
+ get textAlign(): TextAlign;
16008
+ set textAlign(value: TextAlign);
16009
+ get anchorX(): number;
16010
+ set anchorX(value: number);
16011
+ get anchorY(): number;
16012
+ set anchorY(value: number);
16013
+ get anchor(): Immutable<Vector2>;
16014
+ set anchor(value: Immutable<Vector2>);
16015
+ get textColor(): Immutable<Vector3>;
16016
+ set textColor(value: Immutable<Vector3>);
16017
+ get outlineWidth(): number;
16018
+ set outlineWidth(value: number);
16019
+ get outlineColor(): Immutable<Vector3>;
16020
+ set outlineColor(value: Immutable<Vector3>);
16021
+ get batches(): MeshDrawable<MSDFTextMaterial>[];
16022
+ update(): void;
16023
+ isMSDFText(): this is MSDFText;
16024
+ protected onDispose(): void;
16025
+ private ensurePageBatch;
16026
+ private disposePageBatches;
16027
+ }
14884
16028
 
14885
16029
  /**
14886
16030
  * Iteration callback used by traversal helpers.
@@ -14900,6 +16044,46 @@ type NodeIterateFunc = ((node: SceneNode) => boolean) | ((node: SceneNode) => vo
14900
16044
  * @public
14901
16045
  */
14902
16046
  type SceneNodeVisible = 'visible' | 'inherit' | 'hidden';
16047
+ /**
16048
+ * Runtime morph target binding used by model-level expression groups.
16049
+ * @public
16050
+ */
16051
+ interface SceneMorphTargetBinding {
16052
+ mesh: Mesh;
16053
+ targetIndex?: number;
16054
+ targetName?: string;
16055
+ weight: number;
16056
+ }
16057
+ /**
16058
+ * Runtime morph target group used by model instances.
16059
+ * @public
16060
+ */
16061
+ interface SceneMorphTargetGroup {
16062
+ name: string;
16063
+ bindings: SceneMorphTargetBinding[];
16064
+ isBinary?: boolean;
16065
+ weight?: number;
16066
+ }
16067
+ /**
16068
+ * Serializable morph target binding descriptor.
16069
+ * @public
16070
+ */
16071
+ interface SerializedMorphTargetBinding {
16072
+ meshId: string;
16073
+ targetIndex?: number;
16074
+ targetName?: string;
16075
+ weight: number;
16076
+ }
16077
+ /**
16078
+ * Serializable morph target group descriptor.
16079
+ * @public
16080
+ */
16081
+ interface SerializedMorphTargetGroup {
16082
+ name: string;
16083
+ bindings: SerializedMorphTargetBinding[];
16084
+ isBinary?: boolean;
16085
+ weight?: number;
16086
+ }
14903
16087
  declare const SceneNode_base: (new (...args: any[]) => {
14904
16088
  _listeners: Nullable<{
14905
16089
  nodeattached?: {
@@ -15658,6 +16842,9 @@ declare class SceneNode extends SceneNode_base implements IDisposable {
15658
16842
  */
15659
16843
  get sharedModel(): Nullable<SharedModel>;
15660
16844
  set sharedModel(model: Nullable<SharedModel>);
16845
+ /** Runtime morph target groups bound to this model instance. */
16846
+ get morphTargetGroups(): SceneMorphTargetGroup[];
16847
+ set morphTargetGroups(groups: SceneMorphTargetGroup[]);
15661
16848
  /**
15662
16849
  * Clone this node.
15663
16850
  *
@@ -15722,6 +16909,10 @@ declare class SceneNode extends SceneNode_base implements IDisposable {
15722
16909
  isMesh(): this is Mesh;
15723
16910
  /** Type guard: true if this node is a sprite */
15724
16911
  isSprite(): this is Sprite;
16912
+ /** Type guard: true if this node is a MSDF text sprite */
16913
+ isMSDFTextSprite(): this is MSDFTextSprite;
16914
+ /** Type guard: true if this node is a MSDF text sprite */
16915
+ isMSDFText(): this is MSDFText;
15725
16916
  /** Type guard: true if this node is a water node. */
15726
16917
  isWater(): this is Water;
15727
16918
  /** Type guard: true if this node is a particle system. */
@@ -15792,7 +16983,19 @@ declare class SceneNode extends SceneNode_base implements IDisposable {
15792
16983
  * @param id - Persistent identifier to match against `Skeleton.persistentId`.
15793
16984
  * @returns The first matchign node, or `null` if not found.
15794
16985
  */
15795
- findSkeletonById(id: string): Skeleton | null;
16986
+ findSkeletonById(id: string): SkinBinding | null;
16987
+ /**
16988
+ * Finds a skin binding by its persistent ID.
16989
+ * @param id - Persistent identifier to match against `SkinBinding.persistentId`.
16990
+ * @returns The first matching binding, or `null` if not found.
16991
+ */
16992
+ findSkinBindingById(id: string): SkinBinding | null;
16993
+ /**
16994
+ * Finds a shared skeleton rig by its persistent ID.
16995
+ * @param id - Persistent identifier to match against `SkeletonRig.persistentId`.
16996
+ * @returns The first matching rig, or `null` if not found.
16997
+ */
16998
+ findSkeletonRigById(id: string): SkeletonRig | null;
15796
16999
  /**
15797
17000
  * Finds a scene node by name.
15798
17001
  *
@@ -15812,7 +17015,43 @@ declare class SceneNode extends SceneNode_base implements IDisposable {
15812
17015
  /** Bounding box draw mode */
15813
17016
  get boundingBoxDrawMode(): number;
15814
17017
  set boundingBoxDrawMode(mode: number);
17018
+ /** Returns serialized morph target groups for this node. */
17019
+ getSerializedMorphTargetGroups(): SerializedMorphTargetGroup[];
17020
+ /** Restores serialized morph target groups for this node. */
17021
+ setSerializedMorphTargetGroups(groups: SerializedMorphTargetGroup[]): void;
17022
+ /**
17023
+ * Force transform update and notify descendants.
17024
+ * @param invalidateLocal - If true, also invalidate local matrix; otherwise only invalidate world matrix.
17025
+ */
15815
17026
  invalidateTransform(invalidateLocal?: boolean): void;
17027
+ /**
17028
+ * Set morph target weight by name for all meshes in the subtree.
17029
+ * @param name - Morph target name
17030
+ * @param weight - Morph target weight
17031
+ */
17032
+ setMorphTargetWeight(name: string, weight: number): void;
17033
+ /**
17034
+ * Set morph target group weight for the model instance.
17035
+ * @param name - Morph target group name
17036
+ * @param weight - Group weight
17037
+ */
17038
+ setMorphTargetGroupWeight(name: string, weight: number): void;
17039
+ /**
17040
+ * Get morph target group weight.
17041
+ * @param name - Morph target group name
17042
+ * @returns The group weight, or 0 if no group was found
17043
+ */
17044
+ getMorphTargetGroupWeight(name: string): number;
17045
+ /**
17046
+ * Collect all morph target names from meshes in the subtree.
17047
+ * @returns Array of unique morph target names
17048
+ */
17049
+ collectMorphTargetNames(): string[];
17050
+ /**
17051
+ * Collect all model-level morph target group names.
17052
+ * @returns Array of morph target group names
17053
+ */
17054
+ collectMorphTargetGroupNames(): string[];
15816
17055
  /** Get called when the node was just created by cloning from other node */
15817
17056
  protected onPostClone(): void | Promise<void>;
15818
17057
  /** Disposes the node */
@@ -16066,16 +17305,16 @@ declare class InputManager {
16066
17305
  *
16067
17306
  * Responsibilities:
16068
17307
  * - Resolve logical module IDs to physical paths or URLs.
16069
- * - In editor mode, rewrite import specifiers and serve modules as data URLs after transpile.
17308
+ * - In editor mode, bundle local script modules into a single data URL after transpile.
16070
17309
  * - Transpile TypeScript to JavaScript on the fly (requires `window.ts` TypeScript runtime).
16071
17310
  * - Gather static and dynamic import dependencies for tooling.
16072
17311
  *
16073
17312
  * Modes:
16074
- * - Editor mode (`editorMode === true`): modules are rewritten to data URLs after transpile/build.
17313
+ * - Editor mode (`editorMode === true`): local script graphs are bundled to data URLs.
16075
17314
  * - Runtime mode (`editorMode === false`): returns .js URLs directly (with .ts -\> .js mapping).
16076
17315
  *
16077
17316
  * Caching:
16078
- * - Built modules are memoized in `_built` map keyed by logical ID.
17317
+ * - Built bundles are memoized in `_built` map keyed by canonical source path.
16079
17318
  *
16080
17319
  * @public
16081
17320
  */
@@ -16083,10 +17322,11 @@ declare class ScriptRegistry {
16083
17322
  private _vfs;
16084
17323
  private _scriptsRoot;
16085
17324
  private _built;
17325
+ private _building;
17326
+ private _builtDeps;
16086
17327
  /**
16087
17328
  * @param vfs - The virtual file system for existence checks, reads, and path ops.
16088
17329
  * @param scriptsRoot - Root directory for script resolution (used with `#/` specifiers).
16089
- * @param editorMode - Whether to build modules to data URLs and rewrite imports.
16090
17330
  */
16091
17331
  constructor(vfs: VFS, scriptsRoot: string);
16092
17332
  /**
@@ -16151,56 +17391,31 @@ declare class ScriptRegistry {
16151
17391
  */
16152
17392
  getDependencies(entryId: string, fromId: string, dependencies: Record<string, string>): Promise<void>;
16153
17393
  /**
16154
- * Builds a logical module id into a data URL (editor mode pipeline).
17394
+ * Builds a logical module id into a bundled data URL (editor mode pipeline).
16155
17395
  *
16156
17396
  * Steps:
16157
17397
  * - Resolve source path (.ts/.js) via {@link ScriptRegistry.resolveSourcePath}.
16158
- * - Read source code.
16159
- * - Rewrite import specifiers via {@link ScriptRegistry.rewriteImports}.
16160
- * - Transpile TypeScript if needed via {@link ScriptRegistry.transpile}.
16161
- * - Convert to `data:` URL and memoize in `_built`.
17398
+ * - Collect reachable local imports without recursively building data URLs.
17399
+ * - Transpile local modules to `System.register`.
17400
+ * - Emit a single `data:` URL with a small module loader and memoize it in `_built`.
16162
17401
  *
16163
17402
  * @param id - Logical module id to build.
16164
17403
  * @returns Data URL string for dynamic import, or empty string if not found.
16165
17404
  */
16166
17405
  private build;
17406
+ private buildBundle;
17407
+ private collectModule;
17408
+ private resolveModuleInfo;
17409
+ private getTypeScriptRuntime;
17410
+ private transpileToESModule;
17411
+ private transpileToSystemModule;
16167
17412
  /**
16168
- * Transpiles code to JavaScript and appends sourceURL/sourceMap hints.
16169
- *
16170
- * Behavior:
16171
- * - For `'js'`, returns code with `//# sourceURL=logicalId`.
16172
- * - For `'ts'`, requires `window.ts` (TypeScript compiler) to be present and
16173
- * transpiles to ES2015/ESNext module with inline source maps.
16174
- *
16175
- * @param code - Source code to transpile.
16176
- * @param _id - Logical module id (used for fileName/sourceURL).
16177
- * @param type - Source type (`'js' | 'ts'`).
16178
- * @returns Transpiled JavaScript source.
16179
- * @throws If TypeScript runtime is not found for TS input.
16180
- */
16181
- private transpile;
16182
- /**
16183
- * Rewrites ESM import specifiers in `code` into runtime-loadable URLs.
16184
- *
16185
- * Parsing:
16186
- * - Uses `es-module-lexer` to find import spans; sorts them ascending by start.
16187
- *
16188
- * Replacement rules:
16189
- * - Skip invalid spans or ones without quoted specifiers.
16190
- * - If spec is absolute URL, special URL (data:, blob:), or bare module:
16191
- * - If it starts with `@zephyr3d/`, keep as-is (external).
16192
- * - Otherwise resolve to a logical id and attempt to `build` it (if available).
16193
- * - Else (relative spec), resolve from `fromId` and `build` recursively.
16194
- *
16195
- * Output:
16196
- * - Directly writes the replacement specifier without re-adding quotes,
16197
- * so replacements must themselves be quoted or be valid URLs/data URLs.
16198
- *
16199
- * @param code - Module source code to transform.
16200
- * @param fromId - The logical id of the current module (resolution base for relatives).
16201
- * @returns Transformed source with rewritten import specifiers.
17413
+ * Rewrites local ESM specifiers to canonical source paths and records local deps.
17414
+ * External URLs and package imports are left for the native dynamic import path.
16202
17415
  */
16203
- private rewriteImports;
17416
+ private rewriteImportsToLogicalIds;
17417
+ private resolveImportTarget;
17418
+ private getSystemBundleRuntime;
16204
17419
  /**
16205
17420
  * Resolves a specifier to a logical id suitable for further processing.
16206
17421
  *
@@ -16623,6 +17838,7 @@ declare class ScriptingSystem {
16623
17838
  interface IRenderable extends IDisposable {
16624
17839
  render(): void;
16625
17840
  }
17841
+ type RenderFunc = () => void;
16626
17842
  /**
16627
17843
  * Interface for render hooks to customize rendering behavior.
16628
17844
  *
@@ -16653,10 +17869,11 @@ declare class Engine {
16653
17869
  private _builtinsVFS;
16654
17870
  private _scriptingSystem;
16655
17871
  private _resourceManager;
17872
+ private _msdfTextAtlasManager;
16656
17873
  private _enabled;
16657
17874
  private _screen;
16658
17875
  protected _activeRenderables: {
16659
- renderable: DRef<IRenderable>;
17876
+ renderable: Nullable<RenderFunc> | DRef<IRenderable>;
16660
17877
  hook: Nullable<IRenderHook>;
16661
17878
  }[];
16662
17879
  private _loadingScenes;
@@ -16676,11 +17893,50 @@ declare class Engine {
16676
17893
  * Exposes the virtual file system used by the underlying {@link ScriptingSystem}'s registry.
16677
17894
  */
16678
17895
  get VFS(): VFS;
17896
+ /**
17897
+ * Replaces the virtual file system used by the engine.
17898
+ *
17899
+ * The previous resource manager VFS is closed, the scripting registry is updated,
17900
+ * and built-in assets are remounted on the new VFS.
17901
+ *
17902
+ * @param vfs - New virtual file system.
17903
+ */
16679
17904
  set VFS(vfs: VFS);
16680
17905
  /**
16681
17906
  * Exposes the instance of {@link ResourceManager}.
16682
17907
  */
16683
17908
  get resourceManager(): ResourceManager;
17909
+ /**
17910
+ * Exposes the shared runtime MSDF text atlas manager.
17911
+ */
17912
+ get msdfTextAtlasManager(): MSDFTextAtlasManager;
17913
+ /**
17914
+ * Releases a loaded font asset from the resource cache and disposes its shared MSDF atlas textures.
17915
+ *
17916
+ * Existing scene nodes that still reference this font asset are not updated automatically.
17917
+ * Call this only after you have stopped using the font, or when you intentionally want it to rebuild later.
17918
+ *
17919
+ * @param font - The loaded font asset path to release.
17920
+ * @returns `true` if either the atlas cache or the font cache had an entry to remove.
17921
+ */
17922
+ releaseFontAsset(font: string): boolean;
17923
+ /**
17924
+ * Configures the MSDF atlas for a given font asset, creating or replacing the atlas as needed.
17925
+ *
17926
+ * This is useful to customize the glyph size, atlas page size, distance range, and padding for MSDF text rendering.
17927
+ * Existing scene nodes that reference this font asset will use the updated atlas automatically.
17928
+ *
17929
+ * @param font - The font asset path to configure the MSDF atlas for.
17930
+ * @param pageSize - The size of each atlas page in pixels (e.g., 512, 1024).
17931
+ * @param glyphSize - The size of each glyph in pixels (e.g., 32, 64).
17932
+ * @param distanceRange - The distance range for MSDF generation. Defaults to 4.
17933
+ * @param padding - The padding between glyphs in the atlas in pixels. Defaults to 2.
17934
+ * @returns `true` if the atlas was successfully configured, or `false` if the font asset was not found.
17935
+ *
17936
+ * @remarks
17937
+ * The font asset must be loaded and available in the resource manager for the atlas to be configured.
17938
+ */
17939
+ configureMSDFAtlas(font: string, pageSize: number, glyphSize: number, distanceRange?: number, padding?: number): boolean;
16684
17940
  /**
16685
17941
  * Exposes the active {@link ScreenAdapter}.
16686
17942
  */
@@ -16708,6 +17964,7 @@ declare class Engine {
16708
17964
  * @typeParam T - Host type.
16709
17965
  * @param host - Host object to attach the script to.
16710
17966
  * @param module - Module identifier to resolve and load.
17967
+ * @param config - Optional configuration passed to the script instance.
16711
17968
  * @returns The `RuntimeScript<T>` instance, or `null` if disabled or on failure.
16712
17969
  */
16713
17970
  attachScript<T extends Host>(host: Nullable<T>, module: string, config?: Nullable<RuntimeScriptConfig>): Promise<Nullable<RuntimeScript<T>>>;
@@ -16734,16 +17991,56 @@ declare class Engine {
16734
17991
  /**
16735
17992
  * Ticks all attached scripts by calling their `onUpdate` hooks, if enabled.
16736
17993
  *
16737
- * Delegates to {@link ScriptingSystem.update}. No-op when disabled.
16738
- *
16739
17994
  * @param deltaTime - Time since last update in Seconds.
16740
17995
  * @param elapsedTime - Total elapsed time in Seconds.
16741
17996
  */
16742
17997
  update(deltaTime: number, elapsedTime: number): void;
17998
+ /**
17999
+ * Loads a scene from a file path.
18000
+ *
18001
+ * Concurrent requests for the same normalized path share the same loading promise.
18002
+ * Scripts declared on the scene and its nodes are attached after the scene is loaded.
18003
+ *
18004
+ * @param path - Scene file path in the current VFS.
18005
+ * @returns The loaded scene, or `null` when loading fails.
18006
+ */
16743
18007
  loadSceneFromFile(path: string): Promise<Nullable<Scene>>;
16744
- setRenderable(renderable: Nullable<IRenderable>, layer?: number, hook?: IRenderHook): void;
18008
+ /**
18009
+ * Sets or clears the renderable for a render layer.
18010
+ *
18011
+ * Passing `null` clears the layer. Object renderables are held through a strong reference wrapper,
18012
+ * while render functions are stored directly.
18013
+ *
18014
+ * @param renderable - Renderable object or render function to assign, or `null` to clear.
18015
+ * @param layer - Render layer index. Defaults to `0`.
18016
+ * @param hook - Optional render hook invoked before and after this layer renders.
18017
+ */
18018
+ setRenderable(renderable: Nullable<IRenderable | RenderFunc>, layer?: number, hook?: IRenderHook): void;
18019
+ /**
18020
+ * Reads a file from the current VFS.
18021
+ *
18022
+ * @typeParam T - Requested read encoding.
18023
+ * @param path - File path to read.
18024
+ * @param encoding - Optional read encoding. Defaults to `binary`.
18025
+ * @returns The file content, or `null` when the read fails.
18026
+ */
16745
18027
  readFile<T extends ReadOptions['encoding'] = 'binary'>(path: string, encoding?: T): Promise<(T extends "binary" ? ArrayBuffer : string) | null>;
18028
+ /**
18029
+ * Starts the runtime by optionally showing a splash screen, running a startup script,
18030
+ * and loading the startup scene.
18031
+ *
18032
+ * @param startupScene - Optional scene path rendered on layer `0` after startup completes.
18033
+ * @param splashScreen - Optional scene path rendered on a temporary splash layer during startup.
18034
+ * @param startupScript - Optional startup script module path. A trailing `.ts` or `.js`
18035
+ * extension is removed before loading.
18036
+ */
16746
18037
  startup(startupScene?: Nullable<string>, splashScreen?: Nullable<string>, startupScript?: Nullable<string>): Promise<void>;
18038
+ /**
18039
+ * Renders all active render layers.
18040
+ *
18041
+ * Each layer's `beforeRender` hook can return `false` to skip rendering that layer.
18042
+ * The `afterRender` hook is invoked after the render attempt.
18043
+ */
16747
18044
  render(): void;
16748
18045
  private ensureBuiltinVFS;
16749
18046
  private createBuiltinVFS;
@@ -17532,6 +18829,32 @@ declare class Scene extends Scene_base implements IRenderable {
17532
18829
  protected onDispose(): void;
17533
18830
  }
17534
18831
 
18832
+ /**
18833
+ * 3D Text Sprite node
18834
+ * @public
18835
+ */
18836
+ declare class TextSprite extends BaseSprite<StandardSpriteMaterial> {
18837
+ private _resolutionX;
18838
+ private _resolutionY;
18839
+ private _text;
18840
+ private _font;
18841
+ private _color;
18842
+ private static _textRenderState;
18843
+ constructor(scene: Scene);
18844
+ isSprite(): this is Sprite;
18845
+ get resolutionX(): number;
18846
+ set resolutionX(value: number);
18847
+ get resolutionY(): number;
18848
+ set resolutionY(value: number);
18849
+ get text(): string;
18850
+ set text(value: string);
18851
+ get textColor(): Immutable<Vector3>;
18852
+ set textColor(value: Immutable<Vector3>);
18853
+ get font(): string;
18854
+ set font(value: string);
18855
+ update(): void;
18856
+ }
18857
+
17535
18858
  /**
17536
18859
  * Visitor for raycasting in the scene. It can be used for picking or other raycast-based queries.
17537
18860
  * @public
@@ -17728,6 +19051,13 @@ declare class ResourceManager {
17728
19051
  *
17729
19052
  */
17730
19053
  setAssetId(asset: unknown, id?: Nullable<string>): void;
19054
+ /**
19055
+ * Register a model loader.
19056
+ *
19057
+ * @param mimeType - What MIME type of files this loader can load
19058
+ * @param loader - A concrete model loader implementation.
19059
+ */
19060
+ setModelLoader(mimeType: string, loader: ModelLoader): void;
17731
19061
  /**
17732
19062
  * Fetch a binary asset by ID via the asset manager.
17733
19063
  *
@@ -17735,11 +19065,32 @@ declare class ResourceManager {
17735
19065
  * - Associates the returned data with the given ID for future reverse lookup.
17736
19066
  * - The ID is typically a VFS path or locator.
17737
19067
  *
17738
- * @param id - Asset identifier or path.
19068
+ * @param path - VFS path of the binary asset.
17739
19069
  *
17740
19070
  * @returns A Promise that resolves to the binary content, or `null` if not found.
17741
19071
  */
17742
- fetchBinary(id: string): Promise<Nullable<ArrayBuffer>>;
19072
+ fetchBinary(path: string, options?: BaseFetchOptions): Promise<Nullable<ArrayBuffer>>;
19073
+ /**
19074
+ * Fetch a text asset by ID via the asset manager.
19075
+ *
19076
+ * @param path - VFS path of TTF/OTF file.
19077
+ * @returns A Promise that resolves to the font asset, or `null` if not found.
19078
+ */
19079
+ fetchFontAsset(path: string, options?: FontAssetFetchOptions): Promise<Nullable<FontAsset>>;
19080
+ /**
19081
+ * Get a cached font asset by ID if already loaded.
19082
+ *
19083
+ * @param path - VFS path of TTF/OTF file.
19084
+ * @returns The cached FontAsset if it exists and is loaded, or null if not cached or still loading.
19085
+ */
19086
+ getFontAsset(path: string): Nullable<FontAsset>;
19087
+ /**
19088
+ * Removes a cached font asset entry by asset instance or asset ID.
19089
+ *
19090
+ * @param asset - Loaded font asset instance or its asset ID/path.
19091
+ * @returns `true` if a cache entry existed and was removed.
19092
+ */
19093
+ releaseFontAsset(asset: FontAsset | string): boolean;
17743
19094
  /**
17744
19095
  * Serialize an object to a JSON structure using registered class metadata.
17745
19096
  *
@@ -17788,16 +19139,13 @@ declare class ResourceManager {
17788
19139
  /**
17789
19140
  * Load a model by ID and track the allocation for reverse lookup.
17790
19141
  *
17791
- * @param id - Model identifier or path.
19142
+ * @param path - VFS path of the model file.
17792
19143
  * @param scene - Scene into which the model is loaded.
17793
19144
  * @param options - Optional model fetch options.
17794
19145
  *
17795
19146
  * @returns A Promise resolving to the loaded model object, or `null` if failed.
17796
19147
  */
17797
- fetchModel(id: string, scene: Scene, options?: ModelFetchOptions): Promise<{
17798
- group: SceneNode;
17799
- animationSet: AnimationSet;
17800
- }>;
19148
+ fetchModel(path: string, scene: Scene, options?: ModelFetchOptions): Promise<SceneNode | undefined>;
17801
19149
  /**
17802
19150
  * Load a texture directly from an ArrayBuffer or typed array.
17803
19151
  *
@@ -17816,20 +19164,20 @@ declare class ResourceManager {
17816
19164
  /**
17817
19165
  * Load a texture by ID and track the allocation for reverse lookup.
17818
19166
  *
17819
- * @param id - Texture identifier or path.
19167
+ * @param path - VFS path of the texture file.
17820
19168
  * @param options - Optional texture fetch options.
17821
19169
  *
17822
19170
  * @returns A Promise resolving to the loaded texture, or `null` if failed.
17823
19171
  */
17824
- fetchTexture<T extends Texture2D | TextureCube | Texture2DArray>(id: string, options?: TextureFetchOptions<T>): Promise<T>;
19172
+ fetchTexture<T extends Texture2D | TextureCube | Texture2DArray>(path: string, options?: TextureFetchOptions<T>): Promise<T>;
17825
19173
  /**
17826
19174
  * Load a material by ID and track the allocation for reverse lookup.
17827
19175
  *
17828
- * @param id - Material identifier or path.
19176
+ * @param path - VFS path of the material file.
17829
19177
  *
17830
19178
  * @returns A Promise resolving to the loaded material, or `null` if failed.
17831
19179
  */
17832
- fetchMaterial<T extends Material = MeshMaterial>(id: string): Promise<Nullable<T>>;
19180
+ fetchMaterial<T extends Material = MeshMaterial>(path: string, options?: BaseFetchOptions): Promise<Nullable<T>>;
17833
19181
  /**
17834
19182
  * Reload specific blue print materials
17835
19183
  *
@@ -17845,11 +19193,11 @@ declare class ResourceManager {
17845
19193
  /**
17846
19194
  * Load a primitive by ID and track the allocation for reverse lookup.
17847
19195
  *
17848
- * @param id - Primitive identifier or path.
19196
+ * @param path - VFS path of the primitive file.
17849
19197
  *
17850
19198
  * @returns A Promise resolving to the loaded primitive, or `null` if failed.
17851
19199
  */
17852
- fetchPrimitive<T extends Primitive = Primitive>(id: string): Promise<Nullable<T>>;
19200
+ fetchPrimitive<T extends Primitive = Primitive>(path: string, options?: BaseFetchOptions): Promise<Nullable<T>>;
17853
19201
  /**
17854
19202
  * Load a prefab content.
17855
19203
  * @param path - Path to the prefab JSON file in VFS.
@@ -21115,6 +22463,120 @@ declare class TextureSampleGrad extends BaseGraphNode {
21115
22463
  protected getType(): string;
21116
22464
  }
21117
22465
 
22466
+ /**
22467
+ * Vertex output node
22468
+ * @public
22469
+ */
22470
+ declare class VertexOutputNode extends BaseGraphNode {
22471
+ private _index;
22472
+ constructor(index: number);
22473
+ get index(): number;
22474
+ static getSerializationCls(): SerializableClass;
22475
+ /**
22476
+ * Generates a string representation of this node
22477
+ *
22478
+ * @returns 'vertex index'
22479
+ */
22480
+ toString(): string;
22481
+ /**
22482
+ * Validates the node state
22483
+ *
22484
+ * @returns Empty string (always valid)
22485
+ *
22486
+ * @remarks
22487
+ * Vertex index nodes are always valid as they have no inputs.
22488
+ */
22489
+ protected validate(): string;
22490
+ /**
22491
+ * Gets the output type for a specific output slot
22492
+ *
22493
+ * @param id - The output slot ID
22494
+ * @returns 'float' for individual channel outputs (id \> 1), 'vec4' for full color
22495
+ */
22496
+ protected getType(id: number): "float" | "vec4";
22497
+ }
22498
+ /**
22499
+ * Vertex index input node
22500
+ * @public
22501
+ */
22502
+ declare class VertexIndexNode extends BaseGraphNode {
22503
+ /**
22504
+ * Creates a new vertex index node
22505
+ */
22506
+ constructor();
22507
+ /**
22508
+ * Gets the serialization descriptor for this node type
22509
+ *
22510
+ * @returns Serialization class descriptor
22511
+ */
22512
+ static getSerializationCls(): {
22513
+ ctor: typeof VertexIndexNode;
22514
+ name: string;
22515
+ getProps(): never[];
22516
+ };
22517
+ /**
22518
+ * Generates a string representation of this node
22519
+ *
22520
+ * @returns 'vertex index'
22521
+ */
22522
+ toString(): string;
22523
+ /**
22524
+ * Validates the node state
22525
+ *
22526
+ * @returns Empty string (always valid)
22527
+ *
22528
+ * @remarks
22529
+ * Vertex index nodes are always valid as they have no inputs.
22530
+ */
22531
+ protected validate(): string;
22532
+ /**
22533
+ * Gets the output type for a specific output slot
22534
+ *
22535
+ * @returns 'float'
22536
+ */
22537
+ protected getType(): string;
22538
+ }
22539
+ /**
22540
+ * Instance index input node
22541
+ * @public
22542
+ */
22543
+ declare class InstanceIndexNode extends BaseGraphNode {
22544
+ /**
22545
+ * Creates a new instance index node
22546
+ */
22547
+ constructor();
22548
+ /**
22549
+ * Gets the serialization descriptor for this node type
22550
+ *
22551
+ * @returns Serialization class descriptor
22552
+ */
22553
+ static getSerializationCls(): {
22554
+ ctor: typeof InstanceIndexNode;
22555
+ name: string;
22556
+ getProps(): never[];
22557
+ };
22558
+ /**
22559
+ * Generates a string representation of this node
22560
+ *
22561
+ * @returns 'instance index'
22562
+ */
22563
+ toString(): string;
22564
+ /**
22565
+ * Validates the node state
22566
+ *
22567
+ * @returns Empty string (always valid)
22568
+ *
22569
+ * @remarks
22570
+ * Instance index nodes are always valid as they have no inputs.
22571
+ */
22572
+ protected validate(): string;
22573
+ /**
22574
+ * Gets the output type for a specific output slot
22575
+ *
22576
+ * @returns 'float'
22577
+ */
22578
+ protected getType(): string;
22579
+ }
21118
22580
  /**
21119
22581
  * Vertex color input node
21120
22582
  *
@@ -23687,6 +25149,121 @@ declare function interleavedGradientNoise(scope: PBInsideFunctionScope, c: PBSha
23687
25149
  */
23688
25150
  declare function temporalResolve(scope: PBInsideFunctionScope, currentColorTex: PBShaderExp, historyColorTex: PBShaderExp, currentDepthTex: PBShaderExp, motionVectorTex: PBShaderExp, prevMotionVectorTex: PBShaderExp, uv: PBShaderExp, workSize: PBShaderExp, debug?: number): PBShaderExp;
23689
25151
 
25152
+ /** @public */
25153
+ type AvatarSlotId = string;
25154
+ /** @public */
25155
+ type AvatarBindMode = 'exact' | 'humanoid' | 'name' | 'custom';
25156
+ /** @public */
25157
+ type AvatarFitMode = 'reuseInverseBind' | 'preserveRestPose';
25158
+ /** @public */
25159
+ type AvatarOutfitSource = string | SceneNode | SharedModel;
25160
+ /** @public */
25161
+ type AvatarBodyRegionTarget = SceneNode | Mesh;
25162
+ /** @public */
25163
+ type AvatarBodyRegions = Record<string, AvatarBodyRegionTarget[]>;
25164
+ /** @public */
25165
+ type AvatarJointMap = Record<string, string> | ((sourceJoint: SceneNode, targetRig: SkeletonRig, sourceRig: SkeletonRig) => Nullable<SceneNode>);
25166
+ /** @public */
25167
+ type AvatarSlotOptions = {
25168
+ id: AvatarSlotId;
25169
+ hideBodyRegions?: string[];
25170
+ exclusiveWith?: AvatarSlotId[];
25171
+ allowMultiple?: boolean;
25172
+ };
25173
+ /** @public */
25174
+ type AvatarWardrobeOptions = {
25175
+ root: SceneNode;
25176
+ rig?: SkeletonRig | string;
25177
+ slots?: AvatarSlotOptions[];
25178
+ bodyRegions?: AvatarBodyRegions;
25179
+ modelFetchOptions?: ModelFetchOptions;
25180
+ };
25181
+ /** @public */
25182
+ type AvatarEquipOptions = {
25183
+ slot?: AvatarSlotId;
25184
+ bindMode?: AvatarBindMode;
25185
+ fitMode?: AvatarFitMode;
25186
+ jointMap?: AvatarJointMap;
25187
+ hideBodyRegions?: string[];
25188
+ modelFetchOptions?: ModelFetchOptions;
25189
+ };
25190
+ /** @public */
25191
+ type AvatarOutfitValidation = {
25192
+ ok: boolean;
25193
+ meshes: number;
25194
+ skinBindings: number;
25195
+ mappedJoints: number;
25196
+ missingJoints: string[];
25197
+ errors: string[];
25198
+ warnings: string[];
25199
+ };
25200
+ /**
25201
+ * A concrete equipped outfit item.
25202
+ *
25203
+ * Disposing the instance unequips it from the owning wardrobe.
25204
+ *
25205
+ * @public
25206
+ */
25207
+ declare class AvatarOutfitInstance extends Disposable {
25208
+ readonly id: string;
25209
+ readonly slot: AvatarSlotId;
25210
+ readonly root: DRef<SceneNode>;
25211
+ readonly meshes: DRef<Mesh>[];
25212
+ readonly skinBindings: SkinBinding[];
25213
+ readonly hiddenBodyRegions: string[];
25214
+ private _wardrobe;
25215
+ protected onDispose(): void;
25216
+ }
25217
+ /**
25218
+ * High level avatar outfit controller.
25219
+ *
25220
+ * The wardrobe keeps one avatar {@link SkeletonRig} as the animation source and
25221
+ * binds equipped clothing meshes to that rig with new {@link SkinBinding}s.
25222
+ *
25223
+ * @public
25224
+ */
25225
+ declare class AvatarWardrobe extends Disposable {
25226
+ private readonly _root;
25227
+ private readonly _rig;
25228
+ private readonly _slots;
25229
+ private readonly _bodyRegions;
25230
+ private readonly _equipped;
25231
+ private readonly _hiddenBodyNodeCounts;
25232
+ private readonly _bodyNodeOriginalState;
25233
+ private readonly _modelFetchOptions;
25234
+ constructor(options: AvatarWardrobeOptions);
25235
+ static from(root: SceneNode, options?: Omit<AvatarWardrobeOptions, 'root'>): AvatarWardrobe;
25236
+ get root(): SceneNode;
25237
+ get rig(): SkeletonRig;
25238
+ getEquipped(slot?: AvatarSlotId): AvatarOutfitInstance[];
25239
+ equip(source: AvatarOutfitSource, options?: AvatarEquipOptions): Promise<Nullable<AvatarOutfitInstance>>;
25240
+ unequip(slotOrInstance: AvatarSlotId | AvatarOutfitInstance): void;
25241
+ clear(): void;
25242
+ validateOutfit(source: SceneNode, options?: AvatarEquipOptions): AvatarOutfitValidation;
25243
+ protected onDispose(): void;
25244
+ private resolveTargetRig;
25245
+ private ensureRigRegistered;
25246
+ private enforceSlotRules;
25247
+ private resolveSource;
25248
+ private collectSkinnedMeshes;
25249
+ private chooseBindMode;
25250
+ private resolveTargetJoint;
25251
+ private resolveHumanoidTargetJoint;
25252
+ private findHumanoidMappedJoint;
25253
+ private findTargetJointByName;
25254
+ private createInverseBindMatrices;
25255
+ private computeBindWorldMatrices;
25256
+ private getRigNodeBindPose;
25257
+ private stripSourceSkinBindings;
25258
+ private removeSkinBinding;
25259
+ private removeRefs;
25260
+ private getHiddenBodyRegions;
25261
+ private retainBodyRegions;
25262
+ private releaseBodyRegions;
25263
+ private collectBodyRegionNodes;
25264
+ private uniqueNodes;
25265
+ }
25266
+
23690
25267
  /**
23691
25268
  * Blit type
23692
25269
  * @public
@@ -24081,4 +25658,4 @@ declare const ATMOSPHERIC_FOG_BIT: number;
24081
25658
  */
24082
25659
  declare const HEIGHT_FOG_BIT: number;
24083
25660
 
24084
- export { AABBTree, ABufferOIT, ATMOSPHERIC_FOG_BIT, AbsNode, AbstractPostEffect, AllConditionNode, type AngleLimitConfig, AnimationClip, AnimationSet, AnimationTrack, AnyConditionNode, type AppCreationOptions, type AppOptions, Application, type ApplyResultOutput, ArcCosNode, ArcSinNode, ArcTan2Node, ArcTanNode, ArccosineHNode, ArcsineHNode, ArctangentHNode, type AssetAnimationData, type AssetAnimationTrack, type AssetFixedGeometryCacheAnimationTrack, type AssetGeometryCacheAnimationTrack, AssetHierarchyNode, AssetManager, type AssetMaterial, type AssetMaterialClearcoat, type AssetMaterialCommon, type AssetMaterialIridescence, type AssetMaterialSheen, type AssetMaterialTransmission, type AssetMeshData, type AssetPBRMaterialCommon, type AssetPBRMaterialMR, type AssetPBRMaterialSG, type AssetPCAGeometryCacheAnimationTrack, type AssetRotationTrack, type AssetScaleTrack, AssetScene, type AssetSkeletalAnimationTrack, AssetSkeleton, type AssetSubMeshData, type AssetTranslationTrack, type AssetUnlitMaterial, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, BaseCameraController, BaseGraphNode, BaseLight, BaseSprite, BaseTextureNode, type BatchDrawable, BatchGroup, BillboardMatrixNode, type BlendMode, BlinnMaterial, type BlitType, Blitter, Bloom, type BluePrintEditorState, type BluePrintUniformTexture, type BluePrintUniformValue, type BlueprintDAG, type BoneNode, BoundingBox, type BoundingVolume, type BoxCreationOptions, BoxFilterBlitter, BoxFrameShape, BoxShape, CCDSolver, type CachedBindGroup, Camera, CameraNearFarNode, type CameraOITMode, CameraPositionNode, CameraVectorNode, type CapsuleCollider, type CapsuleCreationOptions, CapsuleShape, CeilNode, ClampNode, ClipmapTerrain, ClipmapTerrainMaterial, ColliderForce, type ColliderR, type ColliderRW, type CollisionResult, ColorAdjust, CompAddNode, CompComparisonNode, CompDivNode, CompMulNode, CompSubNode, type ComparisonMode, type CompiledRenderGraph, Compositor, type CompositorContext, ConstantBVec2Node, ConstantBVec3Node, ConstantBVec4Node, ConstantBooleanNode, ConstantScalarNode, ConstantTexture2DArrayNode, ConstantTexture2DNode, ConstantTextureCubeNode, ConstantVec2Node, ConstantVec3Node, ConstantVec4Node, type Constraint, type ConstraintBuildOptions, ConstraintType, type ControllerConfig, CopyBlitter, CosHNode, CosNode, CrossProductNode, CubemapSHProjector, CullVisitor, type CylinderCreationOptions, CylinderShape, DDXNode, DDYNode, Degrees2RadiansNode, DepthPass, DevicePoolAllocator, DirectionalLight, DistanceNode, DotProductNode, DracoMeshDecoder, type DrawContext, type Drawable, type DrawableInstanceInfo, EPSILON, type EditorMode, ElapsedTimeNode, type EmitterBehavior, type EmitterShape, Engine, EnvConstantAmbient, EnvHemisphericAmbient, type EnvLightType, EnvLightWrapper, EnvShIBL, Environment, EnvironmentLighting, EqualNode, Exp2Node, ExpNode, type ExtractMixinReturnType, type ExtractMixinType, FABRIKSolver, FBMWaveGenerator, FFTWaveGenerator, FPSCameraController, type FPSCameraControllerOptions, FWidthNode, FXAA, FaceForwardNode, type FixedGeometryCacheFrame, type FixedGeometryCacheState, FixedGeometryCacheTrack, type FlatPlane, FloorNode, FmaNode, type FogType, type ForwardPlusOptions, FractNode, FunctionCallNode, FunctionInputNode, FunctionOutputNode, GPUClothSystem, type GPUClothSystemOptions, type GPUClothWrapBindingData, type GPUClothWrapBindingTarget, GaussianBlurBlitter, GenericMathNode, type GeometryCacheFrame, type GeometryCacheMeshBinding, type GeometryCacheState, GerstnerWaveGenerator, type GrabberR, type GrabberRW, GraphNode, type GraphNodeInput, type GraphNodeOutput, type GraphStructure, type GrassInstanceInfo, GrassLayer, GrassMaterial, GrassRenderer, Grayscale, HEIGHT_FOG_BIT, Hash1Node, Hash2Node, Hash3Node, HistoryResourceManager, type Host, HumanoidBodyRig, HumanoidHandRig, type HumanoidJointMapping, type IAttachedScript, type IBaseEvent, type IControllerKeyboardEvent, type IControllerKeydownEvent, type IControllerKeypressEvent, type IControllerKeyupEvent, type IControllerMouseEvent, type IControllerPointerCancelEvent, type IControllerPointerDownEvent, type IControllerPointerMoveEvent, type IControllerPointerUpEvent, type IControllerWheelEvent, type IGraphNode, IKAngleConstraint, IKChain, IKConstraint, type IKJoint, IKModifier, IKSolver, type IMixinAlbedoColor, type IMixinBlinnPhong, type IMixinFoliage, type IMixinLambert, type IMixinLight, type IMixinPBRBluePrint, type IMixinPBRCommon, type IMixinPBRMetallicRoughness, type IMixinPBRSpecularGlossiness, type IMixinVertexColor, type IModKey, type IRUniformTexture, type IRUniformValue, type IRenderHook, type IRenderable, type InputEventHandler, InputManager, InstanceBindGroupAllocator, type InstanceData, type InstanceUniformType, type InterChainConstraint, InvProjMatrixNode, InvSqrtNode, InvViewProjMatrixNode, type JointChainConfig, type JointDynamicSystemConfig, type JointDynamicsColliderHandle, type JointDynamicsFlatPlaneHandle, type JointDynamicsGrabberHandle, JointDynamicsModifier, JointDynamicsSystem, JointDynamicsSystemController, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, LambertMaterial, LengthNode, type LineCollisionResult, Log2Node, type LogMode, LogNode, LogicallyAndNode, LogicallyOrNode, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, MakeVectorNode, Material, MaterialBlueprintIR, type MaterialBlueprintIRBehaviors, type MaterialTextureInfo, MaterialVaryingFlags, MaxNode, Mesh, MeshMaterial, type MeshUpdateCallback, type Metadata, MinNode, MixNode, ModNode, type ModelFetchOptions, type ModelInfo, type MorphData, type MorphInfo, type MorphState, MorphTargetTrack, MultiChainSpringSystem, type MultiChainSpringSystemOptions, NamedObject, type NearestPointsResult, type NodeConnection, NodeEulerRotationTrack, type NodeIterateFunc, NodeRotationTrack, NodeScaleTrack, NodeTranslationTrack, NormalizeNode, NotEqualNode, type OIT, Octree, OctreeNode, OctreeNodeChunk, OctreePlacement, OrbitCameraController, type OrbitCameraControllerOptions, OrthoCamera, PBRBlockNode, PBRBluePrintMaterial, PBRMetallicRoughnessMaterial, type PBRReflectionMode, PBRSpecularGlossinessMaterial, type PCAGeometryCacheState, PCAGeometryCacheTrack, type PCAGeometryCacheTrackData, PannerNode, ParticleMaterial, ParticleSystem, PerlinNoise2DNode, PerspectiveCamera, type PhysicsCurves, type PickResult, type PickTarget, PixelNormalNode, PixelWorldPositionNode, type PlaneCollider, type PlaneCreationOptions, PlaneShape, type PlayAnimationOptions, type PointInit, PointLight, type PointR, type PointRW, type PointTransform, PostEffectLayer, PowNode, Primitive, ProjectionMatrixNode, type PropEdit, type PropertyAccessor, type PropertyAccessorOptions, type PropertySceneNodeOptions, type PropertyToType, PropertyTrack, type PropertyType, type PropertyValue, PunctualLight, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, type RGExecuteContext, type RGExecuteFn, type RGFramebufferDesc, RGHandle, RGHistoryResources, type RGPassBuilder, type RGResolvedSize, type RGResourceLifetime, type RGSizeMode, RGSubpass, type RGTextureAllocator, type RGTextureDesc, Radians2DegreesNode, RaycastVisitor, RectLight, ReflectNode, RefractNode, RenderContext, RenderGraph, RenderGraphExecutor, type RenderItemList, type RenderItemListBundle, type RenderItemListInfo, RenderPass, RenderQueue, type RenderQueueItem, type RenderQueueRef, RenderTarget, type ResolutionTransform, ResolveVertexNormalNode, ResolveVertexPositionNode, ResolveVertexTangentNode, ResourceManager, RotateAboutAxisNode, RuntimeScript, type RuntimeScriptArrayDeclaration, type RuntimeScriptArrayElementDeclaration, type RuntimeScriptConfig, type RuntimeScriptObjectDeclaration, type RuntimeScriptObjectFieldDeclaration, type RuntimeScriptPropertyDeclaration, type RuntimeScriptPropertyInfo, type RuntimeScriptPropertyOptions, type RuntimeScriptPropertyType, type RuntimeScriptValueDeclaration, type RuntimeScriptValueType, SAO, type SamplerType, SaturateNode, Scene, SceneNode, type SceneNodeVisible, ScreenAdapter, type ScreenConfig, ScreenRenderTarget, type ScreenScaleMode, ScriptAttachment, type ScriptAttachmentConfig, ScriptRegistry, ScriptingSystem, type ScriptingSystemOptions, SelectionNode, type SerializableClass, ShaderHelper, ShadowMapPass, ShadowMapper, type ShadowMode, type ShadowQualityPreset, Shape, type ShapeCreationOptions, type ShapeOptionType, type ShapeType, SharedModel, SignNode, SimplexNoise2DNode, type SimulationParams, SinHNode, SinNode, Skeleton, SkeletonModifier, type SkinnedBoundingBox, SkyEnvTextureNode, SkyRenderer, type SkyType, SmoothStepNode, type SphereCollider, type SphereCreationOptions, SphereShape, SpotLight, SpringChain, type SpringCollider, type SpringConstraint, SpringModifier, type SpringParticle, SpringSystem, type SpringSystemOptions, Sprite, SpriteBlockNode, SpriteBlueprintMaterial, SpriteMaterial, SqrtNode, StandardSpriteMaterial, StepNode, type StopAnimationOptions, type SurfaceCheckResult, SwizzleNode, TanHNode, TanNode, type TerrainDebugMode, type TetrahedronCreationOptions, TetrahedronFrameShape, TetrahedronShape, type TextureFetchOptions, type TextureMixinInstanceTypes, type TextureMixinTypes, type TextureProp, type TexturePropUniforms, TextureSampleGrad, TextureSampleNode, type ToMixedTextureType, Tonemap, type TorusCreationOptions, TorusShape, type TransformAccess, TransformNode, type TwistConstraint, TwoBoneIKSolver, UnlitMaterial, VertexBinormalNode, VertexBlockNode, VertexColorNode, VertexNormalNode, VertexPositionNode, VertexTangentNode, VertexUVNode, ViewMatrixNode, ViewProjMatrixNode, type Visitor, Water, type WaveGenerator, WeightedBlendedOIT, applyAngleLimits, applyMaterialMixins, applyResult, applyRuntimeScriptConfig, buildConstraints, buildForwardPlusGraph, buildSurfaceFaces, checkSurfaceCollision, collisionDetection, collisionDetectionCapsule, collisionDetectionSphere, computeMaxDepth, computeNearestPoints, createCapsuleCollider, createGPUClothWrapBindingData, createGeometryCacheState, createPlaneCollider, createSphereCollider, createSpringConstraint, createSpringParticle, createTransformAccess, decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, defineProps, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, ensureGeometryCacheMeshBinding, executeForwardPlusGraph, fetchSampler, gammaToLinear, getApp, getDevice, getEngine, getInput, getRuntimeScriptProperties, gradient, hash11, hash12, hash13, hash21, hash22, hash23, hash31, hash32, hash33, interleavedGradientNoise, isGPUClothSupported, linearToGamma, mixGeometryCacheBoundingBox, mixinAlbedoColor, mixinBlinnPhong, mixinFoliage, mixinLambert, mixinLight, mixinPBRBluePrint, mixinPBRCommon, mixinPBRMetallicRoughness, mixinPBRSpecularGlossness, mixinTextureProps, mixinVertexColor, noise3D, normalizeRuntimeScriptConfig, normalizeScriptAttachmentConfig, normalizeScriptAttachments, panoramaToCubemap, perlinNoise2D, perlinNoise3D, prefilterCubemap, pushInCollisionDetection, pushInFromCapsule, pushInFromCollider, pushInFromSphere, pushoutFromCapsule, pushoutFromCollider, pushoutFromSphere, resolveCapsuleCollision, resolvePlaneCollision, resolveSphereCollision, restoreGeometryCacheMeshBinding, scriptProp, simulate, smoothNoise3D, sortRootPointsByProximity, temporalResolve, tryGetApp, updateColliderFromNode, valueNoise, whiteNoise, worleyFBM, worleyNoise };
25661
+ export { AABBTree, ABufferOIT, ATMOSPHERIC_FOG_BIT, AbsNode, AbstractPostEffect, AllConditionNode, type AngleLimitConfig, AnimationClip, AnimationSet, AnimationTrack, AnyConditionNode, type AppCreationOptions, type AppOptions, Application, type ApplyResultOutput, ArcCosNode, ArcSinNode, ArcTan2Node, ArcTanNode, ArccosineHNode, ArcsineHNode, ArctangentHNode, type AssetAnimationData, type AssetAnimationTrack, type AssetFixedGeometryCacheAnimationTrack, type AssetGeometryCacheAnimationTrack, type AssetGeometryCacheFrame, AssetHierarchyNode, type AssetImageInfo, type AssetJointDynamicsChain, type AssetJointDynamicsCollider, type AssetJointDynamicsFlatPlane, type AssetJointDynamicsSpringBone, AssetManager, type AssetMaterial, type AssetMaterialClearcoat, type AssetMaterialCommon, type AssetMaterialIridescence, type AssetMaterialSheen, type AssetMaterialTransmission, type AssetMeshData, type AssetMorphTargetBinding, type AssetMorphTargetGroup, type AssetPBRMaterialCommon, type AssetPBRMaterialMR, type AssetPBRMaterialSG, type AssetPCAGeometryCacheAnimationTrack, type AssetPrimitiveInfo, type AssetRotationTrack, type AssetSamplerInfo, type AssetScaleTrack, AssetScene, type AssetSkeletalAnimationTrack, AssetSkeleton, type AssetSpringBone, type AssetSpringBoneCollider, type AssetSpringBoneColliderGroup, type AssetSpringBoneColliderShape, type AssetSpringBoneJoint, type AssetSubMeshData, type AssetTextureInfo, type AssetTranslationTrack, type AssetUnlitMaterial, type AssetVertexBufferInfo, type AvatarBindMode, type AvatarBodyRegionTarget, type AvatarBodyRegions, type AvatarEquipOptions, type AvatarFitMode, type AvatarJointMap, AvatarOutfitInstance, type AvatarOutfitSource, type AvatarOutfitValidation, type AvatarSlotId, type AvatarSlotOptions, AvatarWardrobe, type AvatarWardrobeOptions, BUILTIN_ASSET_TEST_CUBEMAP, BUILTIN_ASSET_TEXTURE_SHEEN_LUT, BaseCameraController, type BaseFetchOptions, BaseGraphNode, BaseLight, BaseSprite, BaseTextureNode, type BatchDrawable, BatchGroup, BillboardMatrixNode, type BlendMode, BlinnMaterial, type BlitType, Blitter, Bloom, type BluePrintEditorState, type BluePrintUniformTexture, type BluePrintUniformValue, type BlueprintDAG, type BoneNode, BoundingBox, type BoundingVolume, type BoxCreationOptions, BoxFilterBlitter, BoxFrameShape, BoxShape, CCDSolver, type CachedBindGroup, Camera, CameraNearFarNode, type CameraOITMode, CameraPositionNode, CameraVectorNode, type CapsuleCollider, type CapsuleCreationOptions, CapsuleShape, CeilNode, ClampNode, ClipmapTerrain, ClipmapTerrainMaterial, ColliderForce, type ColliderR, type ColliderRW, type CollisionResult, ColorAdjust, type ColoredEdge, type ColoredLineEdge, type ColoredQuadraticEdge, CompAddNode, CompComparisonNode, CompDivNode, CompMulNode, CompSubNode, type ComparisonMode, type CompiledRenderGraph, Compositor, type CompositorContext, ConstantBVec2Node, ConstantBVec3Node, ConstantBVec4Node, ConstantBooleanNode, ConstantScalarNode, ConstantTexture2DArrayNode, ConstantTexture2DNode, ConstantTextureCubeNode, ConstantVec2Node, ConstantVec3Node, ConstantVec4Node, type Constraint, type ConstraintBuildOptions, ConstraintType, type ControllerConfig, type ControllerConfigUpdate, CopyBlitter, type CopyHumanoidAnimationOptions, CosHNode, CosNode, CrossProductNode, CubemapSHProjector, CullVisitor, type CylinderCreationOptions, CylinderShape, DDXNode, DDYNode, Degrees2RadiansNode, DepthPass, DevicePoolAllocator, DirectionalLight, DistanceNode, DotProductNode, DracoMeshDecoder, type DrawContext, type Drawable, type DrawableInstanceInfo, EPSILON, type EdgeColor, type EditorMode, ElapsedTimeNode, type EmitterBehavior, type EmitterShape, Engine, EnvConstantAmbient, EnvHemisphericAmbient, type EnvLightType, EnvLightWrapper, EnvShIBL, Environment, EnvironmentLighting, EqualNode, Exp2Node, ExpNode, type ExtractMixinReturnType, type ExtractMixinType, FABRIKSolver, FBMWaveGenerator, FFTWaveGenerator, FPSCameraController, type FPSCameraControllerOptions, FWidthNode, FXAA, FaceForwardNode, type FixedGeometryCacheFrame, type FixedGeometryCacheState, FixedGeometryCacheTrack, type FlatPlane, FloorNode, FmaNode, type FogType, FontAsset, type FontAssetFetchOptions, type FontAssetMSDFAtlasSettings, type FontMetrics, type ForwardPlusOptions, FractNode, FunctionCallNode, FunctionInputNode, FunctionOutputNode, GPUClothSystem, type GPUClothSystemOptions, type GPUClothWrapBindingData, type GPUClothWrapBindingTarget, GaussianBlurBlitter, GenericMathNode, type GeometryCacheFrame, type GeometryCacheMeshBinding, type GeometryCacheState, GerstnerWaveGenerator, type GlyphContour, type GlyphData, type GlyphPoint, type GrabberR, type GrabberRW, GraphNode, type GraphNodeInput, type GraphNodeOutput, type GraphStructure, type GrassInstanceInfo, GrassLayer, GrassMaterial, GrassRenderer, Grayscale, HEIGHT_FOG_BIT, Hash1Node, Hash2Node, Hash3Node, HistoryResourceManager, type Host, HumanoidBodyRig, HumanoidHandRig, type HumanoidJointMapping, type HumanoidRetargetAxisLocks, type HumanoidRootMotionMode, type HumanoidRootMotionScaleMode, type HumanoidSkeletalAnimationMaskOptions, type HumanoidSkeletalAnimationMaskPreset, type IAttachedScript, type IBaseEvent, type IControllerKeyboardEvent, type IControllerKeydownEvent, type IControllerKeypressEvent, type IControllerKeyupEvent, type IControllerMouseEvent, type IControllerPointerCancelEvent, type IControllerPointerDownEvent, type IControllerPointerMoveEvent, type IControllerPointerUpEvent, type IControllerWheelEvent, type IGraphNode, IKAngleConstraint, IKChain, IKConstraint, type IKJoint, IKModifier, IKSolver, type IMixinAlbedoColor, type IMixinBlinnPhong, type IMixinFoliage, type IMixinLambert, type IMixinLight, type IMixinPBRBluePrint, type IMixinPBRCommon, type IMixinPBRMetallicRoughness, type IMixinPBRSpecularGlossiness, type IMixinVertexColor, type IModKey, type IRUniformTexture, type IRUniformValue, type IRenderHook, type IRenderable, type InputEventHandler, InputManager, InstanceBindGroupAllocator, type InstanceData, InstanceIndexNode, type InstanceUniformType, type InterChainConstraint, InvProjMatrixNode, InvSqrtNode, InvViewProjMatrixNode, type JointChainConfig, type JointDynamicSystemConfig, type JointDynamicsColliderHandle, type JointDynamicsColliderSnapshot, type JointDynamicsFlatPlaneHandle, type JointDynamicsFlatPlaneSnapshot, type JointDynamicsGrabberHandle, type JointDynamicsGrabberSnapshot, JointDynamicsModifier, JointDynamicsSystem, JointDynamicsSystemController, type JointNameMatcher, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_NONE, LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, LambertMaterial, LengthNode, type LineCollisionResult, Log2Node, type LogMode, LogNode, LogicallyAndNode, LogicallyOrNode, MAX_GERSTNER_WAVE_COUNT, MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MAX_TERRAIN_MIPMAP_LEVELS, MORPH_ATTRIBUTE_VECTOR_COUNT, MORPH_TARGET_COLOR, MORPH_TARGET_NORMAL, MORPH_TARGET_POSITION, MORPH_TARGET_TANGENT, MORPH_TARGET_TEX0, MORPH_TARGET_TEX1, MORPH_TARGET_TEX2, MORPH_TARGET_TEX3, MORPH_WEIGHTS_VECTOR_COUNT, type MSDFBitmap, type MSDFOptions, type MSDFShape, MSDFText, MSDFTextAtlasManager, MSDFTextMaterial, MSDFTextSprite, MSDFTextSpriteMaterial, MakeVectorNode, Material, MaterialBlueprintIR, type MaterialBlueprintIRBehaviors, type MaterialTextureInfo, MaterialVaryingFlags, MaxNode, Mesh, MeshMaterial, type MeshUpdateCallback, type Metadata, MinNode, MixNode, ModNode, type ModelFetchOptions, type ModelInfo, type ModelLoader, type MorphBoundingInfo, type MorphData, type MorphInfo, type MorphState, MorphTargetTrack, MultiChainSpringSystem, type MultiChainSpringSystemOptions, type NamedJointsSkeletalAnimationMaskOptions, NamedObject, type NearestPointsResult, type NodeConnection, NodeEulerRotationTrack, type NodeIterateFunc, NodeRotationTrack, NodeScaleTrack, NodeTranslationTrack, NormalizeNode, NotEqualNode, type OIT, Octree, OctreeNode, OctreeNodeChunk, OctreePlacement, OrbitCameraController, type OrbitCameraControllerOptions, OrthoCamera, PBRBlockNode, PBRBluePrintMaterial, PBRMetallicRoughnessMaterial, type PBRReflectionMode, PBRSpecularGlossinessMaterial, type PCAGeometryCacheState, PCAGeometryCacheTrack, type PCAGeometryCacheTrackData, type PairAdjustment, PannerNode, ParticleMaterial, ParticleSystem, PerlinNoise2DNode, PerspectiveCamera, type PhysicsCurves, type PickResult, type PickTarget, PixelNormalNode, PixelWorldPositionNode, type PlaneCollider, type PlaneCreationOptions, PlaneShape, type PlayAnimationOptions, type PointInit, PointLight, type PointR, type PointRW, type PointTransform, PostEffectLayer, PowNode, Primitive, ProjectionMatrixNode, type PropEdit, type PropertyAccessor, type PropertyAccessorOptions, type PropertySceneNodeOptions, type PropertyToType, PropertyTrack, type PropertyType, type PropertyValue, PunctualLight, QUEUE_OPAQUE, QUEUE_TRANSPARENT, RENDER_PASS_TYPE_DEPTH, RENDER_PASS_TYPE_LIGHT, RENDER_PASS_TYPE_OBJECT_COLOR, RENDER_PASS_TYPE_SHADOWMAP, type RGExecuteContext, type RGExecuteFn, type RGFramebufferDesc, RGHandle, RGHistoryResources, type RGPassBuilder, type RGResolvedSize, type RGResourceLifetime, type RGSizeMode, RGSubpass, type RGTextureAllocator, type RGTextureDesc, Radians2DegreesNode, RaycastVisitor, RectLight, ReflectNode, RefractNode, RenderContext, type RenderFunc, RenderGraph, RenderGraphExecutor, type RenderItemList, type RenderItemListBundle, type RenderItemListInfo, RenderPass, RenderQueue, type RenderQueueItem, type RenderQueueRef, RenderTarget, type ResolutionTransform, ResolveVertexNormalNode, ResolveVertexPositionNode, ResolveVertexTangentNode, ResourceManager, RotateAboutAxisNode, RuntimeScript, type RuntimeScriptArrayDeclaration, type RuntimeScriptArrayElementDeclaration, type RuntimeScriptConfig, type RuntimeScriptObjectDeclaration, type RuntimeScriptObjectFieldDeclaration, type RuntimeScriptPropertyDeclaration, type RuntimeScriptPropertyInfo, type RuntimeScriptPropertyOptions, type RuntimeScriptPropertyType, type RuntimeScriptValueDeclaration, type RuntimeScriptValueType, SAO, type SamplerType, SaturateNode, type SaveOptions, Scene, type SceneMorphTargetBinding, type SceneMorphTargetGroup, SceneNode, type SceneNodeVisible, ScreenAdapter, type ScreenConfig, ScreenRenderTarget, type ScreenScaleMode, ScriptAttachment, type ScriptAttachmentConfig, ScriptRegistry, ScriptingSystem, type ScriptingSystemOptions, SelectionNode, type SerializableClass, type SerializedMorphTargetBinding, type SerializedMorphTargetGroup, ShaderHelper, ShadowMapPass, ShadowMapper, type ShadowMode, type ShadowQualityPreset, Shape, type ShapeCreationOptions, type ShapeOptionType, type ShapeType, SharedModel, SignNode, SimplexNoise2DNode, type SimulationParams, SinHNode, SinNode, type SkeletalAnimationMaskCommonOptions, type SkeletalAnimationMaskOptions, type SkeletalAnimationMaskRootMotionMode, type SkeletalAnimationMaskUnsupportedTrackMode, Skeleton, type SkeletonBindPose, SkeletonModifier, SkeletonRig, type SkeletonRigOptions, SkinBinding, type SkinnedBoundingBox, SkyEnvTextureNode, SkyRenderer, type SkyType, SmoothStepNode, type SphereCollider, type SphereCreationOptions, SphereShape, SpotLight, SpringChain, type SpringCollider, type SpringConstraint, SpringModifier, type SpringParticle, SpringSystem, type SpringSystemOptions, Sprite, SpriteBlockNode, SpriteBlueprintMaterial, SpriteMaterial, SqrtNode, StandardSpriteMaterial, StepNode, type StopAnimationOptions, type SurfaceCheckResult, SwizzleNode, TanHNode, TanNode, type TerrainDebugMode, type TetrahedronCreationOptions, TetrahedronFrameShape, TetrahedronShape, TextSprite, type TextureFetchOptions, type TextureMixinInstanceTypes, type TextureMixinTypes, type TextureProp, type TexturePropUniforms, TextureSampleGrad, TextureSampleNode, type ToMixedTextureType, Tonemap, type TorusCreationOptions, TorusShape, type TransformAccess, TransformNode, type TwistConstraint, TwoBoneIKSolver, UnlitMaterial, VertexBinormalNode, VertexBlockNode, VertexColorNode, VertexIndexNode, VertexNormalNode, VertexOutputNode, VertexPositionNode, VertexTangentNode, VertexUVNode, ViewMatrixNode, ViewProjMatrixNode, type Visitor, Water, type WaveGenerator, WeightedBlendedOIT, applyAngleLimits, applyMaterialMixins, applyResult, applyRuntimeScriptConfig, buildConstraints, buildForwardPlusGraph, buildMSDFShape, buildSurfaceFaces, checkSurfaceCollision, collisionDetection, collisionDetectionCapsule, collisionDetectionSphere, computeMaxDepth, computeNearestPoints, createCapsuleCollider, createGPUClothWrapBindingData, createGeometryCacheState, createPlaneCollider, createSphereCollider, createSpringConstraint, createSpringParticle, createTransformAccess, decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, defineProps, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, ensureGeometryCacheMeshBinding, executeForwardPlusGraph, fetchSampler, gammaToLinear, generateMSDF, getApp, getDevice, getEngine, getInput, getRuntimeScriptProperties, gradient, hash11, hash12, hash13, hash21, hash22, hash23, hash31, hash32, hash33, interleavedGradientNoise, isGPUClothSupported, linearToGamma, mixGeometryCacheBoundingBox, mixinAlbedoColor, mixinBlinnPhong, mixinFoliage, mixinLambert, mixinLight, mixinPBRBluePrint, mixinPBRCommon, mixinPBRMetallicRoughness, mixinPBRSpecularGlossness, mixinTextureProps, mixinVertexColor, noise3D, normalizeRuntimeScriptConfig, normalizeScriptAttachmentConfig, normalizeScriptAttachments, panoramaToCubemap, perlinNoise2D, perlinNoise3D, prefilterCubemap, pushInCollisionDetection, pushInFromCapsule, pushInFromCollider, pushInFromSphere, pushoutFromCapsule, pushoutFromCollider, pushoutFromSphere, resolveCapsuleCollision, resolvePlaneCollision, resolveSphereCollision, restoreGeometryCacheMeshBinding, scriptProp, simulate, smoothNoise3D, sortRootPointsByProximity, temporalResolve, tryGetApp, updateColliderFromNode, valueNoise, whiteNoise, worleyFBM, worleyNoise };