or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

3d-tiles.mdcore-math-geometry.mddata-sources.mdentity-data-visualization.mdimagery-terrain.mdindex.mdscene-3d-graphics.mdtime-animation.mdviewer-widgets.md
tile.json

3d-tiles.mddocs/

3D Tiles and Streaming Content

3D Tiles specification support for streaming and rendering large-scale 3D content including buildings, point clouds, meshes, and instanced models.

Capabilities

3D Tilesets

Core 3D Tiles tileset loading and management.

/**
 * A 3D Tileset for streaming hierarchical 3D content
 */
class Cesium3DTileset {
  constructor(options: Cesium3DTilesetOptions);
  readonly asset: Cesium3DTilesetAsset;
  readonly properties?: any;
  readonly root: Cesium3DTile;
  readonly boundingSphere: BoundingSphere;
  readonly modelMatrix: Matrix4;
  readonly timeSinceLoad: number;
  readonly totalMemoryUsageInBytes: number;
  readonly clippingPlanes?: ClippingPlaneCollection;
  readonly ellipsoid: Ellipsoid;
  readonly foveatedScreenSpaceError: boolean;
  readonly foveatedConeSize: number;
  readonly foveatedMinimumScreenSpaceErrorRelaxation: number;
  readonly foveatedInterpolationCallback?: Cesium3DTileset.foveatedInterpolationCallback;
  readonly foveatedTimeDelay: number;
  readonly skipScreenSpaceErrorFactor: number;
  readonly baseScreenSpaceError: number;
  readonly skipLevels: number;
  readonly immediatelyLoadDesiredLevelOfDetail: boolean;
  readonly loadSiblings: boolean;
  readonly dynamicScreenSpaceError: boolean;
  readonly dynamicScreenSpaceErrorDensity: number;
  readonly dynamicScreenSpaceErrorFactor: number;
  readonly dynamicScreenSpaceErrorHeightFalloff: number;
  readonly progressiveResolutionHeightFraction: number;
  readonly preferLeaves: boolean;
  show: boolean;
  modelMatrix: Matrix4;
  shadows: ShadowMode;
  maximumScreenSpaceError: number;
  maximumMemoryUsage: number;
  readonly style?: Cesium3DTileStyle;
  colorBlendMode: Cesium3DTileColorBlendMode;
  colorBlendAmount: number;
  pointCloudShading: PointCloudShading;
  readonly ready: boolean;
  readonly readyPromise: Promise<Cesium3DTileset>;
  readonly tilesLoaded: boolean;
  readonly url: string;
  readonly basePath: string;
  readonly extras?: any;
  readonly imageBasedLighting: ImageBasedLighting;
  readonly backFaceCulling: boolean;
  readonly enableShowOutline: boolean;
  readonly showOutline: boolean;
  readonly outlineColor: Color;
  readonly vectorClassificationOnly: boolean;
  readonly vectorKeepDecodedPositions: boolean;
  readonly featureIdLabel: string;
  readonly instanceFeatureIdLabel: string;
  readonly splitDirection: SplitDirection;
  readonly debugFreezeFrame: boolean;
  readonly debugColorizeTiles: boolean;
  readonly debugWireframe: boolean;
  readonly debugShowBoundingVolume: boolean;
  readonly debugShowContentBoundingVolume: boolean;
  readonly debugShowViewerRequestVolume: boolean;
  readonly debugShowGeometricError: boolean;
  readonly debugShowRenderingStatistics: boolean;
  readonly debugShowMemoryUsage: boolean;
  readonly debugShowUrl: boolean;
  
  readonly allTilesLoaded: Event;
  readonly initialTilesLoaded: Event;
  readonly tileLoad: Event;
  readonly tileUnload: Event;
  readonly tileFailed: Event;
  readonly tileVisible: Event;
  
  makeStyleDirty(): void;
  isDestroyed(): boolean;
  destroy(): void;
  hasExtension(extensionName: string): boolean;
  getExtension(extensionName: string): any;
}

interface Cesium3DTilesetOptions {
  url: Resource | string | Promise<Resource | string>;
  show?: boolean;
  modelMatrix?: Matrix4;
  shadows?: ShadowMode;
  maximumScreenSpaceError?: number;
  maximumMemoryUsage?: number;
  cullWithChildrenBounds?: boolean;
  cullRequestsWhileMoving?: boolean;
  cullRequestsWhileMovingMultiplier?: number;
  preloadWhenHidden?: boolean;
  preloadFlightDestinations?: boolean;
  preferLeaves?: boolean;
  dynamicScreenSpaceError?: boolean;
  dynamicScreenSpaceErrorDensity?: number;
  dynamicScreenSpaceErrorFactor?: number;
  dynamicScreenSpaceErrorHeightFalloff?: number;
  progressiveResolutionHeightFraction?: number;
  foveatedScreenSpaceError?: boolean;
  foveatedConeSize?: number;
  foveatedMinimumScreenSpaceErrorRelaxation?: number;
  foveatedInterpolationCallback?: Cesium3DTileset.foveatedInterpolationCallback;
  foveatedTimeDelay?: number;
  skipScreenSpaceErrorFactor?: number;
  baseScreenSpaceError?: number;
  skipLevels?: number;
  immediatelyLoadDesiredLevelOfDetail?: boolean;
  loadSiblings?: boolean;
  clippingPlanes?: ClippingPlaneCollection;
  classificationType?: ClassificationType;
  ellipsoid?: Ellipsoid;
  pointCloudShading?: PointCloudShading;
  imageBasedLighting?: ImageBasedLighting;
  backFaceCulling?: boolean;
  enableShowOutline?: boolean;
  showOutline?: boolean;
  outlineColor?: Color;
  vectorClassificationOnly?: boolean;
  vectorKeepDecodedPositions?: boolean;
  featureIdLabel?: string | number;
  instanceFeatureIdLabel?: string | number;
  splitDirection?: SplitDirection;
  projectTo2D?: boolean;
  enablePick?: boolean;
  colorBlendMode?: Cesium3DTileColorBlendMode;
  colorBlendAmount?: number;
  enableModelExperimental?: boolean;
  customShader?: CustomShader;
  content?: Cesium3DTilesContent;
  debugHeatmapTilePropertyName?: string;
  debugFreezeFrame?: boolean;
  debugColorizeTiles?: boolean;
  debugWireframe?: boolean;
  debugShowBoundingVolume?: boolean;
  debugShowContentBoundingVolume?: boolean;
  debugShowViewerRequestVolume?: boolean;
  debugShowGeometricError?: boolean;
  debugShowRenderingStatistics?: boolean;
  debugShowMemoryUsage?: boolean;
  debugShowUrl?: boolean;
}

namespace Cesium3DTileset {
  type foveatedInterpolationCallback = (p: number, maximumScreenSpaceError: number) => number;
  
  function fromIonAssetId(assetId: number, options?: Cesium3DTilesetFromIonOptions): Promise<Cesium3DTileset>;
  function fromUrl(url: Resource | string, options?: Cesium3DTilesetOptions): Promise<Cesium3DTileset>;
}

interface Cesium3DTilesetFromIonOptions {
  accessToken?: string;
  server?: Resource | string;
  show?: boolean;
  modelMatrix?: Matrix4;
  shadows?: ShadowMode;
  maximumScreenSpaceError?: number;
  maximumMemoryUsage?: number;
}

/**
 * Individual 3D tile within a tileset
 */
class Cesium3DTile {
  readonly asset: any;
  readonly boundingVolume: TileBoundingVolume;
  readonly contentBoundingVolume?: TileBoundingVolume;
  readonly viewerRequestVolume?: TileBoundingVolume;
  readonly geometricError: number;
  readonly refine?: Cesium3DTileRefine;
  readonly children: Cesium3DTile[];
  readonly parent?: Cesium3DTile;
  readonly transform?: Matrix4;
  readonly content: Cesium3DTileContent;
  readonly extras?: any;
  readonly hasEmptyContent: boolean;
  readonly hasTilesetContent: boolean;
  readonly hasImplicitContent: boolean;
  readonly hasMultipleContents: boolean;
  readonly computedTransform: Matrix4;
  readonly hasRenderableContent: boolean;
  readonly hasUnloadedRenderableContent: boolean;
  readonly selected: boolean;
  readonly contentExpired: boolean;
  readonly serverKey?: string;
  
  isDestroyed(): boolean;
  destroy(): void;
  getScreenSpaceError(frameState: FrameState, useParentGeometricError?: boolean): number;
  distanceToCamera(frameState: FrameState): number;
  createBoundingVolume(boundingVolumeHeader: any, transform: Matrix4): TileBoundingVolume;
  updateTransform(parentTransform?: Matrix4): void;
  requestContent(): void;
  unloadContent(): void;
  updateExpiration(): void;
  applyDebugSettings(enabled: boolean, color: Color): void;
}

/**
 * 3D tile content (geometry, point cloud, etc.)
 */
class Cesium3DTileContent {
  readonly featuresLength: number;
  readonly pointsLength: number;
  readonly trianglesLength: number;
  readonly geometryByteLength: number;
  readonly texturesByteLength: number;
  readonly batchTableByteLength: number;
  readonly innerContents?: Cesium3DTileContent[];
  readonly readyPromise: Promise<Cesium3DTileContent>;
  readonly tileset: Cesium3DTileset;
  readonly tile: Cesium3DTile;
  readonly url: string;
  readonly batchTable?: Cesium3DTileBatchTable;
  readonly hasProperty(batchId: number, name: string): boolean;
  readonly group?: Cesium3DContentGroup;
  
  getFeature(batchId: number): Cesium3DTileFeature;
  applyDebugSettings(enabled: boolean, color: Color): void;
  applyStyle(style: Cesium3DTileStyle): void;
  update(tileset: Cesium3DTileset, frameState: FrameState): void;
  isDestroyed(): boolean;
  destroy(): void;
}

/**
 * Individual feature within 3D tile content
 */
class Cesium3DTileFeature {
  readonly primitive: object;
  readonly tileset: Cesium3DTileset;
  readonly content: Cesium3DTileContent;
  show: boolean;
  color?: Color;
  
  hasProperty(name: string): boolean;
  getPropertyIds(results?: string[]): string[];
  getProperty(name: string): any;
  setProperty(name: string, value: any): void;
  getPropertyInherited(name: string): any;
  isExactClass(className: string): boolean;
  isClass(className: string): boolean;
  getExactClassName(): string;
}

/**
 * Point cloud feature within 3D tile content
 */
class Cesium3DTilePointFeature {
  show: boolean;
  color?: Color;
  readonly primitive: object;
  readonly tileset: Cesium3DTileset;
  readonly content: Cesium3DTileContent;
  
  hasProperty(name: string): boolean;
  getPropertyIds(results?: string[]): string[];
  getProperty(name: string): any;
  setProperty(name: string, value: any): void;
  getPropertyInherited(name: string): any;
  isExactClass(className: string): boolean;
  isClass(className: string): boolean;
  getExactClassName(): string;
}

3D Tile Styling

Styling and appearance customization for 3D tiles.

/**
 * Styling language for 3D tiles
 */
class Cesium3DTileStyle {
  constructor(style?: Resource | string | object);
  style?: any;
  readonly ready: boolean;
  readonly readyPromise: Promise<Cesium3DTileStyle>;
  show?: StyleExpression;
  color?: StyleExpression;
  pointOutlineColor?: StyleExpression;
  pointOutlineWidth?: StyleExpression;
  labelColor?: StyleExpression;
  labelOutlineColor?: StyleExpression;
  labelOutlineWidth?: StyleExpression;
  font?: StyleExpression;
  labelStyle?: StyleExpression;
  labelText?: StyleExpression;
  backgroundColor?: StyleExpression;
  backgroundPadding?: StyleExpression;
  backgroundEnabled?: StyleExpression;
  scaleByDistance?: StyleExpression;
  translucencyByDistance?: StyleExpression;
  distanceDisplayCondition?: StyleExpression;
  heightOffset?: StyleExpression;
  anchorLineEnabled?: StyleExpression;
  anchorLineColor?: StyleExpression;
  image?: StyleExpression;
  disableDepthTestDistance?: StyleExpression;
  horizontalOrigin?: StyleExpression;
  verticalOrigin?: StyleExpression;
  labelHorizontalOrigin?: StyleExpression;
  labelVerticalOrigin?: StyleExpression;
  
  readonly colorShaderFunction?: string;
  readonly showShaderFunction?: string;
  readonly pointOutlineColorShaderFunction?: string;
  readonly pointOutlineWidthShaderFunction?: string;
  
  getColorShaderFunction(functionName: string, attributePrefix: string, shaderState: any): string;
  getShowShaderFunction(functionName: string, attributePrefix: string, shaderState: any): string;
  getPointOutlineColorShaderFunction(functionName: string, attributePrefix: string, shaderState: any): string;
  getPointOutlineWidthShaderFunction(functionName: string, attributePrefix: string, shaderState: any): string;
}

/**
 * Expression within a style
 */
class StyleExpression {
  constructor(expression?: string, defines?: any);
  readonly expression?: string;
  
  evaluate(feature: Cesium3DTileFeature, result?: any): any;
  evaluateColor(feature: Cesium3DTileFeature, result?: Color): Color;
  getShaderFunction(functionName: string, attributePrefix: string, shaderState: any, functionSignature: string): string;
  getVariables(): string[];
}

/**
 * Conditional styling expression
 */
class ConditionsExpression {
  constructor(conditionsExpression?: any, defines?: any);
  readonly conditionsExpression?: any;
  
  evaluate(feature: Cesium3DTileFeature, result?: any): any;
  evaluateColor(feature: Cesium3DTileFeature, result?: Color): Color;
  getShaderFunction(functionName: string, attributePrefix: string, shaderState: any, functionSignature: string): string;
  getVariables(): string[];
}

Batch Tables and Properties

Property management and batch processing for 3D tile features.

/**
 * Batch table for 3D tile features
 */
class Cesium3DTileBatchTable {
  constructor(content: Cesium3DTileContent, featuresLength: number, batchTableJson: any, batchTableBinary?: Uint8Array, colorChangedCallback?: Function, pickColorChangedCallback?: Function);
  readonly featuresLength: number;
  
  hasProperty(batchId: number, name: string): boolean;
  getPropertyIds(batchId: number, results?: string[]): string[];
  getProperty(batchId: number, name: string): any;
  setProperty(batchId: number, name: string, value: any): void;
  getPropertyBySemantic(batchId: number, semantic: string): any;
  setPropertyBySemantic(batchId: number, semantic: string, value: any): void;
  isExactClass(batchId: number, className: string): boolean;
  isClass(batchId: number, className: string): boolean;
  getExactClassName(batchId: number): string;
  applyStyle(style: Cesium3DTileStyle): void;
  applyDebugSettings(enabled: boolean, color: Color): void;
  isDestroyed(): boolean;
  destroy(): void;
}

/**
 * Feature table for 3D tile content
 */
class Cesium3DTileFeatureTable {
  constructor(featureTableJson: any, featureTableBinary?: Uint8Array);
  readonly featuresLength: number;
  readonly json: any;
  readonly buffer: Uint8Array;
  
  hasProperty(propertyName: string): boolean;
  hasPropertyBySemantic(semantic: string): string;
  getPropertyArray(propertyName: string): any[];
  getProperty(propertyName: string, componentType: ComponentDatatype, componentsPerAttribute?: number): any;
  getPropertyBySemantic(semantic: string, componentType: ComponentDatatype, componentsPerAttribute?: number): any;
  getGlobalProperty(propertyName: string, componentType?: ComponentDatatype, componentLength?: number): any;
  getGlobalPropertyCartesian3(propertyName: string, result?: Cartesian3): Cartesian3;
  getGlobalPropertyCartesian4(propertyName: string, result?: Cartesian4): Cartesian4;
  getGlobalPropertyMatrix4(propertyName: string, result?: Matrix4): Matrix4;
}

Image-Based Lighting

Environment lighting for 3D tiles and models.

/**
 * Image-based lighting for realistic material rendering
 */
class ImageBasedLighting {
  constructor(options?: ImageBasedLightingOptions);
  imageBasedLightingFactor: Cartesian2;
  luminanceAtZenith: number;
  sphericalHarmonicCoefficients?: Cartesian3[];
  specularEnvironmentMaps?: string;
  
  isDestroyed(): boolean;
  destroy(): void;
}

interface ImageBasedLightingOptions {
  imageBasedLightingFactor?: Cartesian2;
  luminanceAtZenith?: number;
  sphericalHarmonicCoefficients?: Cartesian3[];
  specularEnvironmentMaps?: string;
}

Multiple Content and Implicit Tiling

Advanced 3D Tiles features for complex content organization.

/**
 * Multiple content within a single 3D tile
 */
class Cesium3DTilesetMultipleContent {
  readonly contents: Cesium3DTileContent[];
  readonly featuresLength: number;
  readonly pointsLength: number;
  readonly trianglesLength: number;
  readonly geometryByteLength: number;
  readonly texturesByteLength: number;
  readonly batchTableByteLength: number;
  readonly innerContents?: Cesium3DTileContent[];
  readonly readyPromise: Promise<Cesium3DTilesetMultipleContent>;
  readonly tileset: Cesium3DTileset;
  readonly tile: Cesium3DTile;
  readonly url: string;
  
  hasProperty(contentIndex: number, batchId: number, name: string): boolean;
  getFeature(contentIndex: number, batchId: number): Cesium3DTileFeature;
  applyDebugSettings(enabled: boolean, color: Color): void;
  applyStyle(style: Cesium3DTileStyle): void;
  update(tileset: Cesium3DTileset, frameState: FrameState): void;
  isDestroyed(): boolean;
  destroy(): void;
}

/**
 * Implicit tiling for procedurally generated tiles
 */
class ImplicitTileset {
  constructor(options: ImplicitTilesetOptions);
  readonly boundingVolume: TileBoundingVolume;
  readonly geometricError: number;
  readonly refine: Cesium3DTileRefine;
  readonly subdivisionScheme: ImplicitSubdivisionScheme;
  readonly subtreeLevels: number;
  readonly availableLevels: number;
  readonly subtreeUriTemplate?: string;
  readonly contentUriTemplates: string[];
  readonly metadataSchema?: MetadataSchema;
  readonly metadataClass?: MetadataClass;
  readonly subtrees: ImplicitSubtree[];
  
  loadSubtree(level: number, x: number, y: number, z?: number): Promise<ImplicitSubtree>;
  isDestroyed(): boolean;
  destroy(): void;
}

interface ImplicitTilesetOptions {
  tilesetUri: string;
  basePath: string;
  subdivisionScheme: ImplicitSubdivisionScheme;
  subtreeLevels: number;
  availableLevels: number;
  boundingVolume: any;
  geometricError: number;
  refine?: Cesium3DTileRefine;
  subtreeUriTemplate?: string;
  contentUriTemplates?: string[];
  metadataSchema?: MetadataSchema;
  metadataClass?: MetadataClass;
}

/**
 * Subtree within an implicit tileset
 */
class ImplicitSubtree {
  constructor(options: ImplicitSubtreeOptions);
  readonly resource: Resource;
  readonly tileAvailabilityBitstream: Uint8Array;
  readonly contentAvailabilityBitstreams: Uint8Array[];
  readonly childSubtreeAvailabilityBitstream?: Uint8Array;
  readonly metadataTable?: MetadataTable;
  
  getTileAvailability(level: number, x: number, y: number, z?: number): boolean;
  getContentAvailability(contentIndex: number, level: number, x: number, y: number, z?: number): boolean;
  getChildSubtreeAvailability(level: number, x: number, y: number, z?: number): boolean;
  isDestroyed(): boolean;
  destroy(): void;
}

interface ImplicitSubtreeOptions {
  resource: Resource;
  json: any;
  binary?: Uint8Array;
  subdivisionScheme: ImplicitSubdivisionScheme;
  subtreeLevels: number;
  subtreeX: number;
  subtreeY: number;
  subtreeZ?: number;
  metadataSchema?: MetadataSchema;
  metadataClass?: MetadataClass;
}

Content Processors

Specialized content processors for different 3D Tiles content types.

/**
 * Batched 3D Model (B3DM) content processor
 */
class Batched3DModel3DTileContent {
  readonly featuresLength: number;
  readonly pointsLength: number;
  readonly trianglesLength: number;
  readonly geometryByteLength: number;
  readonly texturesByteLength: number;
  readonly batchTableByteLength: number;
  readonly innerContents?: Cesium3DTileContent[];
  readonly readyPromise: Promise<Batched3DModel3DTileContent>;
  readonly tileset: Cesium3DTileset;
  readonly tile: Cesium3DTile;
  readonly url: string;
  readonly batchTable: Cesium3DTileBatchTable;
  
  hasProperty(batchId: number, name: string): boolean;
  getFeature(batchId: number): Cesium3DTileFeature;
  applyDebugSettings(enabled: boolean, color: Color): void;
  applyStyle(style: Cesium3DTileStyle): void;
  update(tileset: Cesium3DTileset, frameState: FrameState): void;
  isDestroyed(): boolean;
  destroy(): void;
}

/**
 * Instanced 3D Model (I3DM) content processor
 */
class Instanced3DModel3DTileContent {
  readonly featuresLength: number;
  readonly pointsLength: number;
  readonly trianglesLength: number;
  readonly geometryByteLength: number;
  readonly texturesByteLength: number;
  readonly batchTableByteLength: number;
  readonly innerContents?: Cesium3DTileContent[];
  readonly readyPromise: Promise<Instanced3DModel3DTileContent>;
  readonly tileset: Cesium3DTileset;
  readonly tile: Cesium3DTile;
  readonly url: string;
  readonly batchTable: Cesium3DTileBatchTable;
  
  hasProperty(batchId: number, name: string): boolean;
  getFeature(batchId: number): Cesium3DTileFeature;
  applyDebugSettings(enabled: boolean, color: Color): void;
  applyStyle(style: Cesium3DTileStyle): void;
  update(tileset: Cesium3DTileset, frameState: FrameState): void;
  isDestroyed(): boolean;
  destroy(): void;
}

/**
 * Point Cloud (PNTS) content processor
 */
class PointCloud3DTileContent {
  readonly featuresLength: number;
  readonly pointsLength: number;
  readonly trianglesLength: number;
  readonly geometryByteLength: number;
  readonly texturesByteLength: number;
  readonly batchTableByteLength: number;
  readonly innerContents?: Cesium3DTileContent[];
  readonly readyPromise: Promise<PointCloud3DTileContent>;
  readonly tileset: Cesium3DTileset;
  readonly tile: Cesium3DTile;
  readonly url: string;
  readonly batchTable: Cesium3DTileBatchTable;
  
  hasProperty(batchId: number, name: string): boolean;
  getFeature(batchId: number): Cesium3DTilePointFeature;
  applyDebugSettings(enabled: boolean, color: Color): void;
  applyStyle(style: Cesium3DTileStyle): void;
  update(tileset: Cesium3DTileset, frameState: FrameState): void;
  isDestroyed(): boolean;
  destroy(): void;
}

/**
 * Composite (CMPT) content processor
 */
class Composite3DTileContent {
  readonly featuresLength: number;
  readonly pointsLength: number;
  readonly trianglesLength: number;
  readonly geometryByteLength: number;
  readonly texturesByteLength: number;
  readonly batchTableByteLength: number;
  readonly innerContents: Cesium3DTileContent[];
  readonly readyPromise: Promise<Composite3DTileContent>;
  readonly tileset: Cesium3DTileset;
  readonly tile: Cesium3DTile;
  readonly url: string;
  
  hasProperty(batchId: number, name: string): boolean;
  getFeature(batchId: number): Cesium3DTileFeature;
  applyDebugSettings(enabled: boolean, color: Color): void;
  applyStyle(style: Cesium3DTileStyle): void;
  update(tileset: Cesium3DTileset, frameState: FrameState): void;
  isDestroyed(): boolean;
  destroy(): void;
}

/**
 * glTF content processor for 3D Tiles Next
 */
class Gltf3DTileContent {
  readonly featuresLength: number;
  readonly pointsLength: number;
  readonly trianglesLength: number;
  readonly geometryByteLength: number;
  readonly texturesByteLength: number;
  readonly batchTableByteLength: number;
  readonly innerContents?: Cesium3DTileContent[];
  readonly readyPromise: Promise<Gltf3DTileContent>;
  readonly tileset: Cesium3DTileset;
  readonly tile: Cesium3DTile;
  readonly url: string;
  readonly model: ModelExperimental;
  
  hasProperty(batchId: number, name: string): boolean;
  getFeature(batchId: number): Cesium3DTileFeature;
  applyDebugSettings(enabled: boolean, color: Color): void;
  applyStyle(style: Cesium3DTileStyle): void;
  update(tileset: Cesium3DTileset, frameState: FrameState): void;
  isDestroyed(): boolean;
  destroy(): void;
}

Types

interface Cesium3DTilesetAsset {
  readonly version: string;
  readonly tilesetVersion?: string;
  readonly gltfUpAxis?: string;
  readonly extensions?: any;
  readonly extras?: any;
}

enum Cesium3DTileRefine {
  ADD = 0,
  REPLACE = 1
}

enum Cesium3DTileColorBlendMode {
  HIGHLIGHT = 0,
  REPLACE = 1,
  MIX = 2
}

interface TileBoundingVolume {
  boundingVolume: BoundingSphere | OrientedBoundingBox;
  intersectPlane(plane: Plane): Intersect;
  distanceSquaredTo(point: Cartesian3): number;
}

interface Cesium3DContentGroup {
  readonly metadata: GroupMetadata;
  show: boolean;
}

interface GroupMetadata {
  readonly class: MetadataClass;
  readonly extras?: any;
  readonly extensions?: any;
  
  hasProperty(propertyId: string): boolean;
  hasPropertyBySemantic(semantic: string): boolean;
  getPropertyIds(results?: string[]): string[];
  getProperty(propertyId: string): any;
  setProperty(propertyId: string, value: any): boolean;
  getPropertyBySemantic(semantic: string): any;
  setPropertyBySemantic(semantic: string, value: any): boolean;
}

interface MetadataSchema {
  readonly id?: string;
  readonly name?: string;
  readonly description?: string;
  readonly version?: string;
  readonly classes: { [className: string]: MetadataClass };
  readonly enums?: { [enumName: string]: MetadataEnum };
  readonly extras?: any;
  readonly extensions?: any;
}

interface MetadataClass {
  readonly id: string;
  readonly name?: string;
  readonly description?: string;
  readonly properties?: { [propertyId: string]: ClassProperty };
  readonly extras?: any;
  readonly extensions?: any;
}

interface MetadataEnum {
  readonly name?: string;
  readonly description?: string;
  readonly valueType?: MetadataType;
  readonly values: MetadataEnumValue[];
  readonly extras?: any;
  readonly extensions?: any;
}

interface MetadataEnumValue {
  readonly name: string;
  readonly description?: string;
  readonly value: number | string;
  readonly extras?: any;
  readonly extensions?: any;
}

interface ClassProperty {
  readonly id: string;
  readonly name?: string;
  readonly description?: string;
  readonly type: MetadataType;
  readonly componentType?: MetadataComponentType;
  readonly enumType?: string;
  readonly array?: boolean;
  readonly count?: number;
  readonly normalized?: boolean;
  readonly offset?: number | number[];
  readonly scale?: number | number[];
  readonly max?: number | number[];
  readonly min?: number | number[];
  readonly required?: boolean;
  readonly noData?: any;
  readonly defaultProperty?: any;
  readonly semantic?: string;
  readonly extras?: any;
  readonly extensions?: any;
}

interface MetadataTable {
  readonly class?: MetadataClass;
  readonly count: number;
  readonly properties: { [propertyId: string]: any };
  readonly extras?: any;
  readonly extensions?: any;
  
  hasProperty(propertyId: string): boolean;
  hasPropertyBySemantic(semantic: string): boolean;
  getPropertyIds(results?: string[]): string[];
  getProperty(propertyId: string): any;
  setProperty(propertyId: string, value: any): boolean;
  getPropertyBySemantic(semantic: string): any;
  setPropertyBySemantic(semantic: string, value: any): boolean;
}

enum ImplicitSubdivisionScheme {
  QUADTREE = 0,
  OCTREE = 1
}

enum MetadataType {
  SCALAR = "SCALAR",
  VEC2 = "VEC2", 
  VEC3 = "VEC3",
  VEC4 = "VEC4",
  MAT2 = "MAT2",
  MAT3 = "MAT3",
  MAT4 = "MAT4",
  STRING = "STRING",
  BOOLEAN = "BOOLEAN",
  ENUM = "ENUM"
}

enum MetadataComponentType {
  INT8 = "INT8",
  UINT8 = "UINT8",
  INT16 = "INT16",
  UINT16 = "UINT16",
  INT32 = "INT32",
  UINT32 = "UINT32",
  INT64 = "INT64",
  UINT64 = "UINT64",
  FLOAT32 = "FLOAT32",
  FLOAT64 = "FLOAT64"
}

interface CustomShader {
  mode: CustomShaderMode;
  lightingModel: LightingModel;
  translucencyMode: CustomShaderTranslucencyMode;
  uniforms?: { [name: string]: any };
  varyings?: { [name: string]: VaryingType };
  vertexShaderText?: string;
  fragmentShaderText?: string;
}

enum CustomShaderMode {
  MODIFY_MATERIAL = 0,
  REPLACE_MATERIAL = 1
}

enum LightingModel {
  UNLIT = 0,
  PBR = 1
}

enum CustomShaderTranslucencyMode {
  OPAQUE = 0,
  TRANSLUCENT = 1
}

enum VaryingType {
  FLOAT = 0,
  VEC2 = 1,
  VEC3 = 2,
  VEC4 = 3,
  MAT2 = 4,
  MAT3 = 5,
  MAT4 = 6
}

interface Cesium3DTilesContent {
  uri: string;
  boundingVolume?: any;
  group?: number;
  extras?: any;
  extensions?: any;
}

enum ComponentDatatype {
  BYTE = 5120,
  UNSIGNED_BYTE = 5121,
  SHORT = 5122,
  UNSIGNED_SHORT = 5123,
  INT = 5124,
  UNSIGNED_INT = 5125,
  FLOAT = 5126,
  DOUBLE = 5130
}