Dice rolling across a Flutter widget tree. The cards, the button, and the score are plain widgets, and the dice cast shadows on them. :)
The dice are physics bodies drawn by Flutter Scene, a complete 3D game engine for Flutter, in a transparent layer on top. An invisible shadow catcher material stands in for the screen surface, so the only thing the 3D layer draws is the dice and the shadows they leave on the UI.
Land a die hard enough on a card and it cracks. The shards are the card's own pixels, thrown as physics bodies, and they cast shadows like everything else.
No image assets anywhere. The stripes, the cards, the pip faces, and the wood and marble textures are painted or baked at startup. Physics is Rapier through flutter_scene_rapier, and this was recorded in debug mode.
The shadow catcher material shipped today in flutter_scene 0.23. This version of the dice example, with the count-up, the glass, and the breaking cards, lands in the example app with the next release.