[SceneKit] comment afficher une scene sous plusieurs angles de vue ?

Je cherche à  rendre une scene sous plusieurs angles de vue (utile par exemple pour les lunettes 3D, ou pour un rendu panoramique sur plusieurs moniteurs).


 


Pour ce faire, j'ai créé deux SCNView... avec deux points de vue différents.


Le rendu fonctionne bien... mais l'animation physique et les système de particule s'exécutent à  une vitesse deux fois plus élevée qu'avec une seule SCNView ... bien que je sois toujours à  60hz ..... et l'animation présente des saccades.


 


Effectivement, en lisant le fonctionnement des SCNView, la doc précise bien que chacune execute sur la scene (commune dans mon cas) la boucle physique... le fonctionnement est donc 'normal'...


 


Du coup... je ne sais pas trop comment m'y prendre pour avoir un rendu de ma scene suivant différents angles... sans que la boucle de physique et du système de particule soient exécutés à  chaque rendu... 


 


 


 


Voici un extrait de mon code :


(ps : j'ai posté ma question sur stackoverflow il y a quelques jours... sans solution. j'ai aussi fait une demande au support apple... qui cherche une alternative...)


 


 


class GameViewController: NSViewController,SCNSceneRendererDelegate {


    @IBOutlet weak var scnView1: SCNView!
    @IBOutlet weak var scnView2: SCNView!

...

    func renderer(aRenderer: SCNSceneRenderer,
        didSimulatePhysicsAtTime time: NSTimeInterval) {
...
    }

...

    override func awakeFromNib(){

        // create a the scene
        let scene = SCNScene()

        // set up the scene
...

        // create two cameras
        let cameraNode1 = SCNNode()
        cameraNode.position = ...
        cameraNode.rotation = ...
        scene.rootNode.addChildNode(cameraNode1)

        let cameraNode2 = SCNNode()
        cameraNode.position = ...
        cameraNode.rotation = ...
        scene.rootNode.addChildNode(cameraNode2)

        // set up the first view
        scnView1.scene = scene

        // initial point of view
        scnView1.pointOfView = cameraNode1

        // plug game logic
        scnView1.delegate = self

        // set up the second view
        scnView2.scene = scene

        // initial point of view
        scnView2.pointOfView = cameraNode2


}


Mots clés:

Réponses

  • Bonjour,


    A froid je dirais qu'avoir deux SCNScene distinct semble être la solution la plus simple.


  • C'est effectivement une solution... que je vais tester pour voir.... mais avec le risque de voir apparaà®tre au fil du temps une dé-synchro de la position/orientation des objects gérés par la physique... (surtout gênant dans le cas du calcul des deux images oeil gauche et droit pour des lunettes style occulus)  et puis je me dis que c'est un peu couillon quand même de faire 2 fois les calculs physiques pour la même scène... et je me demande au passage si cela va fonctionner pour le générateur de particule qui a un système de génération aléatoire...


     


    ... il doit bien y avoir une solution pour faire un simple rendu de la scène de différents points de vue sans en passer par là ....


     


    bref en tout cas j'essaye et je reviens ici vous informer du résultat !


  • ilbouedilboued Membre
    juillet 2015 modifié #4

    Resultat du test : les objets qui subissent les lois physiques se désynchronisent très vite dans mon cas ou la scene est constituée d'une centaine de cube générés au hasard et qui vont tomber au démarrage... le résultat est à  peu près identique... mais vraiment à  peu près... c'est visible à  l'oeil nu... :-(


     


    edit : cf fichier joint.


  • CéroceCéroce Membre, Modérateur

    Tu peux demander sur le forum d'Apple, ils sont plus ou moins réactifs.


     


    Peut-être peux-tu rendre la scene dans des SCNLayer. J'ignore si les systèmes de particules sont liés au SCNSceneRenderer ou à  la SCNView, n'ayant jamais travaillé avec.


     


    Je travaille avec Scene Kit depuis un an et nous envisageons sérieusement de l'abandonner au profit d'une autre solution... parce que ça marche bien dans les démos, mais pas dans les cas plus poussés, comme le tien. Nous passons notre temps à  chercher des astuces pour contourner ses limitations.


  • Bien reçu l'info Cérose. J'ai fait une demande de support technique chez Apple m'ont répondu qu'il pourrait trouve maybe... une astuce aussi... 


    Ton retour d'expérience est intéressant. Pour ma part... j'ai fait quelques essais avec Unity3D, et PlayCanvas... mais avec des soucis d'astuces à  trouver... et je me suis dit qu'avec une solution intégrée apple... j'aurais peut-être moins d'astuces à  chercher... ceci dit leur kit est prometteur mais peut-être un peu 'jeune'...


  • CéroceCéroce Membre, Modérateur
    juillet 2015 modifié #7

    ceci dit leur kit est prometteur mais peut-être un peu 'jeune'...

    Non, il n'est pas jeune. Il a déjà  4 ans d'existence sous OS X. De mon point de vue, le problème c'est qu'il y a deux ans, Apple vendait Scene Kit comme un moyen de faire de la visualisation de données, ce qui avait du sens et qui justifiait qu'il s'appuie sur Core Animation, par exemple.

    Mais depuis l'an dernier il est vendu comme un moyen de créer de petits jeux. Toutes les améliorations de Scene Kit de cette année sont centrées sur cette stratégie. Je trouve ça complètement crétin, parce que si on veut créer un jeu, même seulement un peu complexe, alors il faut absolument passer sur un moteur 3D multiplateforme, pour pouvoir mutualiser les coûts. Et il faut être clair, les outils d'Apple sont très très légers comparé à  ce que propose Unity, par exemple, qui possède même une collection de plug-ins.
    Cette stratégie d'Apple est faite pour "coincer" les développeurs sur la plateforme iOS/Mac, s'ils ont eu le malheur de choisir Scene Kit au départ. C'est la même stratégie que pour Sprite Kit, à  la différence qu'on peut faire un jeu 2D sympa avec peu de moyens, pas un jeu 3D.

    Je ne veux pas dénigrer le travail des ingés d'Apple qui travaillent assurément dur " l'équipe me parait petite, peut-être cinq personnes " mais l'investissement d'Apple est trop léger. Des fonctions essentielles sont absentes. Les bugs ne sont pas corrigés, le support est inexistant en-dehors du forum où les ingés répondent bénévolement.
  • Effectivement... ce que tu écris sur la non correction de bug et une équipe minimaliste n'est pas très encourageant... mais cela ne me pousse pas pour autant à  retourner sur Unity.


     


    Dans mon cas j'ai décidé de me limiter à  la plateforme osx/ios avec pour objectif d'être sûr que le client final aura bien un résultat final que j'aurai - plutôt plus que moins - maà®trisé (dans la mesure ou le nombre de configs hardware est relativement limité chez apple)...et j'apprécie plutôt l'environnement de dev (surtout avec XCode 7 qui fait un pas en avant sur l'édition de fichiers 3D).


     


    Dans mon cas, je suis obsédé par une fluidité parfaite et la précision des écrans retina... et bref j'ai pris la décision de faire le choix du nombre d'outils limités d'apple, d'apprendre à  les maitriser. et d'essayer de faire de mon mieux avec. Il se pourrait bien que j'arrive à  ta conclusion du jour dans quelques temps... mais entre temps j'aurais au moins appris en pratiquant swift ;) (et javascript pour que l'utilisateur final puisse rajouter une touche de sa programmation).


     


    Ceci dit, je suis preneur de tes warnings sur des bugs non corrigés !


Connectez-vous ou Inscrivez-vous pour répondre.