Subsurface models

Hi all,

I'm currently evaluating tools for the visualisation of geology and

groundwater chemistry models.

A major aim is to make models available to a general audience, so a

browser-based library like Cesium looks ideal. However, am I correct
in saying that Cesium doesn’t support subsurface models?

I note there is a proprietary project, Subspace, developed at NICTA

( );
but is this or similar functionality likely to be part of the
open-source project?


Hi Charles,

You are right on all accounts; Cesium doesn’t currently support subsurface rendering, but it is a feature we’d like to add. NICTA modified Cesium to do it, also for groundwater I believe. The NICTA folks follow this forum and have contributed to Cesium in the past so we may see this feature make it’s way into Cesium, but they have to make the call.

I think a production implementation is a bit of work due to horizon culling, but Kevin knows better than me.


Hi Charles & Patrick,

There are two custom components we use for subsurface visualisations…

We can look to contribute the first item (ground push) to Cesium. It should be fairly straightforward to set up an initial pull request for this, but it does modify the central body shaders so may require some discussion to get it fully integrated.

With the 3d models it would be better to hold off for the official model support in Cesium rather than us contribute an alternate 3d model approach.

Please let us know if you want us to proceed with a pull request for ground push.


Hi Chris,

Yes, we’re definitely interested in a pull request for your subsurface work. Kevin, of course, will be the best person to work out the technical details in the pull request.


Hey Chris,

I noticed there’s a “subspace-ground-push” branch in the NICTA Cesium branch:

Is this the code you’re referring to? If so, I could take a look prior to a pull request to give some feedback on what it would take to get it into Cesium master. Charlie isn’t the first person to ask for this, though, so I’d definitely be interested in working with you to make it happen. Also, maybe Charlie could try it out and see how well it meets his needs.


Hi Kevin,

That’s some of the original work but is quite out of date compared to current Cesium. Keith and myself have since been patching more recent Cesiums (Cesii?) but this incorporates some other changes as well. Since I now have commit access to AGI Cesium I’ll set up a branch that just has the ground push changes and we can work and test with it there.


Sounds great, thanks Chris!

Hi Chris, Kevin,

I'm very happy to help with testing.

Thank you, Chris, for agreeing to contribute this very useful



I’ve just pushed to a branch called ground-push [1]. It includes a Sandcastle example to show interactive usage including revealing imagery. Kevin, let me know if you want me to initiate a pull request to facilitate further discussion or to hold off for now.



Hey Chris,

I tried out the Sandcastle app and looked at the code very briefly. I think it’s worth opening a pull request. Also, do you think you could give me an example of what someone would do with this sort of functionality? I have a vague notion of it, but something more concrete would be really helpful.



Hi Kevin,

This feature can help with visualising quantities in situ. Some of the use cases on NICTA projects include…

  • Revealing custom tiled imagery showing quantities that have been simulated thousands of metres below the Earth’s Crust such as geothermal energy etc.

  • Pulling back the surface to reveal 3d models e.g. animating isosurfaces of quantities such as water table, gravity, radiation, bore holes etc. These models can be viewed at their appropriate depth rather than e.g. pushing the 3d model above the surface.

  • Pushing the default map & terrain out of the way in a small area so it can be replaced with an animating 3d model of terrain. E.g. a project that was modelling the change in a river bed due to certain factors. They had accurate elevation data for that area including the river bed which they were simulating over time. They were able to insert their 3d model into the globe.


Hello all,

This topic originates from 2013. In the meantime it's 2016. Can anyone tell me what's the status of subsurface viewing for mining applications ? What we need, is a camera position below z = 0. The mentioned ground push sandcastle isn't available anymore....I've seen other solutions like making the globe color transparent. Is that an option ? How can this be reached ? Greetings, Barent Brouwers The Netherlands

Hi Barent,

The is one of the top requested features that we want to add to Cesium, but haven’t been able to prioritize it yet.

Currently, if you have - or synthesize - underground terrain, you can use that and it will mostly work, meaning that the camera navigation still needs some improvements and some culling optimizations need to be disabled.

By the way, I would love to know more about how you are using Cesium for mining; feel free to email me directly at


Hi Barent,

I now work for NICTA (now Data61), the company that developed the ground push plugin. It’s been pretty neglected lately, but we are interested reviving it, improving it, and even incorporating something like it into Cesium proper. We have some contracts in the works that may enable that to get the necessary priority. We should talk more, particularly if you’re able to help move it forward by sharing some of the cost of implementing it.


1 Like

Hello Kevin,

Thank you for your response.

Do you have a sandcastle project for the ground push plugin, so that we can judge if it suits our needs ?

Contributing financially to your ground push plugin is an option for us.

What is the amount of money we are talking about ?

When we contribute, is it possible to have any influence on the result ?

One thing that’s important for us is, combining subsurface and above ground level objects in one view. For example, subsurface infrastructure and buildings above it, because these two relate to each other. We want to see them in one view.

Hi Barent,

No, I don’t have a Sandcastle example of it handy. The purpose of working with folks with subsurface needs is to create something that satisfies their needs, not necessarily to revive the ground push plugin in its current form. For example, some things we’ve kicked around:

  • Making the surface terrain translucent in an area, so you can see what’s under it, instead of pushing it down.

  • Rendering geological models below the surface, e.g. from GOCAD.

  • Letting the user drag cutting planes through a subsurface model to see its cross section at various locations.

  • Rendering massive subsurface models using 3D Tiles (e.g. a tool to convert models in GOCAD and other formats to 3D Tiles).

I’ll drop you an email and maybe we can chat on Skype sometime.


Hello Kevin,

What’s your geographic position ?

You say you work for the Australian company Data61.

Then we have to find a proper time to Skype…:blush:

For the moment we like your solution of making the surface terrain translucent in an area, or for the whole globe.

Fact is, as in many countries, in the Netherlands we have a reference level called NAP, it’s the sealevel. Every spot in the Netherlands has a z-coördinate according to this level. All measurement are done in the NAP system.

When we want to show these measurements in Cesium, then all spots with negative z-coördinate are below ground level in Cesium, but in the real world they can be (far) above ground level. So, I am wondering what the meaning is of the z=0 height in Cesium, so why showing it at all ? Why not making it translucent/transparent everywhere ?

Next important thing for us is going down with the camera, so below z=0.

Is it possible for you to make a calculation of the costs to make these two additions in Cesium ? I guess you want to make a separate branch in git for making this, and later on perhaps merge this branch into the master ?

ps. for the very far future : is it an idea showing 3D DTM’s (Digital Terrain Models) in Cesium for the whole globe being z = 0 ? Then you’ll have the real ground level for z = 0

1 Like

Hi Barent,

Yeah, we’re pretty used to dealing with time zone differences. We’ll make it work, even if it ends up being late night or early morning our time.

In Cesium, z=0 is the surface of the WGS84 ellipsoid. The difference between this and mean sea level varies by tens or low hundreds of meters over the globe. The real terrain surface, of course, can be thousands of meters different from either WGS84 or mean sea level.

Just in case you didn’t realize, Cesium has the ability to show high-resolution terrain for the entire globe. In almost any demo app, press the base layer picker button in the top right and choose STK World Terrain. Or check out the terrain demo in Sandcastle:

Adding terrain doesn’t change the meaning of z=0 (Cesium really calls it height, not z), though. It’s still the surface of the ellipsoid.



Not sure you got my reply by email, but we (Simulation Curriculum Corp.) are VERY willing to financially support this, assuming the work can start SOON and have basic functionality by late August.

  • Dave

Hello all, it seems that more people in the world are interested in Cesium supporting underground models. Perhaps we can make a shared project of it and share costs ? We from 3D GeoSolutions from the Netherlands are interested in 4 features :

  1. height = 0 : translucent (transparent) instead of the default blue sheet

  2. camera-position below height = 0

  3. viewing buildings and subsurface infrastructure at the same time

  4. loading CityGML files into Cesium

Greetings, Barent Brouwers :