# three-loader-3dtiles ![license](https://img.shields.io/badge/License-Apache%202.0-yellow.svg) [![npm version](https://badge.fury.io/js/three-loader-3dtiles.svg)](https://badge.fury.io/js/three-loader-3dtiles) [![Build Status](https://cloud.drone.io/api/badges/nytimes/three-loader-3dtiles/status.svg)](https://cloud.drone.io/nytimes/three-loader-3dtiles) [Demos](#demos) — [Usage](#basic-usage) — [Roadmap](#roadmap) — [Contributing](#contributing) — [Docs](#docs) — [Alternatives](#alternatives) This is a [Three.js](https://threejs.org/) loader module for handling [OGC 3D Tiles](https://www.ogc.org/standards/3DTiles), created by [Cesium](https://github.com/CesiumGS/3d-tiles). It currently supports the two main formats: 1. Batched 3D Model (b3dm) - based on glTF. 2. Point cloud. Internally, the loader uses the [loaders.gl library](https://github.com/visgl/loaders.gl), which is part of the [vis.gl platform](https://vis.gl/), openly governed by the [Urban Computing Foundation](https://uc.foundation/). Cesium has [worked closely with loaders.gl](https://cesium.com/blog/2019/11/06/cesium-uber/) to create a platform-independent implementation of their 3D Tiles viewer. Development of this library started at The New York Times R&D as an effort to create a clean bridge between the 3D Tiles specification and the widely used 3D library Three.js. The library helps us deliver massive 3D and Geographical journalism to desktops and mobile readers alike. From **Re**porting to **Tele**porting! --- ## Demos * [Photogrammetry exported to 3D Tiles in RealityCapture](https://nytimes.github.io/three-loader-3dtiles/examples/demos/realitycapture) * [LiDAR Point Cloud hosted as 3D Tiles in Cesium ION](https://nytimes.github.io/three-loader-3dtiles/examples/demos/cesium) * [Map overlay with OpenStreetMap](https://nytimes.github.io/three-loader-3dtiles/examples/demos/map-overlay) --- ## Basic Usage Here is a simple example using the `Loader3DTiles` module to view a `tileset.json` containing a 3d tile hierarchy. ```javascript import { Scene, PerspectiveCamera, WebGLRenderer, Clock } from 'three' import { Loader3DTiles } from 'three-loader-3dtiles'; const scene = new Scene() const camera = new PerspectiveCamera() const renderer = new WebGLRenderer() const clock = new Clock() renderer.setSize(window.innerWidth, window.innerHeight) document.body.appendChild(renderer.domElement) let tilesRuntime = null; async function loadTileset() { const result = await Loader3DTiles.load( url: 'https:///tileset.json', renderer: renderer, options: { dracoDecoderPath: 'https://cdn.jsdelivr.net/npm/three@0.137.0/examples/js/libs/draco', basisTranscoderPath: 'https://cdn.jsdelivr.net/npm/three@0.137.0/examples/js/libs/basis', } ) const {model, runtime} = result tilesRuntime = runtime scene.add(model) } function render() { const dt = clock.getDelta() if (tilesRuntime) { tilesRuntime.update(dt, renderer, camera) } renderer.render(scene, camera) window.requestAnimationFrame(render) } loadTileset() render() ``` --- ## Installation The library supports [three.js](https://threejs.org/) r137 and uses its GLTF, Draco, and KTX2/Basis loaders. Refer to the `browserslist` field in [package.json](./package.json) for target browsers. ### 1. ES Module Download [dist/three-loader-3dtiles.esm.min.js](dist/three-loader-3dtiles.esm.min.js) and use an `importmap` to import the dependencies. See [here](examples/installation/es-module) for a full example. The [demos](examples/demos) also use this method of installation: #### **`index.html`** ```html