Skip to content

Instantly share code, notes, and snippets.

@warrenm
Created June 12, 2018 06:31
Show Gist options
  • Save warrenm/f4f1c7f7e71bd88fc3d3df95b60d5f04 to your computer and use it in GitHub Desktop.
Save warrenm/f4f1c7f7e71bd88fc3d3df95b60d5f04 to your computer and use it in GitHub Desktop.
Generating thumbnail images of 3D model files for use with AR QuickLook
import Foundation
import SceneKit
class ARQLThumbnailGenerator {
private let device = MTLCreateSystemDefaultDevice()!
/// Create a thumbnail image of the asset with the specified URL at the specified
/// animation time. Supports loading of .scn, .usd, .usdz, .obj, and .abc files,
/// and other formats supported by ModelIO.
/// - Parameters:
/// - url: The file URL of the asset.
/// - size: The size (in points) at which to render the asset.
/// - time: The animation time to which the asset should be advanced before snapshotting.
func thumbnail(for url: URL, size: CGSize, time: TimeInterval = 0) -> UIImage? {
let renderer = SCNRenderer(device: device, options: [:])
renderer.autoenablesDefaultLighting = true
if (url.pathExtension == "scn") {
let scene = try? SCNScene(url: url, options: nil)
renderer.scene = scene
} else {
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
renderer.scene = scene
}
let image = renderer.snapshot(atTime: time, with: size, antialiasingMode: .multisampling4X)
return image
}
}
@AMJ-7
Copy link

AMJ-7 commented Jun 28, 2021

I got this issue while using in cellForItemAt
[SceneKit] Error: Failed to load <C3DImage 0x28016c200 src:file:///private/var/mobile/Containers/Data/Application/19E310AE-1945-417C-B09D-D215DF530BD5/Documents/fender_stratocaster.usdz [0.000000x0.000000]>

@EuRabelo
Copy link

love you for this code :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment