CesiumGS / cesium

An open-source JavaScript library for world-class 3D globes and maps :earth_americas:
https://cesium.com/cesiumjs/
Apache License 2.0
13.03k stars 3.51k forks source link

Irrelevant error message from `PerInstanceColorAppearance` #12107

Open jjhembd opened 3 months ago

jjhembd commented 3 months ago

What happened?

As reported on the forum Adding a GeometryInstance with a RectangleOutlineGeometry to the scene as a Primitive with a default PerInstanceColorAppearance gives the following error:

DeveloperError: Appearance/Geometry mismatch. The appearance requires vertex shader attribute input 'compressedAttributes', which was not computed as part of the Geometry. Use the appearance's vertexFormat property when constructing the geometry.

See this Sandcastle example.

But vertexFormat is not an option for RectangleOutlineGeometry. In this case, the PerInstanceColorAppearance will work as long as it is initialized with the option flat: true. See this updated Sandcastle.

Reproduction steps

  1. Construct a GeometryInstance with a RectangleOutlineGeometry
  2. Add it to the scene with a default PerInstanceColorAppearance

Sandcastle example

https://sandcastle.cesium.com/#c=zZNdS8MwFIb/SuiNLcx09eNC1w1lggiCouCN9SJLjzWYJiVJJ1P2303StXZbvRVvEnLOed+T8zSlUmiDlgw+QKEpEvCB5qBZXeInHwuzgPrzXApDmACVBdEkE5mgXvmFNAUBaG3FjUsvqYAaIgoON/ZEBIVku8U1yBKMWrXp8CsTCBWbKDrv1z60Xne14fYerbbRoJ9eVrYrwa9KlldQKAAdHiYnYzweoWO/HiZjv7tYNHJW62ZjuTU66FwPfJAYo9iiNqBtctOYSi7V9l3nLrQ73GWrDX3DpFvG+DTyjTOxdmh/YXf0L9g11I4admcdyL9C16c2gM6/RVwpVjLDlqAxyfOw537fZrZptX3c1Z73H+1o4GO8NENVFRDlAttT3INqK/1Al11d6BCto2gSjIJUmxWHWcMCoQtWVlIZVCseYhwbKCtOLK94UdN3MJhq7WZ0pWncl6Y5W1ro04FfFVFOtLaZ15rzR/YJWTBLY1u/J+WS5EwUd0tQnKxc2Vsyu22CGOM0tsdhpZGSL4jacf4G

Environment

Browser: Chrome CesiumJS Version: 1.120 Operating System: Windows

MylesPerHour201 commented 3 months ago

Hey @ggetz I'd like to tackle this issue for JTC

ggetz commented 3 months ago

@MylesPerHour201 Great!

MylesPerHour201 commented 1 month ago

Reaching out for a sanity check. I believe the best route to take is to directly add a compressedAttributes input to the RectangleOutlineGeometry instance. I believe this would be done in the .creategeometry method. This would satisfy the modifyForEncodedNormals function, even though RectangleOutlineGeometry does not need to compress multiple vertices.

ggetz commented 1 month ago

@jjspace Would you be able to advise on this?