Tracking underwater object.

Hello,

I’m evaluating Cesium as a tool to visualize a ship operating a remotely operated vehicle (ROV). Here’s my initial test:

http://vislab-ccom.unh.edu/~roland/oer/cesium_test.html

The problem I’m having is that the camera does seem to go underwater when attempting to track an underwater entity, but is restricted to pointing down.

What are my options to allow the camera to behave underwater as it does normally above sea level?

  • Are there configuration options that I am missing?

  • Is this a bug, or a potential enhancement that I may help with? (Javascript is not my normal programming language, but I can probably figure it out!)

  • Otherwise, can I somehow replace the Camera navigation code in a way that I can still upgrade Cesium without much pain?

Thanks,

Roland

Hello Roland,

Cesium does not currently have underwater/underground support. I’m not sure what’s involved with adding this, but I think it’s pretty involved. If you would like more information I can ask someone.

I think you would also need to supply your own underwater terrain.

This is a feature that I’ve seen multiple requests for and we would like to add it, but we have a big list of things with higher priority right now.

Best,

Hannah

Thanks for the reply Hannah,

Yes, I would appreciate if you could ask for more information. I’m willing to write my own code to do this if necessary, and it would be helpful if I could be pointed in the right direction to do this in an manner that I can still upgrade Cesium.

About the terrain, we have the bathymetry data. My next task will be to investigate how to include it into Cesium. It seems like the 3D tiles under development may be useful in this case.

Thanks for the reply Hannah,

Yes, I would appreciate if you could ask for more information. I'm
willing to write my own code to do this if necessary, and it would be
helpful if I could be pointed in the right direction to do this in an
manner that I can still upgrade Cesium.

About the terrain, we have the bathymetry data. My next task will be
to investigate how to include it into Cesium. It seems like the 3D
tiles under development may be useful in this case.

Not sure if I should be responding given my low level of experience
here, but I want to do something very similar (put bathymetry into the
US Great Lakes). My thoughts are:

- if by "the 3D tiles under development" you mean the 3D format use
   for things like
   https://cesiumjs.org/2015/04/27/3D-Buildings-in-Cesium/ then that
   might be an option, but perhaps not the easiest one. For one thing
   not sure how you'd get existing terrain out of the way.

- Cesium seems to have two terrain formats:
   GitHub - CesiumGS/quantized-mesh: Specification for streaming massive terrain datasets for 3D visualization. and
   https://cesiumjs.org/data-and-assets/terrain/formats/heightmap-1.0.html

- quantized-mesh is probably better (variable detail level(?) and
   pre-processed on the server side), but heightmap can be generated
   with these tools:
   GitHub - geo-data/cesium-terrain-builder: A C++ library and associated command line tools designed to create terrain tiles for use in the Cesium JavaScript library
   GitHub - geo-data/cesium-terrain-server: A basic server for serving up filesystem based tilesets representing Cesium.js terrain models

My impression is that those tools would make building heightmap based
terrain tiles for your AOI relatively simple, presumably the rest of
the world would be flat, but that may not matter. Don't know what the
performance would be like.

Cheers -Terry

Thanks Terry!

Here is some more information:

Cesium does support both quantized mesh and heightmap terrain formats, but we tend to see better performance with the quantized mesh format. AGI (the company that founded Cesium and employs most of the team) has a commercial product called STK Terrain Server that can convert your data into a quantized mesh. See here for more information: http://www.agi.com/products/stk/terrain-server/

So I asked around, and it seems like getting your underwater terrain in Cesium would be the first step. After that, there may not be any problem following an entity because it will be above terrain.

The one thing you should note though, is that it’ll just look like regular ground terrain, since we don’t have any ‘underwater’ visualization effect yet.

For now, you can also try setting scene.screenSpaceCameraController.enableCollisionDetection = false to see if that lets your camera follow the entity.

Hope this helps!

-Hannah

Hi Terry,

I’m dealing with a similar.

I used a global terrain+bathymetry model which is available at [1]

(the bathymetry it is the results of a resampling from a very coarse resolution, i’m using it for testing purposes)

To build the terrain I used the cesium terrain builder [2] which use the heightmap terrain format.

height-map in cesium has the limitation to do not render properly the terrain if the z value is below -1000 m

see:

http://epinux.com/bathycesium1.png

http://epinux.com/bathycesium2.png

My work around was to use a GIS application to set to 0 all the value below -1000 m

an example serving such terrain using the cesium terrain server [3] i available at:

http://epinux.com/cesium/Apps/globe.html

that’s a postcard from Capri (IT):

http://epinux.com/capri.png

[1] http://download.osgeo.org/ossim/data/elevation/srtm30plus_stripped.tif.gz

[2] https://github.com/geo-data/cesium-terrain-builder

[3] https://github.com/geo-data/cesium-terrain-server

I’m working on a similar project for my research (I’m a student)

I’m using an USBL positioning system for my time-based location data

to locate an underwater camera system.

the tracking of the vehicle using CZML works great, see:

http://epinux.com/videoannotation-moc.mp4

But I have problems in synchronizing the rendering of video data with the CZML.

In the video demo they are not playing in sync (the “toggle clock synchronization was unchecked")

for this issue I opened a specific topic:

https://groups.google.com/forum/#!topic/cesium-dev/4lI_0dc8z-U

Massimo.

Thanks all!

Looks like getting the bathymetry in place may solve my tracking issue. I’ll give that a try.

Roland

Thanks for the tip on disabling collision detection Hannah. That does work as a temporary hack until I get the bathymetry in there.

I’m looking to do some underwater vehicle simulations and am evaluating cesium as a possible visualization.

What was the final result of cesium doing underwater visualization? Did it work well for those in this thread?

I’ve had mixed results. The camera is a bit clunky when focused on underwater objects and clipping occurs hiding path lines in some cases.

For the moment, I’ve put the Cesium portion on the back burner as I explore other options.