Skip to content

Conversation

@sebavan
Copy link
Member

@sebavan sebavan commented Dec 12, 2025

Let s see how bad it is :-)

sebavan and others added 30 commits October 18, 2025 01:19
…put hashing (BabylonJS#17216)

Follow-up to the original PR
BabylonJS#17175
 
The different issues pointed out by different people on the [BJS forum
post](https://forum.babylonjs.com/t/babylonjs-playground-multiple-files-with-tabs-esm-npm-imports/60446/44)
point to a caching issue - some scripts were loaded fresh while others
were stale and cached by the browser. This led to undefined behavior all
around and the page would be effectively "broken" depending on which
assets were cached or not, i.e. *anything* could go wrong and wouldn't
necessarily present as a predictable bug.

Previously there were duplicate names from the dist output and monaco
worker output which is cached locally in a browser:
<img width="1111" height="792" alt="image"
src="https://github.com/user-attachments/assets/f0051fe9-8619-4fd7-9549-9ecfc3ba54fc"
/>

index.html does not have a Cache-Control response header and respects
the client's request of `max-age=0` - this is good. index.html should
always fetch the latest.

It also appears there is a CDN purge script running on the Playground
deployment script, although I don't have access to the CI yaml.
https://dev.azure.com/babylonjs/ContinousIntegration/_build/results?buildId=44262&view=logs&j=275f1d19-1bd8-5591-b06b-07d489ea915a&t=4d2ea636-6e6e-5831-8b5a-8ce5e9ce8bbc
If that's the case for the last operation in that script, good. CDN
purge handles the server cache.

Takeaway from the existing deployment pipeline and CDN architecture,
nothing needs to change. If we can guarantee unique output from a build
each time, there is no room for cache confusion from the client's
browser. This only applies to the Playground and I haven't looked into
other deployed apps. Cache-Control of 2 days is fine. Eventually this
issue would've sorted itself out in the field but 2 days is a long time
to wait with undefined/broken behavior.

The additional changes in this PR are consolidated in these two commits:


BabylonJS@1e9c765

knervous@bd197e8

These changes ensure hashed output from every build and deploy for
relevant bundled js files. The generated entrypoint for
`babylon.playground.[hash].js` is injected into the index.html with the
WebpackHTMLPlugin. The helper function for fetching scripts does append
a query parameter to bust cache, but dependent chunks of scripts do not
automatically follow the same convention. Ideally we can get rid of that
`?t=[timestamp]` and let caching do its business.


For anyone testing changes, please check https://playgroundv2.vercel.app
which should be the exact hosted bundle set from the deployment build.

For sanity's sake here are three browsers on mobile tested with the
current code: Edge, Firefox and Chrome

<img width="216" height="480" alt="image"
src="https://github.com/user-attachments/assets/7118d10b-ed77-4fe3-8f48-60f146acdc36"
/>
<img width="216" height="480" alt="image"
src="https://github.com/user-attachments/assets/67873f33-313d-49ce-8070-82dcce064f81"
/>
<img width="216" height="480" alt="image"
src="https://github.com/user-attachments/assets/4fe5ff47-98b3-4f7f-abbd-3a248a469387"
/>



With editor open:



<img width="216" height="480" alt="image"
src="https://github.com/user-attachments/assets/9191ac9a-23b0-4d42-943c-2ba9d56127a0"
/>

---------

Co-authored-by: David Catuhe <[email protected]>
… pane (BabylonJS#17317)

This is in response to
https://forum.babylonjs.com/t/introducing-inspector-v2/60937/54

Instead of selectively adding a Dispose button in the properties pane
for some entities, we now add a Dispose button to the bottom of the
General section for any entity that implements `IDisposable` (e.g. has a
`dispose` function).

Also a tiny bit of cleanup from a recent PR that uses `Collapse` instead
of conditionally rendering a component, and uses Title Case for property
labels.
…scales (BabylonJS#17319)

This change automatically adjusts the camera's `zoomingSensibility`
based on camera radius (similar to a few other properties) to make the
zooming feel consistent regardless of the size/scale of the model or how
far away the camera currently is from the model.
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite)
from 6.3.6 to 6.4.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>[email protected]</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/[email protected]/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v6.4.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v6.4.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>[email protected]</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/[email protected]/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v6.4.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v6.4.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v6.3.7</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v6.3.7/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite/commit/50034340401b4043bb0b158f18ffb7ae1b7f5c86"><code>5003434</code></a>
fix(preview): use host url to open browser (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19836">#19836</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/bf9728e79e8df905de457e15001e65e33cf13f0e"><code>bf9728e</code></a>
release: v6.3.0-beta.2</li>
<li><a
href="https://github.com/vitejs/vite/commit/380c10e665e78ef732a8d7b6c8f60a1226fc4c3b"><code>380c10e</code></a>
fix(hmr): run HMR handler sequentially (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19793">#19793</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/8bed1de5710f2a097af0e22a196545446d98f988"><code>8bed1de</code></a>
fix: addWatchFile doesn't work if base is specified (fixes <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19792">#19792</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19794">#19794</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/0a0c50a7ed38017469ed6dcec941c2d8d0efd0d0"><code>0a0c50a</code></a>
refactor: simplify pluginFilter implementation (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19828">#19828</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/59d0b35b30f3a38be33c0a9bdc177945b6f7eb1b"><code>59d0b35</code></a>
perf(css): avoid constructing <code>renderedModules</code> (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19775">#19775</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/175a83909f02d3b554452a7bd02b9f340cdfef70"><code>175a839</code></a>
fix: reject requests with <code>#</code> in request-target (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19830">#19830</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/e2e11b15a6083777ee521e26a3f79c3859abd411"><code>e2e11b1</code></a>
fix(module-runner): allow already resolved id as entry (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19768">#19768</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/7200deec91a501fb84734e23906f80808734540c"><code>7200dee</code></a>
fix: correct the behavior when multiple transform filter options are
specifie...</li>
<li><a
href="https://github.com/vitejs/vite/commit/b1251720d47f15615ea354991cdaa90d9a94aae5"><code>b125172</code></a>
fix(css): remove empty chunk imports correctly when chunk file name
contained...</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/[email protected]/packages/vite">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=vite&package-manager=npm_and_yarn&previous-version=6.3.6&new-version=6.4.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/BabylonJS/Babylon.js/network/alerts).

</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This is a better implementation than the previous one (which was
implemented as a renderer) because it is now possible to insert other
processes (such as post-processes) between scene rendering and the TAA
effect (which is also possible with the standard TAA implementation,
outside of frame graphs).

I also added support for the new `clampHistory` and `reprojectHistory`
properties in the new TAA frame graph task.

There is one breaking change in this PR:
`Material.setVertexOutputInvariant` has been renamed to
`Material.isVertexOutputInvariant`. I don't think this is a problem, as
this property is fairly new and very specific, and I don't think anyone
is using it yet.
Instances are positioned by combining world0, world1, world2, and world3
attributes, vs using the standard world mat4 uniform. We thus need to do
special offset to the buffer data to ensure the instances are positioned
properly.

I experimented with a couple approaches and this was the one that had
least perf impact and simplest code (compared to overriding prototype of
buffer / vertex buffer in order to achieve this behavior)

Both boundingBoxRenderer and edgesRenderer also support instances, so
they needed offset logic as well.

Tested with the below playground snippets
thin instances: /#V1JE4Z#1 
instances: /#PB1NS6#264
boundingbox rendering: /#NRNVQA#4
edges rendering: /#7BY3TM

Co-authored-by: Georgina Halpern <[email protected]>
I forgot to uncomment some code before commiting in BabylonJS#17326...

Retrying to enable the visu test, in case it now works with the CI...
…abylonJS#17331)

Small change to store floatingOriginOffset in temp var instead of
accessing 3x/offset

---------

Co-authored-by: Georgina Halpern <[email protected]>
…17332)

Even better-- avoid copying offset to new vect and just store in local
var :)

---------

Co-authored-by: Georgina Halpern <[email protected]>
…BabylonJS#17335)

The preview was included in the scroll region, unlike the other editors,
so when it got a vertical scrollbar, that changed the width of the
preview which caused the engine to resize. Now SFE behaves like the
other editors, and the preview doesn't scroll off screen and isn't
affected by the scrollbar.

Co-authored-by: AmoebaChant <[email protected]>
This is the first part of Inspector v2 "window management," which is
allowing the user to move each pane/tab to any "quadrant" they want (top
left, top right, bottom left, bottom right). It includes a bunch of the
base changes needed for "undocking" (popping out to floating windows),
which will be done in a different PR.

- Rework how individual side panes are rendered. Now they are rendered
in a React portal that is mounted to a dom node that is not managed by
React, but is reparented to the right "quadrant" depending on dock state
and tab selection state. This makes it so that each pane is mounted only
once - it is not unmounted/remounted when tab selection changes or when
it is redocked. This means the user keeps the current state, like the
expansion and selection state of scene explorer for example.
- Add the concept of pane "location" overrides that are persisted in
local storage. When a pane is "re-docked," these overrides are updated
and take precedence.
- Add a "..." button the right side of the pane header that has a
docking menu.
- Add the same docking menu as a context menu on the tabs themselves.
- In a future change, we may allow multi-select on the tabs so you can
easily redock multiple tabs at once (like Chrome/Edge for example).

Here are some screenshots that give a sense of the behavior:
<img width="1044" height="829" alt="image"
src="https://github.com/user-attachments/assets/81bd3c27-fb25-40a6-b664-37dfa2d9d31e"
/>
<img width="1039" height="826" alt="image"
src="https://github.com/user-attachments/assets/55838809-b6b5-48b8-88b7-75f589aa3284"
/>
<img width="1040" height="829" alt="image"
src="https://github.com/user-attachments/assets/02a90399-b552-41f8-8881-f7dcadbb2551"
/>
<img width="1040" height="830" alt="image"
src="https://github.com/user-attachments/assets/2690bce2-1296-4493-9ee3-e6406ba7fe7c"
/>
<img width="1043" height="831" alt="image"
src="https://github.com/user-attachments/assets/151d21f2-dde1-4c79-919c-d6decf4d33ca"
/>
<img width="500" height="235" alt="image"
src="https://github.com/user-attachments/assets/7b6dd973-3b61-4545-aec8-f3856cdd2e8b"
/>
This implements the OpenPBR fuzz slab for prefiltered and realtime
filtered IBL as well as analytic lights.

OpenPBR uses this model and I've generated and included the LUT for it:
https://github.com/tizian/ltc-sheen?tab=readme-ov-file
…t 19) (BabylonJS#17336)

This PR updates the Fluent virtualizer package to the latest, which
includes a fix for a
[regression](microsoft/fluentui-contrib#526)
and supports React 19 (from the
[forum](https://forum.babylonjs.com/t/introducing-inspector-v2/60937/11)).
…#17337)

The Playground [Editor
v2](BabylonJS#17216) updated Monaco
which regressed the [workaround
](BabylonJS#16741 tab handling,
where when Inspector v2 is open, pressing the tab key while focus is in
the code editor moves focus instead of inserting a tab character. To
work around this, we added the contentEditable attribute to the actual
Monaco html element that has keyboard focus when editing text, but that
element has changed in the newer Monaco, so the workaround needs to be
updated. Also, the Editor v2 PR removed the comment explaining the
workaround, so I just re-added it from the original change.
@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

Reviewer - this PR has made changes to one or more package.json files.

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

Smart Filters Editor is available to test at:
https://sfe.babylonjs.com/?snapshot=refs/pull/17554/merge

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

You have made possible changes to the playground.
You can test the snapshot here:

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/PLAYGROUND/refs/pull/17554/merge/

The snapshot playground with the CDN snapshot (only when available):

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/PLAYGROUND/refs/pull/17554/merge/?snapshot=refs/pull/17554/merge

Note that neither Babylon scenes nor textures are uploaded to the snapshot directory, so some playgrounds won't work correctly.

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

You have changed file(s) that made possible changes to the sandbox.
You can test the sandbox snapshot here:

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/SANDBOX/refs/pull/17554/merge/

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

Reviewer - this PR has made changes to one or more package.json files.

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

Smart Filters Editor is available to test at:
https://sfe.babylonjs.com/?snapshot=refs/pull/17554/merge

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

You have made possible changes to the playground.
You can test the snapshot here:

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/PLAYGROUND/refs/pull/17554/merge/

The snapshot playground with the CDN snapshot (only when available):

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/PLAYGROUND/refs/pull/17554/merge/?snapshot=refs/pull/17554/merge

Note that neither Babylon scenes nor textures are uploaded to the snapshot directory, so some playgrounds won't work correctly.

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

You have changed file(s) that made possible changes to the sandbox.
You can test the sandbox snapshot here:

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/SANDBOX/refs/pull/17554/merge/

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

Reviewer - this PR has made changes to one or more package.json files.

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

Smart Filters Editor is available to test at:
https://sfe.babylonjs.com/?snapshot=refs/pull/17554/merge

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

You have made possible changes to the playground.
You can test the snapshot here:

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/PLAYGROUND/refs/pull/17554/merge/

The snapshot playground with the CDN snapshot (only when available):

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/PLAYGROUND/refs/pull/17554/merge/?snapshot=refs/pull/17554/merge

Note that neither Babylon scenes nor textures are uploaded to the snapshot directory, so some playgrounds won't work correctly.

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

You have changed file(s) that made possible changes to the sandbox.
You can test the sandbox snapshot here:

https://snapshots-cvgtc2eugrd3cgfd.z01.azurefd.net/SANDBOX/refs/pull/17554/merge/

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

@bjsplat
Copy link
Collaborator

bjsplat commented Dec 13, 2025

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.