- 
          
 - 
                Notifications
    
You must be signed in to change notification settings  - Fork 36.1k
 
Migration Guide
        Michael Herzog edited this page May 18, 2025 
        ·
        779 revisions
      
    
Updating in steps helps manage API changes, as deprecation warnings last for 10 releases
- 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 ).