# Completed Features

**URL:** https://forum.babylonjs.com/c/completed-features/15.md

[Latest](https://forum.babylonjs.com/latest.md) · [Categories](https://forum.babylonjs.com/categories.md) · [Tags](https://forum.babylonjs.com/tags.md)

---

## [About the Completed Features category](https://forum.babylonjs.com/t/about-the-completed-features-category/52127)

<div class="topic-metadata">

**Author:** [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Replies:** 1\
**Last updated:** [August 7, 2024, 7:29am UTC](https://forum.babylonjs.com/t/about-the-completed-features-category/52127 "2024-08-07T07:29:07Z")

</div>

This category is for features that were completed!

---

## [\[Babylon Native\] partial OpenXR implementation](https://forum.babylonjs.com/t/babylon-native-partial-openxr-implementation/63771)

<div class="topic-metadata">

**Author:** [@yuripourre](https://forum.babylonjs.com/u/yuripourre)\
**Replies:** 4\
**Last updated:** [October 1, 2026, 7:17pm UTC](https://forum.babylonjs.com/t/babylon-native-partial-openxr-implementation/63771 "2026-10-01T19:17:53Z")

</div>

Hello everyone, last week a worked on Babylon Native and created a working PR with the progress. It took me a long time by I could to fully compile a native apk deployable to Oculus Quest 2. It works perfectly and the p…

---

## [\[Babylon Native\] Audio implementation](https://forum.babylonjs.com/t/babylon-native-audio-implementation/63770)

<div class="topic-metadata">

**Author:** [@yuripourre](https://forum.babylonjs.com/u/yuripourre)\
**Replies:** 3\
**Last updated:** [July 20, 2026, 6:07pm UTC](https://forum.babylonjs.com/t/babylon-native-audio-implementation/63770 "2026-07-20T18:07:32Z")

</div>

Hello everyone, last week a worked a bit with Babylon Native and created a working PR with the progress. For me, not having audio is a huge blocker so I worked with LLMs to add a simplified implementation using miniaudi…

---

## [Add public getMeshGeometry to Babylon Lite API](https://forum.babylonjs.com/t/add-public-getmeshgeometry-to-babylon-lite-api/63812)

<div class="topic-metadata">

**Author:** [@labris](https://forum.babylonjs.com/u/labris)\
**Replies:** 5\
**Last updated:** [July 20, 2026, 2:51pm UTC](https://forum.babylonjs.com/t/add-public-getmeshgeometry-to-babylon-lite-api/63812 "2026-07-20T14:51:27Z")

</div>

Currently, Babylon Lite provides updateMeshGeometry to write geometry data to a mesh, but there is no public function to read that data back. Developers are forced to rely on internal fields (\_cpuPositions, etc.) which a…

---

## [Gaussian Splatting Streaming and LoD](https://forum.babylonjs.com/t/gaussian-splatting-streaming-and-lod/63728)

<div class="topic-metadata">

**Author:** [@Cedric](https://forum.babylonjs.com/u/Cedric)\
**Replies:** 9\
**Last updated:** [July 1, 2026, 7:06pm UTC](https://forum.babylonjs.com/t/gaussian-splatting-streaming-and-lod/63728 "2026-07-01T19:06:19Z")

</div>

Gaussian Splatting with streaming and Level of detail is now available with Babylon! You can navigate in 100s of million splats without hitting your frame rate. Feature is experimental and needs your feedback for testi…

---

## [Support half-float (float16) vertex attribute type ( float16x2/float16x4 on WebGPU)](https://forum.babylonjs.com/t/support-half-float-float16-vertex-attribute-type-float16x2-float16x4-on-webgpu/63574)

<div class="topic-metadata">

**Author:** [@wiiskii](https://forum.babylonjs.com/u/wiiskii)\
**Replies:** 4\
**Last updated:** [June 10, 2026, 2:51pm UTC](https://forum.babylonjs.com/t/support-half-float-float16-vertex-attribute-type-float16x2-float16x4-on-webgpu/63574 "2026-06-10T14:51:55Z")

</div>

Hi team, I have some prebuilt game asset files which happen to have half-float vertex format. Eg. They use 3 float16 for position, 3 bytes for tangent, etc. I want to directly upload those interleaved vertex buffers to…

---

## [Ctrl+drag on GeoSpatial Camera](https://forum.babylonjs.com/t/ctrl-drag-on-geospatial-camera/63087)

<div class="topic-metadata">

**Author:** [@tibotiber](https://forum.babylonjs.com/u/tibotiber)\
**Replies:** 6\
**Last updated:** [May 19, 2026, 8:11pm UTC](https://forum.babylonjs.com/t/ctrl-drag-on-geospatial-camera/63087 "2026-05-19T20:11:30Z")

</div>

Hi, I’ve just played a bit with the geospatial camera, and it’s really awesome. The possibilities this opens :exploding\_head:. One small feature request: Could it be possible to rotate the camera with a Control + drag o…

---

## [Per instance bbox culling for thin instance picking](https://forum.babylonjs.com/t/per-instance-bbox-culling-for-thin-instance-picking/57251)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 8\
**Last updated:** [April 24, 2026, 9:15am UTC](https://forum.babylonjs.com/t/per-instance-bbox-culling-for-thin-instance-picking/57251 "2026-04-24T09:15:30Z")

</div>

Proposal: per-instance bounding-info culling for thin-instance picking Summary The current thin-instance picking flow performs one whole-mesh broad-phase in InternalPick() and InternalMultiPick(), then iterates every thi…

---

## [Use matrixData for thin instance picking](https://forum.babylonjs.com/t/use-matrixdata-for-thin-instance-picking/63194)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 2\
**Last updated:** [April 20, 2026, 5:16am UTC](https://forum.babylonjs.com/t/use-matrixdata-for-thin-instance-picking/63194 "2026-04-20T05:16:12Z")

</div>

Summary The thin-instance picking path in InternalPick() and InternalMultiPick() currently calls thinInstanceGetWorldMatrices(), which lazily allocates a cached Matrix\[\] by calling Matrix.FromArray() once per thin instan…

---

## [Remove Infinite-Distance Root Allocation in \`TransformNode.computeWorldMatrix\`](https://forum.babylonjs.com/t/remove-infinite-distance-root-allocation-in-transformnode-computeworldmatrix/63125)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 2\
**Last updated:** [April 14, 2026, 1:36am UTC](https://forum.babylonjs.com/t/remove-infinite-distance-root-allocation-in-transformnode-computeworldmatrix/63125 "2026-04-14T01:36:12Z")

</div>

Summary Remove the per-call new Vector3(...) allocation in the root-node infinite-distance path of TransformNode.computeWorldMatrix() and replace it with a zero-allocation implementation based on direct matrix element re…

---

## [Downsampled SphericalHarmonics Creation](https://forum.babylonjs.com/t/downsampled-sphericalharmonics-creation/62858)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 8\
**Last updated:** [March 27, 2026, 3:00am UTC](https://forum.babylonjs.com/t/downsampled-sphericalharmonics-creation/62858 "2026-03-27T03:00:16Z")

</div>

Summary Reduce the CPU cost of SphericalPolynomial generation by reading from a lower mip level of the cubemap instead of the full-resolution mip 0. For the synchronous CPU-data path, apply a box-filter downsample before…

---

## [ES2026 proposal-arraybuffer-base64 support](https://forum.babylonjs.com/t/es2026-proposal-arraybuffer-base64-support/62715)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 5\
**Last updated:** [March 11, 2026, 1:10am UTC](https://forum.babylonjs.com/t/es2026-proposal-arraybuffer-base64-support/62715 "2026-03-11T01:10:23Z")

</div>

Background Currently babylon.js use it’s internal implement of base64 encoding/decoding in packages/dev/core/src/Misc/stringTools.ts. But recently tc39 has approved the proposal-arraybuffer-base64 into ES2026, which int…

---

## [GaussianSplattingMesh serializer](https://forum.babylonjs.com/t/gaussiansplattingmesh-serializer/62659)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 5\
**Last updated:** [March 9, 2026, 12:50am UTC](https://forum.babylonjs.com/t/gaussiansplattingmesh-serializer/62659 "2026-03-09T00:50:02Z")

</div>

For a long time GaussianSplattingMesh.prototype.serialize is missing so serialized GaussianSplattingMesh would result in a dummy mesh, not the GaussianSplattingMesh itself. Now it’s here: Some notes for reviewers: k…

---

## [Create RawTexture2DArray with full mipmap chain compressed texture](https://forum.babylonjs.com/t/create-rawtexture2darray-with-full-mipmap-chain-compressed-texture/61516)

<div class="topic-metadata">

**Author:** [@wiiskii](https://forum.babylonjs.com/u/wiiskii)\
**Replies:** 4\
**Last updated:** [January 27, 2026, 11:29am UTC](https://forum.babylonjs.com/t/create-rawtexture2darray-with-full-mipmap-chain-compressed-texture/61516 "2026-01-27T11:29:52Z")

</div>

This is a follow up question of the previous one: Context: I was using dxt5 compressed textures (a number of .dds files) to render my terrain. For simplicity, I was only taking mip level 0 data from those textures and…

---

## [Improve hand tracking performance on WebKit browsers](https://forum.babylonjs.com/t/improve-hand-tracking-performance-on-webkit-browsers/62062)

<div class="topic-metadata">

**Author:** [@matthargett](https://forum.babylonjs.com/u/matthargett)\
**Replies:** 1\
**Last updated:** [January 10, 2026, 1:15am UTC](https://forum.babylonjs.com/t/improve-hand-tracking-performance-on-webkit-browsers/62062 "2026-01-10T01:15:25Z")

</div>

I’ve submitted a PR for this issue here: Before this fix, hand tracking was a few seconds behind and very low framerate on Snapdragon AR2 devices like Snap Spectacles. It turns out that this root problem was also the …

---

## [Meshbuilder helper create box with rounded edges](https://forum.babylonjs.com/t/meshbuilder-helper-create-box-with-rounded-edges/35848)

<div class="topic-metadata">

**Author:** [@ReubenH](https://forum.babylonjs.com/u/ReubenH)\
**Replies:** 7\
**Last updated:** [January 5, 2026, 10:01am UTC](https://forum.babylonjs.com/t/meshbuilder-helper-create-box-with-rounded-edges/35848 "2026-01-05T10:01:44Z")

</div>

I’ve created a helper functions that created a cuboid with rounded edges so that it render nicely with a shader that uses normals. I thought this might be useful to somebody else so thought I’d share. https://playgroun…

---

## [Implement Draco-compressed GLB export option in Sandbox' Inspector](https://forum.babylonjs.com/t/implement-draco-compressed-glb-export-option-in-sandbox-inspector/52129)

<div class="topic-metadata">

**Author:** [@Deltakosh](https://forum.babylonjs.com/u/Deltakosh)\
**Replies:** 1\
**Last updated:** [November 5, 2025, 6:58pm UTC](https://forum.babylonjs.com/t/implement-draco-compressed-glb-export-option-in-sandbox-inspector/52129 "2025-11-05T18:58:22Z")

</div>

As stated in this forum discussion, I think that being able to export from BJS Sandbox to a Draco compressed GLB would be a nice feature to have. Best regards. Ported from Github repo

---

## [Allow to reject sound plays if maxInstances number is reached](https://forum.babylonjs.com/t/allow-to-reject-sound-plays-if-maxinstances-number-is-reached/60433)

<div class="topic-metadata">

**Author:** [@splash27](https://forum.babylonjs.com/u/splash27)\
**Replies:** 3\
**Last updated:** [October 30, 2025, 1:47pm UTC](https://forum.babylonjs.com/t/allow-to-reject-sound-plays-if-maxinstances-number-is-reached/60433 "2025-10-30T13:47:37Z")

</div>

Let’s say we have const sound = await BABYLON.CreateSoundAsync("sound", "https://assets.babylonjs.com/sound/alarm-1.mp3", { maxInstances: 1 }); sound.play(); Now, if we play the second instance while the first one is s…

---

## [PostProcess: add doNotSerialize](https://forum.babylonjs.com/t/postprocess-add-donotserialize/61186)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 2\
**Last updated:** [October 30, 2025, 9:33am UTC](https://forum.babylonjs.com/t/postprocess-add-donotserialize/61186 "2025-10-30T09:33:45Z")

</div>

Background Following ISpriteManager: add doNotSerialize, PostProcess have no doNotSerialize to control if a post process should be serialized. Proposal Add a doNotSerialize to PostProcess with a default false, since it’…

---

## [Area light support](https://forum.babylonjs.com/t/area-light-support/28710)

<div class="topic-metadata">

**Author:** [@samevision](https://forum.babylonjs.com/u/samevision)\
**Replies:** 8\
**Last updated:** [October 29, 2025, 9:11pm UTC](https://forum.babylonjs.com/t/area-light-support/28710 "2025-10-29T21:11:06Z")

</div>

Hello guys, I know that area lights are not currently supported by Babylon. However, since I have already seen several threads here in the forum asking about this and I would also very much like to use this feature, I w…

---

## [Clustered lights support](https://forum.babylonjs.com/t/clustered-lights-support/56111)

<div class="topic-metadata">

**Author:** [@thomlucc](https://forum.babylonjs.com/u/thomlucc)\
**Replies:** 1\
**Last updated:** [October 29, 2025, 9:08pm UTC](https://forum.babylonjs.com/t/clustered-lights-support/56111 "2025-10-29T21:08:06Z")

</div>

It’d be cool to support more lights sources per frame. Describe the solution you’d like WebGL: GitHub - wizgrav/cl2: Compute-Less Clustered Lighting Playcanvas implementation: Clustered Lighting | PlayCanvas Developer…

---

## [Gltf loader: do not clone animation keys](https://forum.babylonjs.com/t/gltf-loader-do-not-clone-animation-keys/60903)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 6\
**Last updated:** [October 28, 2025, 4:01pm UTC](https://forum.babylonjs.com/t/gltf-loader-do-not-clone-animation-keys/60903 "2025-10-28T16:01:52Z")

</div>

In glTFLoaderAnimation, animation is constructed with setKeys() And setKeys defaults to clone keys Since these keys are built in-place for each channel (should be for each sampler, since gltf samplers can be reused, …

---

## [ISpriteManager: add doNotSerialize](https://forum.babylonjs.com/t/ispritemanager-add-donotserialize/61133)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 2\
**Last updated:** [October 28, 2025, 2:31am UTC](https://forum.babylonjs.com/t/ispritemanager-add-donotserialize/61133 "2025-10-28T02:31:47Z")

</div>

Background Following IParticleSystem: add doNotSerialize, ISpriteManager and impls have no doNotSerialize to control if a sprite manager should be serialized. Proposal Add an optional doNotSerialize to ISpriteManager, a…

---

## [IParticleSystem: add doNotSerialize](https://forum.babylonjs.com/t/iparticlesystem-add-donotserialize/61085)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 4\
**Last updated:** [October 24, 2025, 3:23pm UTC](https://forum.babylonjs.com/t/iparticlesystem-add-donotserialize/61085 "2025-10-24T15:23:37Z")

</div>

Background In the babylon.js serialization system, many kind of objects have doNotSerialize, to keep object from being serialized. But currently IParticleSystem and its implements do not have a doNotSerialize, or any ot…

---

## [Make floating origin work with instances](https://forum.babylonjs.com/t/make-floating-origin-work-with-instances/61058)

<div class="topic-metadata">

**Author:** [@CrashMaster](https://forum.babylonjs.com/u/CrashMaster)\
**Replies:** 9\
**Last updated:** [October 22, 2025, 5:05pm UTC](https://forum.babylonjs.com/t/make-floating-origin-work-with-instances/61058 "2025-10-22T17:05:10Z")

</div>

Hello there, I have continued experimenting with the new floating origin feature and found it does not seem to work with instances: Interestingly enough, it works when assigning the node material to the sphere …

---

## [Obtain GUI Component Within onValueChangedObservable on Slider and ColorPicker](https://forum.babylonjs.com/t/obtain-gui-component-within-onvaluechangedobservable-on-slider-and-colorpicker/61045)

<div class="topic-metadata">

**Author:** [@HiGreg](https://forum.babylonjs.com/u/HiGreg)\
**Replies:** 9\
**Last updated:** [October 21, 2025, 4:22pm UTC](https://forum.babylonjs.com/t/obtain-gui-component-within-onvaluechangedobservable-on-slider-and-colorpicker/61045 "2025-10-21T16:22:25Z")

</div>

I’m using the same observer for multiple sliders, and I want to obtain the specific slider control being changed from the onValueChangedObservable. This time, I’m using a slider (whereas here is the same issue I posted …

---

## [Webxr Room Mesh Access](https://forum.babylonjs.com/t/webxr-room-mesh-access/45744)

<div class="topic-metadata">

**Author:** [@gabrieljbaker](https://forum.babylonjs.com/u/gabrieljbaker)\
**Replies:** 18\
**Last updated:** [October 20, 2025, 8:39pm UTC](https://forum.babylonjs.com/t/webxr-room-mesh-access/45744 "2025-10-20T20:39:47Z")

</div>

I know I’m relentless @RaananW , but it seems like Oculus is exposing Room Mesh on the Quest 3 now. Wonder if that could get rolling in Babylon!

---

## [SPLATFileLoader: possible to avoid global vars and externals](https://forum.babylonjs.com/t/splatfileloader-possible-to-avoid-global-vars-and-externals/60927)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 9\
**Last updated:** [October 17, 2025, 1:02am UTC](https://forum.babylonjs.com/t/splatfileloader-possible-to-avoid-global-vars-and-externals/60927 "2025-10-17T01:02:06Z")

</div>

In SPLATFileLoader, it would try to load external https://unpkg.com/fflate/umd/index.js if window.fflate does not exist, but is it possible that bundler users can provide their own instance of fflate without the need to …

---

## [Gltf: unofficial \_COLOR\_0 for EXT\_mesh\_gpu\_instancing](https://forum.babylonjs.com/t/gltf-unofficial-color-0-for-ext-mesh-gpu-instancing/60455)

<div class="topic-metadata">

**Author:** [@kzhsw](https://forum.babylonjs.com/u/kzhsw)\
**Replies:** 15\
**Last updated:** [October 10, 2025, 2:33am UTC](https://forum.babylonjs.com/t/gltf-unofficial-color-0-for-ext-mesh-gpu-instancing/60455 "2025-10-10T02:33:37Z")

</div>

In the EXT\_mesh\_gpu\_instancing it says: As with vertex attributes, custom instance attributes may be prefixed with an underscore (e.g. \_ID, \_COLOR, etc.) and used for application-specific effects. Currently three.js …

---

## [Enable MathJax extension in forums](https://forum.babylonjs.com/t/enable-mathjax-extension-in-forums/60507)

<div class="topic-metadata">

**Author:** [@HiGreg](https://forum.babylonjs.com/u/HiGreg)\
**Replies:** 5\
**Last updated:** [September 15, 2025, 9:44pm UTC](https://forum.babylonjs.com/t/enable-mathjax-extension-in-forums/60507 "2025-09-15T21:44:32Z")

</div>

Enabling Math The Math plugin can be enabled from its settings, accessed from your admin/plugins page: Features Once enabled, you can render inline math by wrapping with a single $ like so: E=mc^2. You can render…

[Next page](https://forum.babylonjs.com/c/completed-features/15.md?page=1)
