-
-
Notifications
You must be signed in to change notification settings - Fork 36k
Migration Guide
Michael Herzog edited this page Oct 24, 2025
·
777 revisions
Updating in steps helps manage API changes, as deprecation warnings last for 10 releases
- The way indirect specular light for PBR materials is computed has been improved. This change slightly changes the overall appearance of PBR materials. More details in: https://github.com/mrdoob/three.js/pull/32054
- PBR materials now better conserve energy, primarily rough materials (roughness > 0.5) which leads to more physically correct results. That means rough materials tend to be a bit brighter than in previous versions. More details in: https://github.com/mrdoob/three.js/pull/32072
- PMREM reflections have been improved. More details in: https://github.com/mrdoob/three.js/pull/32102
-
renderAsync()andcomputerAsync()ofWebGPURendereras well as other async methods likeclearAsync(),initTextureAsync()orhasFeatureAsync()have been deprecated. Before the sync versions of the methods can be called, the instance ofWebGPURenderermust be initialized. That happens automatically inside your animation loop defined viarenderer.setAnimationLoop()or manually if you callawait renderer.init(). The latter call might be necessary if you use on-demand rendering or perform feature detection. -
waitForGPU()has been removed fromWebGPURenderer. Read #32012 for details. -
KTX2Loader.detectSupportAsync()has been deprecated. UsedetectSupport()instead after the renderer has been initialized viaawait renderer.init(). - The TSL object
PI2has been renamed toTWO_PI. - The internal AO render target of
GTAONodehas been optimized. The AO is now only accessible in therchannel. The AO blend on application level should use this formula now:vec4( scenePassColor.rgb.mul( aoPass.r ), scenePassColor.a ); - The methods
setResolution()andgetResolution()ofPassNodehave been renamed tosetResolutionScale()andgetResolutionScale(). - The
dampproperty ofAfterImageNodeis now of typeNode<float>. When creating an effect node viaafterImage(), it is not required to pass in a number anymore. A node constant or a uniform node are accepted as well. - The
resolutionproperty ofWaterMeshhas been renamed toresolutionScale. - three.js has a new API documentation which is now generated based on JSDoc. The new documentation covers the entire API, provides a better search and better type information. However, i18n (internationalization) isn't supported anymore meaning the docs are only available in English.
-
DepthOfFieldNodehas a new implementation with a new API. Please refer to webgpu_postprocessing_dof for a complete code example. -
RGBELoaderhas been renamed toHDRLoader. -
RGBMLoaderhas been removed. Please migrate to other HDR formats and useEXRLoader,HDRLoader,HDRCubeTextureLoaderorUltraHDRLoaderinstead. - The
resolutionproperties ofReflectorNode,AnamorphicNodeandGaussianBlurNodehave been renamed toresolutionScale. Besides, they are now scalar values, notVector2anymore. - The
USE_REVERSEDEPTHBUFdefine inWebGLRendererhas been renamed toUSE_REVERSED_DEPTH_BUFFER. - The
USE_LOGDEPTHBUFdefine inWebGLRendererhas been renamed toUSE_LOGARITHMIC_DEPTH_BUFFER.
- The
Timermodule has been moved into the core. There is no need to import the module as a separate add-on anymore since it is now accessible over theTHREEnamespace. -
USDZLoaderhas been deprecated. Please useUSDLoaderinstead. -
TRAAPassNodenode is nowTRAANodeand requires a new setup. Please refer to webgpu_postprocessing_traa for a complete code example. - The
reverseDepthBufferparameter inWebGLRendererhas been renamed toreversedDepthBuffer. - The TSL method
label()has been renamed tosetName(). -
GaussianBlurNodehas now an improved blur with a less blocky appearance. Customsigmavalues must be doubled to restore the previous blur strength.
-
MultiplyBlendingandSubtractiveBlendingnow requireMaterial.premultipliedAlphaset totrue.
-
ColorManagement.fromWorkingColorSpace()has been renamed toworkingToColorSpace(). -
ColorManagement.toWorkingColorSpace()has been renamed tocolorSpaceToWorking(). - The version of the JSON Object Scene format has been increased from
4.6to4.7. -
GLTFExporterpushes parent node indices first to the glTF JSON. Previously, they came last. -
PeppersGhostEffecthas been removed.
- The
lengthparameter ofCapsuleGeometryhas been renamed toheight. - Support detection for WebP and AVIF has been removed from
GLTFLoader. -
LottieLoaderhas been deprecated. Uselottie-webinstead and create your animated texture manually.
-
AnimationClip.parseAnimation()has been deprecated. -
ParametricGeometrieshas been renamed toParametricFunctions. The module only holds parametric functions now so the inner classes have been removed. - The constructor of
LUTImageLoaderhas changed. It only accepts a loading manager now. TheflipVerticalparameter has been removed. If you need to vertically flip a LUT, set theflipproperty of the loader totrue. - The constructor of
SMAAPasshas changed. Thewidthandheightproperty has been removed since they were redundant. - The constructor of
HalftonePasshas changed. Thewidthandheightproperty has been removed since they were redundant. -
Controls.connect()requires a DOM element now.
-
Timerno longer uses Page Visibility API automatically to avoid large time delta values in inactive tabs. To restore the previous behavior, you must call the new methodtimer.connect( document );. This has been changed to avoid side effects in the constructor. -
RenderTarget.clone()now performs full structural clone without sharing texture resources.
-
MeshGouraudMaterialhas been deprecated. UseMeshLambertMaterialinstead. -
InstancedPointsNodeMaterialhas been removed. UsePointsNodeMaterialinstead. - The TSL function
varying()has been renamed totoVarying(). - The TSL function
vertexStage()has been renamed totoVertexStage().
-
TextureNode.uv()has been renamed toTextureNode.sample(). - The TSL function
rangeFog( color, near, far )has been deprecated. Usefog( color, rangeFogFactor( near, far ) )instead. - The TSL function
densityFog( color, density )has been deprecated. Usefog( color, densityFogFactor( density ) )instead. - The
centerproperty has been removed fromDotScreenNode. - The TSL object
materialAOMaphas been renamed tomaterialAO. - The TSL object
shadowWorldPositionhas been renamed toshadowPositionWorld. -
PostProcessingUtilshas been renamed toRendererUtils.
- The imports in context of
WebGPURendererhave been updated:- Use
three/webgputo import modules related toWebGPURendererandNodeMaterial. - Use
three/tslto import modules/functions related to TSL.
- Use
- The TSL blending functions
burn(),dodge(),screen()andoverlay()have been renamed toblendBurn(),blendDodge(),blendScreen()andblendOverlay(). - The TSL function
storageObject()has been deprecated. Usestorage().setPBO( true )instead.
-
Material.typeis now a static property that can't be modified anymore by app-level code. This might effect projects which use custom materials oronBeforeCompile()and modify the type property to trigger/force uniforms updates. - Certain TSL modules have been moved from core to addons, see https://github.com/mrdoob/three.js/issues/29505.
- Mipmaps are now always generated when
Texture.generateMipmapsis set totrueirrespective of the texture filter settings. - When exporting non-PBR materials with
GLTFExporter, the value formetallicFactoris now0. The value ofroughnessFactorhas been changed to1. - The MMD modules have been deprecated. Please migrate to https://github.com/takahirox/three-mmd-loader until
r172. -
WebGLRenderer.copyTextureToTexture3D()has been deprecated. Please usecopyTextureToTexture()instead (it supports now 3D and array textures). -
WebXRManagernow honors the layers settings of the scene's camera, see https://github.com/mrdoob/three.js/pull/29742. -
CinematicCamerahas been removed. - The conditional line material type must not be injected into
LDrawLoaderviasetConditionalLineMaterial()before loading assets.
-
TransformControlsis now derived fromControls. Instead ofscene.add( controls ), the visual representation of the controls have to be added to the scene viascene.add( controls.getHelper() )now. -
EXRExporter.parse()is now async. -
KTX2Exporter.parse()is now async. -
LightProbeGenerator.fromCubeRenderTarget()is now async. -
PackedPhongMaterialhas been removed. -
SDFGeometryGeneratorhas been removed. -
TiltLoaderhas been removed. -
GPUStatsPanelhas been removed. Please use the packagestats-glif you need more detailed performance monitoring. - The functions of
GeometryCompressionUtilsaccept geometries instead of meshes now.
- In order to improve tree-shaking of
WebGPURendererand TSL, certain chaining features of TSL have been removed. For example instead of doingoutputPass.fxaa()it is nowfxaa( outputPass ). Please have a look at #29187 for more information. - The TSL object
viewportTopLefthas been renamed toviewportUV. - The TSL object
viewportBottomLefthas been removed. UseviewportUV.flipY()instead. - The TSL function
uniforms()has been renamed touniformArray(). -
DragControls.activate()andDragControls.deactivate()have been renamed toconnect()anddisconnect(). -
DragControls.getObjects()andDragControls.setObjects()have been removed. Usecontrols.objectsinstead. -
DragControls.getRaycaster()has been removed. Usecontrols.raycasterinstead. -
PointerLockControls.getObject()has been removed. Usecontrols.objectinstead. -
LogLuvLoaderhas been removed. Consider to switch toUltraHDRLoader.
- The imports of
WebGPURendererand TSL have changed. Please read https://github.com/mrdoob/three.js/pull/28650 for all details. -
HDRJPGLoaderhas been removed. UseUltraHDRLoaderto load Ultra HDR .jpg files. - The script
utils/packLDrawModel.jshas been renamed toutils/packLDrawModel.mjs.
- When adding a new geometry to
BatchedMeshyou must now calladdInstanceto enable the object to render.
- The signature of
WebGLRenderer.copyTextureToTexture()andWebGLRenderer.copyTextureToTexture3D()has changed. It is nowcopyTextureToTexture( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ). For more information, check out the examples webgl_materials_texture_partialupdate and webgl2_materials_texture3d_partialupdate. - The signature of
WebGLRenderer.copyFramebufferToTexture()has changed. It is nowcopyFramebufferToTexture( texture, position = null, level = 0 ). For more information, check out the example webgl_framebuffer_texture.
-
LWOLoaderuses a new conversion from left to right-handed coordinate system now. That means imported LWO assets will be oriented differently than before. Check out #28029 to see how the official example was updated to restore the previous look. - The async parse method of
USDZLoaderhas been renamed toparseAsync(). The newparse()method can be used with classic callbacks. - The shader chunk
lightmap_fragmenthas been removed. If your custom material relies on it, you have to inline the GLSL code into your shader. - The legacy
WebGLNodeBuilderclass has been removed which enabled a limited node material usage withWebGLRenderer. The node material can only be used withWebGPURenderernow.
-
WebGLRendererno longer supports WebGL 1. - The
stencilcontext attribute ofWebGLRendereris nowfalseby default for performance reasons. If you use stencil related logic in your app, you have to enablestencilexplicitly now. The correspondingstencilproperty ofWebGPURendereris nowfalseby default as well. - The
heightparameter ofTextGeometryhas been renamed todepth. - To attenuate
Scene.environment, use the new propertyScene.environmentIntensity. TheenvMapIntensityproperty ofMeshStandardMaterialandMeshPhysicalMaterialnow attenuate only the material'senvMap.
-
WebGLMultipleRenderTargetshas been removed. Use the newcountproperty of the render target classes for MRT usage. - Hand-Tracking is not requested as an optional feature by default anymore. You have to do this manually on app level now like demonstrated in the related examples.
- The API of
InteractiveGrouphas been changed. You have to use the new methodslistenToXRControllerEvents()andlistenToPointerEvents()to register the internal event listeners. - When using an instance of
HTMLImageElementfor a texture, the renderer uses nownaturalWidthandnaturalHeightinstead ofwidthandheightfor computing the image dimensions. This enables simplifications on app level if the images are part of the DOM and resized with CSS.
- The build files
build/three.jsandbuild/three.min.jshave been removed. Please use ES Modules or alternatives: https://threejs.org/docs/index.html#manual/en/introduction/Installation -
WebGLRenderernow specifies precision qualifiers for all GLSL sampler types. -
GroundProjectedSkyboxhas been replaced withGroundedSkybox. - When using equirectangular environment maps,
WebGLRendererautomatically converts to the cube map format with a larger texture size now. This avoids undersampling resulting in blurry output but it requires more memory. If you encounter performance issues, decrease the resolution of your equirectangular environment map.
-
HBAOPasshas been replaced withGTAOPass. -
Triangle.getBarycoord()andTriangle.getInterpolation()now returnnullif the triangle is degenerate. (For degenerate triangles, thetargetparameter is set to the zero-vector).
-
BatchedMesh.applyGeometry()has been replaced withaddGeometry(). -
BufferAttribute.updateRangeandInterleavedBuffer.updateRangehave been replaced withupdateRanges. You can manage multiple update ranges with the new methodsaddUpdateRange()andclearUpdateRanges(). -
SkinnedMeshis not supported with WebGL 1 anymore.
-
Quaternions are now expected to be normalized. - The material property
bumpScaleis now invariant to the scale of texture coordinates. That means bump maps look now the same regardless of the texture UV scale in world space. If you are using bump mapping, you likely have to update thebumpScalevalue to achieve a similar look like before. More details in https://github.com/mrdoob/three.js/pull/26899.
-
AmbientLightProbeandHemisphereLightProbehave been removed. UseAmbientLightorHemisphereLight, instead. - The GLSL struct
GeometricContexthas been removed from the GLSL code base to make materials more compatible with Adreno mobile GPUs. When you patch shaders viaonBeforeCompile()or reuse shader chunks with custom materials, you potentially have to remove references toGeometricContextsimilar to https://github.com/mrdoob/three.js/pull/26805. -
AnimationUtils.arraySlice()has been removed. Internal code uses the nativeTypedArray.slice()method instead.
- The constructor of
FilmPasshas been changed. The parametersscanlinesIntensityandscanlinesCounthave been removed. - The constructor of
SAOPasshas been changed. The parametersuseDepthTextureanduseNormalshave been removed. -
SSAOPassrequires now the usage of a priorRenderPass.
-
WebGLRenderer.useLegacyLightsis now set tofalseby default and deprecated. Please read the following topic at the three.js forum for more information: Updates to lighting in three.js r155 - The inline tone mapping controlled via
WebGLRenderer.toneMappingonly works when rendering to screen now (similar toWebGLRenderer.outputColorSpace). In context of post processing, useOutputPassto apply tone mapping and color space conversion. - The constructor of
OutputPasshas no parameters anymore. Color space and tone mapping settings are now extracted from the renderer.
- The shader chunk
encodings_fragmenthas been renamed tocolorspace_fragment. - The shader chunk
output_fragmenthas been renamed toopaque_fragment.
- WebGL 1 support in
WebGLRendereris now deprecated and will be removed in r163. - The default render target texture type in context of post-processing (
EffectComposer) is nowTHREE.HalfFloatType. -
AdaptiveToneMappingPasshas been removed. Consider to use the newOutputPassfor tone mapping and color space conversion. -
ColladaExporterhas been removed. -
PRWMLoaderhas been removed. -
LightningStrikeandLightningStormhave been removed. -
CubeTextureLoaderloads cube textures in sRGB color space by default now.
- The naming convention of
uvbuffer attributes has been changed.uv,uv2,uv3anduv4are nowuv,uv1,uv2anduv3. -
WebGLRenderer.outputEncodinghas been replaced withWebGLRenderer.outputColorSpacewithTHREE.SRGBColorSpaceas the default value. -
Texture.encodinghas been replaced withTexture.colorSpacewithTHREE.NoColorSpaceas the default value. -
THREE.sRGBEncodingis nowTHREE.SRGBColorSpace. -
THREE.LinearEncodingis nowTHREE.LinearSRGBColorSpace. -
THREE.ColorManagement.enabledis nowtrueby default. - It's now necessary to define the
renderOrderproperty for loaded shapes viaSVGLoader.
For more information, please see the Updates to Color Management in three.js r152 guide.
-
Float16BufferAttributenow automatically converts values to and from half float in its setters/getters. -
SkinnedMesh.boneTransform()has been renamed toapplyBoneTransform(). -
InstancedMesh.frustumCulledis nowtrueby default sinceInstancedMeshnow supports bounding volume computations. If you update the transformation of your instances, make sure to callcomputeBoundingSphere()to recompute the bounding sphere which is required for correct view frustum culling and ray casting. -
MapControlsis now located in its own module filethree/addons/controls/MapControls.js. - Tween.js is now imported via
import TWEEN from 'three/addons/libs/tween.module.js';. -
Triangle.getUV()has been renamed toTriangle.getInterpolation(). -
GroundProjectedEnvhas been renamed toGroundProjectedSkybox. -
BufferGeometryUtils.mergeBufferAttributes()has been renamed toBufferGeometryUtils.mergeAttributes(). -
BufferGeometryUtils.mergeBufferGeometries()has been renamed toBufferGeometryUtils.mergeGeometries(). - The editor now uses the physically correct lighting mode (
WebGLRenderer.useLegacyLights = false). -
Pointsnow supports texture coordinates. When auvattribute is present in the geometry, the shader will use it to sample the color or alpha value frommaporalphaMapfor a single point. Without auvattribute, point clouds are rendered as before. -
ShaderMaterial.forceSinglePassis nowtrueby default. -
aoMapandlightMapno longer useuv2. Setmaterial.lightMap.channelto0foruvand1foruv2. Consequently, theuv2_*shader chunks have been removed.
- The build files
build/three.jsandbuild/three.min.jsare deprecated with r150+, and will be removed with r160. Please use ES Modules or alternatives: https://threejs.org/docs/index.html#manual/en/introduction/Installation -
BasisTextureLoaderhas been removed. Use Basis Universal compression in KTX2 (.ktx2) files withKTX2Loaderinstead. -
ColorManagement.legacyMode=falseis nowColorManagement.enabled=true. -
WebGLRenderer.physicallyCorrectLights = trueis nowWebGLRenderer.useLegacyLights = false.
-
Euler.DefaultOrderhas been renamed toEuler.DEFAULT_ORDER. -
Euler.RotationOrdershas been removed. -
Object3D.DefaultUphas been renamed toObject3D.DEFAULT_UP. -
Object3D.DefaultMatrixAutoUpdatehas been renamed toObject3D.DEFAULT_MATRIX_AUTO_UPDATE. -
Object3D.DefaultMatrixWorldAutoUpdatehas been renamed toObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE. -
ViewHelper.controlshas been removed. Use the newcenterproperty to define the helper's center. -
THREE.TwoPassDoubleSidehas been removed. Double-sided, transparent materials are now rendered with two draw calls by default. This behavior can be disabled by settingMaterial.forceSinglePasstotrue.
- The
examples/jsdirectory has been removed. Addons likeGLTFLoaderorOrbitControlsare now only available as ES6 modules in theexamples/jsmdirectory. Certain library files fromexamples/js/libsare moved toexamples/jsm/libs. Users of ammo.js, Draco and Basis have to update their import paths (e.g. from/examples/js/libs/draco/to/examples/jsm/libs/draco/). Also check out the Installation guide in the documentation if you are using ES6 modules for the first time. - The default
radialvalues ofCircleGeometry,RingGeometry,CylinderGeometry,ConeGeometryandTorusGeometryhave been increased. -
GLTFLoadernow ensures the node order in loaded scenes matches the node order in the glTF asset. -
Material.side = DoubleSideno longer renders a transparent object in separate front and back passes. UseTwoPassDoubleSidefor two-pass transparent rendering.
- The
decayproperty ofPointLightandSpotLighthas now a physically correct default value (2). This change will affect all scenes using point and spot lights with no defineddecay. Set the property back to1if you want to restore the previous behavior. -
BufferAttribute.onUploadCallback()is now executed every time buffer data are transferred to the GPU. - Support for the
KHR_materials_pbrSpecularGlossinessextensions has been removed fromGLTFLoaderandGLTFExporter. Older glTF assets should be losslessly converted from spec/gloss to metal/rough. -
PixelShaderhas been removed. Usepostprocessing/RenderPixelatedPassinstead. -
numConstructionStepsandconstructionStepofLDrawLoaderhave been renamed tonumBuildingStepsandbuildingStep.
- The
resolutionconstructor parameter ofBloomPasshas been removed. - The
widthandheightsettings of theparamsconstructor parameter ofBokehPasshave been removed. -
BufferGeometryUtils.mergeBufferGeometries()does not honorBufferGeometry.userDataanymore. - The
cubeshader inShaderLibhas different uniforms now.envMapis nowtCube,flipEnvMapis nowtFlipand all other uniforms except ofopacityhave been removed.
- The
truncateDrawRangeoption has been removed fromGLTFExporter.parse(). -
FlyControlsandFirstPersonControlshave been moved to Pointer Events API. - The
BufferGeometryalias for geometry generators has been deprecated. Use e.g.BoxGeometryinstead ofBoxBufferGeometry.
-
BufferGeometry.merge()has been removed. UseBufferGeometryUtils.mergeBufferGeometries()instead. -
copyColorsArray(),copyVector2sArray(),copyVector3sArray()andcopyVector4sArray()have been removed fromBufferAttribute. -
MeshLambertMaterialnow uses per-fragment shading. Use the newMeshGouraudMaterialinexamples/jsm/materialsif you need per-vertex shading. -
BufferAttributegetters and setters (getX,setX, etc) now respect the normalized flag and transform values to and from normalized values when reading and writing to the underlying array. -
Scene.autoUpdatehas been replaced withObject3D.matrixWorldAutoUpdate. - The
noHolesparameter ofShapePath.toShapes()has been removed.
- When importing
AnimationUtilsfromsrc/animation/AnimationUtils.js(instead ofthree.module.js), the import is nowimport * as AnimationUtils from '/src/animation/AnimationUtils.js';. -
PCDLoadernow always uses white as the default material color.
- When importing
DataUtilsfromsrc/extras/DataUtils.js(instead ofthree.module.js), the import is nowimport * as DataUtils from '/src/extras/DataUtils.js';.
- The
embedImagesoption ofGLTFExporter.parse()has been removed. - Legacy code is going to be removed from the core after ten releases now. If you plan to upgrade
three.jsin an existing project, try to avoid too large upgrade steps. For example don't upgrade fromr70tor140but do it in a more incremental fashion instead (r70->r80->r90etc.). - The parameter
selectionBoxhas been removed fromSelectionHelper's constructor. - The default
typeofDepthTextureis nowUnsignedIntType. - The
urlparameter ofPCDLoader.parse()has been removed. The loader does not extract the file name from the URL anymore. - The deprecated
Geometryclass has been removed.
-
SkinnedMeshrequires floating point vertex textures now. - The
fogproperty has been moved from the abstractMaterialclass to materials which actually support it.
-
CubeUVRefractionMappingandMeshStandardMaterial.refractionRatiohave been removed. Use the transmission related properties ofMeshPhysicalMaterialif you want to model refraction with a PBR material.
-
WebGLMultisampleRenderTargethas been removed. To use multisampling as before, useWebGLRenderTargetand set the newsamplesproperty to a value greater0. - The node material in
examples/jsm/nodeshas been replaced with a new implementation. -
ColladaLoader,KMZLoaderandPLYLoaderrequire a sRGB workflow now. -
OBJExporter,ColladaExporterandPLYExporterproduce assets with sRGB encoded colors now. -
VRMLoaderhas been removed. Use three-vrm instead. - The second argument of
GLTFLoader'sparser.loadTextureImage()has been changed from image source definition to image source index. -
Euler.toVector3()has been removed. UseVector3.setFromEuler()instead. -
DataTexture3Dhas been renamed toData3DTexture. -
DataTexture2DArrayhas been renamed toDataArrayTexture. -
WebGLRenderTarget.setTexture()has been removed. - The import of
CurveExtrashas been changed. It is nowimport * as Curves from ...instead ofimport { Curves } from ....
-
WebGLRenderernow creates the WebGL context with an alpha channel regardless of the value ofalphapassed in the constructor. However, the value ofalphais still used by the renderer when clearing the context first thing every frame. -
RGBFormathas been removed. Please useRGBAFormatinstead. -
RGBIntegerFormathas been removed. Please useRGBAIntegerFormatinstead. -
UnsignedShort565Typehas been removed. Please useUnsignedShort5551Typeinstead. -
BasisTextureLoaderhas been deprecated. Please useKTX2Loaderinstead. - The
SRGB8_ALPHA8_ASTC*texture formats have been removed. If you want to use sRGB ASTC formats, use the regularRGBA_ASTC_*formats and set theencodingtexture property tosRGBEncoding. - With WebGL 2 uncompressed sRGB encoded textures have to use the
RGBAFormatwithUnsignedByteTypenow. -
RoughnessMipmapperhas been removed. -
Material.formathas been removed. -
GLTFExporterdoes not supportRGBFormatanymore. Please useRGBAFormatinstead. - The default texture format of
VideoTextureis nowRGBAFormat(instead ofRGBFormat). - sRGB decode in GLSL has been removed. sRGB texture always have to use
RGBAFormat+UnsignedByteTypeformat now. - The ES6 import of
three.jsandexamples/jsmmodules in web sites now requires the usage of an import map to resolve thethreebare import specifier. - The ES6 import of
examples/jsmandexamples/fontsin certain bundlers like esbuild now requires an extension on filenames. -
OBJ/MTLLoaderrequires a sRGB workflow now. - Changing
Material.transparentafter its initial use requires settingneedsUpdatetotrue.
- HDR workflows with WebGL 1 now require half float texture extension support (
OES_texture_half_float/OES_texture_half_float_linear). - If you create an instance of
DataTexture,DataTexture2DArrayorDataTexture3D, you have to setneedsUpdatetotrueas soon as the texture data are ready. -
WebGLRenderer.copyFramebufferToTexture()has to be used with the new classFramebufferTexturenow. - ETC1 texture compression can now only be used with a WebGL 1 rendering context.
- The
keydownevent listener ofArcballControlshas been removed. You have to implement it on app level if necessary. -
ArcballControls.setTarget()has been removed. Update thetargetproperty instead. - When changing
WebGLRenderer.toneMapping, it is no longer necessary to setMaterial.needsUpdatetotrue. -
EXRLoaderno longer supports the data typeUnsignedByteType. Use the default data typeHalfFloatTypeinstead. -
PMREMGeneratornow uses half float render targets internally, and no longer usesRGBEEncoding. -
RGBM7EncodingandRGBM16Encodinghave been removed. It is still possible to load RGBM texture as FP16 or FP32 textures. The defaulttypeisHalfFloatType. -
RGBEEncodingandRGBEFormathave been removed.RGBELoaderandHDRCubeTextureLoaderno longer support the data typeUnsignedByteType. It is still possible to load RGBE texture as FP16 or FP32 textures. The defaulttypeisHalfFloatType. -
RGBDEncodinghas been removed. -
WebGLRenderer.gammaFactorandTHREE.GammaEncodinghave been removed. Please use post processing (a gamma correction pass) if you need a special gamma color space.
-
dat.guihas been replaced withlil-gui. - The dimensions, format and type of a texture cannot be changed after the initial use now.
-
GLTFExporter.parse()has a new signature. The third parameter is now an error callback. The exporter options are now passed in as the fourth argument. -
LogLuvEncodinghas been removed. Please use the newLogLuvLoaderfor loading Logluv TIFF HDR images as (half precision) floating point textures.
-
DeviceOrientationControlshas been removed. -
ImmediateRenderObjecthas been removed. -
OrbitControlsno longer supports zooming (via mouse wheel) while rotating. -
FileLoadernow usesfetchinstead ofXMLHttpRequest.
- The
recursiveparameter ofRaycaster.intersectObject()andRaycaster.intersectObjects()is nowtrueby default. - Some default values of
ExtrudeGeometry's parameters have changed.depthis now1,bevelThicknessis now0.2andbevelSizeis nowbevelThickness - 0.1. -
ParametricGeometryhas been removed from core. It is now located inexamples/jsm/geometries/ParametricGeometry.js. -
TextGeometryhas been removed from core. It is now located inexamples/jsm/geometries/TextGeometry.js. -
FontLoaderandFonthave been removed from core. Both classes are now located inexamples/jsm/loaders/FontLoader.js.
-
BufferGeometryUtilsis now imported using this pattern:import * as BufferGeometryUtils from './jsm/utils/BufferGeometryUtils.js'; -
KTX2Loaderrequires an updated version of the Basis Universal transcoder fromexamples/js/libs/basis -
MeshPhysicalMaterial.sheenhas been renamed tosheenTint. -
BufferGeometry.computeFaceNormals()has been removed. The method was not implemented and just a stub. Calling it did not affect the geometry. -
MeshStandardMaterialandMeshPhysicalMaterialshaders are now more correct and may result in less shiny renders for models using rough materials.
- The
morphTargetsandmorphNormalsproperty of materials has been removed. -
MeshStandardMaterial.vertexTangentshas been removed. - The default
widthSegmentsandheightSegmentproperties ofSphereGeometryhave been increased to32and16. - The default type of textures loaded with
RGBELoader,HDRCubeTextureLoaderandEXRLoaderis nowTHREE.HalfFloatType. - The
envMapproperty ofMeshStandardMaterialandMeshPhysicalMaterialis now internally converted to a PMREM. It might be necessary to update the scene's lighting if no PMREM was previously used.
- Controls no longer call
preventDefault()on pointer and mouse events. -
DragControls,OrbitControlsandTrackballControlsnow use pointer events for touch interaction.
- The backward compatibility for the deprecated third and forth arguments
renderTargetandforceClearofWebGLRenderer.render()has been removed.- Use
WebGLRenderer.setRenderTarget()andWebGLRenderer.clear()instead.
- Use
- The
skinningproperty of materials has been removed.- The same material can now be reused between
MeshandSkinnedMesh.
- The same material can now be reused between
-
Matrix4.makeShear()has a new signature. Please make a note of it.
- All central engine components like
Object3D,BufferGeometryorShaderMaterialare now ES6 classes.- This might impact your application if you derive custom classes from
three.jsclasses via ES5 syntax. In this case, you have to upgrade your code to ES6 or transpilethree.jsto ES5.
- This might impact your application if you derive custom classes from
- The JavaScript code in
examples/jsgenerated from modules inexamples/jsmis now based on ES6.- If you need ES5 code in your project, update the configuration in .babelrc.json and regenerate
examples/jsby usingnpm run build-examples. However, the better solution is to upgrade your code to ES6.
- If you need ES5 code in your project, update the configuration in .babelrc.json and regenerate
- NPM: ES6 modules in
examples/jsmnow import using the bare specifierthree.- This change breaks working with modules in cdns such as https://www.jsdelivr.com/ and https://unpkg.com/. Please use https://www.skypack.dev/ instead.
-
XLoaderhas been removed.
- Controls no longer use
stopPropagation()in their event listeners. In certain use cases event listeners on application level are now able to process events (which was not possible before). -
Scene.backgroundno longer supports instances ofWebGLCubeRenderTarget. Please assign thetextureproperty of render targets. -
WebGLRenderer.setFramebuffer()has been removed. -
AssimpLoaderhas been removed. -
Plane.intersectLine()now returnsnullwhen no intersection was found. -
WebGLRenderer.maxMorphTargetsandWebGLRenderer.maxMorphNormalshave been removed. - When using
EventDispatcher,event.targetis only valid for the duration of the listener callback now.
- TypeScript type declaration files have been moved to three-types/three-ts-types.
-
Face3has been removed from core. It is now located inexamples/jsm/deprecated/Geometry.js. -
OceanandOceanShadershave been removed. -
polyfills.jshas been removed. The polyfills forArray.from(),Function.name,Number.EPSILON,Number.isInteger,Math.log2,Math.signandObject.assign()need to be added at application level for IE11 support: misc_legacy. -
CSS3DRendererno longer supports IE11. -
WebGLRenderernow setsgl.UNPACK_COLORSPACE_CONVERSION_WEBGLtogl.NONE. Embedded color space data (ICC-profiles) in texture images will now be ignored.
-
Geometryhas been removed from the core. It is now located inexamples/jsm/deprecated/Geometry.js. - Geometry generators like
BoxGeometrynow produce aBufferGeometry. -
Mesh,LineandPointsno longer support raycasting withGeometry. -
Line.computeLineDistances()no longer supportsGeometry. - Exporters no longer support
Geometry. -
DecalGeometry,EdgesGeometry,WireframeGeometry,Projector,LineGeometry,LineSegmentsGeometry,ConvexHull,EdgeSplitModifierandTessellateModifierno longer supportGeometry. -
ConvexBufferGeometryhas been removed. Similar toDecalGeometry,ConvexGeometryis now derived fromBufferGeometry. -
TeapotBufferGeometryhas been renamed toTeapotGeometry. -
RoundedBoxBufferGeometryhas been renamed toRoundedBoxGeometry. -
3MFLoader,AMFLoader,EXRLoader,FBXLoader,KMZLoader,NRRDLoader,TiltLoaderandVTKLoadernow depend onfflate. Other decompression libs (JSZipandZLib) are no longer used. -
SubdivisionModifierhas been removed. -
SimplifyModifierno longer supportsGeometryand now relies onBufferGeometryUtils. -
OBJLoader2has been removed. If you still need it, use this repository. -
OrbitControlsno longer listens to key events by default. You have to callOrbitControls.listenToKeyEvents()if your app requires key controls. -
BufferGeometryUtils.computeTangents()has been moved into the core. You can now useBufferGeometry.computeTangents(). -
RectAreaLightHelper.update()has been removed.
-
ColladaLoaderstores animation clips incollada.scene.animationsnow. -
WebGLRenderer.getClearColor()now expects a target argument. -
TypedArrayUtilsandwebgl_nearestneighbourdemo have been removed. - The converter scripts
fbx2threeandobj2threehave been removed.
-
Matrix3/4.getInverse()has been deprecated. Please use the new method.invert()with this pattern:matrixInv.copy( matrix ).invert();. -
Quaternion.inverse()has been renamed toQuaternion.invert(). - The option
forcePowerOfTwoTextureshas been removed fromGLTFExporter. - The first parameter of
DRACOExporter.parse()is now of typeMeshorPoints. -
DragControlsnow use Pointer Events. This change might require that you move your custom event listeners to Pointer Events, too.
-
ExplodeModifierhas been removed. -
Fireand the respectivewebgl_fireexample have been removed.
- The
detailparameter ofPolyhedronGeometryis now more fine-grained. Meaning it can produce now more different subdivisions. -
LightShadowhas been removed from the public API. If you need to configure a custom shadow frustum for spot lights, use the newSpotLightShadow.focusproperty. - Geometry generator classes are now located in their own files. For example
BoxGeometryandBoxBufferGeometryno longer share a single file and are now located insrc/geometries/BoxGeometry.jsandsrc/geometries/BoxBufferGeometry.js. -
WebGLCubeRenderTarget.textureis now of typeCubeTexture. -
TimelinerControllerand the respective examplemisc_animation_authoringhave been removed. -
TypedGeometryExporterhas been removed. - A performance improvement for
DRACOLoaderrequired an update of the DRACO library.
-
Scene.dispose()has been removed. -
WebGLRenderTarget.stencilBufferandWebGLCubeRenderTarget.stencilBufferare now false by default. Enable the buffer by settingstencilBuffer: truein the constructor options. - When using
ShaderMaterialandRawShaderMaterial, it's now necessary to set the newglslVersionproperty toTHREE.GLSL3if you want to write GLSL 3.0 shader code. The GLSL version directive is not allowed in custom shader code anymore. It's always added automatically by the engine. -
SpotLightShadowandDirectionalLightShadowhave been removed from the public API. -
CannonPhysicshas been removed. -
OrbitControls,TrackballControlsandTransformControlsnow use Pointer Events. This change might require that you move your custom event listeners to Pointer Events, too.
-
MeshPhysicalMaterial.transparencyhas been renamed toMeshPhysicalMaterial.transmission.
-
SphericalReflectionMappingis no longer supported. Consider using a Matcap texture withMeshMatcapMaterialinstead. -
WebGLRenderer.toneMappingWhitePointhas been removed. -
Uncharted2ToneMappinghas been removed. However, it's now possible to define your own custom tone mapping function by usingCustomToneMapping. Check out the tone mapping example for more information. -
WebGLRendererautomatically creates a WebGL 2 rendering context now (and fallbacks to WebGL 1 if necessary). If your project can only use WebGL 1, you can use WebGL1Renderer. - The default value of
OrbitControls.screenSpacePanningis nowtrue. -
Watercan only be used when settingWebGLRenderer.outputEncodingtoTHREE.LinearEncoding. -
shininess,specularandspecularMaphave been removed fromMeshToonMaterial.
- The TypeScript declaration for
Texture.mipmapsis nowany[]instead ofImageData[]. -
InstancedBufferGeometry.maxInstancedCounthas been renamed toInstancedBufferGeometry.instanceCount. - The constructor of
CubeCamerahas changed. It now expects an instance of WebGLCubeRenderTarget as third parameter. The fourth parameteroptionshas been removed.
- The default value of
WebGLRenderer.toneMappingis nowNoToneMapping. -
Sphere.empty()has been renamed toSphere.isEmpty(). -
TranslucentShaderhas been renamed toSubsurfaceScatteringShader. -
PDBLoaderno longer returns raw bonds data in the JSON result. - The
optionsparameter ofVRButton.createButton()has been removed. Please set the reference space type viaWebGLRenderer.xr.setReferenceSpaceType()instead.
- The
throwOnDegenerateparameter ofMatrix3.getInverse()andMatrix4.getInverse()has been removed. In addition, the methods now return the zero matrix if one tries to invert a matrix having a determinant of zero. - The TypeScript declaration for
Geometry.boundingBoxandGeometry.boundingSphereis now nullable, as it actually be. - The shader syntax
#pragma unroll_loopis now deprecated. Use#pragma unroll_loop_start/endinstead.
-
Material.vertexColorsis now a boolean. The default value isfalse. -
Raycasterhonors now invisible 3D objects in intersection tests. Use the new property Raycaster.layers for selectively ignoring 3D objects during raycasting. -
GLTFLoadernow returns an instance ofGroupinstead ofScene. -
GLTFLoadernow setsdepthWritetofalsefor transparent materials. - The
OBJandFBXconverters now require the esm npm package.
-
Mathhas been renamed toMathUtils, and/examples/js/utils/MathUtils.jshas been promoted to the core. -
WebGLRenderTargetCubehas been renamed toWebGLCubeRenderTarget, and the constructor signature is nowWebGLCubeRenderTarget( size, options ). -
Geometry.applyMatrix()has been renamed toGeometry.applyMatrix4(). -
BufferGeometry.applyMatrix()has been renamed toBufferGeometry.applyMatrix4(). -
Object3D.applyMatrix()has been renamed toObject3D.applyMatrix4(). -
LineSegmentsGeometry.applyMatrix()has been renamed toLineSegmentsGeometry.applyMatrix4(). -
Frustum.setFromMatrix()has been renamed toFrustum.setFromProjectionMatrix(). -
RaytracingRendererhas been removed. -
WebGLDeferredRendererhas been removed. -
GammaCorrectionShaderconverts tosRGBnow. - The color of the default material for
Mesh,Points,Line, and all derived classes, is now white.
-
PMREMGeneratorhas a new implementation and is now part of the core library. Check out the webgl_loader_gltf example to understand the new workflow. -
WebGLRenderer.gammaInputhas been removed. Set the encoding for textures viaTexture.encodinginstead. -
WebGLRenderer.gammaOutputhas been removed. Please useWebGLRenderer.outputEncodinginstead. -
MeshToonMaterialdoes not support environment maps anymore. -
Mesh.drawModeandMesh.setDrawMode()have been removed.WebGLRendererdoes render meshes always withTHREE.TrianglesDrawModenow. Please useBufferGeometryUtils.toTrianglesDrawMode()to transformTHREE.TriangleStripDrawModeandTHREE.TriangleFanDrawModeof existing geometries toTHREE.TrianglesDrawMode. -
TerrainShader,SkinShaderandCarControlshave been removed. -
WebVRsupport has been removed. Please useWebXRinstead. - The default value of
MeshStandardMaterial.roughnesshas changed from0.5to1. - The default value of
MeshStandardMaterial.metalnesshas changed from0.5to0. -
FaceNormalsHelper,LightProbeHelper,PositionalAudioHelper,RectAreaLightHelper,VertexNormalsHelperandVertexTangentsHelperare now part of the examples. - Instances of
BufferGeometryrequire at least a position attribute or index now.
- The semantics of
Material.needsUpdatehas changed. Setting it totruenow increases the internal version counter (similar toTextureorBufferAttribute). It's not possible anymore to useMaterial.needsUpdatein conditional statements. -
LegacyGLTFLoaderandLegacyJSONLoaderhave been removed. -
WebVRManager.setPoseTarget()has been removed. -
WebVRManagerandWebXRManagerdo no longer modify the camera when not presenting. - The default value of
Ray.directionis now( 0, 0, - 1). - Instances of
BufferGeometryrequire at least a position attribute now.
-
BufferAttribute.dynamicandBufferAttribute.setDynamic()have been deprecated. Please useBufferAttribute.usageandBufferAttribute.setUsage()instead. -
BufferGeometry.addAttribute()has been renamed toBufferGeometry.setAttribute(). -
BufferGeometry.removeAttribute()has been renamed toBufferGeometry.deleteAttribute(). -
CubemapGeneratorhas been removed. Please useWebGLRenderTargetCube.fromEquirectangularTexture()instead. -
EquirectangularToCubeGeneratorhas been removed. Please useWebGLRenderTargetCube.fromEquirectangularTexture()instead. - The second constructor parameter
domElementofOrbitControls,TrackballControls,TransformControls,FlyControls,PointerLockControlsandFirstPersonControlsis now mandatory. -
OrbitControlsandTrackballControlsdo not supportdocumentas an argument fordomElementanymore. Please use the canvas element of the renderer (renderer.domElement) instead. -
Audio.startTimehas been removed. Please useAudio.play( delay )instead. - When loading a
DataTextureviaDataTextureLoader, it's defaultminFiltervalue is nowLinearFilter. -
AssimpJSONLoaderhas been removed. Please useAssimpLoaderinstead. -
SoftwareRendererhas been removed.
-
Loader.Handlerhas been removed. UseLoadingManager's.addHandler(),.removeHandler()and.getHandler()instead. -
BabylonLoaderhas been removed. -
PlayCanvasLoaderhas been removed. -
AWDLoaderhas been removed. -
SEA3DLoaderhas been removed. -
EditorControlsis now located ineditor/js. -
OrthographicTrackballControlshas been removed.TrackballControlsnow supports orthographic cameras. -
BufferAttribute.setArray()has been removed. - Displacement maps do not ignore the transformation of texture coordinates anymore.
- It's not necessary anymore to set
.needsUpdatetotruewhen creating aDataTexture(assuming the data are provided at construction time as a constructor parameter). -
BoxGeometryandBoxBufferGeometryare now ES6 classes (except inthree.jsandthree.min.js).
-
CTMLoaderhas been removed. - In
MeshPhysicalMaterial, renamed.clearCoatto.clearcoatand.clearCoatRoughnessto.clearcoatRoughness. - Removed
.initMaterials()and.createMaterial()fromLoader. - The obsolete callbacks
onLoadStart(),onLoadProgress()andonLoadComplete()have been removed fromLoader. -
DRACOLoader.setDecoderPath()andDRACOLoader.setDecoderConfig()are now instance methods.
- In the Texture Filter Constants,
MipMapis nowMipmap. For example,THREE.LinearMipMapLinearFilteris nowTHREE.LinearMipmapLinearFilter. - Renamed
WebGLRenderer.getActiveMipMapLevel()toWebGLRenderer.getActiveMipmapLevel(). -
WEBGL(the namespace fromexamples/js/WebGL.js) is now in theTHREEnamespace. -
WEBVR(the namespace fromexamples/js/vr/WebVR.js) is now in theTHREEnamespace. - The module
MapControlsis now part ofOrbitControls. Check out the official example for more information. -
OrbitControlsandMapControlsnow have a new default value fordampingFactor. -
WebGLRenderer.contexthas been removed. Please useWebGLRenderer.getContext()instead. -
FBXLoadernow correctly sets the texture encoding. When using FBX assets in your scene, you have to setrenderer.gammaOutput = true;(unless you need post-processing in linear colorspace). - When loading an FBX asset with TGA textures,
FBXLoaderrequires now the following setup:THREE.Loader.Handlers.add( /\.tga$/i, new TGALoader() );.
- All examples now use ES6 modules.
-
VRMLLoaderhas a new implementation. It's necessary now to includechevrotain.min.jsinto your code. Check out the official example for more details. - The optional
updatearg has been removed from the public API of the following methods:Euler.setFromRotationMatrix( m, order ),Euler.setFromQuaternion( q, order ), andQuaternion.setFromEuler( e ). -
GPUParticleSystemhas been removed. -
DracoExporterhas been renamed toDRACOExporter. - Objects of type
LODare now updated automatically byWebGLRenderer. SetLOD.autoUpdatetofalseif you want to perform the update by yourself. - MTL related functions like
.loadMtl()have been removed fromOBJLoader2. Please useMTLLoaderandMtlObjBridgeas shown in basic obj2 example. -
OBJLoader2has been removed fromexamples/js/loaders. Please use the module version inexamples/jsm/loaders.
-
WebGLRenderer.debug.checkShaderErrorsis nowtrueby default. -
EffectComposer.setSize()now respects the pixel ratio. An instance ofEffectComposercan now be resized with the samewidthandheightvalues likeWebGLRenderer. - Renamed
QuickHulltoConvexHull. The file is now located inexamples/js/math. -
SimplexNoiseandImprovedNoiseare now in theTHREEnamespace and located inexamples/js/math. -
AnimationClipCreatorandTimelinerControllerare now located inexamples/js/animation. -
ParametricGeometriesis now located inexamples/js/geometries. -
hilbert2dandhilbert3Dwere removed. Please useGeometryUtils.hilbert2D()andGeometryUtils.hilbert3D()instead.
- For performance reasons,
WebGLRendererdoes no longer perform error checking and reporting when shader programs are being compiled. You have to setrenderer.debug.checkShaderErrorstotrueto restore the previous behavior. -
Object3D.applyMatrix()now updates the local matrix ifObject3D.matrixAutoUpdateis set totrue.
- The
npmscriptnpm run editorwas removed. The editor is now a Progressive Web App (PWA). - The callback parameter of
SVGLoader.onLoad()is now an object (data) containing the root node of the SVG document and an array ofShapePathobjects. Also, all paths are returned now (not only the ones withfillcolor) - Removed
.allocTextureUnit(),.setTexture2D(),.setTexture()and.setTextureCube()fromWebGLRenderer. These methods were never intended to be part ofWebGLRenderer's public API and are now private (as a part ofWebGLTexture).
- Removed
renderTargetandforceClearparameters fromWebGLRenderer.render(). Please use.setRenderTarget()and.clear()instead before you perform the rendering. Be aware that it's now necessary to executerenderer.setRenderTarget( null )in order to unset an active render target. - Removed
.activeCubeFaceand.activeMipMapLevelfromWebGLRenderTargetCube. They are now parameters ofWebGLRenderer.setRenderTarget(). - In
WebGLRenderer.setViewport()andWebGLRenderer.setScissor(),(x, y)is the coordinate of the lower left corner of the rectangular region. -
WebGLRenderer.getSize()now requires aVector2argument. -
WebGLRenderer.getCurrentViewport()now requires aVector4argument.
- Added
FirstPersonControls.lookAt().lat,lon,phi,thetaandtargetwere removed from the public API.FirstPersonControlsalso respects the initial camera orientation now. -
MeshStandardMaterialandMeshPhysicalMaterialnow preserve energy for IBL lighting, resulting in brighter, more accurate colors for metallic materials with high roughness values when lit via a map generated by PMREMGenerator.
-
Octreehas been removed. - Removed
Geometrysupport fromMesh.updateMorphTargets(). UseBufferGeometryinstead. - The default orientation of
RectAreaLighthas changed. It now looks along the negative z-axis.
-
WebGLRenderTarget.texture.generateMipmapsis now set tofalseby default. - There is a new (not backwards compatible) implementation for
SSAOShaderandSSAOPass. -
JSONLoaderhas been removed from core. It is now located inexamples/js/loaders/deprecated/LegacyJSONLoader.js. - Removed
Geometrysupport fromObjectLoader. You have to includeLegacyJSONLoaderif you still want to load geometry data of typeGeometry. - Removed
Geometrysupport fromSkinnedMesh. UseBufferGeometryinstead. - Removed
SkinnedMesh.initBones(). TheSkinnedMeshconstructor does not build the bone hierarchy anymore. You have to do this by yourself and then call SkinnedMesh.bind() in order to bind the prepared skeleton.
- Renamed
ObjectLoader.setTexturePath()toObjectLoader.setResourcePath(). AddedObjectLoader.setPath(). -
CanvasRendererhas been removed. - The order of
LoadingManager's callbacks has changed.onError()is now called beforeonLoad().
- Removed
BinaryLoader. -
WebGLRenderer.clearTarget()is now deprecated. UseWebGLRenderer.setRenderTarget()in combination withWebGLRenderer.clear()instead. - Renamed
JSONLoader.setTexturePath()toJSONLoader.setResourcePath(). - Renamed
MTLLoader.setTexturePath()toMTLLoader.setResourcePath(). -
GLTFLoader.setPath()is now used for the original glTF file. UseGLTFLoader.setResourcePath()if you want to change the path for resources like textures. -
TDSLoader.setPath()is now used for the original 3DS file. UseTDSLoader.setResourcePath()if you want to change the path for resources like textures. - Refactored
PointerLockControls. Please have a look at the official example to see the new API. -
Detector.jswas refactored toWebGL.js.
-
Object3D.lookAt()now supports rotated parents. -
EquirectangularToCubeGeneratorconstructor args have changed.
-
OrbitControls.mouseButtonskey-value pairs have been renamed. Please make a note of it if you wish to change the mouse button bindings. -
BufferSubdivisionModifierhas been removed. UseSubdivisionModifierinstead. - Sprites are now rendered concurrently with opaque and transparent objects.
- Keyframe tracks are no longer automatically validated and optimized. Users need to explicitly call
.validate/optimize(). - Renamed shader chunk
lights_pars_mapstoenvmap_physical_pars_fragment.
-
TDSLoadernow producesBufferGeometry. -
MD2Loadernow producesBufferGeometry. -
XLoadernow producesBufferGeometry. - Removed deprecated CTM, FBX, msgpack and UTF8 converters.
- Removed deprecated
UTF8Loader. - Renamed
EquiangularToCubeGeneratortoEquirectangularToCubeGenerator. - Removed deprecated
VRControlsandVREffect. -
DaydreamControllerandGearVRControllerare now deprecated. The new directory of these file isexamples/js/vr/deprecated/.
- Renamed option
amounttodepthinExtrudeBufferGeometry. - The Blender exporter has been removed. See #12903 and #14117 for more information. Also have a look at the new guide Loading 3D models.
-
STLBinaryExporterhas been removed. It's now part ofSTLExporter. - Renamed
WebGLRenderer.animate()toWebGLRenderer.setAnimationLoop().
- Removed option
framesfromExtrudeBufferGeometry. - Removed
.getArrays()fromExtrudeBufferGeometry. - Removed
.addShapeList()fromExtrudeBufferGeometry. - Removed
.addShape()fromExtrudeBufferGeometry. -
ExtrudeGeometry.WorldUVGeneratoris now private. -
SVGLoadernow parses SVG input and returns an array ofShapePathobjects.
-
Geometry.center()andBufferGeometry.center()now returnthisinstead ofoffset. -
optionalTargets are now mandatory method parameters (with exception of curve classes). - Split
ShaderChunk.lights_parsintoShaderChunks.lights_pars_beginandShaderChunks.lights_pars_maps. - Split
ShaderChunk.lights_templateintoShaderChunks.lights_fragment_begin,ShaderChunnks.lights_fragment_mapsandShaderChunks.lights_fragment_end. - Split
ShaderChunk.normal_fragmentintoShaderChunks.normal_fragment_beginandShaderChunks.normal_fragment_maps. - The semantics of
AnimationAction.repetitionhas changed. The first run of the animation is now taken into account. - Removed
copyIndicesArray()fromBufferAttribute. - Removed
getWorldRotation()fromObject3D. - Renamed
Triangle.area()toTriangle.getArea(). - Renamed
Triangle.barycoordFromPoint()toTriangle.getBarycoord(). - Renamed
Triangle.midpoint()toTriangle.getMidpoint(). - Renamed
Triangle.normal()toTriangle.getNormal(). - Renamed
Triangle.plane()toTriangle.getPlane(). - Removed options
materialandextrudeMaterialfromExtrudeGeometry. - Removed
verticesfromrenderer.info.render. - BasicDepthPacking: Depth values at the near plane are now encoded as white. Depth values at the far plane as black.
-
Lensflarehas been moved out of the core. Please use examples/js/objects/Lensflare.js if you need lens flares in your scene. Also have a look at the official example to see the new usage ofLensflare. -
SceneUtilshas been moved out of the core. It is now located at examples/js/utils/SceneUtils.js. - Removed
.shadowMap.renderReverseSidedfromWebGLRenderer. SetMaterial.shadowSideinstead. - Removed
.shadowMap.renderSingleSidedfromWebGLRenderer. SetMaterial.shadowSideinstead. - Removed
.setFaceCulling()fromWebGLRenderer. - Removed the JSON exporters for Maya and 3ds Max.
- Removed
.computeLineDistances()fromGeometry. UseLine.computeLineDistances()instead.
-
ImageUtilshas been removed. - Removed
extractUrlBase()fromLoader. UseLoaderUtils.extractUrlBase()instead. -
ShapeUtils.triangulateShape()uses a new and more robust polygon triangulation algorithm now. -
ShapeUtils.triangulate()has been removed. -
Reflector,Refractor,WaterandWater2accept now any planar geometry and not only rectangular ones. The respective constructors have a new signature.
-
CombinedCamerahas been removed. -
ColladaLoader2has replacedColladaLoader. -
VRMLLoadernow producesBufferGeometry. -
OBJLoader2has a new dependencyLoaderSupport(see example). -
WebVR.jswas rewritten. Check out the corresponding examples to see the new API. - Renamed
CatmullRomCurve3'stypetocurveType. - Removed
createPointsGeometry()fromCurvePath. Check out this example to see how to create a geometry from a series of points. - Removed
createSpacedPointsGeometry()fromCurvePath. - Removed
createGeometry()fromCurvePath. - Renamed
Path'sfromPoints()tosetFromPoints(). - Removed
extractAllPoints()fromShape. - Renamed
MirrortoReflector. - Renamed
lengthManhattan()ofVector2,Vector3andVector4tomanhattanLength(). - Renamed
distanceToManhattan()ofVector2andVector3tomanhattanDistanceTo(). - Renamed
AxisHelpertoAxesHelper.
-
GLTF2Loaderhas replacedGLTFLoader. - The result of the
onLoadcallback ofPDBLoaderhas changed. Please have a look at the corresponding example. -
AssimpLoadernow usesLoadingManager. - Removed
setPreferredShading()fromColladaLoader.
- Removed deprecated
Animation,AnimationHandlerandKeyFrameAnimation - Swapped y in setViewport() and setScissor()
-
MultiMaterialhas been removed. Use an Array instead. - Removed
multiplyToArray()fromMatrix4. - Removed deprecated
SceneLoader. -
BoxHelper update()no longer has arguments. Use.setFromObject()to assign a different object to the helper. -
BoxHelperno longer supports objects of typeBox3. -
DecalGeometrynow produces aBufferGeometry.
- Removed
applyToVector3Array()fromMatrix3. - Removed
applyToVector3Array()fromMatrix4. - Removed
Spline. UseCatmullRomCurve3instead. - Removed
SplineCurve3. UseCatmullRomCurve3instead. - Removed
applyProjection()fromVector3. UseapplyMatrix4()instead. - Renamed
Vector2'sfromAttribute()tofromBufferAttribute(). - Renamed
Vector3'sfromAttribute()tofromBufferAttribute(). - Renamed
Vector4'sfromAttribute()tofromBufferAttribute(). - Renamed
BinaryTextureLoadertoDataTextureLoader. - Changed
Matrix4'smakeFrustum()tomakePerspective().
-
STLLoadernow produces aBufferGeometry. -
PDBLoadernow produces aBufferGeometry. -
AssimpJSONLoadernow produces aBufferGeometry. - Renamed
Matrix3'sapplyToBuffer()toapplyToBufferAttribute(). - Renamed
Matrix4'sapplyToBuffer()toapplyToBufferAttribute(). -
BoundingBoxHelperhas been removed. UseBoxHelperinstead. - Renamed
XHRLoadertoFileLoader.
-
PLYLoadernow produces aBufferGeometry. - The
taperparameter inTubeGeometryhas been removed.
- Renamed
Box2'scenter()togetCenter(). - Renamed
Box2'ssize()togetSize(). - Renamed
Box3'scenter()togetCenter(). - Renamed
Box3'ssize()togetSize(). - Renamed
Line3'scenter()togetCenter().
-
THREE.GridHelper:setColors()removed, pass them in the constructor instead:new THREE.GridHelper( size, step, color1, color2 ).
-
THREE.Audio.loaddeprecated, use newTHREE.AudioLoaderinstead. - Uniforms no longer need a
.typeproperty. - The uniform
boneGlobalMatriceshas been renamed toboneMatrices.
- Changed
Vector3'ssetFromMatrixColumn(index, m)tosetFromMatrixColumn(m, index). - Removed
WebGLRenderTarget'sshareDepthFrom.
- Renamed
enableScissorTesttosetScissorTest. - Renamed
shadowBiastoshadow.bias. - Renamed
shadowMapWidthtoshadow.mapSize.width. - Renamed
shadowMapHeighttoshadow.mapSize.height. - Renamed
shadowCameraNeartoshadow.camera.near. - Renamed
shadowCameraFartoshadow.camera.far. - Renamed
shadowCameraFovtoshadow.camera.fov. - Removed
shadowDarkness. Add aTHREE.AmbientLightto your scene instead. - Removed
ClosedSplineCurve3. UseCatmullRomCurve3withclosedset totrue. - Removed
MeshPhongMaterial'smetal. - Renamed
Box2'sempty()toisEmpty(). - Renamed
Box3'sempty()toisEmpty().
- Removed
morphColorsfromGeometry. - Removed
clampBottomfromMath. -
FontUtilsandTextGeometrymoved out of core. -
shadowDarknessdefault value is now1.
- Renamed
PointCloudtoPoints. - Renamed
PointCloudMaterialtoPointsMaterial. - Removed
computeTangents()fromGeometryandBufferGeometry. - Moved all
shadowMap*properties inWebGLRenderertoshadowMap.*. - Removed
BufferGeometry'sdrawcall.index. -
LineSegments( geometry, material )should now be used instead ofLine( geometry, material, THREE.LinePieces ).
- Removed
ambientfromMaterial. - Removed
recursiveparameter fromgetObjectBy*().
- Removed
sortParticlesfromPointCloud. - Removed
renderDepthfromObject3D. -
UVMapping,CubeReflectionMapping,CubeRefractionMapping,SphericalReflectionMappingandSphericalRefractionMappingare no longer functions.
-
WebGLRenderer'sinitMaterialwas made private. -
ColladaLoadernow returns aSceneinstead of anObject3D.
-
Object3D'sposition,rotation,quaternionandscaleproperties are now immutable. -
BufferGeometry'saddAttributemethod now takes aBufferAttributeinstead of the various attribute types (e.g.,Int16Attribute,Float32Attribute).
- Removed
Face3'scentroid. - Removed
Geometry'scomputeCentroids(). - Moved
GeometryUtils'smergetoGeometry.
- Renamed
CubeGeometrytoBoxGeometry. - Removed
dynamicproperty fromBufferGeometry.
- Removed
physicallyBasedShadingproperty fromWebGLRenderer.
-
WebGLRendererbackground to opaque (black) by default. Pass{alpha=true}when creating WebGLRenderer for previous default behaviour.
-
Particleremoved. UseSpriteinstead. -
ParticleMaterialremoved. UseParticleSystemMaterialorSpriteMaterial.
-
Face4removed. Use 2Face3to emulate it. -
OrbitControls'szoomIn()andzoomOut()renamed todollyIn()anddollyOut().
-
Object3D.rotationis now of typeTHREE.Euler. - Removed
Object3D.useQuaternion. The library now uses quaternions by default. However, there is some magic in place to keepObject3D'srotation(Euler) working. - Moved
Object3D.eulerOrdertoObject3D.rotation.order. - Moved
Object3D.defaultEulerOrdertoEuler.DefaultOrder. - Removed
setGeometry()andsetMaterial()fromMesh. - Removed
Vector3.setEulerFromRotationMatrix(), useEuler.setFromRotationMatrix()instead. - Removed
Vector3.setEulerFromQuaternion(), useEuler.setFromQuaternion()instead.
- Removed
Matrix4'stranslate(),rotateX(),rotateY(),rotateZ(),rotateByAxis()andcrossVector(). - Removed
setClearColorHex()fromCanvasRendererandWebGLRenderer. UsesetClearColor()instead. - Renamed
Matrix4'sextractPosition()tocopyPosition(). - Renamed
Matrix4'ssetRotationFrom*()tomakeRotationFrom*(). - Renamed
Matrix4'scompose()tomakeFromPositionQuaternionScale(). - Renamed
Object3D'sgetChildByName()togetObjectByName(). - Removed
Object3D'smatrixRotationWorldproperty.
- For
BufferGeometry-
geometry.verticesNeedUpdatetogeometry.attributes.position.needsUpdate -
geometry.elementsNeedUpdatetogeometry.attributes.index.needsUpdate -
geometry.normalsNeedUpdatetogeometry.attributes.normal.needsUpdate -
geometry.uvsNeedUpdatetogeometry.attributes.uv.needsUpdate -
geometry.colorsNeedUpdatetogeometry.attributes.color.needsUpdate -
geometry.tangentsNeedUpdatetogeometry.attributes.tangent.needsUpdate -
*->geometry.attributes.custom.needsUpdate
-
- Removed
Matrix4'srotateAxis. UseVector3.transformDirection( matrix )instead. - Removed
AsteriskGeometry. - Removed
Color'ssetHSV. UseColorConverter.setHSV( color, h, s, v )instead. - Renamed
JSONLoader'screateModel()toparse().
- Removed
getPosition()andgetColumn*()fromMatrix4 -
Color.setHSV()andColor.getHSV()replaced by.setHSL()and.getHSL() - Replaced
ColorUtils.adjustHSV()with Color's.offsetHSL() - Renamed
Box3/Line3/Plane/Ray/Sphere's.transform()toapplyMatrix4()
-
Matrix3.multiplyVector3()changed toVector3.applyMatrix3() -
Matrix4.multiplyVector3()changed toVector3.applyMatrix4()andVector3.applyProjection() -
Matrix4.multiplyVector4()changed toVector4.applyMatrix4() -
Quaternion.multiplyVector3()changed toVector3.applyQuaternion() - Renamed
Colormethods:-
.lerpSelf()to.lerp()
-
- Renamed
Vector2,Vector3andVector4methods:-
.add()to.addVectors() -
.addSelf()to.add() -
.sub()to.subVectors() -
.subSelf()to.sub() -
.cross()to.crossVectors() -
.crossSelf()to.cross() -
.minSelf()to.min() -
.maxSelf()to.max() -
.clampSelf()to.clamp() -
.lerpSelf()to.lerp()
-
- Renamed
Matrix4methods:-
.multiply()to.multiplyMatrices() -
.multiplySelf()to.multiply()
-
- Renamed
Quaternionmethods:-
.multiply()to.multiplyQuaternions() -
.multiplySelf()to.multiply()
-
- Renamed
Frustummethods:-
.contains()to.intersectsObject()
-
- Moved
GeometryUtils.explodetoExplodeModifier - Moved
GeometryUtils.tessellatetoTessellateModifier - Moved
ShaderUtils.libtoShaderLib -
Matrix4.makeTranslationandMatrix4.makeScalenow take three scalars instead ofVector3.
-
Spritematerial properties are now inSpriteMaterial, used like thisnew THREE.Sprite( new THREE.SpriteMaterial( { color: 0xff0000, map: texture, alphaTest: 0.5 } ) ). - Renamed migrated sprite material properies:
Sprite.affectedByDistance=>SpriteMaterial.sizeAttenuationandSprite.mergeWith3D=>SpriteMaterial.depthTest - Renamed
renderer.shadowMapCullFrontFaces=>renderer.shadowMapCullFace(default valuetrue=>THREE.CullFaceFront, other optionfalse=>THREE.CullFaceBack). - Renamed
color.getContextStyletocolor.getStyle. - Moved
Raycasting methods toRaycaster. -
Rectanglereplaced withBox2. -
UVreplaced withVector2. This means.uand.vare now.xand.y. -
Matrix4.makeTranslationandMatrix4.makeScalenow takeVector3instead of three scalars. - Moved
SubdivisionModifierout of the build toexamples/js/modifiers. - Renamed and moved
Renderer.deallocateObject()=>Geometry.dispose()andBufferGeometry.dispose(). - Renamed and moved
Renderer.deallocateRenderTarget()=>WebGLRenderTarget.dispose().
-
Sprite's size is no longer automatically based on the image size, usesprite.scale.set( imageWidth, imageHeight, 1.0 )to achieve the old behavior -
SceneLoaderand scene format now usewidthSegments,heightSegments,depthSegmentsinstead ofsegmentsWidth,segmentsHeight,segmentsDepthfor definitions of plane, cube and sphere geometries -
SceneLoaderand scene format now usematerialproperty with single material id string instead ofmaterialsarray for meshes -
MeshPhongMaterialnow usesperPixel = trueby default -
WebGLRendererconstructor doesn't use anymoremaxLightsparameter: shaders will be generated with the exact number of lights in the scene (it's now up to the application layer to make sure shaders compile on a particular system) -
ColorUtils.rgbToHsv()got moved intoColor.getHSV() -
Geometryno longer has amaterialsproperty.MeshFaceMaterialsusage is now like this:new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( [ material1, material2 ] ) ). Meaning thatface.materialIndexwill map the array passed toMeshFaceMaterials. - Loader callbacks which previously only had
geometryparameter, are now also passed a second one:materials:loader.load( 'file.js', function ( geometry, materials ) {} ). -
GeometryUtils.clone()is now a method inGeometry.
-
ShaderExtrashave been split in a different files.CopyShader,FXAAShader,NormalShader, etc - Replaced
SceneUtils.traverseHierarchywithobject.traverse. - Removed
SceneUtils.showHierarchy. Useobject.traverse( function ( child ) { child.visible = false } )instead. - Moved
*Controlstoexamples/js/controls. - Split
SceneUtils.cloneObjectinto*.clone()
-
CameraHelperAPI changes: helper is not anymore child of camera, instead it uses reference to camera world matrix - texture uniform changes: texture units are now assigned automatically, texture object goes to
valueproperty instead oftextureone{ type: "t", value: 0, texture: map }=>{ type: "t", value: map } -
normalScaleuniform in normal map shader is nowVector2(to be able to invert separatelyxandyto deal with different tangent bases) -
CTMLoader.loadandCTMLoader.loadPartsnow use single parameter object foruseWorkeranduseBuffers:loader.load( url, callback, useWorker, useBuffers )=>loader.load( url, callback, { useWorker: true, useBuffers: true } ) -
CTMLoadernow createsBufferGeometryby default, setuseBuffersparameter tofalseif you needGeometry - type for non-procedural geometries changed in the scene format:
ascii_mesh=>ascii,bin_mesh=>binary,embedded_mesh=>embedded -
UTF8Loader(and compressor) were changed to a newer version, supporting more recent version of UTF8 format (r100+); loader doesn't create anymore geometries but instead it returns hierarchy with potentially multiple meshes created per each material (or by splitting large model)
-
Vector3's.getRotationFromMatrix( matrix, scale )toVector3's.setEulerFromRotationMatrix( matrix, order ). -
Vector3's.getEulerXYZFromQuaternion( quaternion )and.getEulerYZXFromQuaternion( quaternion )to.setEulerFromQuaternion( quaternion, order ). -
DOMRendererandSVGRendererno longer included in common build. - texture coordinates aren't anymore flipped in the geometries, instead textures have
flipYproperty (true by default); all models need to be re-exported / reconverted (tools have been updated as well).
workaround:uv.v = 1 - uv.v; -
PlaneGeometrychanged back to vertical orientation (facing screen instead of laying on the ground).
workaround:mesh.rotation.x = - Math.PI / 2;orgeometry.applyMatrix( new THREE.Matrix4().makeRotationX( - Math.PI / 2 ) ); -
doubleSided/flipSidedproperties moved fromObject3DtoMaterial'ssideproperty (THREE.FrontSide,THREE.BackSideandTHREE.DoubleSide). -
objectMatrixin shaders was renamed tomodelMatrix. - JIT caching removed from
Animation. -
geometry.dynamicis nowtrueby default. -
Three.jsbuild renamed tothree.min.js.
- changed
PlaneGeometryfrom vertical to horizontal orientation. - renamed
__dirtyXXXattribute properties toxxxNeedUpdate. - removed
Vertexclass, useVector3instead.
- Removed
intersectScenefromRay. UseintersectObjects( array )instead.
-
loader.load( { model: url, callback: callback } )toloader.load( url, callback ).