3d-tiles-renderer/plugins
May 14, 2026 ยท View on GitHub
Plugins and extensions for the 3D Tiles renderer.
See the API reference for full class and method documentation.
Community Plugins
3D-Tiles-RendererJS-3DGS-Plugin
Plugin to render gaussian-splat-embeded glTF tile sets.
3dtilesrenderer-styling-plugin
Plugin to add Cesium 3D Tiles Styling specification support.
3dtilesrenderer-outline-plugin
Plugin to add support for CESIUM_primitive_outline glTF extension.
Use
GLTF Plugins
Set of three.js GLTFLoader plugins to be registered via GLTFLoader.register. To use with the TilesRenderer:
const tiles = new TilesRenderer( url );
const loader = new GLTFLoader( tiles.manager );
loader.register( () => new GLTFMeshFeaturesExtension() );
loader.register( () => new GLTFStructuralMetadataExtension() );
loader.register( () => new GLTFCesiumRTCExtension() );
tiles.manager.addHandler( /(gltf|glb)$/g, loader );
To retrieve feature IDs at a raycasted hit point using GLTFMeshFeaturesExtension:
const barycoord = new Vector3();
const triangle = new Triangle();
const hit = raycaster.raycast( object );
if ( hit ) {
const { face, point, faceIndex } = hit;
triangle.setFromAttributeAndIndices( object.geometry.attributes.position, face.a, face.b, face.c );
triangle.a.applyMatrix4( object.matrixWorld );
triangle.b.applyMatrix4( object.matrixWorld );
triangle.c.applyMatrix4( object.matrixWorld );
triangle.getBarycoord( point, barycoord );
const features = meshFeatures.getFeatures( faceIndex, barycoord );
// ...
}
TilesRenderer Plugins
Plugins to register to the TilesRenderer instance to modify behavior:
const tiles = new TilesRenderer( url );
tiles.registerPlugin( new TileCompressionPlugin() );
tiles.registerPlugin( new TilesFadePlugin() );
Cesium Ion Authentication Plugin
The assetTypeHandler callback is fired when an asset type other than 3DTiles is encountered. Use it to register additional plugins for supported types:
tilesRenderer.registerPlugin( new CesiumIonAuthPlugin( {
apiToken,
assetTypeHandler: ( type, tilesRenderer ) => {
if ( type === 'TERRAIN' ) {
tilesRenderer.registerPlugin( new QuantizedMeshPlugin() );
}
},
} ) );
Example Plugins
The following plugins are available in the examples directory and are not part of the main package.
TextureOverlayPlugin
available in the examples directory
Plugin for loading alternate texture sets and assigning them to geometry in the tileset.
.textureUpdateCallback
textureUpdateCallback : ( tile, model, plugin ) => void;
Callback fired when the textures for a specific tile has been loaded. This function is required.
.waitForLoadCompletion
waitForLoadCompletion : Boolean
If true then the update callback will only fire for tiles once all the associated textures have loaded.
constructor
constructor( options = {
textureUpdateCallback: null,
waitForLoadCompletion: true,
} );
.getTexturesForTile
getTexturesForTile( tile : Tile, target = {} : Object ) : target
.registerLayer
registerLayer( name : string, customTextureCallback : Function ) : void
.unregisterLayer
unregisterLayer( name : string ) : void
.hasLayer
hasLayer( name : string ) : boolean
TopoLinesPlugin
available in the examples directory
Plugin for rendering topographic contour lines on the tileset.
.constructor
constructor( options : Object )
Available options are as follows:
{
// whether the data set is 'planar' or 'ellipsoid'
projection = 'planar',
// the thickness of the topo lines
thickness = 1,
// options for topographic lines
// "topoLimit" refers to the min and max distances between each topo line
// "topoFadeLimit" refers to the fade in and out point of the topo lines as a whole
topoColor = new Color( 0xffffff ),
topoOpacity = 0.5,
topoLimit = isPlanar ? new Vector2( 0.1, 1e10 ) : new Vector2( 1, 1e10 ),
topoFadeLimit = isPlanar ? new Vector2( 0, 1e10 ) : new Vector2( 0, 1e4 ),
// options for cartesian and cartographic lines when in planar and ellipsoid mode respectively
cartoColor = new Color( 0xffffff ),
cartoOpacity = isPlanar ? 0 : 0.5,
cartoLimit = new Vector2( 0.1, 1e10 ),
cartoFadeLimit = isPlanar ? new Vector2( 0, 1e10 ) : new Vector2( 1.5 * 1e4, 1e6 ),
}