View in English

  • Apple Developer
    • Get Started

    Explore Get Started

    • Overview
    • Learn
    • Apple Developer Program

    Stay Updated

    • Latest News
    • Hello Developer
    • Platforms

    Explore Platforms

    • Apple Platforms
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    Featured

    • Design
    • Distribution
    • Games
    • Accessories
    • Web
    • Home
    • CarPlay
    • Technologies

    Explore Technologies

    • Overview
    • Xcode
    • Swift
    • SwiftUI

    Featured

    • Accessibility
    • App Intents
    • Apple Intelligence
    • Games
    • Machine Learning & AI
    • Security
    • Xcode Cloud
    • Community

    Explore Community

    • Overview
    • Meet with Apple events
    • Community-driven events
    • Developer Forums
    • Open Source

    Featured

    • WWDC
    • Swift Student Challenge
    • Developer Stories
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Centers
    • Documentation

    Explore Documentation

    • Documentation Library
    • Technology Overviews
    • Sample Code
    • Human Interface Guidelines
    • Videos

    Release Notes

    • Featured Updates
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • Downloads

    Explore Downloads

    • All Downloads
    • Operating Systems
    • Applications
    • Design Resources

    Featured

    • Xcode
    • TestFlight
    • Fonts
    • SF Symbols
    • Icon Composer
    • Support

    Explore Support

    • Overview
    • Help Guides
    • Developer Forums
    • Feedback Assistant
    • Contact Us

    Featured

    • Account Help
    • App Review Guidelines
    • App Store Connect Help
    • Upcoming Requirements
    • Agreements and Guidelines
    • System Status
  • Quick Links

    • Events
    • News
    • Forums
    • Sample Code
    • Videos
 

Vídeos

Abrir menu Fechar menu
  • Coleções
  • Todos os vídeos
  • Sobre

Mais vídeos

  • Sobre
  • Resumo
  • Código
  • Novidades do RealityKit

    Dê asas à sua criatividade com os novos recursos do RealityKit que podem ajudar a criar conteúdo detalhado em 3D para iOS, iPadOS, macOS, tvOS e visionOS. Saiba como acessar dados do ARKit diretamente do RealityKit. Explore como você pode interagir com seu conteúdo 3D de forma mais natural usando o recurso de manipulação de objetos. Descubra algumas novas APIs para compreensão de cenas, combinação de ambientes, criação de instâncias e muito mais, tudo isso usando um exemplo interativo.

    Capítulos

    • 0:00 - Introdução
    • 3:19 - Atualizações de ancoragem
    • 6:52 - ManipulationComponent
    • 10:01 - Compreensão de cenas
    • 11:18 - EnvironmentBlendingComponent
    • 12:26 - MeshInstancesComponent
    • 16:28 - Mídias imersivas
    • 21:43 - Acessórios e muito mais

    Recursos

    • Integrating virtual objects with your environment
    • Presenting images in RealityKit
    • Playing immersive media with RealityKit
      • Vídeo HD
      • Vídeo SD

    Vídeos relacionados

    WWDC25

    • Explore a entrada de acessórios espaciais no visionOS
    • Integre a reprodução de vídeo imersivo em apps para visionOS
    • Melhor juntos: SwiftUI e RealityKit
  • Buscar neste vídeo...
    • 4:33 - Set up SpatialTrackingSession

      // Set up SpatialTrackingSession
      @State var spatialTrackingSession = SpatialTrackingSession()
      
      RealityView { content in
                   
          let configuration = SpatialTrackingSession.Configuration(
              tracking: [.plane]
          )
      		// Run the configuration
          if let unavailableCapabilities = await spatialTrackingSession.run(configuration) {
              // Handle errors
          }
      }
    • 4:34 - Set up PlaneAnchor

      // Set up PlaneAnchor
      RealityView { content in
      
      		// Set up the SpatialTrackingSession
      
          // Add a PlaneAnchor
          let planeAnchor = AnchorEntity(.plane(.horizontal,
                                                classification: .table,
                                                minimumBounds: [0.15, 0.15]))
          content.add(planeAnchor)
      }
    • 5:48 - Handle DidAnchor event

      // Handle DidAnchor event
      
      		didAnchor = content.subscribe(to: AnchorStateEvents.DidAnchor.self) { event in
      
      		guard let anchorComponent =
                 event.entity.components[ARKitAnchorComponent.self] else { return }
      
      
      		guard let planeAnchor = anchorComponent.anchor as? PlaneAnchor else { return }
      
      		let worldSpaceFromExtent =
          planeAnchor.originFromAnchorTransform *
          planeAnchor.geometry.extent.anchorFromExtentTransform
      
          gameRoot.transform = Transform(matrix: worldSpaceFromExtent)
      
          // Add game objects to gameRoot 
      }
    • 7:38 - Set up ManipulationComponent

      // Set up ManipulationComponent
      extension Entity {
          static func loadModelAndSetUp(modelName: String,
                                        in bundle: Bundle) async throws -> Entity {
      
              let entity = // Load model and assign PhysicsBodyComponent
              let shapes = // Generate convex shape that fits the entity model
      
              // Initialize manipulation
              ManipulationComponent.configureEntity(entity, collisionShapes: [shapes])
              var manipulationComponent = ManipulationComponent()
              manipulationComponent.releaseBehavior = .stay
              entity.components.set(manipulationComponent)
      
              // Continue entity set up
          }
      }
    • 9:28 - Subscribe to willBegin ManipulationEvent

      // Subscribe to ManipulationEvents
      
      // Update the PhysicsBodyComponent to support movement
      willBegin = content.subscribe(to: ManipulationEvents.WillBegin.self) { event in
          if var physicsBody = event.entity.components[PhysicsBodyComponent.self] {
              physicsBody.mode = .kinematic
              event.entity.components.set(physicsBody)
          }
      }
    • 9:29 - Subscribe to willEnd ManipulationEvent

      // Subscribe to ManipulationEvents
                      
      // Update the PhysicsBodyComponent to be a dynamic object
      willEnd = content.subscribe(to: ManipulationEvents.WillEnd.self) { event in
          if var physicsBody = event.entity.components[PhysicsBodyComponent.self] {
              physicsBody.mode = .dynamic
              event.entity.components.set(physicsBody)
          }
      }
    • 10:52 - Set up Scene understanding mesh collision and physics​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

      // Set up Scene understanding mesh collision/physics
      
      let configuration = SpatialTrackingSession.Configuration(
          tracking: [.plane],
          sceneUnderstanding: [.collision, .physics]
      )
    • 11:56 - Set up EnvironmentBlendingComponent

      // Set up EnvironmentBlendingComponent
      
      entity.components.set(
          EnvironmentBlendingComponent(preferredBlendingMode: .occluded(by: .surroundings))​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
      )
    • 14:20 - Set up MeshInstancesComponent

      // Set up MeshInstancesComponent entity
      
      let entity = try await ModelEntity(named:"PebbleStriped.usdz")
      var meshInstancesComponent = MeshInstancesComponent()
      let instances = try LowLevelInstanceData(instanceCount: 20)
      meshInstancesComponent[partIndex: 0] = instances
          
      instances.withMutableTransforms { transforms in
          for i in 0..<20 { 
              let scale: Float = .random(in:0.018...0.025)
              let angle: Float = .random(in:0..<2) * .pi
              let position = randomPoint(in: inArea, with: scene)
              let transform = Transform(scale: .init(repeating: scale),
                                        rotation: .init(angle: angle,axis: [0, 1, 0]),
                                        translation: position)
              transforms[i] = transform.matrix
          }
      }
              
      entity.components.set(meshInstancesComponent)
    • 17:36 - Load and display a 2D photo

      // Load and display a 2D photo
          
      guard let url = Bundle.main.url(forResource: "my2DPhoto", withExtension: "heic") else {a​​​​​​​​​​​​​​​​​​​​​​​​​​
          return
      }
      
      let component = try await ImagePresentationComponent(contentsOf: url)
      
      let entity = Entity()
      entity.components.set(component)
    • 17:57 - Load and display a spatial photo with windowed presentation

      // Load and display a spatial photo with windowed presentation
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      var component = try await ImagePresentationComponent(contentsOf: url)
      
      // Discover if the component supports windowed spatial photo presentation.
      if component.availableViewingModes.contains(.spatialStereo) {
          component.desiredViewingMode = .spatialStereo
      }
      
      entity.components.set(component)
    • 18:22 - Load and display a spatial photo with immserive presentation

      // Load and display a spatial photo with immersive presentation
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      var component = try await ImagePresentationComponent(contentsOf: url)
      
      // Discover if the component supports immersive spatial photo presentation.
      if component.availableViewingModes.contains(.spatialStereoImmersive) {
          component.desiredViewingMode = .spatialStereoImmersive
      }
      
      entity.components.set(component)
    • 18:56 - Load a spatial photo and use it to generate and present a spatial scene

      // Load a spatial photo and use it to generate and present a spatial scene
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      let spatial3DImage = try await ImagePresentationComponent.Spatial3DImage(contentsOf: url)
      var component = ImagePresentationComponent(spatial3DImage: spatial3DImage)
      
      try await spatial3DImage.generate()
      
      // Discover if the component supports windowed spatial scene presentation.
      if component.availableViewingModes.contains(.spatial3D) {
          component.desiredViewingMode = .spatial3D
      }
      
      entity.components.set(component)
    • 20:06 - Generating a spatial scene as needed

      // Load a spatial photo and use it to generate and present a spatial scene
          
      guard let url = Bundle.main.url(forResource: "mySpatialPhoto", withExtension: "heic") else {
          return
      }
      
      let spatial3DImage = try await ImagePresentationComponent.Spatial3DImage(contentsOf: url)
      var component = ImagePresentationComponent(spatial3DImage: spatial3DImage)
      
      component.desiredViewingMode = .spatial3D // (or .spatial3DImmersive)
      
      entity.components.set(component)
      
      try await spatial3DImage.generate()
    • 23:35 - Load entity from Data object​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

      // Load entity from Data object
          
      if let (data, response) = try? await URLSession.shared.data(from: url) {
          if let entity = try? await Entity(from: data) {
              content.add(entity)
          }
      }
    • 0:00 - Introdução
    • O framework RealityKit, lançado em 2019, permite que desenvolvedores criem apps e jogos 3D imersivos em várias plataformas da Apple, incluindo o visionOS, o iOS, o iPadOS, o macOS e agora o tvOS. Com base nos feedbacks, a atualização mais recente apresenta vários novos recursos, como acesso direto a dados do ARKit, o ManipulationComponent para adicionar interações a entidades 3D, o EnvironmentBlendingComponent para oclusão perfeita do mundo real e o MeshInstancesComponent para renderização eficiente de vários modelos 3D. Isso é mostrado com a criação de um jogo de quebra-cabeça onde os jogadores interagem com objetos para desbloquear um baú, provando como o RealityKit melhora a integração de experiências virtuais e reais.

    • 3:19 - Atualizações de ancoragem
    • Com essa nova API, você pode acessar os dados do ARKit por meio do RealityKit, aumentando o poder de AnchorEntities. Ao criar um SpatialTrackingSession com o rastreamento de plano ativado, você pode configurar AnchorEntities para filtrar superfícies do mundo real, como tabelas com dimensões mínimas. Quando o sistema detecta uma superfície, ele aciona um AnchorStateEvent, fornecendo dados do ARKit, como transformação e extensões. Então, esses dados podem ser usados para posicionar entidades na superfície ancorada, garantindo que estejam centralizadas e alinhadas ao usuário.

    • 6:52 - ManipulationComponent
    • No espaço imersivo, objetos de jogo são gerados em superfícies adequadas. O ManipulationComponent no RealityKit permite que as pessoas peguem, girem e troquem essas entidades 3D de mãos. Chamar a função configureEntity adiciona automaticamente os componentes necessários. Para impedir que os objetos sejam redefinidos após a liberação, defina releaseBehavior como stay. Um PhysicsBodyComponent adicional faz os objetos caírem no chão. A API ManipulationEvents é usada para ativar e desativar a gravidade. Ela é ativada quando alguém solta um objeto (evento WillEnd) e desativada quando ele é coletado (evento WillBegin), permitindo interações realistas e mantendo o controle durante a manipulação.

    • 10:01 - Compreensão de cenas
    • Além do visionOS, com a API Scene Understanding do RealityKit, você pode integrar o ambiente do mundo real à simulação física de um jogo. Ao utilizar a API SpatialTrackingSession, você pode gerar uma malha do seu entorno. Para que os objetos do jogo colidam com essa malha do mundo real, defina SceneUnderstandingFlags para colisão e física na configuração SpatialTrackingSession antes de iniciar a sessão. Essa atualização permite que os objetos do jogo interajam de forma realista com o ambiente físico, como colocá-los sobre mesas ou no chão.

    • 11:18 - EnvironmentBlendingComponent
    • Com a atualização do RealityKit, você pode usar o EnvironmentBlendingComponent nos seus apps de espaço imersivo para permitir que entidades virtuais sejam ocluídas pelo ambiente do mundo real. Ao adicionar esse componente e definir o modo de mesclagem, as entidades podem ser ocluídas por objetos estáticos do mundo real, criando uma experiência mais fluida. É importante notar que essas entidades são sempre desenhadas atrás de outros objetos virtuais na cena e não serão ocluídas por objetos dinâmicos em movimento, como pessoas ou animais.

    • 12:26 - MeshInstancesComponent
    • A atualização do RealityKit também lança o MeshInstancesComponent, que melhora a eficiência da renderização, permitindo que você desenhe uma única malha várias vezes em uma entidade. Esse novo componente substitui a necessidade de clonar entidades, reduzindo a memória e o espaço ocupado pelo processamento. Com o MeshInstancesComponent, você pode fornecer uma lista de transformações para cada instância de malha, permitindo aparências exclusivas com o CustomMaterials em plataformas compatíveis. Esse método melhora o desempenho otimizando a transferência de dados da GPU. Ao usar esse componente para grandes áreas, para o descarte adequado, quebre-o em entidades menores. Há uma demonstração de como inicializar e preencher o MeshInstancesComponent com transformações aleatórias, criando uma área jogável com decorações. Juntas, as APIs AnchorStateEvent, ManipulationComponent, sceneUnderstanding flags e EnvironmentBlendingComponent permitem experiências interativas de realidade aumentada integrada ao mundo real.

    • 16:28 - Mídias imersivas
    • O RealityKit receberá atualizações significativas este ano, melhorando a compatibilidade com mídias imersivas. Com um novo componente, o ImagePresentationComponent, você pode exibir três tipos de imagens: imagens 2D tradicionais, fotos espaciais e cenas espaciais. As cenas espaciais são uma adição importante. São imagens 3D geradas de fotos 2D, criando um efeito de diorama com paralaxe de movimento que torna as imagens estáticas mais interessantes. Para apresentar cenas espaciais, gere-as usando uma imagem 2D ou uma foto espacial com a classe Spatial3DImage e defina o modo de visualização desejado. O VideoPlayerComponent também foi atualizado para aceitar vários formatos de vídeo imersivos, incluindo vídeos espaciais, Apple Projected Media Profile, como vídeos em 180° e 360°, e Apple Immersive Video. Você pode reproduzir esses vídeos em vários modos de visualização e definir ajuste de conforto para vídeos do Apple Projected Media Profile.

    • 21:43 - Acessórios e muito mais
    • A atualização do RealityKit deste ano melhora muito o desenvolvimento de apps 3D. As principais atualizações incluem o seguinte. Acessórios espaciais: O RealityKit agora permite rastrear acessórios espaciais em seis graus de liberdade com resposta tátil, possibilitando interações mais imersivas em espaço compartilhado e total. Integração do SwiftUI: Novos componentes como ViewAttachmentComponent, PresentationComponent e GestureComponent simplificam a adição de views, apresentações modais e gestos para entidades do SwiftUI. Atualizações de entidades: Um método entity attach simplifica o ato de anexar malhas a esqueletos animados, e um inicializador permite carregar entidades de objetos de dados na memória, possibilitando cenas online e reprodução de arquivos USD. Compatibilidade com textura e efeito de foco: O RealityKit agora é compatível com texturas codificadas em AVIF para tamanhos menores sem perder qualidade. O HoverEffectComponent foi atualizado com GroupIDs, permitindo mais controle sobre as ativações do efeito de foco. Efeitos pós-processamento: Agora, RealityViews aceita efeitos pós-processamento para adicionar efeitos personalizados como bloom usando Metal Performance Shaders, CIFilters ou sombreadores personalizados no iOS, iPadOS, macOS e tvOS.

Developer Footer

  • Vídeos
  • WWDC25
  • Novidades do RealityKit
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • Apple Intelligence
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Downloads
    • Sample Code
    • Videos
    Open Menu Close Menu
    • Help Guides & Articles
    • Contact Us
    • Forums
    • Feedback & Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • Mini Apps Partner Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Read the latest news.
    Get the Apple Developer app.
    Copyright © 2026 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines