An open-source JavaScript library for world-class 3D globes and maps :earth_americas:

Overview

Build Status npm Docs

CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin. It uses WebGL for hardware-accelerated graphics, and is cross-platform, cross-browser, and tuned for dynamic-data visualization.

CesiumJS Homepage

CesiumJS Features Checklist

🚀 Get Started

Visit the Downloads page or use the npm module:

npm install cesium

Have questions? Ask them on the community forum.

Interested in contributing? See CONTRIBUTING.md. ❤️

❄️ Mission

Our mission is to create the leading 3D globe and map for static and time-dynamic content, with the best possible performance, precision, visual quality, platform support, community, and ease of use.

📗 License

Apache 2.0. CesiumJS is free for both commercial and non-commercial use.

🌎 Where Does the 3D Content Come From?

CesiumJS can stream 3D content such as terrain, imagery, and 3D Tiles from the commercial Cesium ion platform and other content sources. You are free to use any combination of content sources with CesiumJS that you please. Using Cesium ion helps support CesiumJS development. ❤️

👏 Featured Demos

                                 

See all demos

Comments
  • Partial ellipsoid

    Partial ellipsoid

    Fixes #5167

    Added the ability to create a partial ellipsoid volume using new ellipsoid geometry options: innerRadii, azimuthMin, azimuthMax, elevationMin, elevationMax.

    For example: viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-100, 40, 5000), ellipsoid: { radii: new Cesium.Cartesian3(1500000, 1000000, 800000), innerRadii: new Cesium.Cartesian3(500000, 400000, 300000), azimuthMin: 0, azimuthMax: 250, elevationMin: 20, elevationMax: 70, material: Cesium.Color.DARKCYAN.withAlpha(0.3), outline: true } });

    Here is the thread in the forum that this originated from.

    There are a few items that might need some work, but hopefully the hard part is done.

    • [x] Unit tests
    • [x] Sometimes an exception is thrown when the geometry spans a pole or meridian if 2D mode is enabled. Wasn't sure what was happening. 3D works fine.
    • [x] Not supported for vertexFormat of: st, tangent, bitangent. I wasn't sure what was going on there. There are TODOs in the code where this needs work.
    • [x] I did not duplicate the point at the poles of the ellipsoid. I couldn't tell why this was necessary.

    This work is released under U.S. DoD Distribution Statement A: Approved for public release. Distribution is unlimited.

    opened by srtrotter 103
  • Imagery Layers

    Imagery Layers

    Adds the ability to layer imagery from multiple sources and adjust the alpha of each independently. It also has a new architecture for rendering the surface of the globe that is a big step toward rendering terrain. For starters, check out the two new Sandcastle apps: "Imagery Layers" and "Map Projections".

    Most of the action happens (or at least starts) in CentralBodySurface.js. If you want to understand how it works, the (four line) update function is the place to start.

    There is no shortage of additional things that could be done, but I think this is a significant improvement from master and is worthy of a review.

    opened by kring 99
  • Shadows

    Shadows

    For #2594

    This PR adds support for different types of shadows including cascaded directional shadows, spot light shadows, and point light shadows. It also adds the concept of derived commands which are used for OIT, shadows, and later 3D Tiles.

    By default the scene contains a shadow map whose light source is the sun. It is disabled by default, but can be enabled with scene.shadowMap.enabled = true.

    Shadow default settings:

    | Type | Casts Shadows | Receives Shadows | | --- | --- | --- | | Globe | False | True | | Primitives | False | False | | Models | True | True |

    Any of these can change by setting castShadows or receiveShadows.

    TODO

    • [x] Unit tests
    • [ ] Cast shadows for terrain tiles that are out of view: on the shadows-globe branch.
    • [x] Figure out the best approach approach for shadows when the light source is below the horizon. Currently if the globe casts shadows, the surface will be completely shadowed and dark. Maybe day-night shading should be on if shadows are on.
    • [ ] Possible support for GroundPrimitive if needed.
    • [x] Integration with higher level constructs like Viewer.
    • [ ] 2D and Columbus view support.
    • [ ] Screenshots for twitter
    • [ ] Tech blog post
    • [ ] Tutorial, including use cases
    • [x] Fix IE11 and Edge - no glPolygonOffset support

    Testing TODO

    • [x] Review ShadowMap.js
    • [x] Step through in debugger
    • [x] FPS with shadows on/off to get a ballpark
    • [x] Retest aircraft and satellite CZMLs
    • [x] Test with lots of 3D models
    • [x] Terrain

    TODO now or later

    • [ ] Use a good LOD when selecting tiles only in the shadow map frustum, e.g., not SSE from the light's perspective
    • [ ] Do not request imagery for tiles only in the shadow map frustum
    priority - next release 
    opened by lilleyse 96
  • Initial Karma Support

    Initial Karma Support

    Added Karma support as a first step for integrating tests as part of Travis-CI build process.

    • Added Karma and necessary karma plugins to package.json, including launchers for:
      • Chrome
      • Firefox
      • IE
      • Safari
    • Configured Karma to run jasmine tests
    • Added test and test-all targets to gulpfile.js
      • test runs karma tests using browser specified in config file, currently Chrome
      • test-all runs karma tests using all browsers available

    TODO

    • [x] Add back in minified release and webGL validation support.
    • [x] Update wiki for new test targets (categories and the two above)

    Post merge See #3571

    opened by ggetz 77
  • Materials on Ground Primitives

    Materials on Ground Primitives

    Fixes #5025

    Opening a PR for some early review, and also to say this is "stable" if anyone wants to play with it. TODO before full review:

    • [x] texcoord rotations
    • [x] Support for 2D/CV
    • [x] better picking?
    • [x] fix log depth incompatibility?
    • [x] cleanup/doc
    • [x] tests
    • [x] fix planar texture coordinates (see below)
    • [x] IE fallback
    • [x] update CHANGE.md, Sandcastle?
    • [x] on 3D Tilesets (fallback)

    This PR adds support for materials on ground primitives and also adds batching for non-overlapping, "similarly sized" ground entities with the same material. Quick rundown of how things work:

    Materials on Ground Primitives

    Normals and texture coordinates and the like are computed in the fragment shader, almost like a post-process. Normals are easy - sample the depth texture (which has to be enabled for this to work), do some eye space math, lovely. Texture coordinates are done in either of two ways:

    • for entities large enough that the curve of the Earth is noticeable, a world position is computed from the depth texture and is then used to approximate the latitude/longitude at the fragment using spherical coordinates and approximate inverse trigonometry. This spherical coordinate is then compared with a spherical extent per-instance attribute to compute [0-1] range texcoords.
    • for small entities, we compute the distance from the fragment in eye space to a pair of planes, also in eye space, which are computed in the vertex shader from a double-precision position and a pair of offset vectors that form a bounding box in the local ENU coordinate system centered around the entity.

    Batching

    We couldn't batch ground entities before because of overdraw problems - the shadow volumes used to color terrain often extend well beyond the area they're supposed to cover in screen space and sometimes overlap in the camera plane, leading to artifacts.

    This PR adds the ability to use texture coordinates to clip fragments outside a lat/long volume (rectangle) in space, preventing overdraw as long as the batched primitives' rectangles on the globe don't overlap.

    Ground entities with per-instance color are no longer batched by color but based on overlap, so it's now possible to render ~10,000 uniquely colored non-overlapping ground entities in a scene on a mid-range mobile GPU like the GT 750M without crashing. More performance anecdotes to follow.

    We may also want to discuss if batching everything that's batchable is a little naive, since in some cases we can actually suffer from loss of culling benefits (I think...).

    opened by likangning93 70
  • CPU Usage

    CPU Usage

    Changes from PRs #6065 and #6107 Opt in fix for #1865

    Created opt-in requestRenderMode which will only render the scene when needed. Renders can be triggered as needed by calling requestRender(), for example if picking a feature should change it's color, or you make changes to the scene via the API.

    We render each time the simulation time change exceeds scene.maximumRenderTimeChange, which defaults to 0.5 seconds. It can be set to undefined or Infinity to never change based on simulation time.

    Besides simulation time changes and calls to requestRender, always render when:

    • The camera changes
    • Web worker returns, successfully or with an error
    • RequestScheduler fulfills a request, successfully or not
    • A FrameState.afterRender function was called (this is used thorough the code base when changes are made after a render to keep the current state. An example would be when a new LOD of a tileset is shown or when a model is ready)
    • Globe tiles are loaded
    • ImageryLayers are added, removes, shown, hidden, or moved.
    • The scene morphs

    In addition, I refactored some of the update/render logic in Globe, QuadtreePrimitive, and GlobeSurfaceTileProvider so that loading new tiles will continue to prompt render requests and finish processing the load queue. When the scene has requestRenderMode enabled and there is a large or undefined maximumRenderTimeChange, the globe will still load in completely, and changing terrain providers or imagery, and loading in higher level tiles when the camera changes will automatically trigger a render.

    priority - next release 
    opened by ggetz 68
  • 3d Tiles Inspector

    3d Tiles Inspector

    Progress toward #4846. I would love to have some initial feedback on this

    This replaces the debug options in the Sandcastle example http://localhost:8080/Apps/Sandcastle/index.html?src=3D%20Tiles.html&label=Showcases with an inspector widget. All previous functionality has been ported with the exception of the styling options.

    Additional Todos:

    • [x] Show URL of clicked tile
    • [x] Click on tileset to inspect
    • [x] Styling integration
    • [x] Port other Sandcastle examples

    Example initialization:

    viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin);
    var model = viewer.cesium3DTilesInspector.viewModel;
    
    model.tileset = new Cesium.Cesium3DTileset({
        url: ...
    });
    

    Preview: inspector

    opened by austinEng 60
  • Camera-Terrain interaction

    Camera-Terrain interaction

    For #449, #549, and #1060.

    • Default panning now picks the terrain.
    • Modified the default camera tilt mouse behavior to tilt about the point clicked.
    • Added camera collision detection with terrain to the default mouse interaction.
    • Added the following methods to IntersectionTests: rayTriangle, lineSegmentTriangle, raySphere, and lineSegmentSphere.
    • Fixed camera rotation near the camera's constrained axis.
    • Added Globe.getHeight and Globe.pick for finding the terrain height at a given Cartographic coordinate and picking the terrain with a ray.
    opened by bagnell 60
  • Post processing

    Post processing

    A start for post processing effects in Cesium. I trimmed down this PR so it only applies to scene post-processing. Per-entity post processing will be ready soon too, but I want to keep this PR a bit simpler.

    @byumjin u_depthTexture now works so you can test out SSAO. However it uses the last frustum's depth only! This actually works okay for some situations, but to guarantee that only one frustum is rendered, set scene.farToNearRatio to a large number like 100000000.0.

    I'll bump again when this is ready to review.

    To-do:

    • [x] Merge lens flare, HBAO, DOF, toon shading, bloom effects: https://github.com/AnalyticalGraphicsInc/cesium/pull/5498
    • [x] Put PostProcessLibrary shaders in .glsl file
    • [x] Fix FXAA - it is now a post process stage but isn't working. It seems like FXAA requires LINEAR filtering on its texture, but PostProcess uses NEAREST for everything
    • [x] Scissor test considerations - no changes have been made to the post processing files related to https://github.com/AnalyticalGraphicsInc/cesium/pull/5225/
    • [x] Update sun post-process to use this, separate PR
    • [x] Smarter resource allocation and sharing
    • [x] ~~Consolidate depth textures from all frustums, separate PR~~ Log depth
    • [ ] Add entity support, separate PR
    • [x] Lens flare artifact, #5932
    • [x] Doc
    • [x] Tests
    • [x] Update CHANGES.md
    postprocess
    opened by lilleyse 59
  • Geocoding widget

    Geocoding widget

    image

    There's a lot more I could do here, but I think it's reasonable to merge it into master in its current state.

    I suspect the most controversial thing here is the location of the new widget in the Viewer. I originally had it in the top left, but @emackey made the excellent point that we should reserve that for app-specific functionality.

    This branch includes all the bingKey changes as well, so the diff will get simpler once that branch is merged.

    opened by kring 59
  • Polylines on terrain via Primitive API

    Polylines on terrain via Primitive API

    Opening a PR to indicate that this is "stable" enough to preview and for preliminary review, but there's still a decent amount of work to be done.

    Features:

    • support for PolylineMaterialAppearance
    • mitered polylines
    • batching multiple instances with per-instance show and line width

    Implementation notes:

    More details in https://github.com/AnalyticalGraphicsInc/cesium/issues/2172#issuecomment-385685782. We're using a single-pass, globe-depth-based algorithm. ~For each line segment in the polyline we generate a geometry instance volume that has several planes encoded in the batch table. For each fragment on the volume, we look up the globe depth to compute a terrain position in eyespace and clip this position based on the planes from the batch table. The planes are also used to compute the position's distance from the center and ends of the line for material support.~

    ~Due to the batch table dependence and mapping of attributes from multiple instances to a single pick ID, this PR introduces a new Primitive type, GroundPolylinePrimitive. There's also a new user-facing geometry, GroundPolylineGeometry, that doesn't actually have a createGeometry function but rather gets decomposed into individual volumes that are then used to generate vertex buffers and attributes.~

    ~This is a little troublesome for asynchronous geometry since GroundPolylineGeometry's computation currently happens on the main thread, with the worker threads mostly just converting chunks of this into the combined vertex buffer. In practice this doesn't seem to be a huge problem, but it's something we should talk about.~

    For each line segment in the polyline we generate a volume with vertex attributes that describe the line segment using a series of planes. For each fragment on the volume, we look up the globe depth to compute a terrain position in eyespace and clip this position based on the planes from the vertex attributes. The planes are also used to compute the position's distance from the center and ends of the line for material support.

    The planes differ between 2D and 3D, and I haven't figured out yet how to interpolate them for morphing, so there's a new Primitive type that issues draw commands with different shaders for 2D and morph. When morphing we actually just draw the volumes themselves with materials, which seems acceptable because the camera goes so far away during the morph anyway.

    • [x] I should also do load and runtime comparisons with a hack that attempts to simulate polylines using corridors or something.

    TODO:

    • [x] Integrate with changes in https://github.com/AnalyticalGraphicsInc/cesium/pull/6434 for better geometry heights
    • [x] batch per-instance colors
    • [x] doc and specs, compatibility checks
    • [x] spruce up Sandcastle example
      • more geometry cases
      • selection indicator?
      • volume debug toggle
      • Z ordering/Z ordering with GroundPrimitives

    Couple Post-PR roadmap items:

    • Entity API integration (priority)
    • Investigate smear reduction with something like screen-space partial derivatives
    • terrain height and volume length improvements
    • Evaluate whether dashed lines should "swim" or stay put
    • Investigate fixes for floating point problems with very long arrow lines
    opened by likangning93 58
  • Ellipsoid voxel clipping fixes

    Ellipsoid voxel clipping fixes

    Ellipsoid clipping was broken in two ways:

    • The intersection against the ellipsoid was not taking into account the height difference between the clip height and the shape height. So even if the clip height was less than the shape height the intersection would act as if it hit the shape height.
    • Voxels with infinitely thin clipping bounds would always render the topmost voxels. Several RENDER related defines were incorrectly used in convertUvToCylinder and convertUvToEllipsoid.

    In this sandcastle you can see that changing the clipping min/max height to the same value works now. It correctly samples data in the middle of the voxel grid rather than the outer edge.

    Before|After --|-- bad|good

    opened by lilleyse 1
  • `Cesium3DTilesVoxelProvider`: Document how 3D Tiles should be structured

    `Cesium3DTilesVoxelProvider`: Document how 3D Tiles should be structured

    Cesium3DTilesVoxelProvider expects tilesets to be structured in a specific way. It should be documented in the constructor.

    • Single root tile with content
    • Must use 3DTILES_voxel_content
    • Must use implicit tiling. Only OCTREE subdivision scheme is allowed.
    • Sphere bounding volume disallowed
    • Empty tiles disallowed
    • Allowed types: SCALAR, VEC2, VEC3, VEC4
    • Allowed component types: TBD

    Recommended but not required:

    • Statistics min and max for each property for custom shaders
    • TILESET_TILE_COUNT semantic as optimization hint. https://github.com/CesiumGS/cesium/pull/10996
    category - voxels 
    opened by lilleyse 0
  • Voxels - render sharp edges

    Voxels - render sharp edges

    One of the visual quality improvements we want to tackle next is rendering sharp edges for opaque voxels.

    It's possible to approximate sharp edges by setting a smaller step size, but this hurts performance and may cause the ray to miss the dataset completely if it exceeds STEP_COUNT_MAX before it hits a non no-data value.

    options.jitter was added to improve the visual quality, but it's still not great.

    No jitter|Jitter --|-- nojitter|not-sharp

    This isn't always a problem. For example, if a voxel is on the edge of shape it looks nice and crisp. That's because the ray casting starts from the point of the first intersection and the math to determine the intersection point is fairly precise. It's only when it starts traversing through space (i.e. noData values or translucent values) before it hits an opaque voxel that the visualization becomes non crisp. You can see that near the top of the screenshot below.

    sharp

    Option A: Since we know the intersection math is precise, one possible solution might be to step until we hit an opaque value, then do a ray intersection against that individual voxel. That will give us the exact t that the ray enters the voxel. One problem is that if the step size is large enough it could jump over the corner of the voxel, and we're back where we started.

    IMG_20230104_172354962

    Option B: This could be extended further so that we don't do stepping at all, and always do ray-shape intersections even through empty space. That's what the bottom ray is doing. I'm worried that this will have terrible performance for cylinders and ellipsoids because there will be many shape intersections to get to the first opaque voxel.

    IMG_20230104_172345782

    These are just starting points for thinking about the problem, need to try some stuff out to see what works.

    type - enhancement category - voxels 
    opened by lilleyse 1
  • Improve voxel depth testing

    Improve voxel depth testing

    Currently voxels are always rendered above objects in the OPAQUE and TRANSLUCENT pass.

    Some different options for improving this:

    1. Render the VOXELS pass before the OPAQUE pass. This will have the opposite effect where opaque geometry will always render above voxels.
    2. In IntersectDepth.glsl, read from the currently bound depth texture instead of czm_globeDepthTexture. The latter only includes depth from the GLOBE and CESIUM_3D_TILE passes, while the former includes depth from all previous passes. This might require some plumbing with textures, framebuffers on the JavaScript side.
    3. Participate in depth testing the normal WebGL way. One way to do that is to write depth when the alpha becomes fully saturated and enable depthTest and depthMask in the renderState. The main problem with this approach is that the entire fragment gets discarded if the depth test fails, so any translucent color accumulation gets lost. Of course this wouldn't be a problem for fully opaque voxels.

    And some future ideas:

    • How do we handle different VoxelPrimitives depth testing against each other? Currently we don't: the VoxelPrimitive that's rendered last has priority.
    • How do we handle translucency? VoxelPrimitive draw commands do not participate in OIT.
    category - voxels 
    opened by lilleyse 1
  • `Cesium3DTilesVoxelProvider` doesn't observe tileset geometric error

    `Cesium3DTilesVoxelProvider` doesn't observe tileset geometric error

    A tile's geometric error is computed automatically in SpatialNode based on the approximate voxel size. When loading voxels as 3D Tiles the geometric error in tileset.json is ignored.

    The correct behavior would be to expose a geometricError property in VoxelProvider. Cesium3DTilesVoxelProvider would set this to the root tile's geometricError. Other voxel providers might leave this undefined. When undefined, geometric error would be computed automatically like it is now. When defined geometric error would be computed as provider.geometricError / Math.pow(2, level).

    type - bug category - voxels 
    opened by lilleyse 0
  • Voxel artifacts with infinitely thin shapes

    Voxel artifacts with infinitely thin shapes

    The voxel code allows for creating infinitely thin shapes, which is a handy feature for inspecting individual slices of voxel data. There are some artifacts though:

    • When making a shape infinitely thin via min/maxBounds it always renders the front side. Instead it should render just the side that was hit. This happens for most shape types. Note: this bug only happens for min/maxBounds, not min/maxClippingBounds. See message previously in convertUvToEllipsoid.glsl:
        #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
            // TODO: This breaks down when minBounds == maxBounds. To fix it, this
            // function would have to know if ray is intersecting the front or back of the shape
            // and set the shape space position to 1 (front) or 0 (back) accordingly.
            float height = 1.0;
    

    thin-box

    • Ellipsoids only render one side of the shape when the latitude range is zero. This happens for both min/maxBounds and min/maxClippingBounds.

    ezgif com-gif-maker (2)

    category - voxels 
    opened by lilleyse 0
Releases(1.101)
  • 1.101(Jan 2, 2023)

    1.101 - 2023-01-02

    Highlights include:

    • Added vertexShadowDarkness parameter to Globe to control the amount of darkness of the vertex shadow when terrain lighting is enabled. #10914
    • Added experimental support for 3D Tiles voxels with the 3DTILES_content_voxels extension. The current implementation is intended for development use, as the voxel format has not yet been finalized and is subject to breaking changes without deprecation. #10253
    • Fixed a bug where the scale of a PointPrimitive was incorrect when scaleByDistance was set to a NearFarScalar. #10912
    • Fixed glTF models with a mix of Draco and non-Draco attributes. #10936
    • Fixed a bug where billboards with alignedAxis properties were not properly aligned in 2D and Columbus View. #10965
    • Fixed a bug where *.ktx2 image loading from a URI failed. #10869
    • Fixed a bug where a Model would sometimes disappear when loaded in Columbus View. #10945

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.101.zip(64.17 MB)
  • 1.100(Dec 1, 2022)

  • 1.99(Nov 1, 2022)

    1.99 - 2022-11-01

    Highlights include:

    • Added support for I3S 3D Object and IntegratedMesh Layers. #9634
    • Fixed a bug where the scale of a Model was being incorrectly applied to its bounding sphere. #10855
    • Fixed a bug where rendering a Model with image-based lighting while specular environment maps were unsupported caused a crash. #10859
    • Fixed a bug where request render mode was broken when a ground primitive is added. #10756

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.99.zip(57.34 MB)
  • 1.98(Oct 3, 2022)

    1.98 - 2022-10-03

    Highlights include:

    • Added support for the WEB3D_quantized_attributes extension found in some glTF 1.0 models. #10758
    • Fixed a regression where i3dm with scale and without rotation would render incorrectly. #10808
    • Fixed a regression where instanced feature IDs were not processed correctly #10771
    • Fixed a regression where Cesium3DTileFeature.setProperty() was not creating properties for unknown property IDs. #10775
    • Fixed a regression where glTF models with unused nodes would crash #10813
    • Fixed a regression where tilesets would not load in multiple Viewers. #10828
    • Fixed a bug where instanced models without normals would not render. #10765
    • Fixed a bug where camera would not follow the Viewer.trackedEntity if it had a model with a HeightReference other than NONE. #10805

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.98.zip(57.09 MB)
  • 1.97(Sep 1, 2022)

    1.97 - 2022-09-01

    Highlights include:

    • CesiumJS has switched to a new architecture for loading glTF models and tilesets to enable:
    • Model can now classify other assets with a given classificationType. #10623
    • Model now supports back face culling for point clouds. #10703
    • Model entities now support CustomShader. #10747
    • Export asset files such as CSS in package.json, allowing bundlers to import without additional configuration. #9212
    • The sideEffects field in package.json is now specified, allowing more conservative bundlers like Webpack to enable tree shaking by default. #10714

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.97.zip(57.19 MB)
  • 1.96(Aug 1, 2022)

    Highlights include:

    • Built Cesium.js is no longer AMD format. This may or may not be a breaking change depending on how you use Cesium in your app. See our blog post for the full details. https://github.com/CesiumGS/cesium/pull/10399
    • Model.boundingSphere now returns the bounding sphere in ECEF coordinates instead of the local coordinate system. https://github.com/CesiumGS/cesium/pull/10589
    • Models and tilesets that use the CESIUM_primitive_outline extension can now toggle outlines at runtime with the showOutline property. https://github.com/CesiumGS/cesium/pull/10506
    • Added support for point cloud styling for tilesets loaded with ModelExperimental. https://github.com/CesiumGS/cesium/pull/10569
    • Fixed a crash in the 3D Tiles Formats sandcastle when loading draco-compressed point clouds with ModelExperimental. https://github.com/CesiumGS/cesium/pull/10521
    • Fixed crash when loading glTF models with the EXT_mesh_features and EXT_structural_metadata extensions without channels property. https://github.com/CesiumGS/cesium/pull/10511
    • Fixed a crash in the 3D Tiles Feature Styling sandcastle that occurred when using ModelExperimental. https://github.com/CesiumGS/cesium/pull/10514
    • Fixed a bug where dynamic geometry was not marked as ready. https://github.com/CesiumGS/cesium/issues/10517

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.96.zip(62.59 MB)
  • 1.95(Jul 1, 2022)

    1.95 - 2022-07-01

    Highlights include:

    • Memory statistics for ModelExperimental now appear in the Cesium3DTilesInspector. This includes binary metadata memory, which is not counted by Model. #10397
    • Memory statistics for ResourceCache (used by ModelExperimental) now appear in the Cesium3DTilesInspector. #10413
    • Added support for rendering individual models and instanced tilesets in 2D / CV using ModelExperimental. #10419, #10433
    • Added modelUpAxis and modelForwardAxis constructor options to Cesium3DTileset #10439
    • Added various properties to ModelExperimental for parity with Model. #10448, #10457, #10231, #10481, #10479, #10489, #10490, #10491
    • Updated ModelExperimental shader defaults to match glTF spec. #9992
    • ExperimentalFeatures.enableModelExperimental now enables ModelExperimental for entities and CZML in addition to 3D Tiles. #10492
    • Fixed FeatureDetection for Microsoft Edge. #10429
    • Warn if Cesium3DTile content.uri property is empty, and load empty tile. #7263
    • Updated text highlighting for code examples in documentation to support ES6+ syntax. #10051

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.95.zip(64.00 MB)
  • 1.94.3(Jun 10, 2022)

  • 1.94.1(Jun 3, 2022)

  • 1.94(Jun 1, 2022)

    1.94 - 2022-06-01

    Highlights include:

    • Fixed the rendering issues related to order-independent translucency on iOS devices. https://github.com/CesiumGS/cesium/pull/10417
    • Fixed label background rendering. https://github.com/CesiumGS/cesium/issues/10342
    • Added ModelAnimationCollection.animateWhilePaused and ModelAnimation.animationTime to allow explicit control over a model's animations. https://github.com/CesiumGS/cesium/pull/9339
    • Added support for 2D / CV mode for non-instanced tilesets rendered with ModelExperimental. https://github.com/CesiumGS/cesium/pull/10384
    • Added Cesium3DTileStyle.fromUrl for loading a style from a url. https://github.com/CesiumGS/cesium/pull/10348
    • Added PolygonGraphics.textureCoordinates, PolygonGeometry.textureCoordinates, CoplanarPolygonGeometry.textureCoordinates, which override the default stRotation-based texture coordinate calculation behaviour with the provided texture coordinates, specified in the form of a PolygonHierarchy of Cartesian2 points. https://github.com/CesiumGS/cesium/pull/10109

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.94.zip(63.84 MB)
  • 1.93(May 2, 2022)

    1.93 - 2022-05-02

    Highlights include:

    • Improved rendering of ground and sky atmosphere. #10063
    • Added support for morph targets in ModelExperimental. #10271
    • Added support for skins in ModelExperimental. #10282
    • Added support for animations in ModelExperimental. #10314
    • Added debugWireframe to ModelExperimental. #10332
    • Added GeoJsonSource.process to support adding features without removing existing entities, similar to CzmlDataSource.process. #9275

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.93.zip(63.66 MB)
  • 1.92(Apr 1, 2022)

    1.92 - 2022-04-01

    Highlights include:

    • Added experimental support for the 3D Tiles 1.1 draft. #10189
    • Added support for EXT_structural_metadata property attributes in CustomShader #10228
    • Added partial support for EXT_structural_metadata property textures in CustomShader #10247
    • Added minimumPixelSize, scale, and maximumScale to ModelExperimental. #10092
    • Cesium3DTileset now has a splitDirection property, allowing the tileset to only be drawn on the left or right side of the screen. This is useful for visual comparison of tilesets. #10193
    • Removed Cesium.when. Any Promise in the Cesium API has changed to the native Promise API. Code bases using cesium will likely need updates after this change. See the upgrade guide for instructions on how to update your code base to be compliant with native promises. See the changelog for the complete list of changes.
    Source code(tar.gz)
    Source code(zip)
    Cesium-1.92.zip(63.17 MB)
  • 1.91(Mar 1, 2022)

    1.91 - 2022-03-01

    Highlights include:

    • Added MSAA support for WebGL2. Enabled in the Viewer constructor with the msaaSamples option and can be controlled through Scene.msaaSamples. #10052
    • Added support for loading GPX files. #9152
    • glTF contents now use ModelExperimental by default. #10055
    • Added the ability to toggle back-face culling in ModelExperimental. #10070
    • Added depthPlaneEllipsoidOffset to Viewer and Scene constructors to address rendering artifacts below the WGS84 ellipsoid. #9200
    • Added support for debugColorTiles in ModelExperimental. #10071
    • Added support for shadows in ModelExperimental. #10077

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.91.zip(62.69 MB)
  • 1.90(Feb 1, 2022)

    1.90 - 2022-02-01

    Highlights include:

    • Feature IDs for styling and picking in ModelExperimental can now be selected via (tileset|model).featureIdIndex and (tileset|model).instanceFeatureIdIndex. #10018
    • Added support for all types of feature IDs in CustomShader. #10018
    • Moved documentation for CustomShader into Documentation/CustomShaderGuide/ to make it more discoverable. #10054
    • Added getters Cesium3DTileFeature.featureId and ModelFeature.featureId so the feature ID or batch ID can be accessed from a picked feature. #10022

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.90.zip(62.36 MB)
  • 1.89(Jan 3, 2022)

    1.89 - 2022-01-03

    Highlights include:

    • Removed Scene.debugShowGlobeDepth. #9965
    • Removed CesiumInspectorViewModel.globeDepth and CesiumInspectorViewModel.pickDepth. #9965
    • barycentricCoordinates returns undefined when the input triangle is degenerate. #9175
    • Added a pointSize field to custom vertex shaders for more control over shading point clouds. #9960
    • Added lambertDiffuseMultiplier property to Globe object to enhance terrain lighting. #9878
    • Added getFeatureInfoUrl option to WebMapServiceImageryProvider which reads the getFeatureInfo request URL for WMS service if it differs with the getCapabilities URL. #9563
    • Added tileset.enableModelExperimental so tilesets with Model and ModelExperimental can be mixed in the same scene. #9982

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.89.zip(62.21 MB)
  • 1.88(Dec 1, 2021)

  • 1.87.1(Nov 9, 2021)

    1.87.1 - 2021-11-09

    Highlights include:

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.87.1.zip(62.12 MB)
  • 1.87(Nov 1, 2021)

    1.87 - 2021-11-01

    Highlights include:

    • Added ScreenOverlay support to KMLDataSource. #9864
    • Added back some support for Draco attribute quantization as a workaround until a full fix in the next Draco version. #9904
    • Point cloud styles that reference a missing property now treat the missing property as undefined rather than throwing an error. #9882
    • Fixed Draco attribute quantization in point clouds. #9908

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.87.zip(61.69 MB)
  • 1.86.1(Oct 15, 2021)

  • 1.86(Oct 1, 2021)

  • 1.85(Sep 1, 2021)

    1.85 - 2021-09-01

    Highlights Include:

    • Removed Scene.terrainExaggeration and options.terrainExaggeration for CesiumWidget, Viewer, and Scene, which were deprecated in CesiumJS 1.83. Use Globe.terrainExaggeration instead.
    • Added CloudCollection and CumulusCloud for adding procedurally generated clouds to a scene. #9737
    • BingMapsGeocoderService now takes an optional Culture Code for localizing results. #9729
    • Fixed several crashes related to point cloud eye dome lighting. #9719

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.85.zip(61.41 MB)
  • 1.84(Aug 2, 2021)

    1.84 - 2021-08-02

    Highlights include:

    • Dropped support for Internet Explorer, which was deprecated in CesiumJS 1.83.
    • Added a polylinePositions getter to Cesium3DTileFeature that gets the decoded positions of a polyline vector feature. #9684
    • Added ImageryLayerCollection.pickImageryLayers which determines the imagery layers that are intersected by a pick ray. #9651
    • Fixed an issue in TileBoundingRegion.distanceToCamera that caused incorrect results when the camera was on the opposite site of the globe. #9678
    • Fixed an error with removing a CZML datasource when the clock interval has a duration of zero. #9637

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.84.zip(60.61 MB)
  • 1.83(Jul 1, 2021)

    1.83 - 2021-07-01

    Highlights include:

    • Added support for KTX2 and Basis Universal compressed textures. https://github.com/CesiumGS/cesium/pull/9513
    • Added dynamic terrain exaggeration with Globe.terrainExaggeration and Globe.terrainExaggerationRelativeHeight. https://github.com/CesiumGS/cesium/pull/9603
    • Added CustomHeightmapTerrainProvider, a simple TerrainProvider that gets height values from a callback function. https://github.com/CesiumGS/cesium/pull/9604
    • Added the ability to hide outlines on OSM Buildings and other tilesets and glTF models using the CESIUM_primitive_outline extension. https://github.com/CesiumGS/cesium/issues/8959

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.83.zip(60.58 MB)
  • 1.82(Jun 1, 2021)

    1.82 - 2021-06-01

    Highlights include:

    • Added FeatureDetection.supportsBigInt64Array, FeatureDetection.supportsBigUint64Array and FeatureDetection.supportsBigInt.
    • Fixed processTerrain in decodeGoogleEarthEnterprisePacket to handle a newer terrain packet format that includes water surface meshes after terrain meshes. #9519

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.82.zip(60.49 MB)
  • 1.81(May 3, 2021)

    1.81 - 2021-05-01

    Highlights include:

    • Fixed an issue where Camera.flyTo would not work properly with a non-WGS84 Ellipsoid. #9498
    • Fixed an issue where setting the ViewportQuad rectangle after creating the viewport had no effect.#9511
    • Fixed an issue where TypeScript was not picking up type defintions for ArcGISTiledElevationTerrainProvider. #9522

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.81.zip(57.16 MB)
  • 1.80(Apr 1, 2021)

  • 1.79.1(Mar 1, 2021)

  • 1.79(Mar 1, 2021)

    1.79 - 2021-03-01

    Highlights include:

    • Fixed an issue that prevented use of the full CesiumJS zip release package in a Node.js application.
    • Fixed an issue where certain inputs to EllipsoidGeodesic would result in a surfaceDistance of NaN. #9316
    • Fixed sampleTerrain and sampleTerrainMostDetailed not working for ArcGISTiledElevationTerrainProvider. #9286
    • Consistent with the spec, CZML polylineVolume now expects its shape positions to specified using the cartesian2 property. Use of the cartesian is also supported for backward-compatibility. #9384
    • Removed an unnecessary matrix copy each time a Cesium3DTileset is updated. #9366

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.79.zip(57.09 MB)
  • 1.78(Feb 1, 2021)

    1.78 - 2021-02-01

    Highlights include:

    • Added BillboardCollection.show, EntityCluster.show, LabelCollection.show, PointPrimitiveCollection.show, and PolylineCollection.show for a convenient way to control show of the entire collection. #9307
    • TaskProcessor now accepts an absolute URL in addition to a worker name as it's first parameter. This makes it possible to use custom web workers with Cesium's task processing system without copying them to Cesium's Workers directory. #9338

    See the changelog for the complete list of changes.

    Source code(tar.gz)
    Source code(zip)
    Cesium-1.78.zip(56.92 MB)
  • 1.77(Jan 4, 2021)

Owner
Cesium
The Platform for 3D Geospatial
Cesium
UNMAINTAINED Open source JavaScript renderer for Kartograph SVG maps

This project is not maintained anymore. Here are a few reasons why I stopped working on kartograph.js: there's no need to support non-SVG browsers any

null 1.5k Dec 11, 2022
:leaves: JavaScript library for mobile-friendly interactive maps

Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps. Weighing just about 39 KB of gzipped JS plus 4 KB of gzipp

Leaflet 36.5k Jan 1, 2023
Polymaps is a free JavaScript library for making dynamic, interactive maps in modern web browsers.

Polymaps Polymaps is a free JavaScript library for making dynamic, interactive maps in modern web browsers. See http://polymaps.org for more details.

Urban Airship 1.6k Dec 23, 2022
AngularJS directive to embed an interact with maps managed by Leaflet library

Angular Leaflet Why the fork? While we are grateful for all the original work at tombatossals/angular-leaflet-directive. We need to be able to operate

AngularUI 313 Nov 10, 2022
An online tool to generate and visualize maps for irregular and/or gapped LED layouts, for use with FastLED, Pixelblaze and other libraries.

An online tool to generate and visualize maps for irregular and/or gapped LED layouts, for use with FastLED, Pixelblaze and other libraries.

Jason Coon 172 Dec 8, 2022
Converts geojson to svg string given svg viewport size and maps extent.

geojson2svg Converts geojson to svg string given svg viewport size and maps extent. Check world map, SVG scaled map and color coded map examples to de

Gagan Bansal 163 Dec 17, 2022
Dashboards-maps is a frontend plugin that helps you in uploading custom GeoJSON to OpenSearch and communicates with the geospatial backend plugin for the same.

Welcome! Project Resources Code of Conduct License Copyright Dashboards-Maps Dashboards-maps is a frontend plugin that helps you in uploading custom G

null 9 Dec 28, 2022
Interactive, thoroughly customizable maps in the browser, powered by vector tiles and WebGL

Mapbox GL JS is a JavaScript library for interactive, customizable vector maps on the web. It takes map styles that conform to the Mapbox Style Specif

Mapbox 9.4k Jan 7, 2023
the easiest way to use Google Maps

Important If you're developer, I'm moving gmaps.js to NPM, you can give your opinion and check the migration progress in Issue #404 gmaps.js - A Javas

Gustavo Leon 7.1k Dec 28, 2022
the easiest way to use Google Maps

Important If you're developer, I'm moving gmaps.js to NPM, you can give your opinion and check the migration progress in Issue #404 gmaps.js - A Javas

Gustavo Leon 7.1k Apr 7, 2021
This is a collection of over two hundred code samples an growing for the Bing Maps V8 web control.

Bing Maps V8 Code Samples This is a collection of over a hundred code samples for the Bing Maps V8 web control. These samples have been collected from

Microsoft 130 Dec 8, 2022
This project contains the TypeScript definitions for the Bing Maps V8 Web Control.

Bing Maps V8 TypeScript Definitions These are the official TypeScript definitions for the Bing Maps V8 Web Control. These can be used to provide intel

Microsoft 35 Nov 23, 2022
React components for Leaflet maps

React Leaflet React components for Leaflet maps. Documentation Getting started API reference Changes See the CHANGELOG file. Contributing See the CONT

Paul Le Cam 4.4k Jan 3, 2023
Vue 2 components for Leaflet maps

Vue2Leaflet Vue2Leaflet is a JavaScript library for the Vue framework that wraps Leaflet making it easy to create reactive maps. How to install npm in

Vue Leaflet 1.9k Dec 29, 2022
Downloads satellite images from Google Maps, only slightly illegal.

Google Maps Satellite Downloader This is a script to download satellite images from Google Maps. The below mentioned optimization system requires that

null 5 Oct 31, 2022
A simple web extension that redirects Twitter, YouTube, Instagram & Google Maps requests to privacy friendly alternatives.

Get Donate FIRO aEyKPU7mwWBYRFGoLiUGeQQybyzD8jzsS8 BTC: 3JZWooswwmmqQKw5iW6AYFfK5gcWTrvueE ETH: 0x90049dc59365dF683451319Aa4632aC61193dFA7 About A web

Simon Brazell 1.6k Dec 29, 2022
🖼️ Create beautiful maps from OpenStreetMap data in a webapp

prettymapp ??️ Prettymapp is a webapp to create beautiful maps from OpenStreetMap data (based on prettymaps) ?? Try it out here: prettymapp on streaml

Christoph Rieke 233 Jan 3, 2023
Interactive map overlay for finding secrets hidden around the world of Lost Ark.

Lostark Map Overlay This is an interactive map overlay which is resizable, movable and can be kept up during gameplay for finding secrets hidden aroun

Omar Minaya 6 Dec 29, 2022
Mind elixir is a free open source mind map core.

Mind-elixir is a framework agnostic mind map core

DJJo 1.4k Jan 2, 2023