Restructured with defrecords (SceneObjects and SurfaceObjects)