DM7903 Week 6.1 – Photogrammetry and Apple’s Object Capture API

One of the first steps in producing an augmented reality experience prototype is attaining 3D virtual object to superimpose onto the real world. For my project, this would involve finding a way to create 3D virtual objects from a real camera body and camera lens. 

Before this week, I had no idea how to achieve this in a realistic timeframe. I had limited experience of working in 3D software and knew I would not be able to build an object from scratch for this module. However I was aware that Apple had unveiled a new API as part of Xcode in Mac OS Monterey called “Object Capture,” which aimed to put photogrammetry functionality into app developers’ and designers’ hands.

I signed up to the Apple Developer programme and downloaded Xcode, then managed to implement Apple’s “HelloPhotogrammetry” example code and produce the following scans:

Above: Tearsheets or ‘Contact Sheets’ of each photo taken of the camera lens
Above: A screen shot of Apple’s ‘Hello Photogrammetry’ code running in Xcode
Above: Multiple angles of the resulting 3D virtual lens

After a few attempts, I arrived at fully rendered virtual versions of the scanned objects. Any ‘gaps’ in the scans could be filled by taking extra photos of those areas. The file size of these scans were huge – some were around 400mb. Despite being inaccurate in some areas such as texture, with minor issues with shape too, I thought that these would be perfect for producing a proof of concept. I would not be able to create anything better with the limited 3D knowledge that I have and the time constraints of this module.

Below, I have uploaded the models of the lens and camera body to Sketchfab:

Canon 5D MKIII Lens by ChrisDigitalMediaPractice on Sketchfab

Canon 5D MKIII Body by ChrisDigitalMediaPractice on Sketchfab

I will be writing an updated blog post shortly, to explain how I am integrating these 3D models into an augmented reality experience.

Leave a Reply

Your email address will not be published. Required fields are marked *