Collision detection issue with Unreal and 3D tiles

Hello Cesium team. I’m currently working on a project in Unreal Engine 5.2.0, and I’m encountering an issue with collision detection between a third-person character and a 3D tileset. The character appears to be floating above the ground instead of making contact with it.

I’ve imported my 3D tileset through the Blank 3D Tiles Tileset actor via a local URL. Interestingly, the character seems to be making contact with other 3D objects in the scene correctly (e.g. the cube in the screenshot below). This leads me to believe that the issue is likely with the 3D tileset mesh itself, rather than the character or the general collision settings in my project.

Could anyone provide some guidance or point me to resources that could help me resolve this issue?

Thanks!!

I’m not sure what would cause that, but a few things to try…

First, are you using the Cartographic Polygon clipping feature? If so, remember that the clipping is purely visual, so players will still collide with the clipped-away mesh.

Next, take a look at the “Player Collision” debug view in the Editor. Does the collision mesh match the rendered one? It should, but if it doesn’t for some reason on your system, that’s probably the cause of what you’re seeing.

Finally, do you see this problem in the “Denver” level in Cesium for Unreal Samples? That has a similar third-person character running around on a Cesium3DTileset, and we have not seen this problem with it. What about if you import your character into it?

Hi Kevin. Thanks for your suggestions!

  1. Yep, I am indeed using the Cartographic Polygon clipping feature. But even after I removed it from the terrain 3D tileset, the floating issue still persists.

  2. Regarding the Player Collision debug view, I’m not entirely sure how to load this up. Are you suggesting I check the display of collision meshes in the game using the ‘show COLLISION’ command? If you could break it down a little more for me, that would be awesome :smiley:

  3. I have tested the “Denver” level in Cesium for Unreal Samples, and everything was just fine there – no floating issues. So it seems like it may be specific to the particular 3D tileset that I’m using.

Thanks again for your help!

Regarding the Player Collision debug view, I’m not entirely sure how to load this up.

Like this:
player-collision

Zoom in close and see if the player collision mesh is visibly offset from the visual one. Not that I can think of any reason that it would be. :slight_smile:

I have tested the “Denver” level in Cesium for Unreal Samples, and everything was just fine there – no floating issues. So it seems like it may be specific to the particular 3D tileset that I’m using.

How did you produce the problematic tileset? Can you try the Denver tileset in your project to see if that “fixes” it?

Hey Kevin, thanks for sticking with me on this.

For your first point, I took a really close look and made a couple of GIFs. They seem to be in sync - no offset that I can notice.

collision_debug

collision_issue (1)

As for the second point, the tileset I am working with came from Hong Kong government open data. I downloaded a bunch of tile-based 3D tilesets (here’s one for reference). I then uploaded them from my local machine via the 3D tileset actor’s URL.

I also tried adding in the Denver tileset into my project as you suggested, but it didn’t seem to change anything for the problematic tileset :disappointed_relieved:

Regarding Denver, I didn’t mean just add Denver and then check collision with the other tilesets. Rather, see if the collision is working correctly when walking on the Denver tileset itself.

You can also look at the Player Collision view while the character is actually standing on the surface in Play-in-Editor mode. The trick is to press F8 to eject from the pawn, and then you can enable the Player Collision debug view in the normal way.

I think it would be useful to see that character standing on a cube or something as well. You had a screenshot of it standing on a plane in your first post, but it was hard to be certain from that alone that the character was seated perfectly on that plane.

Rather, see if the collision is working correctly when walking on the Denver tileset itself.

I have tested the Denver tileset as well, and I can confirm that the collision behaves as expected - no issue with the character floating above the ground.

denver_test

I think it would be useful to see that character standing on a cube or something as well.

Thanks for the great tip on the F8 function! As you can see from the GIF, my character is perfectly seated when placed on a cube.

standing_on_cube

However, it’s a different story when it comes to my own tileset mesh.

standing_on_tileset

That’s very strange. So the character works fine on other tilesets, like Denver. But on your tileset, it’s floating. So I guess we need to dig into what’s different between your tileset and Denver. How did you produce your tileset?