{ "$schema": "https://raw.githubusercontent.com/guitaripod/wwdc-sessions/master/schema/session.schema.json", "schemaVersion": 1, "id": "wwdc2026-285", "event": "wwdc2026", "eventName": "WWDC26", "year": 2026, "eventContentId": 285, "title": "Discover USDKit and what’s new in OpenUSD", "description": "Dive into the latest advances in Universal Scene Description (USD) support on Apple platforms, including Swift-based USDKit, the new spatial preview API, and enhanced spatial web capabilities. Discover how the latest updates to the OpenUSD standard add support for accessibility, Gaussian splats, and compressed geometry. We’ll also walk through the expanded USD editing and rendering tools in Preview for Mac, showing you how to leverage these capabilities in your own apps.", "url": "https://developer.apple.com/videos/play/wwdc2026/285", "sosumiURL": "https://sosumi.ai/videos/play/wwdc2026/285", "type": "Video", "publishedAt": "2026-06-08T14:00:00-07:00", "platforms": [ "iOS", "iPadOS", "macOS", "tvOS", "visionOS" ], "keywords": [ "3d", "3d content", "3d model", "augmented reality", "spatial computing", "usd", "usda", "usdc", "usdz", "visionos" ], "topics": [ "Spatial Computing", "Graphics & Games" ], "primaryTopic": "Graphics & Games", "duration": 873, "hasTranscript": true, "transcriptWordCount": 2248, "availableLanguages": [ "eng", "fra", "jpn", "kor", "por", "spa", "zho" ], "media": { "hls": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/285/4/335150b6-c2b8-4711-a632-45a34d449eac/cmaf.m3u8", "downloadHLS": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/285/4/335150b6-c2b8-4711-a632-45a34d449eac/cmaf-download.m3u8", "downloadSD": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/285/4/335150b6-c2b8-4711-a632-45a34d449eac/downloads/wwdc2026-285_sd.mp4", "downloadHD": "https://devstreaming-cdn.apple.com/videos/wwdc/2026/285/4/335150b6-c2b8-4711-a632-45a34d449eac/downloads/wwdc2026-285_hd.mp4", "duration": 873 }, "codeSnippets": [ { "title": "Opening a USD Stage", "language": "swift", "startTimeSeconds": 492, "code": "import USDKit\n\n// Create a new empty in-memory stage\n\nlet stage = USDStage()\n\n// Open a stage from a file on disk\n\nlet url = URL(fileURLWithPath: \"/ALab/entry.usda\")\nlet stage = try USDStage.open(url)" }, { "title": "Traversing the Stage Hierarchy", "language": "swift", "startTimeSeconds": 524, "code": "// Traverse all prims looking for the oscilloscope\nfor prim in stage.descendants {\n if prim.name == \"scope\" {\n // There it is! 🔬\n }\n}\n\n// It wasn't there — define a new Xform prim for it\n\nlet scope = stage.definePrim(at: \"/World/scope\", type: “Xform\"))\n\n// Add a file reference to the prim\n\ntry scope.references.add(“/ALab/assets/scope.usda”)" }, { "title": "Moving a Prim with a Transform Operation", "language": "swift", "startTimeSeconds": 576, "code": "// Creates xformOp:translate and updates xformOpOrder automatically\n\nscope.addTransformOperation(type: .translate)\nscope[\"xformOp:translate\", as: USDValue.Vec3d.self] = [2.5, 0.0, -1.0]" }, { "title": "Applying Accessibility Metadata", "language": "swift", "startTimeSeconds": 642, "code": "// Apply the multi-apply AccessibilityAPI schema with instance name \"default\"\n\ntry scope.applyAPISchema(\"AccessibilityAPI\", instanceName:\"default\")\n\n// Create the label and description attributes\n\nscope.makeAttribute(named: \"accessibility:default:label\", as: .string)\nscope.makeAttribute(named: \"accessibility:default:description\", as: .string)\n\n// Set their values\n\nscope[\"accessibility:default:label\", as: String.self] = \"Oscilloscope\"\nscope[\"accessibility:default:description\", as: String.self] = \n \"Vintage signal analyzer with a 3D wireframe display, topped by a color bar test monitor\"" }, { "title": "Exporting with Mesh and Texture Compression", "language": "swift", "startTimeSeconds": 725, "code": "let output = URL(fileURLWithPath: \"/ALab/alab_compressed.usdz\")\n\n// Export the stage as a USDZ package\n\ntry stage.exportPackage(\n to: output,\n options: [\n .preferSmallTextureFiles(quality: .standard), // compress textures\n .preferSmallMeshFiles // compress mesh geometry\n ]\n)" } ], "resources": [], "path": "sessions/wwdc2026/285-discover-usdkit-and-what-s-new-in-openusd/", "files": { "metadata": "sessions/wwdc2026/285-discover-usdkit-and-what-s-new-in-openusd/metadata.json", "readme": "sessions/wwdc2026/285-discover-usdkit-and-what-s-new-in-openusd/README.md", "transcript": "sessions/wwdc2026/285-discover-usdkit-and-what-s-new-in-openusd/transcript.md", "transcriptJSON": "sessions/wwdc2026/285-discover-usdkit-and-what-s-new-in-openusd/transcript.json" } }