2016-11-03 2 views
0

Je veux créer une scène 3D avec le modeleur SceneKit et ensuite le lire dans mon application Metal. Je vois qu'il ya SceneKit et ModelIO API pour le faire mais je ne sais pas comment les pièces s'emboîtent. Donc, ce dont j'ai besoin est chemin de .scn fichier ->MDL Mesh -> géométrie + texture. Je ne suis pas clair sur la façon dont je voudrais synchroniser mes shaders Metal avec des matériaux créés dans le modeleur SceneKit.Comment charger/analyser un fichier SceneKit .scn dans mon application Metal?

Répondre

3

Il y a deux parties principales à ce que vous demandez ici: obtenir des données SceneKit dans ModelIO, et rendre les données ModelIO avec Metal.

  1. Pour obtenir des scènes SceneKit dans Modelio, première API utilisation de SceneKit (SCNScene ou SCNSceneSource pour charger le fichier .scn, puis utilisez l'API Modelio pour obtenir les objets que vous voulez que les mailles. Vous pouvez créer un MDLAsset de toute la scène en utilisant assetWithSCNScene:bufferAllocator: puis marcher à travers la hiérarchie d'objets de l'actif dans Modelio pour trouver le maillage que vous voulez, ou marcher à travers la hiérarchie des noeuds dans SceneKit pour trouver le SCNNode ou SCNGeometry vous voulez, puis obtenir le maillage à Modelio en utilisant objectWithSCNNode:bufferAllocator: ou meshWithSCNGeometry:bufferAllocator:.

  2. En ce qui concerne l'utilisation des maillages ModelIO dans une application Metal, Apple a un sample code project qui montre comment utiliser ModelIO pour charger un maillage OBJ, utiliser MetalKit pour obtenir les données de maillage dans les tampons GPU Metal et raccorder les informations matérielles de ModelIO au shader variables à utiliser dans votre propre moteur de rendu.

Vous devriez être en mesure de mettre les deux d'entre eux ainsi: où le code exemple charge un OBJ pour obtenir un MDLAsset ou MDLMesh, utilisez les méthodes (1) pour obtenir un bien ou d'un maillage d'un SceneKit fichier à la place.

Le modèle de matériau SceneKit est bien sûr beaucoup plus compliqué que le simple shader Phong utilisé dans l'exemple de code. Mais l'exemple de code montre comment parcourir les propriétés d'un MDLMaterial et définir les arguments correspondants dans un Metal shader - si vous créez un shader plus compliqué, suivez les mêmes étapes pour mapper les propriétés du matériau à toutes les entrées de votre shader.

+0

Ah ah! Donc - en un mot - je donne des noms de géométrie et de matériaux dans le modeleur: "my box", "cool material" puis récupérons la géométrie/matériau pendant la traversée - via les méthodes de parcours SceneKit ou ModelIO. La clé est d'étiqueter les choses. Est-ce que j'ai bien compris? – dugla

+0

Vous pouvez itérer les documents, qu'ils soient étiquetés ou non, mais les étiquettes peuvent certainement vous aider à les suivre. – rickster

+0

Attends, quoi? Comment identifier un élément de la scène sans étiquette Deux sphères texturées implique quatre (4) étiquettes (en supposant des descriptions matérielles distinctes) non? – dugla