Déclencheurs
- Rendu Metal
- macOS 3D
- Intégration Vision Pro
- calcul spatial
- rendu GPU
- rendu instancié
- services de compositeur
- rendu stéréoscopique
- disposition force-dirigée
- visualisation de graphe
- shaders Metal
- suivi du regard
- geste de pincement
- interaction spatiale
- RemoteImmersiveSpace
- performance Metal
Instructions
Construire le rendu compagnon macOS
- Implémenter le rendu Metal instancié pour 10 000 à 100 000 nœuds à 90fps.
- Créer des buffers GPU efficaces pour les données de graphe (positions, couleurs, connexions).
- Concevoir des algorithmes de disposition spatiale (force-dirigée, hiérarchique, en clusters).
- Streamer les frames stéréo vers Vision Pro via Compositor Services.
- Maintenir 90fps dans RemoteImmersiveSpace avec 25 000 nœuds.
Intégrer le calcul spatial Vision Pro
- Configurer RemoteImmersiveSpace pour une visualisation en immersion complète.
- Implémenter le suivi du regard et la reconnaissance des gestes de pincement.
- Gérer les tests de hit raycast pour la sélection de symboles.
- Créer des transitions et animations spatiales fluides.
- Supporter les niveaux d'immersion progressifs (fenêtré vers espace complet).
Optimiser la performance Metal
- Utiliser le dessin instancié pour de grandes quantités de nœuds.
- Implémenter la physique basée GPU pour la disposition du graphe.
- Concevoir un rendu d'arêtes efficace avec geometry shaders.
- Gérer la mémoire avec triple buffering et resource heaps.
- Profiler avec Metal System Trace et optimiser les goulots.
Exigences de performance Metal
- Ne jamais descendre en dessous de 90fps en rendu stéréoscopique.
- Garder l'utilisation GPU sous 80% pour marge thermique.
- Utiliser les ressources Metal privées pour les données fréquemment mises à jour.
- Implémenter frustum culling et LOD pour les grands graphes.
- Batcher agressivement les appels de dessin (objectif <100 par frame).
Normes d'intégration Vision Pro
- Suivre les Human Interface Guidelines pour le calcul spatial.
- Respecter les zones de confort et les limites vergence-accommodation.
- Implémenter l'ordre de profondeur correct pour le rendu stéréoscopique.
- Gérer gracieusement la perte de suivi des mains.
- Supporter les fonctionnalités d'accessibilité (VoiceOver, Switch Control).
Gestion de la mémoire
- Utiliser les buffers Metal partagés pour le transfert de données CPU-GPU.
- Implémenter l'ARC propre et éviter les cycles de rétention.
- Mettre en pool et réutiliser les ressources Metal.
- Rester sous 1 Go de mémoire pour l'app compagnon.
Flux de travail
- Configurer le pipeline Metal avec les frameworks requis (Metal, MetalKit, CompositorServices, RealityKit).
- Construire le système de rendu : shaders Metal pour rendu de nœuds instancié, rendu d'arêtes avec anti-aliasing, triple buffering, frustum culling.
- Intégrer Vision Pro : configurer Compositor Services pour la sortie stéréo, configurer RemoteImmersiveSpace, implémenter le suivi des mains et la reconnaissance de gestes, ajouter l'audio spatial.
- Optimiser la performance : profiler avec Instruments et Metal System Trace, optimiser l'occupancy des shaders, implémenter LOD dynamique, ajouter upsampling temporel.
Livrables
Pipeline de rendu Metal
class MetalGraphRenderer {
private let device: MTLDevice
private let commandQueue: MTLCommandQueue
struct NodeInstance {
var position: SIMD3<Float>
var color: SIMD4<Float>
var scale: Float
var symbolId: UInt32
}
func render(nodes: [GraphNode], edges: [GraphEdge], camera: Camera) {
// Instanced node rendering + edge rendering
}
}
Intégration compositeur Vision Pro
class VisionProCompositor {
private let layerRenderer: LayerRenderer
private let remoteSpace: RemoteImmersiveSpace
func streamFrame(leftEye: MTLTexture, rightEye: MTLTexture) async {
// Submit stereo textures with depth for proper occlusion
}
}
Disposition graphe force-dirigée basée GPU
kernel void updateGraphLayout(
device Node* nodes [[buffer(0)]],
device Edge* edges [[buffer(1)]],
constant Params& params [[buffer(2)]],
uint id [[thread_position_in_grid]])
{
// Repulsion between nodes + attraction along edges
}
Métriques de succès
- Le rendu maintient 90fps avec 25 000 nœuds en stéréo
- La latence regard-à-sélection reste sous 50ms
- L'utilisation mémoire reste sous 1 Go sur macOS
- Aucune chute de frame lors des mises à jour de graphe
- Les interactions spatiales se sentent immédiates et naturelles
- Les utilisateurs Vision Pro peuvent travailler pendant des heures sans fatigue
Vérifier
- Le build a été produit pour la plateforme cible réelle et a soit fonctionné dans un simulateur/appareil, soit a joint son log de build en cas de succès
- Les règles HIG/UX spécifiques à la plateforme référencées dans le guide macos-metal ont été vérifiées contre le changeset, les noms de règles étant cités
- Les compteurs de performance pertinents pour la plateforme (fréquence d'images, temps GPU, batterie, état thermique) ont été échantillonnés et rapportés comme nombres
- Les permissions/entitlements/capabilities requis par le changement sont déclarés dans le manifest ; le diff est affiché
- Les modalités d'entrée que la plateforme attend (touch, gaze, hand, controller, keyboard) ont chacune été exercées au moins une fois
- Les logs de crash / console de l'appareil ont été examinés après l'exécution ; toute nouvelle erreur symbolicalisée est rapportée