Edit : Pour avoir un dessin en temps réel, j'ai commencé à utiliser lwjgl qui est la base de jmonkeyengine et jocl dans une "interopérabilité" entre opengl et opencl, maintenant je peux calculer et dessiner 100k particules en temps réel. Peut-être que la version mantle de jmonkeyengine pourra résoudre ce problème de drawcall overhead.
Depuis plusieurs jours, je me suis familiarisé avec le moteur jMonkey (ver:3.0) dans Eclipse (java 64 bit) et j'essaie d'optimiser une scène en utilisant GeometryBatchFactory.optimize(rootNode);
commandement.
Sans optimisation (avec possibilité de changer la position des sphères) :
Ok, seulement 1-fps provient à la fois de la bande passante du pci-express et de l'overhead du jvm.
Avec optimisation (sans possibilité de changer la position des sphères) :
Maintenant, c'est 29 fps même avec un nombre de triangles plus élevé.
Java3D avait un setCapability()
qui fait qu'un objet de la scène peut être lu/écrit même sous une forme optimisée. Le moteur jMonkey 3.0 doit être capable de ce sujet mais je n'en ai trouvé aucune trace (j'ai cherché des tutoriels et des exemples, sans succès).
Question : Comment puis-je régler read/write position/rotation/scale
capacités de optimized
nœuds d'une scène dans jMonkey 3.0 ? Si vous ne pouvez pas répondre à la première question, pouvez-vous me dire pourquoi le nombre de triangles augmente lorsque j'utilise la commande d'optimisation ? Dois-je créer une nouvelle méthode pour accéder à la carte graphique et changer les variables moi-même (jogl peut-être ?)?
Informations sur la scène : 16k particules(sphères de 16x16 res) + 1 point light(et son ombre de 4096 resolution).
Je suis sûr qu'on peut envoyer plusieurs milliers de nombres flottants en une milliseconde par pci-express avec facilité.
- Informations supplémentaires : J'utilise des noyaux Aparapi pour mettre à jour les positions des particules. particules, ce qui prend 10 millisecondes(16k * 16k interactions pour (cela ne change rien dans le mode optimisé :( ) Est-ce qu'aparapi peut accéder à ces données optimisées ?
Pour le cas de batchNode.batch();
optimisation, voici à nouveau 1 fps avec des nombres d'objets réduits :
Le nombre d'objets n'est plus que de quelques centaines mais les fps sont toujours à 1 !
Envoyer seulement les positions de la sphère au gpu et le laisser calculer les positions des vertex pourrait être mieux que de calculer les vertex sur le cpu et d'envoyer des données énormes au gpu.
Personne pour vous aider ? J'ai déjà essayé batchNode mais cela n'a pas aidé suffisamment.
Je ne veux pas changer l'api 3d car les gens de jMonkey ont déjà réinventé la roue et je suis satisfait de la situation actuelle. J'essaie juste d'obtenir un peu plus de performances (l'annulation des ombres donne une vitesse de 100 %, mais la qualité est importante aussi !)
Ce programme java deviendra un simulateur de scène d'impact d'astéroïde (il y aura le choix de la taille, de la masse, de la vitesse, de l'angle de l'astéroïde) avec l'algorithme marching-cubes avec LOD (il y aura des millions de particules).
L'algorithme Marching-cubes diminuerait considérablement le nombre de triangles. Si vous ne pouvez pas répondre à la question, tout algorithme de marching-cubes (ou tout algorithme de coque convexe O(n)) pour java sera accepté ! Données : tableaux x, y, z comme source et tableau de bandes triangulaires comme cible (points de maillage d'iso-surface).
Merci.
Voici quelques échantillons du flux (avec une résolution beaucoup plus faible) :
1) Effondrement d'un groupe de roches en forme de cube par gravitation :
2) La force d'exclusion commence à se manifester :
3) La force d'exclusion et la gravitation donnent au groupe une forme plus lisse :
4)Le groupe forme une sphère (comme prévu) :
5)Puis, un grand corps stellaire s'approche :
6)Sur le point de toucher :
7) Le moment de l'impact :
Avec l'aide de l'algorithme de Barnes-Hutt et un potentiel tronqué, le nombre de particules sera 10x(peut-être 100x) plus élevé.
Plutôt que l'algorithme Marching-Cubes, un tissu fantôme qui enveloppe le corps humain peut donner une coque à basse résolution (plus facile que BH mais nécessitant plus de calculs).
Le tissu fantôme sera affecté par nbody (gravité + exclusion) mais nbody ne sera pas affecté par le tissu qui l'enveloppe. Nbody ne sera pas rendu mais le tissu sera rendu avec un nombre de triangles inférieur.
Si MC ou plus fonctionne, cela permettra au programme de rendre une toile d'emballage pour ~200x plus de particules.