Release Next v3.0.0-next.19
- #918 by @bobsingor – Share links are grants. The operations are
grants.*under/v1/tenants/{tenantId}/grants, the scope isgrants.manage, and the public exchange isPOST /v1/grant-sessionswith{ grant, passphrase }. Answers saygrant/grants, the record sayspassphraseProtected, and create and update takepassphrase. A grant has aname(1 to 100 characters, trimmed, or null). New grants aregrt_…;shr_…ids keep working. The errors areGrantPassphraseRequiredandGrantExpired, a layer names itsgrantId, and everyShare*schema and type isGrant*.
- #918 by @bobsingor – Opens a grant with
open({ kind: 'grant', grant, passphrase }), and the document's grant isdoc.grant. The client half isexchangeGrant,grantSessionSource,GrantSessionSourceandGrantExchangeError, and it exchanges at/v1/grant-sessions.
- #918 by @bobsingor –
client.sharesisclient.grants, with a grant'snameandpassphrase.
- #918 by @bobsingor – Share links are grants: routes under
/v1/tenants/{tenantId}/grants, thegrants.managescope, and the public exchange atPOST /v1/grant-sessions, which takes{ grant, passphrase }. Migration 047 renamesshare_grantstograntsandshare_visitorstogrant_visitorswith their indexes and constraints, renamespassword_hashtopassphrase_hash, and adds a grant'sname. New grants aregrt_…, andshr_…grants keep working. Session tokens namegrant:<id>, andsecurity_eventsrecordsgrant.created,grant.updated,grant.archivedandgrant.revoked.
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };passwordstays the PDF's own. The exchange helpers areexchangeGrant,grantSessionSourceandGrantExchangeError.
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };passwordstays the PDF's own. The exchange helpers areexchangeGrant,grantSessionSourceandGrantExchangeError.
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };passwordstays the PDF's own. The exchange helpers areexchangeGrant,grantSessionSourceandGrantExchangeError.
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };passwordstays the PDF's own. The exchange helpers areexchangeGrant,grantSessionSourceandGrantExchangeError.
- #918 by @bobsingor – A document from a grant is
src: { grant, passphrase, restart };passwordstays the PDF's own. The exchange helpers areexchangeGrant,grantSessionSourceandGrantExchangeError.
-
#918 by @bobsingor – A document opened with a grant reports what it waits for as
grantRequest, andretry()takes the grant'spassphrase. -
#923 by @bobsingor –
createKernel({ fetch })takes your ownfetchfor{ kind: 'url' }documents, to add headers or cookies; it gets the URL and aninitwith the document's cancel signal, andretry()calls it again. A{ kind: 'url' }source takes anidof its own. A download the server refuses with 401 or 403 fails aspermission-denied, and one that isn't a PDF (a sign-in page, say) asinvalid-input. New exports: theHostFetchtype andisPdf(bytes).
- #923 by @bobsingor – Zoom limits:
ZoomLimitsis a view's zoom range,resolveZoomLimits(minZoom, maxZoom)makes one insideZOOM_MINandZOOM_MAX(aminZoomabovemaxZoomcounts asmaxZoom), andclampZoom(zoom, limits)keeps a zoom inside it.resolveZoom()andzoomAround()take the limits as a last argument; without it they keep the full range.
- #923 by @bobsingor – A bar can go at the top of a panel, under its title: the place
{ panel: id }, beside an edge,{ float },{ with }and{ at }. A panel's bars stack in the order they were added.barsInPanel(data, panel)lists them andpanelOf(place)reads the panel a place names, andvalidateLayout()names a panel the layout doesn't have, with the closest one that exists.
- #923 by @bobsingor – An item without its own
importancehas its group's, as the docs say, instead of3.group('annotate', items, { importance: 2 })now moves those items into the "More" menu before the rest of the bar, and every item of a group at5stays in the bar. An item's ownimportancestill wins, and a custom item without a command is still pinned.
- #918 by @bobsingor – The open input for a CloudPDF grant is
{ kind: 'grant', grant, passphrase?, restart? }(OpenInputGrant), and a document opened with one hasdoc.grant(DocumentGrant), whoseresume()takespassphrase.ShareOpenRequestisGrantOpenRequest, withpassphraseProvided, andSharePasswordRequiredisGrantPassphraseRequired.
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
provideEmbedPdf({ fetch }): your ownfetchfor documents at a URL, to add headers or cookies. -
#923 by @bobsingor –
EpdfStageRef(and so the<epdf-stage>component) hascanZoomIn()andcanZoomOut(), whether the zoom is below the Stage'smaxZoomor above itsminZoom.
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
<Viewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. Each download calls the latest prop.
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
<Viewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. Each download calls the latest prop.
-
#920 by @bobsingor – The Stage draws the
zoomtool's box while you drag, dashed in the accent color (the stage'szoomBoxsetting, or the--epdf-zoom-box-*variables). With interaction on, it registers the tool's handler for its own view only. -
#923 by @bobsingor –
<Viewer :fetch>: your ownfetchfor documents at a URL, to add headers or cookies. Each download calls the latest prop.
-
#920 by @bobsingor – Theming for the zoom tool's box:
--epdf-zoom-box-filland--epdf-zoom-box-stroke, which win over the stage'szoomBoxsetting, pluszoomBoxPaint(colors, accent)andZOOM_BOX_DASHto draw it. -
#923 by @bobsingor – Export
isFromTextField(event), which tells a key or a copy typed in a text field (an input, a text area, a select or editable content, inside a shadow root too) from one meant for the viewer around it.
- #920 by @bobsingor – The standard commands have
tool:zoom, the marquee zoom tool, onZ(Acrobat's key), next totool:pointer(V) andtool:pan(H).
- #923 by @bobsingor – The standard
zoom:inandzoom:outcommands are off at the Stage'smaxZoomandminZoom.
- #920 by @bobsingor – Labels for the
tool:zoomcommand (commands.tool.zoom) in all eight languages.
- #920 by @bobsingor – A third built-in tool,
zoom: drag a box to zoom to it, or click to zoom in a step (Alt-click zooms out), like Acrobat's Marquee Zoom. Its cursor iszoom-inon the pages and between them, one finger draws the box on a touch screen, and it neither follows links nor fills forms. The stage draws the box and does the zooming.listTools()now starts['pointer', 'pan', 'zoom'].
-
#920 by @bobsingor – The
zoomtool's box. On the host lens,beginZoomDrag,moveZoomDrag,endZoomDrag({ zoomOut })andcancelZoomDragrun the drag, andgetZoomBox()gives the box in viewport pixels for an adapter to draw. A box zooms straight in, about the one point that stays put, until it fills the view, centered; it glides withscrollBehavior. A click (under 4 pixels) zooms one step around the point.createZoomDragHandler(stage, interaction)connects it to the interaction hub. The newzoomBoxsetting ({ fill, stroke },nullfollows the accent) colors the box.zoomIn()andzoomOut()take{ around }, likezoomToandzoomBy.reveal()with a fit now stops at the zoom limit (64×) instead of zooming past it on a tiny rect. Under a tool with agapCursor(pan, zoom), the pan fallback no longer takes drags between pages. A fit mode, a level orresetSettings()asked for again now applies after a zoom the user made: before,fitAutomatic()after a zoom step, pinch, double-tap or zoomedrevealdid nothing when automatic was already the setting, and so didzoomTo()with the last level set. -
#923 by @bobsingor – The Stage has zoom limits: the
minZoomandmaxZoomsettings,0.05and64by default (5% to 6400%). Nothing zooms past them: notzoomIn(), a pinch or Ctrl+wheel,zoomTo(),zoomBy(),setCamera(), a reveal or a destination, and not a fit mode, which stops at the limit. When the limits change, a zoom outside them moves to the nearest one; aminZoomabovemaxZoomcounts asmaxZoom.canZoomIn()andcanZoomOut()say whether the zoom is belowmaxZoomor aboveminZoom, for disabling your buttons.zoomIn()andzoomOut()step through round levels (100%, 125%, 150%, 200%, 300% and so on) in place of ×1.2. From a level in between, such as a fit, they go to the next one, and a level within 5% of a round one steps past it.
- #923 by @bobsingor –
<epdf-pdf-viewer [fetch]>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its input, likesrc.
-
#923 by @bobsingor – Comment cards show what their thread has and offer what comes next. A mark with nothing said yet shows one box to write the comment, which becomes the annotation's own text where it may change, and a reply where it may not. A thread shows its comment, its replies and a box to reply; the box shows on the selected card, and stays while it holds a draft. A thread's status shows as a chip by its date once one is set. A check on the card marks the thread completed, and the card's menu (its ⋯ button, or a right-click on the card) sets any review status and deletes the thread. A page's count says how many comments are written on it. New commands
comment:status-accepted,comment:status-rejected,comment:status-cancelled,comment:status-completed,comment:status-none,comment:delete-threadand thecomment-itemmenu, and the iconscircleCheckandsend. -
#918 by @bobsingor – The grant prompt (
grantPromptin every locale) asks for a grant's passphrase or its questions. -
#920 by @bobsingor – Marquee Zoom in the zoom menu: the
tool:zoomcommand switches to thezoomtool. Drag a box to zoom to it, or click to zoom in (Alt-click: out). It has labels in every built-in language. -
#923 by @bobsingor – The rows of buttons at the top of the thumbnails, outline and attachments panels are bars of the layout, named after their panel:
thumbnails(groupsedit,more,history),outline(filter,items) andattachments(count,files). They fit the panel's width like any bar, with what doesn't fit in a "More" menu, so a narrow panel no longer cuts off undo and redo, andadd,removeandreplacechange them. The thumbnails bar also has insert from a file, duplicate and extract where there's room, in place of the page menu's button. The outline's filter and the attachments' count are{ custom: 'outline-filter' }and{ custom: 'attachments-count' }. Any panel, your own too, draws the bars placed in it withplace: { panel: id }. -
#923 by @bobsingor –
FullViewertakes afetchprop, which every document at a URL downloads with. -
#923 by @bobsingor – The viewer speaks Swedish (
sv) and Traditional Chinese (zh-TW), for fifteen languages. Readers of Traditional Chinese (zh-TW,zh-HK,zh-MO,zh-Hant) now see it instead of English. Both are machine-translated in the terms Adobe Acrobat uses in each language, are waiting for a native speaker's review, and load the first time the viewer shows them.stringsan app gives forsvorzh-TWnow change the built-in language's words, and the words it leaves out show in that language instead of English.
-
#923 by @bobsingor – The bar for selected annotations sits below them, and above them when there's no room below. Its menus and the link editor open on the same side.
-
#923 by @bobsingor – The default bars make room in the order their groups say, now that a group's
importanceis its items' too. In a narrow main bar, pan and pointer are the first buttons to go into the "More" menu, then the View menu and zoom, and the document menu, thumbnails, search and comments never do. So a phone keeps the mode tabs, folded behind a chevron, beside search and comments. In the annotate, shapes and form bars, the text tools, polygons and the less common fields go before undo and redo. The measuring tools, and delete in the annotation bar, stay in their bars. An item you add withlayout.add(item, { group })takes that group's importance unless you give it its own. -
#923 by @bobsingor – The thumbnails panel has a scrollbar like the pages', and room above the first thumbnail: 20 px around the thumbnails, where the panel's narrow width used to give them the 4 px phone gutter.
plugins.thumbnailscan still setpaddingandresponsive. -
#923 by @bobsingor – Full Screen (
view:fullscreen) fills the screen with the viewer's own box instead of the whole page, and leaves the page's own full screen alone. The viewer stays where the page put it, and nothing on the page moves or changes. In a frame withoutallow="fullscreen"the button isn't there, since the browser lets nothing in such a frame go full screen. Where the browser has no full screen for elements (Safari on iPhone) or refuses it, the viewer covers the whole window instead, until the button or Escape ends it; a viewer that already is the whole window there has no Full Screen. The button follows Escape and the page's ownrequestFullscreen()on the<embedpdf-viewer>element, shows thefullscreenExiticon while the viewer fills the screen, and dialogs and sheets open in the viewer stay on top as it goes full screen. -
#923 by @bobsingor – The
zoom:inandzoom:outcommands are off at the zoom limits, and the toolbar's − and + buttons show it: they grey out atmaxZoomandminZoom, set underplugins.stage. Zooming in and out steps through round levels (100%, 125%, 150%, 200% and so on).
- #923 by @bobsingor – The
fetchconfig key: your ownfetchfor every document at a URL (src,documentsand{ kind: 'url' }in code), to add headers or cookies. It follows its prop, aselement.fetchtoo: the next download uses a new one, and the viewer stays. A server that answers 401 or 403 shows in the tab as not allowed, and Try again callsfetchagain.
- #923 by @bobsingor –
<PDFViewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its prop, likesrc.
- #923 by @bobsingor –
<PDFViewer fetch>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its prop, likesrc.
- #923 by @bobsingor –
<PDFViewer :fetch>: your ownfetchfor documents at a URL, to add headers or cookies. It follows its prop, likesrc.
- #923 by @bobsingor –
canDelete()answers for everything a delete takes. Deleting an annotation deletes its replies, review states, grouped parts and popups with it, andcanDelete()(on the plugin and oncomments) now checks each of them: the annotation as before, and what goes with it by itslockedflag and the permission to delete it. A delete button no longer offers a delete the engine refuses (a reply someone else wrote, under a grant that deletes only your own), or deletes a locked reply along with its parent.comments.canDeleteThread()andcomments.deleteThread()use the same check, so a thread with a review status can be deleted again: the hidden annotation a status is stored in no longer blocks it.
v16.5.0-canary.33
- Stop patching error inspection if source maps are disabled: #93364
- Turbopack: store ChunkGroupInfo::chunk_groups as a Vec: #100935
- [test] Fix flaky file-system-cache-clock tests: #100946
- [ci] Fix test axis fixtures never running their off state in CI: #100912
- Define the review agent's team as the owners in review/OWNERS: #100927
Huge thanks to @lukesandberg, @unstubbable, @eps1lon, and @acdlite for helping!
@astrojs/starlight@0.42.8
-
#4309
3490c80Thanks @athulsreekumar! - Fixes autogenerated sidebar groups omitting directories whose names matchObject.prototypeproperties, such asconstructorortoString -
#4290
bf93823Thanks @RaphaelFakhri! - Fixes missing last-updated dates in production builds for pages whose file path contains special characters -
#4295
af9557eThanks @delucis! - Fixes a formatting issue in some error messages impacting projects with Zod ≥4.5 installed -
#4299
a103f38Thanks @clean99! - Fixes empty sidebars when autogenerating entries from the docs root directory usingdirectory: ''
r187
https://github.com/mrdoob/three.js/wiki/Migration-Guide#186--187 https://github.com/mrdoob/three.js/milestone/100?closed=1
- Global
- Remove code deprecated in r177. #34517 (@linbingquan, @Mugen87)
- AnimationUtils
- Fix cubic spline additive reference sampling. #34860 (@gjija)
- Backend
- Keep occlusion query results per camera. #35066 (@arodic, @claude)
- BatchedMesh
- Clarify geometry compatibility requirements. #34675 (@MikeFernandez-Pro, @Mugen87)
- Fix sort corruption. #34828 (@Mugen87)
- Make shadows more node compatible. #34829 (@Mugen87)
- Fix draw ranges after
setGeometrySize(). #34983 (@MikeFernandez-Pro) - Fix memory leak of previous matrix data. #35272 (@Mugen87)
- Bindings
- Avoid recreating initial texture bind groups. #34657 (@mrdoob)
- Avoid cache key allocations in
_update(). #35120 (@Snuble-bot, @Mugen87, @claude) - Avoid cache key collision with similar IDs. #35226 (@Mugen87)
- Box3
- Use BatchedMesh bounds in precise mode. #34863 (@gjija)
- BufferAttribute
- (Interleaved)BufferAttribute: Optimize normalized data access. #34992 (@zeux)
- BufferGeometry
- Finalize tangents once per vertex. #34624 (@mrdoob)
- Color
- Accept negative hues and decimal percentages in
setStyle(). #34849 (@ewraj)
- Accept negative hues and decimal percentages in
- ColorManagement
- Fix order of color space conversion matrix. #34952 (@michaelcrosato, @claude)
- CompressedTexture
- Default
mipmapsto an empty array. #35081 (@arodic, @Mugen87, @claude)
- Default
- Core
- Make
copy()methods more robust. #34691 (@Mugen87) - Fix reversed depth function mapping. #35264 (@WilliamLiu-1997)
- Make
- Curves
- Invalidate cached lengths when copying or deserializing. #35118 (@dewanshshekhar, @Mugen87)
- EdgesGeometry
- Use a Map for edge lookups. #34805 (@sarojpahi)
- FramebufferTexture
- Fix
sourcecopy. #34636 (@Mugen87)
- Fix
- Geometries
- Add missing delete. #34648 (@Mugen87)
- Inspector
- Auto-render non-texture nodes in the Viewer and fix
toInspector()registration. #35253 (@sunag)
- Auto-render non-texture nodes in the Viewer and fix
- InterleavedBuffer
- Fix clone() and toJSON() of views into a shared array buffer. #34755 (@vincentfretin, @claude)
- KeyframeTrack
- Fix
shift()ignoring tangent data. #34951 (@kwy404)
- Fix
- LatheGeometry
- Normalize the normal of the last point. #35153 (@spokodev)
- LightProbe
- Fix JSON round trips. #34859 (@gjija, @Mugen87)
- LightShadow
- Clean up. #35213 (@Mugen87)
- Line
- Line, Points: Copy morph targets in
copy(). #35147 (@Enesuygurs)
- Line, Points: Copy morph targets in
- Line3
- Fix closest point for degenerate segments in
distanceSqToLine3(). #34673 (@kwy404)
- Fix closest point for degenerate segments in
- Math
- Improve tree-shaking of unused classes. #34619 (@mrdoob)
- MeshPhysicalMaterial
- Add EON rough diffuse BRDF. #34379 (@Ryan-G7, @Mugen87)
- Add iridescence thickness min/max properties. #35039 (@Mugen87)
- Object3D
- Honor pivot when decomposing local matrices. #34811 (@gjija, @mrdoob)
- ObjectLoader
- Fix loading of BatchedMesh available ids. #34652 (@gjija, @Mugen87)
- Restore
SpotLight.map. #35128 (@HEOJUNFO, @claude)
- PMREM
- Restore minimal roughness, improve roughness ramp. #34645 (@Mugen87)
- PMREMGenerator
- Replace the CubeUV atlas with cube render targets. #34585 (@mrdoob, @claude)
- RenderContexts
- Simplify comment. 121e626bb5d58ddd4f1d975010997f73688e665f (@Mugen87)
- Add the camera type to the state key. #35123 (@arodic, @claude, @sunag)
- Renderer
- Fix edge cases in
dispose(). #34765 (@Mugen87) - Improve canvas target disposal. #34969 (@Mugen87)
- Track the source material in override passes. #35232 (@mrdoob)
- Fix edge cases in
- Renderers
- Fix polygon offset with reveresed depth buffer. #34606 (@Mugen87)
- Preallocate wireframe indices. #34621 (@mrdoob)
- Fix blit region in
copyTextureToTexture(). #35167 (@batuhansalkim) - Ignore logarithmic depth buffer when reversed depth buffer is enabled. #35276 (@mrdoob, @claude)
- RendererUtils
- Preserve additional renderer state. #35233 (@kemchenj)
- RenderObject
- Use
hashArray()ingetDynamicCacheKey(). #34553 (@Mugen87) - Fix dispose listener for geometries. #34605 (@Mugen87)
- Detect missing color change for instanced meshes. #34752 (@Mugen87)
- Add uv
channelto material cache key. #34773 (@Mugen87) - Exclude deprecated
iridescenceThicknessRange. 2b7c79ef262c5f929d6170ebbdcc7cf2e0ee6742 (@Mugen87) - Fix handling of
blendingandcombine. #35113 (@a411919924, @Mugen87, @claude)
- Use
- RenderObjects
- Improve geometry check. #34799 (@Mugen87)
- RenderTarget
- Give each attachment its own
TextureSource. #34970 (@ycw, @Mugen87)
- Give each attachment its own
- Shadows
- Fix point light shadow seams. #35267 (@mrdoob, @Mugen87)
- Skeleton
- Take ownership of previous data. #34976 (@Mugen87)
- SkinnedMesh
- Avoid iterator spread in applyBoneTransform(). #34810 (@sarojpahi)
- Sprite
- Serialize
center. #35162 (@mkantautas)
- Serialize
- StorageBufferAttribute
- Add support for disposing storage buffer attributes. #34664 (@gkjohnson)
- Fix feedback on disposal. #34666 (@gkjohnson, @Mugen87)
- Texture
- Add
mipmapsAutoUpdate. #34630 (@Mugen87)
- Add
- Textures
- Return
generationkey inupdateTexture(). #34659 (@Mugen87)
- Return
- TextureSource
- Never write
undefinedinto the target vector in getSize(). #34615 (@madisonrickert, @Mugen87, @claude)
- Never write
- Triangle
- Fix
closestPointToPoint()returningNaNwhenaequalsb. #34695 (@kwy404, @Mugen87)
- Fix
- WebGLBackend
- Fix single-layer array render targets. #34510 (@WilliamLiu-1997, @Mugen87)
- Clear caches in
dispose(). #34602 (@Mugen87) - Improve
dispose(). #34688 (@Mugen87) - Fix clear() with a disabled color write mask. #34729 (@drakeo338, @Mugen87)
- Fix FloatType depth textures with MSAA. #34768 (@WilliamLiu-1997)
- Fix MSAA with default depth textures. #34927 (@WilliamLiu-1997)
- Use correct depth texture for clear. #34928 (@Mugen87)
- Move
transformsandattributestoComputePipeline. #35009 (@Mugen87)
- WebGLProgram
- Remove unreachable shader chunk alias fallback. ce84e0dbeb795869ec6876599c184df4a294d5c1 (@mrdoob)
- WebGLPrograms
- Remove undefined morphAttributeCount cache-key field. eb955c1ef3bd7d421c4ed237887b75456dc047e1 (@mrdoob)
- Fix material.precision leaking into other materials. #34818 (@mrdoob)
- WebGLRenderer
- Only apply pixel ratio to the canvas in setViewport() and setScissor(). #34460 (@mrdoob, @claude)
- Support
FrustumArray. #34275 (@Mugen87) - Improve geometry disposal. #34529 (@Mugen87)
- Improve texture disposal. #34530 (@Mugen87)
- Reuse binding points for uniform groups. #34669 (@gkjohnson)
- Align shadow camera layer handling to
WebGPURenderer. #34670 (@Mugen87) - Correctly init default depth textures. #34687 (@Mugen87)
- Add
getProgramVariant(). #34739 (@Mugen87) - Support
needsDepthTextureinsetEffects(). #34858 (@mrdoob) - Fix PCF shadow bias with reversed depth. #34892 (@WilliamLiu-1997)
- Move
frameincreament before project. #35103 (@Mugen87) - Fix color morphing regression. #35140 (@Mugen87)
- Fix instanced attributes viewing a buffer attribute. #35227 (@sunag)
- WebGLState
- Reset blending cache in
setMRTBlending(). #34990 (@yujiaxu-ops, @Mugen87, @claude)
- Reset blending cache in
- WebGLTextures
- Fix point light shadow disposal. #34522 (@Mugen87)
- Don't invalidate depth for
DRAW_FRAMEBUFFER. #35155 (@Mugen87)
- WebGLTextureUtils
- Fix
copyTextureToBuffer()with red, RG and integer formats. #34852 (@mrdoob) - Fix source layer detection in
copyTextureToTexture(). #35111 (@HEOJUNFO, @claude)
- Fix
- WebGLUniformsGroups
- Fix uniforms with array values. #34889 (@mrdoob)
- Fix std140 layout of arrays of uniforms. #34890 (@mrdoob)
- WebGPUBackend
- Skip generateMipmaps when the framebuffer copy dest has no mip chain. #34582 (@204a)
- Fix widening of
uint16indices in standard use case. #34734 (@cmhhelgeson, @Mugen87) - Fix ArrayCamera depth clear value with reversed depth. #34804 (@mrdoob, @claude)
- Recreate array camera layer descriptors when the depth texture changes. #34850 (@mrdoob)
- Fix
copyFramebufferToTexture()outside of render passes. #35133 (@mrdoob, @Mugen87)
- WebGPUBindingUtils
- Select depth aspect for sampled depth textures. #34584 (@WilliamLiu-1997)
- WebGPURenderer
- Fix render target texture dispose crash. #34496 (@Mugen87)
- Textures never removes dispose listeners. #34368 (@wcandillon, @Mugen87, @claude)
- Align
dispose()for geometries. #34516 (@Mugen87) - Ensure valid state in
compileAsync(). #34506 (@Mugen87) - Properly delete shader programs. #34601 (@Mugen87)
- Refactor node attribute disposal. #34603 (@Mugen87)
- Improve VAO caching and disposal. #34610 (@Mugen87)
- Replace "addLight" with "lightNode" reference. #34622 (@gkjohnson)
- Unify handling of interleaved attributes. #34690 (@Mugen87)
- Derive
viewportandstencilflags from render context. #34692 (@Mugen87) - Introduce
ProxyNodeMaterial. #34684 (@sunag) - Refactor render cache key. #34726 (@Mugen87)
- Reset
timestampWriteswith disabledtrackTimestamp. #34760 (@Mugen87) - Add missing
DEPTH32F_STENCIL8, fix default depth texture. #34803 (@Mugen87) - Support depth-only render targets. #34782 (@mrdoob, @Mugen87, @claude)
- Release previous pipeline and programs when switching to cached ones. #34821 (@mrdoob)
- Add
_updateDispatchSize(). #34871 (@Mugen87) - Clear texture update ranges after upload. #34919 (@MikeFernandez-Pro, @Mugen87)
- Throw an error if "count" and "dispatchSize" are used together. #34813 (@gkjohnson, @sunag)
- Fix
scissorTestcheck. #35000 (@Mugen87) - Always bind struct storage buffers as arrays. #34807 (@gkjohnson)
- Compile pipelines in parallel in
compileAsync(). #34816 (@sunag) - Fix shader reuse for instanced meshes. #34872 (@EdoardoLuciani, @mrdoob, @sunag)
- Preserve material side in
compileAsync(). #35016 (@mrdoob) - Share node builds across call depths. #35014 (@mrdoob, @Mugen87)
- Support
dispose()for all buffer attributes. #34685 (@sunag) - Support uncompressed data in compressed textures. #35082 (@arodic, @Mugen87, @claude)
- Support
CompressedCubeTexture. #35083 (@arodic, @Mugen87, @claude) - Share builds between instanced meshes with
referenceAttribute(). #35007 (@mrdoob, @sunag) - Fix output camera initialization when starting in XR. #35126 (@salmanmkc, @Mugen87)
- Fix disposed geometries with static objects and bundles. #35105 (@sunag, @Mugen87)
- Fixed disposed PMREM. #35185 (@Mugen87)
- Cull ArrayCamera draws per sub-camera. #35164 (@bhouston, @Mugen87, @claude)
- Merge consecutive
BatchedMeshdraws that share a geometry range. #35259 (@MikeFernandez-Pro, @Mugen87) - Rename
ProxyNodeMaterial->NodeMaterialInstance. #35269 (@sunag) - Start the internal animation loop on first use. #35278 (@mrdoob, @claude)
- Don't start the animation loop in
setAnimationLoop( null ). #35279 (@mrdoob, @claude)
- WebGPUTextureUtils
- Fix getColorBuffer() cache check. #34826 (@mrdoob)
- Fix row padding in
copyTextureToBuffer(). #34851 (@mrdoob)
- WebXRController
- Use quaternion when decomposing pose matrices. #34817 (@mrdoob)
Nodes
- Nodes
- Make build more efficient. #34531 (@Mugen87)
- Unify temporary node caching in
Node. #34607 (@sunag) - Use named MathUtils imports. #34625 (@mrdoob)
- Delegate variable statements to NodeBuilder. #34617 (@sunag)
- Fix
lightViewPosition()with ArrayCamera. #34912 (@bhouston, @claude)
- AttributeNode
- Allow the context to provide attribute values. #35054 (@sunag)
- BasicEnvironmentNode
- Limit env map rotation to
envNode. #34570 (@Mugen87)
- Limit env map rotation to
- Batch
- Only update the previous matrices texture when the matrices change. #35057 (@HEOJUNFO, @Mugen87, @claude)
- Recreate the previous matrices texture when the instance count changes. #35075 (@HEOJUNFO, @Mugen87, @claude)
- BitcountNode
- Return the input type for zero in the WebGL fallback. #35217 (@HEOJUNFO, @claude)
- BumpMapNode
- Add
normalNodeparameter. #35101 (@MikeFernandez-Pro)
- Add
- Camera
- Isolate ArrayCamera uniforms across shader builders. #34916 (@bhouston)
- ClippingNode
- Fix clipping with ArrayCamera. #35096 (@bhouston, @Mugen87)
- EnvironmentNode
- Resolve environment textures before rendering. #35036 (@sunag)
- getParallaxCorrectNormal
- Keep axis-aligned directions finite. #35049 (@bhouston, @Mugen87)
- GLSLNodeBuilder
- Fix buffer name collisions between stages. #35012 (@mrdoob)
- Fix
generateTextureLevel()with depth textures. #35136 (@Mugen87) - Fix uniform block lookups in shared bind groups. #35222 (@mrdoob, @claude)
- LightProbeNode
- Update light probe uniforms in the render group. #35060 (@arodic, @claude)
- LightsNode
- Honor light version for shadow casting lights. #34949 (@Mugen87)
- Fix cache key of shadow casting lights before the first build. #35019 (@mrdoob)
- MaterialNode
- Fix clearcoat roughness texture channel. #34564 (@hybridherbst)
- Node
- Cache node overrides per context. #35050 (@sunag)
- NodeBuilder
- Move shared bind groups cache into Bindings. #34707 (@Mugen87)
- Remove
getSharedDataFromNode(). #34857 (@mrdoob)
- NodeMangager
- Fix stack trace in async builds. #34727 (@Mugen87)
- NodeMaterial
- Fix
copy(). #34766 (@Mugen87) - Add
emissiveNodeto lambert, phong and toon materials. #35059 (@MikeFernandez-Pro)
- Fix
- NodeMaterialObserver
- Force full refresh when the output target changes. #34968 (@arodic)
- Force full refresh with custom fog and environment nodes. #34996 (@arodic)
- Clean up. c5e5061ed040ff74cef33b96bf84ef16f7282998 (@Mugen87)
- Add missing material properties. #35022 (@Mugen87)
- Track texture uv transforms. #35062 (@arodic, @Mugen87, @claude)
- Improve output target ceck. #35156 (@Mugen87)
- Revert
fogNodeandenvironmentNodetracking. #35221 (@Mugen87)
- NodeSampler
- Fix
clone(). #35094 (@Mugen87)
- Fix
- NodeStorageBuffer
- Fix stale attribute references. #34939 (@WilliamLiu-1997)
- NodeUniformBuffer
- Fix stale attribute references. #34941 (@Mugen87)
- NodeUtils
- Add
mergeContext()to merge override nodes of nested contexts. #35108 (@sunag)
- Add
- OverrideContextNode
- Add
shaderStageparameter tooverrideNodes(). #35109 (@sunag)
- Add
- PassNode
- Compile with the render configuration in
compileAsync(). #35168 (@sunag)
- Compile with the render configuration in
- PhysicalLightingModel
- Fix specular intensity in direct lighting. #34764 (@EdoardoLuciani)
- PointShadowNode
- Adhere CubeCamera conventions. #34899 (@Mugen87)
- Loop over shadow filter taps. #35186 (@bhouston)
- RangeNode
- Use
hash()instead of per-object buffers. #34897 (@mrdoob) - Make random values independent of node creation order. #34920 (@sunag, @mrdoob)
- Use
- RectAreaLightNode
- Fix lighting with ArrayCamera. #35095 (@bhouston, @Mugen87)
- ReflectorNode
- Fix reflection with view offset. #34917 (@scottcampbelldata)
- Fix
bounces: falsewith multiple cameras. #34977 (@arodic)
- RenderOutputNode
- Make
premultipliedAlphaoptional. #34948 (@Mugen87)
- Make
- RTTNode
- Keep the renderer's clear color. #34855 (@HEOJUNFO, @Mugen87, @claude)
- ShadowBaseNode
- Remove unused velocity flag. #34854 (@mrdoob)
- ShadowFilterNode
- WebGLRenderer, WebGPURenderer: Fix PCF radius for non-square shadow maps. #35018 (@mrdoob)
- Create the PCF shadow uniforms once per shadow. #35047 (@sunag)
- ShadowNode
- Render shadows with needsUpdate only once. #34794 (@mrdoob, @claude)
- Fix shadows with reverse depth in first frame. #34801 (@Mugen87)
- Update shadows at least once. #35093 (@Mugen87)
- Avoid redundant scene matrix updates. #35203 (@mrdoob)
- SpriteNodeMaterial
- Use the center of the rendered sprite. #35064 (@arodic, @claude)
- StorageBufferNode
- Better support
mat2with WebGL. #34595 (@Mugen87)
- Better support
- TextureNode
- Simplify and optimize uniforms. #34552 (@Mugen87)
- Propagate comparison sampling to the shared binding. #34555 (@dswhy, @Mugen87)
- Detect filter and type changes. #34556 (@Mugen87)
- Allow for non-mergeable uniforms. #34450 (@Mirei3D)
- Fix int/float arithmetic regression. #34898 (@Mugen87)
- Add
getTextureGradient()context to provide analytic uv gradients. #35121 (@sunag)
- ToneMappingFunctions
- Fix ACES Filmic fit denominator. #35110 (@HEOJUNFO, @claude)
- TSL
- Fix
attributeArray()buffer count usage. #34591 (@Mugen87) - Fix scalar constant caching. #34618 (@mrdoob)
- Enable caching for reused type conversions. #34633 (@sunag)
- Use local declarations for cached values and variable intents. #34637 (@sunag)
- Share and vectorize bicubic filter calculations. #34655 (@mrdoob)
- Share dielectric scattering in indirect lighting. #34656 (@mrdoob, @Mugen87)
- Fix per-component
select(). #34425 (@bhouston, @sunag) - Fix scope and reuse of function calls containing loops. #34643 (@sunag)
- Share EON directional albedo in indirect lighting. #34660 (@mrdoob, @Mugen87)
- Add type promotion in operators and math functions. #33695 (@shotamatsuda, @sunag)
- Fix getViewPosition() with WebGL reversed depth. #34724 (@WilliamLiu-1997)
- Add function layout to IBLSheenBRDF. #34824 (@mrdoob, @claude)
- Simplify function layouts and add layouts to pure functions. #34843 (@sunag)
- Optimize function layouts with include deduplication and default parameters. #34848 (@sunag)
- Make nodes their own variable intents and improve build performance. #34815 (@sunag)
- Fix external variables being generated twice when used in a branch. #35067 (@sunag)
- Add color morphing. #35141 (@Mugen87, @sunag)
- Fix parameter length of
quadBroadcast(). #35218 (@HEOJUNFO, @Mugen87, @claude) - Build
before()nodes only in the setup stage. #35245 (@sunag)
- Fix
- TSLCore
- Move the swizzle cache to a
WeakMap. #35251 (@sunag)
- Move the swizzle cache to a
- UniformArrayNode
- Fix
mat2usage in WebGL. #34587 (@Mugen87)
- Fix
- ViewportDepthNode
- Rename
getProjectionDepth()toprojectionDepth(). #35230 (@Mugen87)
- Rename
- WGSLNodeBuilder
- Add Directives to Fragment Stage and Update NodeBuilder. #34513 (@cmhhelgeson, @Mugen87)
- Support
gather()with multisampled textures. #34609 (@RenaudRohlinger, @claude) - Honor read-write storage textures in the fragment stage. #34923 (@HEOJUNFO, @Mugen87, @claude)
- Fix
grad()with unfilterable textures. #35169 (@sunag)
Addons
- Addons
- Avoid unnecessary regex backtracking. #35184 (@mrdoob)
- 3DMLoader
- Fix authentication and custom header forwarding to internal asset loaders. #35024 (@bhouston)
- BitonicSort
- Dispatch a complete sort in one compute pass. #35275 (@subashc2023)
- BufferGeometryUtils
- Validate morph attributes in mergeGeometries(). #34532 (@cuishuang)
- Support interleaved data in
mergeVertices(). #34665 (@Mugen87) - Match tangent precision to quantized normals in
computeMikkTSpaceTangents(). #34714 (@mrdoob, @Mugen87, @claude) - Fix
deinterleaveGeometry()with morph attributes. #34827 (@MikeFernandez-Pro) - Add
remapAttribute(). #34945 (@bhouston) - Preserve
morphTargetsRelativeinmergeGeometries(). #35177 (@HEOJUNFO, @Mugen87) - Fix group count of Infinity in mergeGroups(). #35258 (@shan3520, @Mugen87)
- CCDIKSolver
- Improve clamp. #35023 (@Mugen87)
- ClusteredLighting
- Add spot lights and WebGL2 fallback support. #34978 (@sunag)
- ColladaLoader
- Fix n-gon attribute triangulation. #34862 (@gjija, @Mugen87)
- Fix sRGB to linear conversion of vertex colors. #35129 (@HEOJUNFO, @claude)
- ColorConverter
- Fix HSV conversion at black and white boundaries. #34806 (@dhairyajangir)
- CSMShader
- Sync
lights_fragment_beginwith the core chunk. #35248 (@subashc2023)
- Sync
- DDSLoader
- Align data length computation to DirectXTex. #34908 (@Mugen87)
- DRACOLoader
- Fix loop bound when repacking unaligned attributes. #35037 (@cherenkov, @claude)
- EXRExporter
- Fix zip partial block. #34964 (@richardmonette)
- Add RLE compression. #34972 (@richardmonette)
- Add PIZ compression. #34979 (@richardmonette)
- Add textureIndex option for MRT render targets. #35207 (@repalash)
- EXRLoader
- Remove duplicate half-float decoder. #34574 (@bhouston)
- Use lookup table for DWA linear conversion. #34573 (@bhouston)
- GCodeLoader
- Fix extrusion detection in relative mode. #34895 (@scottcampbelldata, @Mugen87)
- Fix parsing of files with CRLF line endings. #35171 (@L4XB, @Mugen87)
- GLTFExporter
- Fix orthographic camera xmag and ymag. #35215 (@HEOJUNFO, @Mugen87, @claude)
- GLTFLoader
- Fix GLTF loader credential forwarding to buffers and bitmap textures. #35025 (@bhouston)
- Parse embedded KTX2 images without a Blob. #35193 (@Construkted-Reality, @Mugen87, @claude)
- GTAOPass
- Remove combined depth and normal texture support. #34836 (@bhouston, @Mugen87)
- Fix external buffer handling. #34831 (@bhouston)
- IESLoader
- Apply photometric factors linearly instead of squaring candela. #34554 (@dswhy)
- IESLoader, IESSpotLight: Add support for 2D & symmetric profiles. #34626 (@gkjohnson)
- Inspector
- Remove Circular Dependency. #34592 (@cmhhelgeson)
- Fix CPU time double counting and FPS with skipped frames. #35070 (@sunag)
- Fix number input drag interfering with text selection. #35117 (@MikeFernandez-Pro)
- Truncate long parameter labels. #35206 (@MikeFernandez-Pro)
- Fix overdraw render mode. #35255 (@sunag)
- Fix mini panel checkbox and collapsed folder spacing. #35252 (@sunag)
- Fix color grading exports and add example. #35257 (@sunag)
- Fix GPU time display and triangle count for indirect draws. #35256 (@sunag)
- JXLLoader
- Add native HDR image loading. #35015 (@bhouston, @Mugen87)
- KTXLoader
- Fix mipmap size read. #34905 (@Mugen87)
- Correctly round down mips. #34906 (@Mugen87)
- LDrawLoader
- Optimize smoothNormals() by fixing quadratic time complexity. #35200 (@AvaLovelace1)
- Fix null conditional edge material for unknown colours. #35219 (@3a632062, @claude)
- LightMapper
- Diffuse light baker, works with Light Probe and VXGI. #34991 (@bhouston)
- Clean up demo, add VGXI gather function. #35183 (@Mugen87)
- LightProbeGrid
- Batch probe capture with ArrayCamera for ~4x faster bakes. #34909 (@bhouston, @claude)
- Project SH in row blocks. #35150 (@bhouston, @claude)
- Faster multi-bounce (and default examples to use multi-bounce). #35145 (@bhouston, @Mugen87)
- Place probes at the center of their cells. #35265 (@mrdoob)
- Only sample the last grid that contains the fragment. #34798 (@mrdoob, @Mugen87, @claude)
- LightProbeGridWebGL
- Extend from
Light. #34744 (@Mugen87)
- Extend from
- LineMaterial
- Fix world-unit extrusion with orthographic cameras. #34540 (@diarmidmackenzie, @Mugen87)
- Fix depth shifting. #35139 (@Mugen87)
- Loaders
- Add priority and HTTP cache controls. #34936 (@bhouston, @Mugen87)
- Lut
- Read the end colors of a color map in linear space. #35181 (@L4XB, @Mugen87)
- LUT3dlLoader
- Prevent invalid bit depth values. #34903 (@Mugen87)
- LUTCubeLoader
- Fix domain regex. #34900 (@Mugen87)
- MaterialXDocument
- Clean MaterialX loader + compiler. #34523 (@bhouston)
- MaterialXLoader bug fix: Support handlers that resolve with a Texture. #34575 (@bhouston, @Mugen87)
- MaterialXLoader bug fix: consistent and correct nodedef defaults. #34593 (@bhouston)
- MaterialXLoader
- Only resolve loading promises when all sub-resources are loaded. #34439 (@bhouston)
- Support displacement nodes (both scalar and vector). #34576 (@bhouston)
- Match output-less
separate2/3/4behaviour with MaterialX. #34835 (@hybridherbst) - Add
setNodeResolver(). #34832 (@hybridherbst) - Support
hsvadjust,facingratioandtriplanarprojection. #34986 (@hybridherbst) - Support
surface_unlit. #34987 (@hybridherbst) - Support nodes implemented by node graphs. #34988 (@hybridherbst)
- Forward texture request configuration. #35026 (@bhouston)
- MikkTSpace
- Replace WASM with JavaScript. #34623 (@mrdoob)
- Speed up tangent generation. #34713 (@mrdoob, @claude)
- NRRDLoader
- Fix parsing of the last header field. #35178 (@HEOJUNFO, @Mugen87)
- NURBSCurve
- Fix
clone(). #34542 (@Dev-next-gen)
- Fix
- OBB
- Fix plane distance sign in intersection tests. #35195 (@Shubham-Padkonde, @Mugen87)
- Fix applyMatrix4() with rotated boxes and negative determinants. #35261 (@Enesuygurs, @Mugen87)
- OBJExporter
- Support export of vertex colors in meshes. #35131 (@shan3520)
- Fix export of indexed lines. #35154 (@nk-batman21, @Mugen87)
- OBJLoader
- Parse l and p statements correctly. #35006 (@shan3520, @Mugen87)
- Octree
- Preserve configured subdivision limits. #34814 (@dhairyajangir)
- Fix sphere collisions at triangle edges. #35196 (@Shubham-Padkonde, @Mugen87)
- Project box contacts toward the triangle plane. #35197 (@Shubham-Padkonde, @Mugen87)
- Correct line segment to line segment closest point calculation. #35216 (@shan3520)
- OrbitControls
- Reset state when the one-finger touch action is disabled. #34651 (@gjija)
- Fix
zoomToCursorwhen dollying with the mouse. #34856 (@mrdoob) - Move away from
getRootNode(). #34973 (@Mugen87)
- PCDLoader
- Respect COUNT when locating ASCII fields. #34809 (@dhairyajangir, @Mugen87)
- Allow more separation styles. #34901 (@Mugen87)
- PDBLoader
- Fix coordinate field slices. #34896 (@scottcampbelldata, @Mugen87)
- PLYExporter
- Skip Points without position attributes. #34762 (@somasoil, @Mugen87)
- Fix export of quantized attributes. #35192 (@nk-batman21, @Mugen87)
- PLYLoader
- Fix colors, tex coords and indices for quads. #34649 (@Mugen87)
- Move custom data parsing. #34911 (@Mugen87)
- PVRLoader
- Fix mips size computation. #34910 (@Mugen87)
- RapierPhysics
- Update Rapier to 0.21.0 and use jsDelivr CDN. #35223 (@linbingquan)
- Reflector/ReflectorNode
- Better handle asymetric projections. #34929 (@Mugen87)
- SceneUtils
- Keep
normalizedincreateMeshesFromMultiMaterialMesh(). #35224 (@mmporong, @Mugen87)
- Keep
- STLLoader
- Fix
COLOR=parsing. #34902 (@Mugen87)
- Fix
- SVGLoader
- Fix stylesheet parsing. #34775 (@Mugen87)
- Improve path parsing. #35005 (@Mugen87)
- Support
hrefinuseelements. #35165 (@nk-batman21, @Mugen87)
- SVGRenderer
- Use the target of directional lights for the light direction. #35208 (@repalash)
- TGALoader
- Fix color palette index. #34907 (@Mugen87)
- TSL
- More usage of
EPSILON. #35063 (@Mugen87)
- More usage of
- unwrapUVs
- Real-time generator of UV atlases for lightmap and normal baking. #34944 (@bhouston, @Mugen87)
- USDAParser
- Avoid per-character string building in preprocessing. #35020 (@cherenkov)
- Keep time samples at negative time codes. #35172 (@L4XB, @Mugen87)
- Keep comment markers inside strings and asset paths. #35182 (@L4XB, @Mugen87)
- USDComposer
- Correct the color space setting in to be linear sRGB. #34644 (@Jeggery)
- USDLoader
- USDLoader bug: Load texture images through ImageLoader. #35010 (@bhouston)
- VXGI
- Mitigate light bleeding. #35160 (@Mugen87)
- VXGIVolume
- Improve disposal. #34933 (@Mugen87)
- WebGPURenderer
- Introduce
StandardDrawingPipeline,MeshletDrawingPipelineandVisibilityBufferDrawingPipeline. #35191 (@sunag)
- Introduce
- XREstimatedLight
- Remove session listeners in
dispose(). #35106 (@salmanmkc, @Mugen87)
- Remove session listeners in
Addons / Nodes
- TSL
- Add lens dirt TSL function. #34715 (@Mugen87)
- Add isBackgroundDepth() and use it in post processing nodes. #34792 (@mrdoob, @claude)
- Remove redundant
nodeObject()calls. #34841 (@sunag)
- ClusteredLightsNode
- Improve
dispose()and code structure. #34930 (@Mugen87) - Preserve shader cache keys on first use. #35271 (@sunag)
- Improve
- DynamicLightsNode
- Refactor to restore lost support. #34774 (@Mugen87)
- Identify batched lights by their class. #35004 (@yujiaxu-ops, @Mugen87, @claude)
- GTAONode
- Fix false self-occlusion on distant slanted surfaces. #34718 (@EdoardoLuciani, @Mugen87)
- Fix view direction for orthographic cameras. #35073 (@martincollignon, @Mugen87, @claude)
- lensDirt
- Clean up. f9cb766057cc4ddeed220b44e158ab2531e9ffad (@Mugen87)
- LightProbeGrid
- Add a small margin to the bounds test. #35268 (@mrdoob)
- MaterialXLoader
- Return 0 instead of
NaNfrom burn and dodge. #34834 (@hybridherbst) - Vector and color noise now use one noise per channel. #34833 (@hybridherbst)
- Add
randomfloatandrandomcolor. #34866 (@hybridherbst)
- Return 0 instead of
- OutlineNode
- Outline Nodes: Honor
positionNode, improvedispose(). #34759 (@Mugen87)
- Outline Nodes: Honor
- PassNode/TAA
- Improve depth support. #34802 (@Mugen87)
- PixelationPassNode
- Simplify Code. #34543 (@cmhhelgeson, @Mugen87)
- SoftParticles
- Fix shader compilation with the WebGL backend. #35249 (@subashc2023)
- SpecularHelpers
- Fix the GGX tangent frame at the poles. #35237 (@bhouston)
- SSGINode
- Support resolution scale, add
getProjectionDepth(). #35229 (@Mugen87)
- Support resolution scale, add
- SSRNode
- Default to the full GGX sampling lobe. #35243 (@bhouston)
- Validate ray bounds and refined hits. #35238 (@bhouston, @Mugen87)
- Fix refinement regression. #35266 (@Mugen87)
- Clip traversal to the viewport and refine coarse hits. #35240 (@bhouston)
- Support material F0 and F90 in stochastic reflections. #35242 (@bhouston)
- TAAUNode
- TAA Nodes: Register inputs ahead of consumers. #34565 (@Mugen87)
- TemporalReprojectNode
- Update the depth pass before the node. #34823 (@mrdoob, @claude)
- Match the history depth type to the scene depth. #34793 (@mrdoob, @Mugen87, @claude)
- TileShadowNode
- Support reversed depth buffer. #34784 (@mrdoob, @claude)
- Honor shadow camera layers. #34785 (@mrdoob, @claude)
- Add depthType option. #34786 (@mrdoob, @claude)
- Use a depth-only render target. #34783 (@mrdoob, @claude)
- Sample only the tile that covers the fragment. #34787 (@mrdoob, @claude)
- TRAANode
- Fix previous-depth texture leak. #34873 (@EdoardoLuciani)
- WebGLNodesHandler
- Use the WebGL PMREM generator. #34628 (@mrdoob)
- Add missing
fogDensityuniform. #35250 (@subashc2023)
- WebGPURenderer
- Init render target textures differently. #35204 (@Mugen87)
Docs
- Line3: Fix at() return description. #34545 (@Hugohong258)
- TSL Guide: Fix parameter highlighting with parentheses in descriptions, plus edge case workaround. #34577 (@ycw)
- Add a
Static Propertiessubsection to improve discoverability. #34642 (@ycw) - Raycaster: Document batchId in Intersection. #34674 (@MikeFernandez-Pro)
- BatchedMesh: Clarify when to recompute bounding volumes. #34699 (@MikeFernandez-Pro, @Mugen87)
- Fix incorrect
@defaultvalues. #34700 (@ZainnQureshii, @claude) - Fix JSDoc for
TextureLoader.loadto indicate optional callbacks. #34730 (@ycw) - Opt embedded tweets out of personalization. #34795 (@ycw)
- LightUtils: Fix Documenation. #34845 (@cmhhelgeson)
- BatchedMesh: Fix
getGeometryRangeAt()description. #34847 (@MikeFernandez-Pro) - Fix typo in Object3D.js documentation. f2a1c255ac04bc532acf6335fcd3d992c8ba2f01 (@mrdoob)
- DirectRenderPipeline: Document MSAA restriction. #34954 (@Mugen87)
- NodeMaterial: Clarify
positionNodewith instancing. #34981 (@MikeFernandez-Pro) - SkyMesh: Improve docs. #34989 (@Mugen87)
- InspectorBase: fix renderer types in JSDoc. #35027 (@kercre123)
- Fix incorrect default values in JSDoc. #35034 (@ihsandeniz)
- SpriteNodeMaterial: Correct positionNode type in docs. #35071 (@SachchitNesarikar)
- Fix typo in ExtrudeGeometry section. #35180 (@andayers06)
- Fix callback parameters of
Object3DandInterpolant. #35231 (@mmporong, @claude) - TSL Guide: Update for r187. #35254 (@sunag)
- Fix minor issue in BokehPass inline documentation code sample. #35274 (@cool-user1481)
Manual
- Improve update guide. #34867 (@Mugen87)
- Fix broken links in WebXR and textures pages. #34958 (@SatvikMishra08)
- Clarify replacing geometries when buffers outgrow capacity. #35104 (@xlb3055, @Mugen87)
- Add three-player-controller to libraries and plugins. #35234 (@hh-hang)
Examples
- Clean up. #34518 (@Mugen87)
- Clean up. #34539 (@Mugen87)
- Remove iOS iframe auto-resize workaround. #34546 (@paulmasson)
- Clean up. #34547 (@Mugen87)
- Only use SunLight in larger scenes. #34586 (@Mugen87)
- Fix MaterialX shader precompilation. d8d1c9b77a6fb16471d2a8b7908e59bf3372dbce (@mrdoob)
- Skip MaterialX double-pass precompilation. 1b437fbd101f8c322b2ccfa811bcf8d4aca764a1 (@mrdoob)
- Update path tracer to latest WebGPU version. #34704 (@gkjohnson)
- Use Inspector in webgpu_renderer_pathtracer.html. #34708 (@ycw)
- Add webgpu_tsl_occlusion_dither. #34710 (@MikeFernandez-Pro)
- Remove redundant lil-gui CSS from webgpu_renderer_pathtracer.html. #34731 (@ycw)
- Update fflate to 0.8.3. #34737 (@brennanmceachran, @claude)
- Clean up. #34740 (@Mugen87)
- Clean Up. #34839 (@cmhhelgeson, @Mugen87)
- Clean Up 2. #34840 (@cmhhelgeson)
- Linting. #34925 (@cmhhelgeson, @Mugen87)
- Fix Readback in Reduce Example. #34924 (@cmhhelgeson, @Mugen87)
- Clean up. #34984 (@Mugen87)
- Fix hover highlight of first instance in
webgl_batch_lod_bvh. #34998 (@MikeFernandez-Pro) - Add VDB loader community example. #35043 (@richardmonette)
- Fix wireform transform not matching on CSG example. #35152 (@ctkerns)
- Replace MRT scan asset. #35158 (@Mugen87)
- Clean up. #35188 (@Mugen87)
- Move point light uniforms to
renderGroupinwebgpu_volume_fire. #35198 (@MikeFernandez-Pro) - Switch Physics engine in ball pool demo. #35209 (@Mugen87)
- Improve shadows in
lightprobes_complex. 8c211ced8c0ba84b3cebcf3d23ef30b57d0cb2f0 (@mrdoob, @claude) - Rename
webgpu_gpudriven_*towebgpu_meshlets_*. #35282 (@mrdoob, @claude)
Devtools
- Lights, persistent helpers, previews without a renderer and 1.19. #35220 (@mrdoob, @claude)
Editor
- Add missing
sidebar/project/cameralocale. #34512 (@ycw) - Fix editor lint warnings. #34515 (@ycw)
- Better IDB perf metrics and error handling. #34514 (@ycw, @Mugen87)
- Add zh/ja/ko/fa/fr translations for perspective/orthographic camera shortcuts. #34796 (@linbingquan)
Tests
- Add lint rule to prevent import from /build in tests. #34541 (@bhouston)
- Add TSL code generation reference tests. #34631 (@sunag)
- Report size: Always format sizes in kB. 227e7bb0396ee0ba5b7f44c9e6e3818c549fe8c2 (@mrdoob, @claude)
- Consolidate TSL unit tests. #34918 (@bhouston)
- Simplify TSL case names and reference parsing. #35056 (@sunag)
- Restart browser after a timeout. #35098 (@bhouston)
- Retry examples after a timeout. #35146 (@bhouston)
- Retry completely black screenshot mismatches. #35166 (@bhouston)
Build
- Make
three/tsltree-shakeable. #34533 (@monken)
CI
- Report size: Measure full builds as self-contained bundles. #34777 (@mrdoob, @claude)
- Fix broken link to Node.js get help. #35151 (@ctkerns)
v3.6.0-rc.14
For stable releases, please refer to CHANGELOG.md for details. For pre-releases, please refer to CHANGELOG.md of the minor branch.
v3.6.0-rc.14
For stable releases, please refer to CHANGELOG.md for details. For pre-releases, please refer to CHANGELOG.md of the minor branch.
v3.11.0
- fix: keep "=" characters inside cookie values when parsing the SSR request cookie header by @kwy404 in https://github.com/web-infra-dev/modern.js/pull/8936
- Add MCP Apps support in a single
@modern-js/mcp-appspackage with build plugin, server plugin, BFF and Fetch adapters, React and Module Federation views, manifest-based UI resource registration, and anmcp-appsproject template. by @danpeen in https://github.com/web-infra-dev/modern.js/pull/9062
- fix: 解析 SSR 请求的 Cookie 请求头时保留 Cookie 值中的 "=" 字符 由 @kwy404 实现, 详情可查看 https://github.com/web-infra-dev/modern.js/pull/8936
- 新增 MCP Apps 支持,由单一的
@modern-js/mcp-apps包提供构建插件、服务端插件、BFF 和 Fetch 适配器、React 和 Module Federation 视图、基于清单的 UI 资源注册,以及mcp-apps项目模板。 由 @danpeen 实现, 详情可查看 https://github.com/web-infra-dev/modern.js/pull/9062
Release 2026-10-30
- #10781: feat: add a Halloween theme preset with a moonlit sky, bats, and pumpkin accents
- #10767: Declare
@scalar/typesas a dependency, since the API reference configuration schema imports it at runtime and installs without hoisting failed to resolve it.
- #10781: feat: add a Halloween theme preset with a moonlit sky, bats, and pumpkin accents
- #10781: feat: add a Halloween theme preset with a moonlit sky, bats, and pumpkin accents
- #10775: fix: name downloaded documents after the document title when no slug is configured
- #10781: feat: pick the default API reference theme from the date, using the Halloween theme throughout October
- @scalar/api-reference@1.76.3
- @scalar/api-reference@1.76.3
- @scalar/api-reference@1.76.3
- @scalar/api-reference@1.76.3
- @scalar/api-reference@1.76.3
- @scalar/api-reference@1.76.3
- @scalar/api-reference@1.76.3
v16.5.0-canary.32
- Fix hangs and crashes for 204 responses from route handlers and deduped fetches: #100159
- fix(adapter): preserve revalidation for metadata prerenders: #100861
- next-custom-transforms: Optimize server-reference transform output: #100637
- Show dev overlay errors before the indicator state is known: #100629
- Update font data: #100863
- Improve common errors in turbo-trace-server: #100862
- docs: clarify use cache is unsupported in Proxy: #100842
- Revert "perf(turbopack): canonicalize async loader availability": #100898
- [test] Cover cache reuse after revalidation and failed writes: #100652
- Turbopack: use analyzed references for fragment facades: #100852
- [ci] Pin deploy test deployments to Node.js 22.x: #100879
- create-next-app: remove App Router prompt and always use App Router: #100850
- Turbopack: fix trailing-slash package root resolution: #100726
Huge thanks to @lukesandberg, @aurorascharff, @sokra, @unstubbable, @jimmyhmiller, @samselikoff, @eps1lon, @timneutkens, and @mischnic for helping!