Technology moves fast! ⚑ Don't get left behind.🚢 Subscribe to our mailing list to keep up with latest and greatest in open source projects! πŸ†


Subscribe to our mailing list

three.js

JavaScript 3D library.

Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star full 4f7b624809470f25b6493d5a7b30d9b9cb905931146e785d67c86ef0c205a402Star half bd79095782ee4930099175e5ce7f4c89fa3ddabcd56fffcc7c74f6f2a2d46b27 (3 ratings)
Rated 4.67 out of 5
Subscribe to updates I use three.js


Statistics on three.js

Number of watchers on Github 39950
Number of open issues 735
Average time to close an issue about 22 hours
Main language JavaScript
Average time to merge a PR about 21 hours
Open pull requests 433+
Closed pull requests 187+
Last commit over 1 year ago
Repo Created over 9 years ago
Repo Last Updated over 1 year ago
Size 579 MB
Homepage https://threejs.org/
Organization / Authormrdoob
Latest Releaser90
Contributors419
Page Updated
Do you use three.js? Leave a review!
View open issues (735)
View three.js activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating three.js for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)
What people are saying about three.js Leave a review
Well organized, saves development time
I love it!

three.js

Latest NPM release License Dependencies Dev Dependencies

JavaScript 3D library

The aim of the project is to create an easy to use, lightweight, 3D library. The library provides <canvas>, <svg>, CSS3D and WebGL renderers.

Examples β€” Documentation β€” Wiki β€” Migrating β€” Questions β€” Forum β€” Gitter β€” Slack

Usage

Download the minified library and include it in your HTML, or install and import it as a module, Alternatively see how to build the library yourself.

<script src="js/three.min.js"></script>

This code creates a scene, a camera, and a geometric cube, and it adds the cube to the scene. It then creates a WebGL renderer for the scene and camera, and it adds that viewport to the document.body element. Finally, it animates the cube within the scene for the camera.

var camera, scene, renderer;
var geometry, material, mesh;

init();
animate();

function init() {

    camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 );
    camera.position.z = 1;

    scene = new THREE.Scene();

    geometry = new THREE.BoxGeometry( 0.2, 0.2, 0.2 );
    material = new THREE.MeshNormalMaterial();

    mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );

    renderer = new THREE.WebGLRenderer( { antialias: true } );
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );

}

function animate() {

    requestAnimationFrame( animate );

    mesh.rotation.x += 0.01;
    mesh.rotation.y += 0.02;

    renderer.render( scene, camera );

}

If everything went well you should see this.

Change log

releases

three.js open issues Ask a question     (View All Issues)
  • over 2 years Can't render material at the same time on multiple WebGLRenderers
  • over 2 years Add deviceorientation control as part of the THREE module
  • over 2 years Are "type" properties still needed?
  • over 2 years Better animation documentation
  • over 2 years Please consider using version number in build filenames
  • over 2 years Documentation for WebGL2Renderer
  • over 2 years Documentation for IDCount functions
  • over 2 years OBJLoader/MTLLoader black render
  • over 2 years Documentation - menu sections suggestion
  • over 2 years CSS3D renderer bugs in Safari (Y lookAt)
  • over 2 years Request for Forum or Documentation
  • over 2 years Blender produces an error on the windows when exporting
  • over 2 years PolyhedronBufferGeometry is missing index information
  • over 2 years HLS WebGL video textures produces faulty colour rendering in IOS 10
  • over 2 years glTF and Blender export : corrupted normals + vertices data
  • over 2 years can not load collada files with animation exported from blender
  • over 2 years Superfluous DataTextureLoader
  • over 2 years Uniforms of ShaderMaterial aren't serialized correctly with toJSON()
  • over 2 years Showcase: Water with Flow Maps
  • over 2 years Documentation for MTLLoader.MaterialCreator
  • over 2 years ObjectLoader joined Geometry MultiMaterial with textures
  • over 2 years MeshStandardMaterial issue with normalMap
  • over 2 years Maya exported json file not able to play animation and display multiple texture
  • over 2 years Missing object (Lucy100k_bin.js) in webgl_materials_cubemap_refraction example
  • over 2 years Adreno 300 series GPU black texture flickering
  • over 2 years Resource management implementation (take 2)
  • over 2 years Is it possible to provide a public function to update the BufferAttribute immediately?
  • over 2 years Proposed: Order Independent Transparency
  • over 2 years WebGL2Renderer
  • over 2 years MeshStandardMaterial mipmap sampling problem with envmap
three.js open pull requests (View All Pulls)
  • Remove Geometry.__tmpVertices from examples
  • Add controls to displacementmap example to allow testing aoMapIntensity, normalScale, displacementScale
  • replace \w with [^\s] in VRMLLoader
  • [Docs] Tweaks to improve Maya/FBX readmes
  • [Proposal] Gamma Input/Output Override Per Material
  • Update Sprite.html
  • Support OBJ files that wrap long lines using a backslash
  • Add a BufferGeometry based Subdivision Modifier
  • New merge method in THREE.BufferGeometry.
  • Fix detecting key pressed value
  • [Draft] WebGL2 3D Texture Support
  • [Draft] WebGL2 Multisample Renderbuffers
  • Add npm Build/Watch Scripts in `utils/build` for Node users
  • Allow textures to be encoded/decoded in Linear,sRGB,RGBE,RGBM, etc
  • Custom UV on LatheGeometry without custom geometry
  • return XMLHttpRequest from load() methods that do not return anything else
  • Blender exporter: Added MultiMaterial support
  • Keep state modifier active until key is released
  • raycasting support for THREE.CSS3DObject
  • PBS (physically based shader)
  • Added NoShading
  • Object update system example
  • Update index.html
  • Lathe's custom UV mapping
  • npm - include examples
  • Altered VRControls and VREffect
  • Make object3d hierarchy children inherit parents' layers
  • PMREMGenerator basic version
  • Fixes for clone method for some of the helpers
  • render callback before issuing draw call
  • build.js w/ closure, npm run build/watch/serve/watch-serve
  • Cleaned NRRD Loader
  • Fix PMREM cubemap size at 256 for performance reasons
  • ggx_smithcorrelated from frostbite 3.
  • Experimental way to deal with artifacts in GGX, inspired by Frostbite 3
  • Avoid possible 'divide by 0' in G_GGX_Smith function
  • New LatheBufferGeometry
  • fix VREffect stereo rendering for Safari/Edge (fixes #8329)
  • [Tentative] Texture layering
  • #8259
  • Support per-map per-Material UV channels, UV offset/repeat and texel scale/offset
  • Updated glTF Loader to v1.0; more samples
  • Change TGALoader ouput from DataTexture with pixels to Texture with canvas
  • Tga loader revert and set flip y
  • Accepts flipY in BinaryTextureLoader
  • BufferGeometry computeBoundingSphere support for itemSize = 2
  • Reflectivity (reflectance at F0) for MeshStandardMAterial
  • fix for PMREM warning: "INVALID_OPERATION: bindTexture: textures can not be used with multiple targets"
  • Revised PerspectiveCamera.
  • Include the example/fonts directory in bower.json.
  • Update MMDLoader for the change of TGA texture horizontal origin
  • Clipping planes
  • WebGL Multiple Render Targets (DrawBuffers)
  • added rotateOnWorldAxis method
  • SkinnedMesh support on Editor
  • Check if PointsMaterial map is a WebGLRenderTarget.
  • Non-invasive introduction of replaceAt and replace methods in Object3D (src and docs)
  • Adds Object3D indices referencing and 'replace' object/index
  • Fix camera stealthily rotate
  • Added new Replace and ReplaceAt in Object3D Docs
  • Added new replace and replaceAt functions
  • Shared uniform
  • add bubbling and propagation of events throughout Object3D tree
  • Integrate esformatter to automate code formatting
  • VREffect should continue to set correct CSS size on the renderer domElement.
  • THREE.Asset (NOT YET RUNNABLE - DO NOT MERGE!)
  • Add the normalized parameter to the InstancedBufferAttribute constructor
  • added WebGLDepthPrepass
  • Scalable Ambient Occlusion (SAO) post processing effect (2nd Try)
  • WebGLRenderer.renderOverride - make special purpose scene renders one line
  • WebGLRenderer.renderPass - making post effects one liners
  • Fix Sky Shader on Android/S6 (#8382)
  • Adds indexing to 3DObject (recovered PR)
  • Technique 'ambient' node case added
  • Updated Spotlight Examples
  • SGILoader - Parses Silicon Graphics Image files into THREE.DataTexture
  • sea3d update
  • Remove unnessecary uniform updates
  • Last spline coordinates not stored in actions
  • add copy / paste /create new material buttons
  • .setViewOffset method for OrthographicCamera
  • Dev
  • FontLoader: search for the start of font data instead of using a hardcoded value
  • ColladaLoader - Allow unaccompanied transparency tags
  • WebGLState: Enhance API for Masking
  • introspectable math primitives, smart BlockArray and FlatArray.to examples/js
  • Remove mouseout handlers from OrbitControls
  • -- size, ++ speed
  • Fixed for non-HTML documents
  • ClearCoat for MeshPhysicalMaterial
  • Examples: Fixed webgl_octree.html
  • ColladaLoader2 load external file references
  • OrbitControls: Added public methods to pan, rotate and dolly camera. …
  • npm run build-watch - automatically rebuild three.js when changes made
  • Benchmarks Suite Added
  • Fixes reflectivity check in MaterialLoader
  • Fix threshold when raycasting with THREE.Points
  • Add a shallow copy version of userData
  • Skeleton and SkinnedMesh serialization
  • Fix Skeleton.pose() bug
  • BoxHelper set color in constructor (#8896)
  • removed '.dot( this.normal )' from the 'translate' function
  • Material: colorMask and depthMask
  • Added raycasting support to THREE.SkinnedMesh.
  • Consistent getPoints and getSpacedPoints on ellipse
  • Percent Closer Soft Shadows by spidersharma03
  • fix for some obj files
  • Check the user agent for Edge browser.
  • Dev
  • WebGLRenderer helpers renderPass, renderOverride (attempt #3)
  • Update webgl_panorama_equirectangular.html
  • Color sub
  • =
  • Update ImageLoader.js
  • Shapes refactor
  • shortcuts for square and cube geometries
  • Use VRDisplays's requestAnimationFrame if VR headset connected
  • Add support for InterleavedBufferAttribute to some functions.
  • Fast RectAreaLight implementation using Linearly Transformed Cosines (Work in progress)
  • Fix Box3.setFromObject to guard against BufferedGeometries that have a length that isn't a multiple of 3
  • Added Geometry.computeFlatVertexNormals()
  • VREffect: Flag for toggling auto submission to the hmd
  • Add iOS workaround to BoxGeometry
  • For box3::setFromCenterAndSize method description changes
  • Add support for InterleavedBufferAttribute to Box3 and Mesh.
  • CurvePath.getPoints() for Arcs resolution should be doubled
  • MeshCubeMaterial - cube backgrounds with Blur, HDR Encoding, CubeUV, and ToneMapping support
  • expose VR displays from THREE.VREffect/THREE.VRControls
  • Makes sure fog is enabled when fog type is changed
  • Adds scene fog JSON serialization and parsing
  • Adds support for combined Depth+Stencil Texture
  • Remove unnecessary lines of PropertyBinding.
  • Small improvements
  • elementsNeedUpdate flag fix (#9353)
  • WebGL Multiple Render Targets (DrawBuffers)
  • Use loading manager with THREE.ImageLoader
  • Fix broken RawShaderMaterials when using defines
  • Removed example site because it returns 404
  • Matrix relative rotation addition
  • Simplify and enhance PropertyBinding Regex
  • FBX Converter now exports in a ObjectLoader compatible format
  • Modules
  • Added expandByObject to THREE.Box3
  • Orbit control settings for mouseout
  • THREE.Box3 getCorners method added
  • Add partial 3D effect to pure SVG element
  • Mesh: Add InterleaveBufferAttribute support to raycast.
  • Matrix3/4: Update applyToBuffer for BufferAttribute and InterleavedBufferAttribute.
  • Box3: Refactoring to setFromeObject to take the same interface to visit BufferAttribute and InterleavedBuffe…See #9171.
  • Box3: Added setFromBuffer see #9242
  • THREE.SectionHelper class to fake the cutting plane of a sliced geometry
  • Updates and Fixes for View Source #9462
  • getProgramInfoLog can return '\0' instead of empty string
  • Add BSP algorithm for SVGRenderer
  • Add VREffect preRender hooks
  • Add typechecking for array argument in BufferAttribute
  • Panoramic controls for 360 videos or scenes
  • Panoramic controls for 360 videos
  • Add mousedown handler on document to OrbitControls
  • update Utils/build folder to explain new build system
  • Serialize and load Material .polygonOffset* properties
  • Initial matrixWorld & ChildrenMatrixWorld seperation
  • Add rollup-watch to dev dependencies
  • SceneUtils.attach bug fix
  • specify the direction of matrix transform chaining
  • utils/converters/fbx: fix bug where fbx converter breaks when flattening fbx models
  • utils/converters/fbx: fix TriangulateInPlace to work with latest FBX Python SDK 2016.1
  • added manual option to save into localstorage
  • Change *IdCount functions back to variables
  • glTF Loader issue - duck is dark #8381
  • add build closure to make use off the closure compiler.
  • Reduce heap allocations in multi-pass scene rendering
  • WebVR Vive Controller Ray
  • Removed all references to the THREE namespace
  • Serialize and load CubeTexture
  • Chrome os app support
  • Change to AnimationMixer.js to allow side effects.
  • Adding buffer geometry utilities for merging.
  • Discard attribute typed arrays for buffered geometries that are not modified after initial rendering
  • Texture serializer decides to use PNG or JPEG based on image transparency
  • OBJLoader: Reset groupStart to 0 when using previous material
  • change name of _Math to MathUtils
  • Fill in TODOs in documentation, fix alphabetical order in examples
  • Panoramic controls for 360 videos or scenes
  • Intersection option for WebGLRenderer clipping method
  • nodematerial r6
  • Update docs for Raycaster.intersectObjects.
  • Allow user to copy full buffer with `gl.bufferData`
  • PCSS
  • Update README.md
  • Google Closure Compiler Js
  • ViveController: tracking events
  • Allow user to abort all active requests managed by a LoadingManager.
  • Added /build/three.es2015.js target for "jsnext:main"
  • In Geometry, allows to select the UV sets that will be exposed to shaders as uvs and uvs2.
  • Added CubeTexture().fromEquirectangular()
  • Add empty map to glsl plugin
  • Extend glTF Loader API
  • Add TTFLoader (using opentype)
  • Modified output of Line.raycast and Points.raycast. Updated docs for RayCaster.
  • exitPresent when unloading WebVR page #9837
  • Issue #9826. Response type as a parameter in TextureLoader and ImageLoader.
  • Pre-slice potentially large ArrayBuffers to avoid RangeErrors from GLTFLoader
  • Attribute dispose
  • Add type check to DepthTexture
  • Remove reference to THREE in IcosahedronGeometry.js
  • TubeBufferGeometry: Removed invisible char
  • Set null to scene.background for second pass of OutlineEffect
  • Keep OutlineMaterial in the cache of OutlineEffect
  • added setDrawRange to Object3D
  • Optimize SkyShader.js with pre-calculated consts
  • Support uniform updates from onBeforeRender callback
  • Basic docs for AnimationMixer, AnimationAction, and AnimationClip.
  • Add ChainableEffect
  • add Object3D traverseReverse method
  • TransformControls: Added scaleSpeed parameter to change scaling sensitivity
  • Export Toon Map from MMDLoader
  • Fix no json parsing check
  • Removed outro from Rollup config
  • Added PixelateShader to shaders.
  • Improve Vive controller detection example
  • Fixed INVALID_OPERATION error with WebGL when using linewidth on IE11
  • Box with filleted edges
  • VREffect: setEyeCallback() to run per eye code
  • AudioListener: use AudioParam attributes if supported.
  • Update CCDIKSolver
  • MeshBasicMaterial: Add support for lightMap
  • Typo
  • capture bufferAttribute.array properties at first upload
  • New ShapeBufferGeometry
  • Improved documentation for Constants / CustomBlendingEquation
  • Clock pause & resume
  • Add setOverrideMimeType() to XHRLoader
  • Sources warning fix
  • Add link from MMD examples to MMD assets license
  • glTF, loading interleaved buffers
  • [WIP] RectAreaLight in Editor & Json support
  • MMDExporter
  • MMDLoader Image Cross-origin issue solution
  • Created docs for interleave and instanced buffers and geometries
  • Automatic Geometry instancing
  • remove obsolete elements and comments
  • Detect deltaMode - fixes IE11/FF49/Chrome54 on Win7, see #9526
  • Enable using Audio.setBuffer() after having played once
  • material layers feature
  • Fix ray-casting on Mesh objects - does not hit when inside a Mesh object's bounding sphere
  • #9995: Restore lucy model files
  • Improved Docs / Constants / DrawModes
  • Added missing 'addDrawMode()' method to mesh doc
  • make Box3.setFromObject() handle sprites
  • optimal implementation of caching logic
  • Add state to emitted events in OrbitController-example.
  • GLTFShader: Update scene and camera matrices once, globally.
  • Patch over circular dep between Box3 and Sphere
  • Implement issue #10506
  • Update files
  • Docs: Don't fire hashchange event when typing in filter query
  • bump_scale should return a float
  • Update PropertyBinding.js
  • ObjectLoader parse Method return Value fix
  • Keep mesh names when importing glTF
  • Geometry: Enhanced .copy()
  • Docs: Fixed BufferGeometry source links
  • Fixed cloning BufferAttribute
  • Fix Race Condition inside ImageLoader for base64
  • Load vertex color buffers from glTF models
  • Fix default value for divisions
  • Add support for glTF binary extension (.glb)
  • Fixing #10341 by directly using the camera space coordinate for
  • Update Creating-text.html
  • Fixed perspective for stereo effect
  • Add object transform reset button
  • Optional makeEmpty in THREE.Box3
  • Automatically set needsUpdate for selected Material properties
  • Update StereoCamera.js
  • Added note on flat shading to MeshLambertMaterial
  • VRMLLoader based on vrmlParser, easier to use.
  • Render target names
  • Added texture loaded callback from JSONLoader
  • Transformcontrols ms edge
  • Allow user to define state in trackball constructor
  • Change DragControls to drag out of domElement.
  • Material includes
  • Add webgl2 parameter (default:false) to WebGLRenderer parameters.
  • WebGLProgram: No longer prepends newlines to shader programs unconditionally
  • Not set crossOrigin for data: URI in ImageLoader
  • Fix raycasting on Points
  • Fix material for managing vertex colors
  • Instanced mesh
  • Make combinedCamera have the same interfaces as perpective/orthographic camera
  • Changes to include Skin Indices and Weights into fromBufferGeometry
  • Add Clock support in node
  • Add setRequestHeader method to FileLoader
  • Fix issue when updating geometry (issue #10638)
  • fix normals on faces with inverted UVs.
  • Added THREE.App
  • Compute the point of intersection of three planes using Ronald Goldma…
  • Refactor GPUComputationRenderer.js to handle variables of different sizes
  • point shadow scale is dependent on light distance or shadow camera far distance
  • Geometry toJSON fix
  • Clock fix
  • Fix `MultiMaterial` support in most primitives
  • #9756 As proposed in latest comment of issue
  • Add panning to two-finger gesture in OrbitControls.js
  • Fix missing sampleValues or resultBuffer for copySampleValue_
  • Introduced a new option for persistent keydown
  • Fixed depth for stereo effect on 3D Tvs
  • Ported example for https://github.com/mrdoob/three.js/pull/10480
  • Added download capability for multiple files
  • Added a downloader link to page
  • Update DragControl.js
  • Mesh .updateMorphTargets(): Added BufferGeometry support
  • Object3D performance/memory improvements
  • fixed regex of STLLoader.js
  • Displacement Map: Add morph normal support
  • Build: Added google-closure-compiler to dev dependencies
  • EffectComposer: Added dependency check
  • [WIP][LoadingManager] Support URL transforms.
  • added uniform to transpose the values of red with cyan
  • Vector2/3/4: Avoid divide-by-zero
  • Protoplanet fix
  • Add a callback param to loadParts() to be called if we fail to read t…
  • Add support for inverse matrices, per material
  • Use WebVR 1.1 view matrices correctly in VREffect
  • make Object3D properties (pos,rot,quat,scale) configurable
  • set position and orientation using value instead of setValueAtTime
  • 3DSLoader (draft version)
  • OrthographicTrackballControls: staticMoving panning now also static on Y
  • OrbitControls: multiple functions on same mousebutton possible
  • Object bounding box relative to given reference
  • add IS_VERTEX and IS_FRAGMENT to shader defines
  • Added Beta/Gamma offsets
  • New Meshline
  • isMultiMaterial implementation
  • Issue-#9905 objectloader parse fonts
  • Add a 3DS to Three.js converter
  • Generic VR controller.
  • fix "Source and destination textures of the draw …"
  • [WIP] Added setWorld[Position/Scale/Rotation] in Object3D
  • Fix OBJLoader to support more than three vertices in one face
  • Enable keyboard in OrbitControls
  • ColladaLoader2: Added axis conversion support
  • Apply location to bones and armature pose animations in object loader
  • WASM support for Draco files
  • Modify Tube geometry to support exporting of the geometry
  • Added PlaneHelper and Box3Helper
  • SVGRenderer: produce string with HTML code instead of SVG elements creation
  • [WIP] VR + Post Processing
  • WebGLRenderer: added getPhysicalSize()
  • Added linewidth support
  • Add Layers to Raycaster to allow selectively intersecting objects in the scene.
  • Prevent 2 closures for every Object3D in quaternion/euler syncing
  • GLTFLoader: only refresh uniforms on correct material
  • ColladaLoader: Fallback if material doesn't match
  • GLTFLoader: Remove old or unstable extensions.
  • Editor: Focus will frame target in view.
  • WebVR.js: Automatically enter VR on vrdisplayactivate event.
  • Reintroduce standing matrix
  • OBJLoader2 V2.3.0: Parser Verification, Point, Line and Minification Support
  • Made animation loop interruptible and disposable.
  • NodeMaterial in core 1/2 - isolate light system from the parameterized materials
  • Geometry: Move computeLineDistance() to Line/LineSegments
  • Count triangle taking account of draw mode
  • WebGLProgram: Introduce loop unrolling via pragma
  • GLTFLoader KHR_materials_unlit extension support.
  • Fixed Geometry.fromBufferGeometry() incorrectly interpreting colours
  • ExtrudeGeometry: Added serialization/ deserialization 2nd attempt
  • Expose unrollLoops control for ShaderMaterial
  • Curvature Estimation Example
  • Add option in blender exporter to bake keyframe animation
  • Added SphericalHarmonicsLight.
  • Allow material properties copy in .copy() between different material tyes
  • WebGLRenderer: Enable nested render calls
  • use WeakMap in WebGL(Properties|Attributes)
  • Update EffectComposer.js to Reset Passes
  • Shared skeleton [WIP]
  • flatten uuid strings
  • Simplify and refactor parallax barrier example
  • Compress RectAreaLight BRDF Data
  • Update Fileloader's judgment to http code.
  • Lazy uuid generation and avoid uuid use in main renderer
  • Fix "Sprite rendering problem in VR mode"
  • EXAMPLES: panorama_equirectangular switched to orbit controls
  • Added #include_once shader directive and circular inclusion detection
  • separates light entities shaders from light maps shaders
  • Add submitVrFrame parameter to WebGLRenderer.render method
  • ImageLoader: remove image event listeners explicitly
  • PCDLoader with Worker support: parseAsync and run
  • Update Geometry.js
  • ObjectLoader: unify loading manager for images
  • OrbitControls: add support for horizontal panning
  • BufferGeometryUtils: Add mergeBufferGeometries() helper.
  • FBXLoader add support for TGA and DDS
  • BufferGeometry: honor groups in toNonIndexed()
  • Material includes sans global hook
  • Added onCreateCallback for WebGLAttributes #11883
  • GLTFLoader: Implement KHR_draco_mesh_compression
  • ColladaLoader - #13365 instance node names now match their associated…
  • WebGLInfo: Renamed primitives
  • [WIP] AnimationUtils: Add .splitClip(), clip.clone(), track.clone().
  • DirectGeometry: clone bounding volumes in fromGeometry method
  • Examples: Geometry => BufferGeometry
  • GLTFExporter: Add forcePOT option on the example
  • Allow for 4-byte alignment requirement in processBufferView
  • Fix camera transforms in VR
  • Vrml loader vrmlparser
  • Added multiple offset update functionality to the BufferAttributes
  • add renderer prop in onBeforeCompile
  • exr piz wavelet decompression
  • OBJExporter: Avoid duplicate v,vt,vn records in obj file
  • Rough update to KHR_lights support to match current spec
  • Updated LegacyGLTFLoader.js shader parsing
  • EXAMPLES: Updated webgl_materials_cars example to use GLTF model
  • Update Raycaster.html (Doc)
  • Editor determines GLTF version and uses appropriate loader
  • EXAMPLES: replaced cube_dynamic with cube_dynamic2, added car controls
  • Editor: Implemented Maya focus
  • GLTFExporter: Support KHR_materials_unlit.
  • Docs: Added preview for MeshPhysicalMaterial
  • EXAMPLES: Combine WebGL Lines Colors and Splines
  • GLTFExporter: Use Map for nodeMap.
  • OrbitControls: added .panSpeed property
  • ExtrudeGeometry: Remove options material and extrudeMaterial
  • [WIP] Examples: Use ES6, build UMD examples.
  • GLTFExporter: Fix JSON chunk padding issue.
  • Added Euler angles rotation orders.
  • GLTFExporter: Multi-material support
  • Subsurface scattering support in PBR material
  • Docs: replace RegExp search with fuzzy search
  • Support for HDR scene background (#11124)
  • Remove redundant code from WebGLGeometries
  • Remove use of Geometry._bufferGeometry
  • Add Maya mouse button operation and can be configed
three.js questions on Stackoverflow (View All Questions)
  • How to reset three.js clock?
  • show overlapping volume of two objects in different color in three.js
  • Dynamically create 2D text in three.js
  • How do I render three.js in node.js?
  • How to Check whether a model is Rendered in the Scene in THREE.js?
  • Moving shadows in Three.JS
  • My code is not working after upgrading three.js
  • What effect does camera.up have in Three.js?
  • How to change the color of a plane geometry in three.js? (always keeps giving me a black outcome)
  • Web based radar animation using three.js/webgl
  • How to apply a texture to a custom geometry in Three.js
  • How to change the texture and size of an .obj file in three.js?
  • Three.js matrix precision for real worlds
  • Cant create a 3d plane using three.js
  • Three.js buildwithchrome-like project
  • THREE.js shadow only visible using OrbitControls
  • Three.js Render Depth to Texture
  • Cross section of STL Object using three.js
  • (Three.js) Why slow refresh?(F5)
  • three.js scroll
  • Three.js invisible plane not working with raycaster.intersectObject
  • JSON Import not casting shadows in Three.JS r74
  • Three.js JSON runtime changing material (texture)
  • Three.js texture not load properly?
  • Detection with raycaster not completely accurate when the width of div is reduced, three.js(v72)
  • 3D solid file layers to three.js json
  • Three.js Contiguos/adyacent planes are not rendered properly
  • Particle Systems Tutorial/Intro in Three.js
  • How to implement level/scene change in three.js?
  • How to make a rectangular pyramid in three.js r68?
three.js list of languages used
three.js latest release notes
r90 r90

https://github.com/mrdoob/three.js/wiki/Migration-Guide#r89--r90

(528,431 KB, gzip: 133,640 KB)

Source

  • Global
    • Clean up. #12969, #13009, #13141 (@takahirox, @gero3, @mrdoob)
    • Added .gitattributes and fixed CRLF related issues. #13088 (@dr0ps)
  • Box3
    • Added .intersectsTriangle(). #13079 (@matthias-w)
  • Geometry
    • Moved .computeLineDistance() to Line and LineSegments. #13147 (@Mugen87)
  • LensFlare
    • Moved to examples. #13081, #13099, #13101, #13280, #13289 (@mrdoob and @Mugen87)
  • LoaderUtils
    • Fixed for multibyte characters in .decodeText(). #12934 (@donmccurdy)
  • Material
    • Added .shadowSide. #13035 (@WestLangley)
  • ObjectLoader
    • Update object matrix in .parseObject(). #13068 (@WestLangley)
  • PropertyBinding
    • Allow non-ascii node names. #12968 (@donmccurdy)
  • Quaternion
    • Fixed .conjugate() method. #13121 (@WestLangley)
  • RectAreaLight
    • Updated to new LTC model. #12922 (@WestLangley)
    • Light intensity is now light brightness. #13001 (@WestLangley)
  • SceneUtils
    • Moved to examples. #13026 (@Mugen87)
  • ShaderMaterial
    • Added uniformsNeedUpdate flag. #13279 (@mrdoob)
  • Skeleton
    • Added .getBoneByName(). #12982 (@takahirox)
  • Sprite
    • Added .center property. #12931 (@WestLangley)
    • Added .copy() method. #13139 (@WestLangley)
  • WebGLProgram
    • Trim log messages. #12950 (@Mugen87)
    • Added loop unrolling via pragma. #13140 (@Mugen87)
  • WebGLRenderer
    • Enhance .dispose(). #13048 (@Mugen87)
    • Added scene.onBeforeRender() and scene.onAfterRender(). #11582 (@wizgrav)
    • Added autoReset to WebGLRenderer.info. #12429 (@Astrak)
    • Added .copyFramebufferToTexture(). #13049 (@Mugen87)
    • Enable rendering without index and position attribute. #13128 (@Mugen87)
    • Release reference to currentRenderList in render(). #13122 (@takahirox)
    • Removed renderTarget from scene.onAfterRender(). #13129 (@mrdoob)
    • Removed .setFaceCulling(). #13154 (@Mugen87)
    • Fix first time skin render. #13175 (@Mugen87)
    • Made animation loop interruptible and disposable. #13152 (@brunnerh)
    • Enabled nested render calls. #13110 (@Mugen87)
  • WebGLState
    • Improved OpenGL ES support. #13211 (@finscn)
  • WebGLTextures
    • Added worker support. #12994 (@haroldiedema)
    • Made makePowerOfTwo() more memory efficient. #13201 (@Mugen87)
  • WebGLUtils
    • Added support for ASTC texture compression format. #12939 (@amakaseev)
  • WebVRManager
    • Reintroduced standing matrix. #13158 (@dmarcos)

Documentation

  • Clean up: #12961, #13003, #13029, #13072, #13106, #13117, #13132, #13146, #13163, #13246, #13298, #13299, #13310, #13311, #13309 (@MagnuzBinder, @Matt57, @dhritzkiv, @sasha240100, @donmccurdy, @Mugen87, @d3v1, @DonKarlssonSan, @mysteryDate, @PierfrancescoSoffritti)
  • Improved BufferGeometry page. #13261 (@mysteryDate)
  • Improved Matrix4 page. #13184 (@miguelriemoliveira)
  • Improved Plane page. #13229 (@nbeerbower)
  • Improved Ray page. #13208 (@XanderLuciano)
  • Improved Triangle page. #13118 (@donmccurdy)
  • Improved WebGLRenderer page. #13195 (@funwithtriangles)
  • Fixed default values of geometries. #13109 (@johnmarinelli)
  • Disable autocorrect, autocapitalize and spellcheck for search input. #13303 (@defmech)

Examples

  • Clean up. #12986, #12995, #12996, #12999, #13022, #13268, #13326, #13322, #13321, #13320, #13325, #13324, #13323 (@gero3, @WestLangley, @Mugen87, @PierreFritsch, @looeee)
  • Fixed missing variable declaration in CameraNode. #12951 (@Itee)
  • Fixed wrong variable name in NodeLib. #12952 (@Itee)
  • Added pixelation shader. #12932 (@wongbryan)
  • Added webgl_materials_video_webcam example. #12970 (@Mugen87)
  • Removed usage of SceneUtils.createMultiMaterialObject(). #13022 (@Mugen87)
  • Remove no-culling. #13034 (@WestLangley)
  • Update camera near and far plane on each rendering in SAOPass. #13091 (@cnspaha)
  • Simplify and refactor webgl_points_dynamic example. #13087 (@looeee)
  • Fix AnimationClipCreator. #13104 (@AwokeKnowing)
  • Fix arguments order of scene.onAfterRender() in webgl_tiled_forward. #13123 (@takahirox)
  • Fix video source tag in webgl_materials_video. #13215 (@RemusMar)
  • Enabled damping in webgl_panorama_cube. #13205 (@WestLangley)
  • Changed videos in css3d_youtube example. #13238 (@arcoyk)
  • Added webgl_worker_offscreencanvas example. #13253 (@Mugen87)
  • Fixed webgl_mirror_nodes example. #13272 (@sunag)
  • Added webgl_buffergeometry_indexed example. #13266 (@Mugen87)
  • Fixed webgl_gpgpu_protoplanet. #13296 (@cx20)
  • Fixed serialization/deserialization of TeapotBufferGeometry. #13315 (@Mugen87)


  • AssimpLoader

    • Clean up. #12990 (@gero3)
  • ColladaLoader

    • Make loading of textures more fault tolerant. #13007 (@Mugen87)
    • Improve evaluation of transparency. #13216 (@Mugen87)
    • Refactor transparency handling. #13260 (@Mugen87)
    • Add parsing of double sided extra effect elements. #13255 (@poof86)
  • DeviceOrientationControls

    • Clean up. #13000 (@WestLangley)
  • FBXLoader

    • Implement usage of LoaderUtils.decodeText(). #12929 (@looeee)
    • Restore break condition to getString. #12936 (@looeee)
    • Correct Filename property in parseImages(). #12943 (@agackakan)
    • Removed unused Binary Reader methods. #12945 (@looeee)
    • Simplify FBXTree. #12823 (@looeee)
    • Simplify and correct image parsing. #13018 (@looeee)
    • Added check for empty curves. #13015, #13033 (@looeee)
    • Simplify skeleton building. #13045 (@looeee)
    • Correctly apply bind matrices. #13061 (@looeee)
    • Fix minification bug. #13063 (@looeee)
    • Use console.error instead of Error when Inflate is missing. #13219 (@mrdoob)
    • Ignore empty curve nodes. #13221 (@looeee)
    • Check for undefined fileName. #13228 (@looeee)
    • Consider focalLength for perspective camera. #13237 (@HoldenCa)
    • Correctly parse attribute type Color. #13265 (@looeee)
    • Apply pre transform to normals. #13290, #13313 (@looeee)
  • GCodeLoader

    • Clean up. #12905 (@tentone)
  • GLTFExporter

    • Fix cachedData check. #12966 (@takahirox)
    • Fix processAnimation() .bones path case. #12975 (@takahirox)
    • Fix processAnimation(). #13112 (@takahirox)
    • Add support for morph target weights. #13157 (@takahirox)
    • Force node names to be strings. #13209 (@webprofusion-chrisc)
    • Implement 4-byte data alignment for buffer. #13220 (@webprofusion-chrisc)
    • Fix vertex indices bug. #13327 (@selimbek)
  • GLTFLoader

    • Fix issue when byteOffset is omitted from interleaved accessors. #13043 (@donmccurdy)
    • Add basic example. #13055 (@donmccurdy)
    • Support morph targets w/ interleaved attributes. #12800 (@donmccurdy)
    • Added full support for cubic spline interpolation. #12907 (@takahirox)
    • Ensure InterleavedBuffer instances are shared. #13054 (@donmccurdy)
    • Remove old or unstable extensions. #13169 (@donmccurdy)
    • Only refresh uniforms on correct material. #13178 (@cnspaha)
  • KTXLoader

    • Added Loader and webgl_materials_texture_ktx example. #12947 (@amakaseev)
    • Clean up. #12963 (@amakaseev)
  • MTLLoader

    • Add invertTrProperty option. #12862 (@eastpiger)
  • NodeMaterial

    • Fix world position. #12979 (@sunag)
    • Add Matrix3Node and optimize UVTransformNode. #13075 (@sunag)
    • Added NodeFrame. #13239 (@sunag)
    • InputNode readonly option. #13250 (@sunag)
  • NodeMaterialLoader

    • Added Loader and example webgl_loader_nodes. #13070 (@sunag)
  • OBJLoader

    • Add points support. #13060 (@richardmonette)
  • OBJLoader2

    • Use loading manager in internal material loader. #12989 (@unphased)
    • Parser Verification, Point and Line support, moved generic functions to LoaderBase. #13156 (@kaisalmen)
  • OrbitControls

    • Fix order of events in onMouseWheel(). #13092 (@makc)
  • OutlinePass

    • Added support for orthographic cameras. #13283 (@Mugen87)
  • RaytracingRenderer

    • Ensure correct initialization of workers. #12893 (@wolfgangvonludwigsburg)
  • SAOPass

    • Fix orthographic camera support. #13295 (@Mugen87)
  • SEA3DLoader

    • Fix Morph Normals and update extractUrlBase() call. #12905 (@RemusMar)
  • TrackBallControls

    • Consider noZoom in mousewheel(). #12408 (@ADRG1T)
  • TransformControls

    • Set axis before triggering mouseDownEvent. #12852 (@cnspaha)
  • WebVR

    • Automatically enter VR on vrdisplayactivate event. #13159 (@vt5491)
  • XLoader

    • Clean up. #12992 (@gero3)

Editor

  • Improved startup camera/grid. #13133 (@mrdoob)
  • Fix triangle counting for indexed buffer geometry. #13143 (@donmccurdy)
  • Moved grid to settings. #13162 (@mrdoob)
  • Rescued local/world checkbox. #13204 (@mrdoob)
  • Removed confirm dialog on object deletion. #13252 (@wuweiweiwu)
  • Replaced string literal with string concatenation. #13301 (@aecz)

Exporters

  • Removed 3DS Max and Revit exporter. #12930 (@Mugen87)
  • Removed Maya exporter. #13145 (@Mugen87)

Tests

  • Clean up. #13021 (@gero3)
  • Update Polyfills test to remove TODOs in the unit tests. #13006 (@gero3)
  • Fix constants tests. #13005 (@gero3)
  • Changed to qunit npm module and fixed npm run test. #13004 (@gero3)
  • Added npm run dev-test. #13010 (@gero3)
  • Added unit tests for AnimationAction. #13008, #13016, #13024, #13039 (@gero3)
  • Add basic tests for GLTFExporter and GLTFLoader. #13071 (@donmccurdy)
  • Update test for Lensflare. #13114 (@takahirox)
r89 r89

https://github.com/mrdoob/three.js/wiki/Migration-Guide#r88--r89

(529,393 KB, gzip: 133,567 KB)

Source

  • Global
    • Clean up. #12746 #12745 #12828 #12808 #12863 #12868 (@Mugen87, @dhritzkiv, @jasonChen1982 and @takahirox)
  • Curves
    • Implemented serialization/deserialization. #12797 (@Mugen87)
  • EllipseCurve
    • Fixed Webpack issue due to unicode character. #12634 (@ngokevin)
  • FileLoader
    • Use documented way to retrieve XmlHtttpRespon. #12860 (@dankellett)
  • Group
    • Added missing isGroup. #12750 (@takahirox)
  • ImageBitmapLoader
    • Promoted to core. c8d42cd17d238e4577c0327bcabaae742d6f0c49 #12695 (@mrdoob and @Mugen87)
  • ImageUtils
    • Removed. #12712 (@Mugen87)
  • Loader
    • Moved extractUrlBase to LoaderUtils. #12871 (@Mugen87)
  • LoaderUtils
    • Added decodeText() static method and implemented in all loaders. #12654 (@donmccurdy)
  • LoadingManager
    • Added chaining to setURLModifier(). #12887 (@takahirox)
  • KeyframeTrack
    • Unified from KeyframeConstructor and KeyframePrototype. #12584 (@Itee)
  • Math
    • generateUUID() is now ~5x faster. #12432 (@mrdoob)
  • PathPrototype
    • Removed. #12583 (@Mugen87)
  • ShapeUtils
    • Replaced triangulator code with Earcut. #12661 #12725 (@Mugen87)
  • VideoTexture
    • Replace internal requestAnimationFrame with WebGLRenderer update. #12763 #12809 6cb946444d125df26aaf01da2496ac1b54b1aac3 (@Mugen87 and @mrdoob)
  • WebGLRenderer
    • Added powerPreference parameter to the constructor. #12753 (@luruke)
    • Support reflection matrices. #12787 (@WestLangley)
  • WebVRManager
    • Added setPoseTarget(). #12651 #12803 (@dmarcos)
    • Removed standing and getStandingMatrix(). a3f33be18c48124c3d5a0faf366685bde72587e6 745550bbaeae233b5e2fda9ddd094013c2814cb0 (@mrdoob)

Documentation

  • Clean up. #12561 #12562 #12573 #12594 #12641 #12660 #12662 #12663 #12664 #12665 #12666 #12667 #12668 #12669 #12670 #12671 #12672 #12673 #12674 #12688 #12711 #12696 #12748 #12805 #12811 #12816 #12817 #12818 #12846 #12840 #12839 #12838 #12833 #12834 #12835 #12836 #12847 #12832 #12876 #12882 #12881 (@looeee, @paulmasson, @JakeDluhy, @donmccurdy, @Kos, @MagnuzBinder, @tmcw, @Mugen87, @duhaime, @harto, @dhritzkiv, @mghini and @marissa27)
  • Improved SpotLightShadow page. #12448 (@vidartf)
  • Improved CanvasRenderer page. #12576 (@keqingrong)
  • Improved CubeTextureLoader page. #12690 (@WestLangley)
  • Improved LoadingManager page. #12689 (@donmccurdy)
  • Added ImageBitmapLoader page. #12700 (@Mugen87)
  • Improved Audio, AudioAnalyser, AudioListener and PositionalAudio pages. #12773 (@Mugen87)
  • Added Browser-support page. #12796 (@keqingrong)
  • Improved InterleavedBuffer and InterleavedBufferAttribute pages. #12790 (@Mugen87)

Examples

  • Clean up. #12577 #12607 #12624 #12627 #12628 cac00ce80bfb5f3f1edb0f6a3d821f887d61f243 2fa03493706948923fe5b602d4ae259d9a00cb37 99240d3c4ba476d837a8efa32de838ef66eea466 #12756 #12755 (@Mugen87, @WestLangley and @mrdoob)
  • Improved webaudio_visualizer. #12581 (@WestLangley)
  • Added misc_animation_groups example. #12629 (@Mugen87)
  • Improved ImageBitmapLoader. 62a93a1c78d98bd4bfbf9a9a02a0b0b40416e790 cb20c474f8592f21a396604d123519e595e79987 (@mrdoob)
  • Added webgl_morphtargets_sphere example. #12685 (@donmccurdy)
  • Updated OBJLoader2 to 2.2.1. #12726 #12896 #12901 (@kaisalmen)
  • Removed webgl_geometry_text_pnltri example. #12747 (@Mugen87)
  • Added renderer.gammaOutput = true to webgl_loader_gltf example. #12766 (@donmccurdy)
  • Improved webgl_raymarching_reflect example. #12792 #12793 0e12847099cbc4f9597496ce7367771430183d7c #12801 e2f9a78fe49f0e09bd108e733e54989c4e4ea40c b50726ac9ddc361111e636c009bc32019c225b1f 5af8b4500b4719bf5547215a9582aa9753786628 fcc7e8fdc3e49bee0eeef4d65b4fb92cccc47f7b (@gam0022, @WestLangley and @mrdoob)
  • Added webgl_loader_kmz example. #12843 (@takahirox)
  • Modified webgl_loader_amf to test zip-compressed file. #12845 (@takahirox)
  • Improved webgl_buffergeometry_points_interleaved page. #12790 (@Mugen87)
  • Added EXRLoader and webgl_materials_texture_exr example. #12891 (@richardmonette)
  • Added GCodeLoader and webgl_loader_gcode example. #12897 (@tentone)


  • 3DSLoader

    • Use path and manager. #12615 (@cnspaha)
    • Fix double pathing. #12731 (@cnspaha)
  • AssimpJSONLoader

    • Support opacity. #12566 (@makc)
  • ColladaLoader

    • Check if mesh exists before using it. #12606 (@cnspaha)
    • Added possibility to manually set path. #12614 (@cnspaha)
    • Made more tolerant to invalid files. #12866 (@Mugen87)
    • Improved logging when dealing with invalid files. #12870 (@Mugen87)
  • DRACOLoader

    • Simplify decoder initialization and updated to latest version. #12895 (@donmccurdy)
  • FBXLoader

    • Clean up. #12739 (@looeee)
    • Fix undefined connection bug in parseAnimations. #12653 (@looeee)
    • Support for colors specified as single floats. #12648 (@looeee)
    • Parse layered textures. #12694 (@looeee)
    • Split monolithic parseScene method. #12701 (@looeee)
    • Refactored genGeo method. #12703 (@looeee)
    • Correctly parse duplicate embedded textures. #12699 (@looeee)
    • Support rotated pivots. #12717 (@looeee)
    • Refactor parseAnimation and remove unused entities from return object. #12710 (@looeee)
    • Refactor animation and conditional animation parsing. #12729 (@looeee)
    • Added warning for unsupported rotation orders. #12411 (@looeee)
    • Refactor parseAnimationCurveNode, addTake and parseAnimations methods. #12734 (@looeee)
    • Moved geometric transforms to genGeo method. #12744 (@looeee)
    • Simplify animation system and support unbaked animations. #12758 (@looeee)
    • Minor animation fix and refactor. #12762 (@looeee)
    • Simplify skeleton parsing and improve naming. #12829 (@looeee)
  • GLTFExporter

    • Export textures as data URIs. #12680 (@donmccurdy)
    • Handle .flipY on textures. #12697 (@donmccurdy)
    • Use utf-8 encoding for .glb JSON chunk. #12709 (@donmccurdy)
    • Support keyframe animation, morph targets, and skinning. #12713 (@donmccurdy)
    • Only define byteStride for vertex attributes. #12859 (@donmccurdy)
  • GLTFLoader

    • Clean up. #12733 #12738 #12751 #12799 #12879 (@takahirox and @dhritzkiv)
    • Consolidated onError() usage. #12538 (@takahirox)
    • Allow alphaTest to be 0. #12565 (@marcatec)
    • Replace for in loops with for loops. #12571 (@marcatec)
    • Throw unhandled errors. #12687 (@donmccurdy)
    • Support sparse accessors. #12596 (@donmccurdy)
    • Improved alphaMode support. #12692 (@donmccurdy)
    • Fixed Specular-Glosiness material. #12752 (@takahirox)
    • Refactored. #12772 (@takahirox)
    • Clone materials before adding skinning or morph targets. #12791 (@donmccurdy)
    • Export mesh and primitive extras. #12824 (@cnspaha)
    • Added callback for when asset is read. #12761 (@cnspaha)
    • De-duplicate BufferGeometry. #12718 (@mattdesl)
    • Don't set transparent=true with alphaMode=MASK. #12890 (@donmccurdy)
    • Implement basic CUBICSPLINE support. #12885 (@donmccurdy)
    • Added chaining to setCrossOrigin() and setPath(). #12887 (@takahirox)
    • Fix bug in spline vertex copying. #12898 (@donmccurdy)
  • PDBLoader

    • Fixed to read serial field. #12620 (@kenkiku1021)
  • Reflector

    • Support any planar geometry. #12631 (@WestLangley)
  • Refractor

    • Support any planar geometry. #12631 (@WestLangley)
  • STLLoader

    • Propagate error during loading of files via onError(). #12704 (@matb)
  • Water

    • Removed unused uniform. #12570 (@vlucendo)
    • Support any planar geometry. #12635 (@Mugen87)
  • Water2

    • Support any planar geometry. #12631 (@Mugen87)
  • XLoader

    • Applied structural loading. #12677 (@adrs2002)
    • Separate file of model and animation can be load and bind animation. #12677 (@adrs2002)
    • MultiMaterial to Material Array. #12735 (@adrs2002)
    • Removed zflag option. #12794 #12819 (@WestLangley and @adrs2002)

Editor

  • Removed object counters. 7ae35ac5a6e5f4d4df1192257e0c66209ab0128b (@mrdoob)
  • Changed default camera.near and camera.far. 42c156ec01be82e1019633c83866acb6875f01a3 (@mrdoob)
  • Using degrees in geometries angle values. 52c4afb5c05a83ba1a8889633717aa3f3fd3d31b (@mrdoob)
  • Prevent Command-Z from triggering tabs to open/close on Safari. #12604 (@TyLindberg)
  • Added key short-cuts editing section in Settings. #12612 9dbe8d0cf1bf26f912e877c34bca1cf088987cb8 d35ce0178f031f15e45116f36319cfb92cbb36d5 (@TyLindberg and @mrdoob)
  • Fixed broken object delete shortcuts. #12820 (@TyLindberg)
  • Added shortcut f for focusing on selection. #12874 (@TyLindberg)

Tests

  • Organized PropertyBinding todo tests. #12765 (@donmccurdy)
  • Set individual tests as TODO, not modules. #12768 (@donmccurdy)
  • Light tests failing because of assert not passed into runStdLightTests. #12779 (@OndrejSpanel)
  • Fixed geometry tests. #12781 (@OndrejSpanel)
  • Fixed animation tests. #12780 (@OndrejSpanel)
  • Fix some unit tests not testing properly. #12778 (@OndrejSpanel)
r88 r88

https://github.com/mrdoob/three.js/wiki/Migration-Guide#r87--r88

(520,390 KB, gzip: 131,713 KB)

Source

  • Global
    • Clean up. #12156 #12159 #12163 #12287 #12449 #12419 (@Mugen87 and @JPedersen)
    • Added file extension to import paths. #12081 (@bentok)
  • Audio
    • Fixed start time and offset. #12094 (@Mugen87)
  • Animation/PropertyBinding
    • Nested properties support. #11841 (@jamesgk)
  • AxisHelper
    • Renamed to AxesHelper. #12321 (@WestLangley)
  • Box3
    • Fixed expandByObject() GC issues. #12377 (@ngokevin)
  • Box3Helper
    • Update on matrix world update. e62a722efd4d6504306226b1374648d1cfae2489 (@mrdoob)
  • BoxGeometry
    • Set default size values. #12410 (@WestLangley)
  • BufferAttribute
    • Added normalized parameter to all constructors. #12242 (@Bsheridan12)
  • BufferGeometry
    • Removed MaxIndex static property. #12257 (@Mugen87)
    • Added setFromPoints(). #12406 (@Mugen87)
  • CircleGeometry
    • Changed default radius to 1. #12418 (@WestLangley)
  • Curves
    • Added optionTarget parameter to getPoint() and getPointAt(). #12357 (@Mugen87)
    • Added copy() and clone(). #12514 (@Mugen87)
  • CurvePath
    • Removed createPointsGeometry(), createSpacedPointsGeometry() and createGeometry() factory methods. #12406 (@Mugen87)
    • Added copy(). #12548 (@Mugen87)
  • CylinderGeometry
    • Changed default radiusTop, radiusBottom and height to 1. #12418 (@WestLangley)
  • FileLoader
    • Merge concurrent requests for the same url. #12434 #12458 #12528 (@ngokevin and @takahirox)
  • FontLoader
    • Added setPath(). #12058 (@lukehorvat)
  • Geometry
    • Added setFromPoints(). #12406 (@Mugen87)
  • GeometryIdCount
    • Removed. #10095 (@mrdoob)
  • InstancedBufferGeometry
    • Fixed copy() and clone(). #11980 (@Mugen87)
  • LoadingManager
    • Added setURLModifier(). #11259 (@donmccurdy)
  • Math
    • Changed nearestPowerOfTwo() to be smaller or equal. 31e8e610b6ad86aca97c24c71fd4ebc6b5bfa259 (@mrdoob)
    • Renamed nearestPowerOfTwo() to floorPowerOfTwo() and nextPowerOfTwo() to ceilPowerOfTwo(). a2646422046bbca373663c06798a4bf2101a4270 (@mrdoob)
    • Improved generateUUID() performance. #12432 (@takahirox)
  • Matrix3
    • Added translate(), rotate(), scale() and setUvTransform(). #11863 (@WestLangley)
  • Mesh
    • Check if position is undefined before use position.count. #12192 7c2ebf71a610878347065260b905e4bc393cb484 (@wenatuhs and @mrdoob)
  • Material
    • Improved Line*Material and SpriteMaterial serialisation. #12031 (@tentone)
    • Made toJSON() more compatible with JSON.stringify. #12196 (@autra)
  • Object3D
    • Added lookAt( x, y, z ) support. #12128 (@WestLangley)
    • Made toJSON() more compatible with JSON.stringify. #12196 (@autra)
    • Added rotateOnWorldAxis(). #12352 (@MichaelHazani)
  • ObjectLoader
    • Added more geometries support. #12375 (@moraxy)
  • OrthographicCamera
    • Avoid extra object allocations in setViewOffset(). #12158 #12171 (@WestLangley)
  • Path
    • Added copy(). #12548 (@Mugen87)
  • PerspectiveCamera
    • Avoid extra object allocations in setViewOffset(). #12158 #12171 (@WestLangley)
  • PlaneHelper
    • Update on matrix world update. e62a722efd4d6504306226b1374648d1cfae2489 (@mrdoob)
  • PlaneGeometry
    • Set default size values. #12410 (@WestLangley)
  • Polyfills
    • More robust Function.prototype.name check. #12294 (@mrdoob)
  • RingGeometry
    • Changed default innerRadius to 0.5 and outerRadius to 1. #12418 (@WestLangley)
  • SkeletonHelper
    • Update on matrix world update. e62a722efd4d6504306226b1374648d1cfae2489 (@mrdoob)
  • SphereGeometry
    • Changed default radius to 1. #12418 (@WestLangley)
  • Texture
    • Added rotation, matrix and matrixAutoUpdate. #11863 (@WestLangley)
    • Added center. #12063 #12189 (@tentone)
    • Made toJSON() more compatible with JSON.stringify. #12196 (@autra)
  • TorusGeometry
    • Changed default radius to 1 and tube to 0.4. #12418 (@WestLangley)
  • TorusKnotGeometry
    • Changed default radius to 1 and tube to 0.4. #12418 (@WestLangley)
  • Vector2
    • Added applyMatrix3. #11863 (@WestLangley)
    • Renamed distanceToManhattan() to manhattanDistanceTo(). #12386 (@WestLangley)
    • Renamed lengthManhattan() to manhattanLength(). #12387 (@WestLangley)
  • Vector3
    • Renamed distanceToManhattan() to manhattanDistanceTo(). #12386 (@WestLangley)
    • Renamed lengthManhattan() to manhattanLength(). #12387 (@WestLangley)
    • Fixed cross(). #12507 (@WestLangley)
  • VideoTexture
    • Use requestAnimationFrame in the first call too. 874115670670a5acd4cc1f8f20625950a0b9f30f (@mrdoob)
    • Make update() more robust. #12460 (@Mugen87)
  • WebGLRenderer
    • Simplified logarithmic depth buffer vertex shader. #12051 (@WestLangley)
    • Replaced offsetRepeat (vec4) with uvTransform (mat3). #11863 (@WestLangley)
    • Support fog in ShadowMaterial. #12073 (@WestLangley)
    • Added linearToRelativeLuminance() to common.glsl. #12125 (@Mugen87)
    • Improved ImageBitmap support. #12077 (@Avocher)
    • Improved RawShaderMaterial handling. #12243 (@fernandojsg)
    • Renamed transpose() to transposeMatrix3() in common.glsl. #12248 (@Mugen87)
    • Fixed getSpecularMIPLevel() calculation in lights_pars.glsl. #12267 (@stevesan)
    • Corrected unpackRGBToNormal() in packing.glsl. #12273 (@WestLangley)
    • Fix background references after context loss/restored. #12301 (@bilou84)
    • Check for window object when instantiating the WebVRManager. #12288 (@hypothete)
    • Fixed saturate macro redefined in tonemapping_pars_fragment.glsl. #12495 (@THISISAGOODNAME)
  • WebGLBackground
    • Robustness. 9ee6c4034b03f3f8f635344e33ab997c7ecd0648 (@mrdoob)
  • WebGLCapabilities
    • Logarithmic depth buffer no longer needs EXT_frag_depth. #11995 (@WestLangley)
  • WebGLSpriteRenderer
    • Use correct depth in fog formula. #12032 (@WestLangley)
    • Take opacity into account when testing alpha. #12034 (@WestLangley)
    • Fixed colorWrite handling. #12121 (@chubei-oppen)
  • WebVRManager
    • Added device.isPresenting check before requesting frame. efd5bb642630afcf907c72ce13f072bec1eea0e9 1ec21ec64304dc5dc65d94185a61d4f642e0b477 (@mrdoob)

Documentation

  • Clean up. #12005 #12020 #12038 #12087 #12089 #12095 #12123 #12166 #12182 #12227 #12230 #12249 #12263 #12264 #12266 #12337 #12375 #12396 #12399 #12414 #12441 #12496 #12519 #12532 #12517 (@moraxy, @jasonmarkperez, @PierfrancescoSoffritti, @infodiver, @ZKeeping, @kkruups, @pixcai, @cg-cnu, @NeilGatenby, @looeee, @trusktr, @taseenb, @luruke and @paulmasson)
  • Improved PDBLoader page. #11992 (@Mugen87)
  • Added DecalGeometry page. #11993 (@Mugen87)
  • Improved AnimationLoader page. #11985 (@looeee)
  • Improved TextureLoader page. #11997 (@Mugen87)
  • Removed CurveUtils page. #12040 (@moraxy)
  • Added Interpolations page. #12040 (@moraxy)
  • Added GLTFExporter page. #12083 (@fernandojsg)
  • Improved Object3D page. #12102 (@looeee)
  • Improved PerspectiveCamera page. #12100 (@looeee)
  • Improved OrthographicCamera page. #12103 (@looeee)
  • Added OrbitControls page. #12153 (@looeee)
  • Added Box3Helper and PlaneHelper pages. #12177 (@vidartf)
  • Improved OBJLoader page. #12245 (@cg-cnu)
  • Improved page titles. 8a0440fa9094565ce3a67e4d69af150f6cf95323 (@mrdoob)
  • Improved WebGLRenderer page. #12417 (@rohan-deshpande)
  • Improved GLTFLoader page. #12540 (@takahirox)
  • Added PRWNLoader page. #12512 (@kchapelier)

Examples

  • Clean up. #11989 #11994 #11998 #12012 #12013 #12015 #12016 #12027 #12041 #12054 83cf34fbc9a91533332dc60edf4fbeda95af51e0 06a846e9299ac66a38c8d12f6a06ce2966ecabbf #12057 #12076 #12079 #12091 c2cbbf6d71aabb1f34ab958b4eafe0a5bd9b87a4 #12112 #12113 #12145 #12164 #12168 #12161 #12195 #12219 #12235 #12262 2ad3fa230839f2351555f0b91a727fa5e9c9186a #12315 #12311 #12340 d694c708b1ca14b3eb692c4621f1b97e810d857a #12346 #12393 #12404 #12415 b403e43a20d19517cea55c3c5d27920159c34726 #12442 #12471 #12508 (@Mugen87, @WestLangley, @trevortknguyen, @mrdoob, @sjfricke, @happy2discover, @gero3, @Dennie83, @cg-cnu, @gregsadetsky, @shelbyspeegle and @paulmasson)
  • Upgrade FXAA to 3.11. #12046 (@abiro)
  • Added webgl_materials_texture_rotation example. #11863 (@WestLangley)
  • Added SSAOPass. #12064 (@tentone)
  • Added renderToScreen support to UnrealBloomPass. #12086 (@tentone)
  • Fixed movement in misc_controls_pointerlock. #12134 (@Mugen87)
  • Updated to latest msgpack. #12146 7f650f24093d067d498cc0d27e46439016985f09 (@kkruups and @mrdoob)
  • Improved Microsoft Edge support in webvr_cubes. #12181 (@olga-microsoft)
  • Improved WebVR.checkAvailability(). #12180 (@olga-microsoft)
  • Updated to latest OBJLoader2. #12048 #12200 #12240 #12335 #12397 #12491 #12509 (@kaisalmen)
  • Improved devicePixelRatio handling in webgl_postprocessing_smaa. #12187 (@robertoranon)
  • Improved webgl_decals. #12194 (@Mugen87)
  • Fixed text examples. #12199 #12204 (@Mugen87)
  • Removed CombinedCamera. #12184 (@Mugen87)
  • Updated DRACOLoader to 1.1.0. #12178 (@fanzhanggoogle)
  • Added GearVRController and webvr_gear_vr example. #12218 (@servinlp)
  • Updated css3d_periodictable with the latests elements. #12260 (@codingbloke)
  • Made View Source button an anchor element. #12306 (@martinjoiner)
  • Added Line and Spritesupport in OutlinePass. #12304 (@Astrak)
  • Added Refractor and webgl_refraction example. #12309 (@Mugen87)
  • Added Water2, webgl_water and webgl_water_flowmap. #12341 (@Mugen87)
  • Experimenting with ES6 modules in webgl2_sandbox example. 5f889ce296aaf447ec5992a6df726691098a9110 8aab6e0382cd6ba8fd3fb943e7f65141bf3a50bc (@mrdoob)
  • Added webaudio_timing example. #12401 (@Mugen87)
  • Rescued old GLTFLoader as LegacyGLTFLoader. b683ea495d8c7cac75e68c5aad10f9d679cdf93b (@mrdoob)
  • Refactored WebVR.js. 198e2598c5799870bde9d3e7b7349cc74147dff0 c8108f67272e92a94353820f605224c49b6908ed d7824029551b42c92161290a8dab7bf617c4ad7c 6b5607af822e7d4cea717327cb233b0a49e7ae26 e526387f586b93595aff3f126ddd3cf59749d03a 45e4c7dafbad60ed001cab4470194e1194a980ea 70fc54c9868e521433bac5b72261c4d6df99a34e (@mrdoob)
  • Updated all webvr examples to new WebVR.js. f76176606e8d4b275b513ef75895207e207960f4 0b7b1f804932cd45b66b10b21424712d30f743f5 (@mrdoob)
  • Support Firefox's partial createImageBitmap implementation in ImageBitmapLoader. #12456 (@donmccurdy)
  • Fixed user height in webvr_vive examples. e3cbd3052b20a9235f343446cc23b0211782d3d4 (@mrdoob)


  • 3MFLoader

    • Fix TextDecoder check. #12045 (@Mugen87)
  • AMFLoader

    • Internet Explorer support. #12224 (@Mugen87)
  • AssimpLoader

    • Clean up. #12325 (@tentone)
  • AWDLoader

    • Clean up. #12097 (@gero3)
  • ColladaLaoder

    • Replaced with ColladaLoader2. #12212 (@Mugen87)
    • Improved support for models with non-integer joint indices. #12160 (@ferrolho)
    • Improved node parsing. #12463 (@Mugen87)
    • Improved node name fallback. #12529 (@MohmadAyman)
  • DeviceOrientationControls

    • Removed alphaOffsetAngle and updateAlphaOffsetAngle(). #12403 (@WestLangley)
  • EffectComposer

    • Support devicePixelRatio. #12206 (@robertoranon)
  • FBXLoader

    • Clean up. #12307 #12501 #12486 #12503 #12555 (@looeee)
    • Improved material parsing. #12004 (@takahirox)
    • Added support for lights. #12254 (@looeee)
    • Added support for cameras. #12256 (@looeee)
    • Fix string utf8 encoding in BinaryReader. #12246 (@Itee)
    • Support targets for cameras and lights. #12269 (@looeee)
    • Improved handling of ambient light. #12285 (@looeee)
    • Support for multiple uv coords. #12276 (@sneha-belkhale)
    • Support transformed pivots. #11963 (@looeee)
    • Added bumpScale support. #12308 (@looeee)
    • Filter object names with PropertyBinding.sanitizeNodeName(). #12310 (@donmccurdy)
    • Added displacementMap, emissiveMap, specularMap and alphaMap support. #12317 (@looeee)
    • Switched default type from Object3D to Group. #12314 (@looeee)
    • Improved base64 image parsing. #12318 #12362 #12473 (@looeee)
    • Switched default material type to MeshPhongMaterial. #12372 #12466 (@looeee)
    • Support different framerates. #12391 (@looeee)
    • Support embedded textures with jpeg extension. #12424 (@looeee)
    • Use texture scaling as a texture repeat value. #12412 (@jparimaa)
    • Improved birnary format support. #12465 (@looeee)
    • Improved textParser map name parsing. #12459 (@looeee)
    • Consistent property type parsing. #12462 (@looeee)
    • Fixed bug where last material index group was not added. #12444 (@looeee)
    • Fixed undefined world matrices map error. #12479 (@looeee)
    • Check rotation axis is defined per frame. #12480 (@looeee)
    • Reduced casting between types and refactor typecasting. #12482 (@looeee)
    • Better check for multi-materials. #12488 (@looeee)
    • Use THREE.Math.degToRad. #12485 (@looeee)
    • Further improve return types of parsers. #12493 (@looeee)
    • Check position and scale axis is defined per frame. #12487 (@looeee)
    • Create BufferGeometry directly. #12504 (@looeee)
    • Workaround for undefined posenode id in Binary format. #12537 (@looeee)
    • Removed duplicated arrays from binary parser. #12558 (@looeee)
  • GLTFExporter

    • Clean up. #12223 (@Mugen87)
    • Validation fixes. #12003 (@fernandojsg)
    • Added TRS option. #11977 (@fernandojsg)
    • Added onlyVisible option. #12028 (@fernandojsg)
    • Added truncateDrawRange option. #12029 (@fernandojsg)
    • Prevent image and material duplicates. #12042 (@fernandojsg)
    • Improved materials export. #12043 #12044 (@fernandojsg and @takahirox)
    • Skip lights. #12037 (@fernandojsg)
    • Added alphaCutoff support. #12036 (@fernandojsg)
    • Support for binary export option. #12428 (@donmccurdy)
  • GLTFLoader

    • Remove flatShading backwards compatibility. #11983 (@dhritzkiv)
    • Check if material.extra is defined before assign it. #12007 (@proteamer)
    • Support aoMapIntensity. #12019 (@donmccurdy)
    • Added normalScale support. #12017 (@calrk)
    • Ignore onError if handler not provided. #12099 (@donmccurdy)
    • Removed node.meshes check. #12107 (@dhritzkiv)
    • Clone material before making geometry-related edits. #12137 (@donmccurdy)
    • Replaced for in loops with for loops. #12173 (@donmccurdy)
    • Update spec/gloss material to new texture rotation API. #12203 (@donmccurdy)
    • Set sRGBEncoding to map and emissiveMap. #12239 (@donmccurdy)
    • Remove extra Object3D wrappers on nodes. #12244 (@donmccurdy)
    • Explicitly clone ShaderMaterial properties. #12274 (@donmccurdy)
    • Reuse internal loader. #12351 #12374 (@Mugen87)
    • Report missing buffer dependencies. #12363 (@donmccurdy)
    • More robust de-duping of mesh/node names and morph target fixes. #12371 (@donmccurdy)
    • Clean up node pre-processing. #12373 #12378 (@donmccurdy)
    • Top-down loading for cameras. #12119 (@donmccurdy)
    • Fixed data only being provided in JSON format. #12472 (@antonio-gomez)
    • Improved path check. #12500 (@takahirox)
    • Fixed Euler.fromArray syntax. #12511 (@looeee)
    • Fixed uncaught exception. #12531 (@takahirox)
    • Improved error messages. #12539 #12543 (@takahirox)
    • Support accessor.normalized. #12551 (@takahirox)
  • MMDLoader

    • Fixed MMDPhysics rotation handling. #12430 (@takahirox)
  • Mirror

    • Avoid rendering when facing away the camera. 7dc8fa56f5106b51248f30115c7e884a3f8f6c91 (@mrdoob)
    • Added recursion parameter. ff961a729822f17376ddcd931a6310711e2a5137 (@mrdoob)
    • Renamed to Reflector. #12345 (@Mugen87)
  • OBJLoader

    • Clean up. #12557 (@Mugen87)
    • Added vertex colors support. 0eeee30112c2c39524adda9a267924d8515f2070 (@mrdoob)
  • PCDLoader

    • Added ascii file for correctness. #12213 (@Mugen87)
  • QuickHull

    • Fixed fail on coplanar sets of points. #12328 (@rawbeans)
  • Sky

    • Changed geometry size to 1. #12155 (@Astrak)
  • SVGRenderer

    • Improved Illustrator and Inkscape support. #12071 (@ElDeveloper)
  • ViveController

    • Added axes to thumbpad event. #12039 (@servinlp)
    • Added Microsoft controller support. 593c768d5de235f993f5365c85cc1c442f99317e fd9c6308a1e1a8aa80676ed7df1b8c9a53739555 (@mrdoob)
  • VTKLoader

    • Clean up. 890a52bd001ffde6e4846d36c0b8bce9fa0ce72e (@mrdoob)
    • Support Int32 DataArray, and allow tabs in XML. #12280 (@tlbtlbtlb)
  • VRMLLoader

    • Produce BufferGeometry. #12055 (@Mugen87)
    • Improved format parsing. #12209 (@Mugen87)
  • WaterShader

    • Added the size parameter, shadow support and tonemapping support. #12167 (@Astrak)
    • Implement self-rendering. c4711517ba86415ddfe7acfbf179fdcbb552af17 (@mrdoob)
  • XLoader

    • Clean up. #12556 (@Itee)

Editor

  • Clean up. #12142 (@gero3)
  • Fixed import not being able to import the same file twice. #11987 (@moraxy and @mrdoob)
  • Allow menubar scrolling on small screens. fd61ecbf584052e45b79fa059a2ed12ca4dbe00f (@mrdoob)
  • Fixed multi-material textures support. #12023 a2a9cd232c8bd316f4a611df910027825afa5666 (@TyLindberg and @mrdoob)
  • Listen for Command-Z instead of Ctrl-Z on Mac. #12502 (@TyLindberg)
  • Use default values in geometry generators. 6164f981c55bc06591391c6a988bdf108e6f3509 (@mrdoob)
  • Scaled down LatheGeometry values. ac8781ebd4bdfb53f3e09fd0652afa156832f72f (@mrdoob)
  • Added edit button back. c04e8d1a7168615ead7d869bcf25c14f16cc17dd (@mrdoob)
  • Updated to latest WebVR.js. fd8922a9493144972001dfad8203c338fc2c0db0 (@mrdoob)
  • Added project title. 31bedc5f35ff3b50a6f99ede489591cceb0c59d2 (@mrdoob)

Exporters

  • Blender
    • Clean up. #12090 #12096 #12268 (@gero3 and @cg-cnu)
    • Set (1,1,1) to scale key frames by default. #12232 (@RaheelYawar)
    • Improved UI. #12261 (@cg-cnu)

Tests

  • Improved coverage. #12217 #12300 #12354 #12423 (@moraxy)
  • Refactored. #12549 (@Itee)
Other projects in JavaScript