card non euclidean | Babylon.js Playground
The rendering is in 2 parts. First one is done in a texture with a camera that has the same properties as the one used for rendering the scene (angles, distance, …)
The texture with the ship and its background is then projected on screen but only displayed for a part of the tradecard mesh.
With layerMask, I could enable ship rendering only for the 2d texture. Texture projection is done with a shader. Basically, compute the 2D coordinates on screen for the clipspace coordinates (divide by w, then transform each component from [-1,1] to [0,1])
Let me know if you want to know more about a specific detail.