Conversation
📦 Bundle sizeFull ESM build, minified and gzipped.
🌳 Bundle size after tree-shakingMinimal build including a renderer, camera, empty scene, and dependencies.
|
| if ( a === 'Global' ) return - 1; | ||
| if ( b === 'Global' ) return 1; | ||
| return a.localeCompare( b ); | ||
| fs.writeFileSync( cacheFilename, pageContent ); |
Check failure
Code scanning / CodeQL
Potential file system race condition High
| if ( a === 'Global' ) return - 1; | ||
| if ( b === 'Global' ) return 1; | ||
| return a.localeCompare( b ); | ||
| fs.writeFileSync( cacheFilename, pageContent ); |
Check warning
Code scanning / CodeQL
Network data written to file Medium
| body: JSON.stringify( { | ||
| contents: [ { parts: [ { text: aiPrompt } ] } ] | ||
| } ) |
Check warning
Code scanning / CodeQL
File data in outbound network request Medium
| const reportFilePath = path.join( changelogDir, `r${releaseNumber}.md` ); | ||
|
|
||
| } else if ( isAddon ) { | ||
| fs.writeFileSync( descriptionsFilePath, prDescriptionsForAI ); |
Check warning
Code scanning / CodeQL
Network data written to file Medium
|
|
||
| } else if ( isAddon ) { | ||
| fs.writeFileSync( descriptionsFilePath, prDescriptionsForAI ); | ||
| fs.writeFileSync( reportFilePath, output ); |
Check warning
Code scanning / CodeQL
Network data written to file Medium
|
That is really good. i will make sure to add better descriptive titles if needed. I already use the format WebXRController:description etc. The tokens might need to come from environment variables. And the model selector could be a config rather than dynamic maybe. So you post to the google api the prompt with the collated commits. |
Yeah, I also need to make a validator for the title format.
This is just a perspective between defining the configuration dynamically or statically; there is no need to store tokens in environment variables since we are working with direct access to memory. To be honest, we’re going to use it once a month/release, and I think defining it dynamically is more fun. We can have both if we consider it necessary. |
Description
The work is not complete yet, but so you can follow along, I’m updating the changelog to be generated by AI. It should read the first message of the PR, which is usually the most important one, gather everything into a file, and with a context window generate a summary mentioning the new features and migration tips. I’m also thinking about adding new examples.
I would also like to evolve the functionalities using github labels like
highlightto make management easier to AI.The description turned out fun to read, and even using a free token with the flash version it produced a great result, which you can see below in this release.
It’s also possible to specify a release, which can be useful for LLMs.
AI Summary (r184)
Release Summary (r184)
The r184 release of three.js introduces significant improvements to the WebGPU backend, a major new compatibility layer for WebGL, and enhancements to the Inspector tools.
WebGL/TSL Compatibility Layer: A major addition is the
WebGLNodesAdapter, which allows users to run TSL (Three.js Shading Language) andNodeMaterialinstances within the traditionalWebGLRenderer. This provides a unified transition path for users moving toward WebGPURenderer.WebGPURenderer Enhancements: The renderer received critical performance updates, including the removal of inline function allocations in hot rendering paths (yielding ~20% performance gains) and making
compileAsync()truly non-blocking viaNodeBuilder.buildAsync(), ensuring smooth animations during material pre-compilation.Inspector Tools: The internal Inspector has been significantly upgraded with a new
Timelinetab for recording commands (Hierarchy/Counts), aSettingstab (includingForce WebGLfor easier testing), and an initialMemoryanalysis tab.USDLoader Advancements: The
USDLoaderhas reached a higher level of maturity with support forMaterialX UsdPreviewSurface, geometric primitives (Cube, Sphere, etc.), improved skinning weight handling to reduce distortion, and support formetersPerUnitscaling.Dynamic Lighting: The
WebGPURenderernow supportsDynamicLighting, allowing for the addition or removal of lights without triggering a full material recompilation, significantly improving interactive workflows.Animation Fixes: Long-standing bugs in
AnimationActionregarding time scale reversal and loop counts were addressed. Additionally,AnimationActionnow correctly preserves custominterpolant.settings, fixing issues withInterpolateBezierfunctionality.Robustness and Maintenance: The codebase underwent several cleanups, including adopting ECMA 2022 static initialization blocks for Math classes, addressing vulnerabilities, and improving robustness in animation modules when handling null contexts.
Migration Tips
Controls Touch Handling: If your application relies on custom CSS
touch-actionsettings for your canvas, note that controls (likeMapControlsorFirstPersonControls) now settouchAction = ''upon disconnection instead of'auto'. This removes the inline style entirely, allowing your CSS to take precedence.AudioListener: The
AudioListenerclass no longer uses theClockclass. It has been updated to use theTimerclass. If you were monitoring or patchingAudioListenerclock-related properties, please update your implementation to useTimer.SkinnedMesh Transformations:
SkinnedMesh.applyBoneTransformnow supports bothVector3andVector4. If passing aVector4(homogenous coordinates), ensure thewcomponent is set correctly:w === 0for directions (normals/tangents) andw === 1for positions.Texture Updates in WebGPU: If you are using
DataArrayTextureand rely onlayerUpdatesfor performance, this property is now respected in the WebGPU backend. Ensure your implementations utilize this for partial updates to avoid unnecessary full-texture uploads.Inspector Usage: If you were previously using a custom Inspector setup, note that the new
Timelinefeature relies on specific method prefixes (begin,create,destroy,update) inBackendfunctions to track commands effectively.WebGL Normal Maps:
WebGLRenderernow supports packed normal maps automatically if the texture format isRGFormat,RG11_EAC_Format, orRED_GREEN_RGTC2_Format. You do not need to manually configure this, but verify that your shader logic accounts for this if you were previously performing custom normal reconstruction for these formats.Generated by gemini-3.1-flash-lite-preview
r184
AnimationAction
timeScalereversal jump. AnimationAction: FixtimeScalereversal jump. #33035 (@Mugen87)AudioListener
Clock. AudioListener: Remove reference toClock. #33026 (@Mugen87)ColladaLoader
polygonsprimitive. ColladaLoader: Add suport forpolygonsprimitive. #33143 (@Mugen87)CubeRenderTarget
generateMipmapscorrectly. CubeRenderTarget: RestoregenerateMipmapscorrectly. #33069 (@PoseidonEnergy)DataTextureLoader
Dev
Docs
NodeManager. Docs: Using the correct class type forNodeManager. #33067 (@PoseidonEnergy)Editor
Examples
games_fps. Examples: Fix floor threshold ingames_fps. #33053 (@Mugen87)MapControlsdemo. Examples: ImproveMapControlsdemo. #33171 (@Mugen87)FirstPersonControls
GLTFExporter
EXT_texture_webpsupport. GLTFExporter: AddEXT_texture_webpsupport. #33117 (@BorisKourt)GLTFLoader
ioredge case. GLTFLoader: Handle zeroioredge case. #33119 (@Mugen87)GodraysNode
HDRLoader
Inspector
forceWebGL. Inspector: IntroduceforceWebGL#33074 (@sunag)Timeline( Commands Recorder ). Inspector: IntroduceTimeline( Commands Recorder ) #33078 (@sunag)Renderer.info. Inspector: Add Memory tab and improveRenderer.info#33097 (@sunag)Capture Stack TraceforSettings. Inspector: AddCapture Stack TraceforSettings#33122 (@sunag)InstancedMesh
InstancedMesh, BatchedMesh
Manual
MaterialLoader
Math
NodeManager
delete()more robust. NodeManager: Makedelete()more robust. #33160 (@Mugen87)NodeMaterialObserver
Object.keys(). NodeMaterialObserver: Avoid usage ofObject.keys(). #33113 (@Mugen87)Object3D
pivot. Object3D: Correctly copypivot. #33163 (@PoseidonEnergy)Other
OutlineNode
Renderer
hasCompatibility()more predictable. Renderer: MakehasCompatibility()more predictable. #33087 (@Mugen87)Renderers
Shaders
SkinnedMesh
Sky
Source
getSize()forVideoFrame. Source: FixgetSize()forVideoFrame. #33131 (@PoseidonEnergy)TSL
.depth()defined breaks shader compilation. TSL: Fix array texture with no.depth()defined breaks shader compilation #33096 (@sunag)dispose()of some FX addons. TSL: Improvedispose()of some FX addons. #33126 (@Mugen87)StorageTextureNode. TSL: Fix two issues inStorageTextureNode#33167 (@PoseidonEnergy)Texture
TransformControls
Triangle
isFrontFacing(). Triangle: Simpler bool check inisFrontFacing(). #33071 (@PoseidonEnergy)USDLoader
WebGLRenderer
copyTextureToTexture(). WebGLRenderer: Fix active texture setting incopyTextureToTexture(). #33153 (@geekuillaume)WebGLTextures
WebGLTimestampQueryPool
WebGPURenderer
compileAsync()truly non-blocking. WebGPURenderer: MakecompileAsync()truly non-blocking #32984 (@RenaudRohlinger)CanvasTargetcaching. WebGPURenderer: Add individual dispose forCanvasTargetcaching #33106 (@sunag)WebGPUTextureUtils
layerUpdatesproperty. WebGPUTextureUtils: Fix checklayerUpdatesproperty #33075 (@sunag)WebXRController