
SwiftUI 3D is Flat (visionOS is not)
Short version: on iOS/macOS, SwiftUI's rotation3DEffect / projectionEffect give you per-view 2D projection of one rendered rectangle — not membership in a shared 3D scene. So you can flip one card convincingly, but a cube fails: with six faces there's no shared depth space and no per-frame depth sort.
The tell: render a pure-SwiftUI cube and sweep yaw. At 180° the front face is pointed away, but it still paints on top (declared-last wins), while a Core Animation cube shows the true back face. Painter's order vs depth sort.
The missing primitive has a name: CATransformLayer (non-flattening container) plus the parent sublayerTransform as a shared camera. Apple did build the richer model — transform3DEffect, Rotation3D, perspectiveRotationEffect — but shipped them visionOS-only. The boundary looks deliberate, not an oversight.
Full writeup with the CA-input → SwiftUI-output filter table, rendered witnesses, and a repo with positive (UIKit/AppKit + CA) and negative (pure SwiftUI) controls you can run: