Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
latence_de_l_osc_dans_blender [2018/07/19 09:45]
serge créée
latence_de_l_osc_dans_blender [2019/03/03 09:43] (Version actuelle)
serge [Ressources]
Ligne 3: Ligne 3:
 ===== Définition:​ Wikipedia EN ===== ===== Définition:​ Wikipedia EN =====
  
-Le [[http://​en.wikipedia.org/​wiki/​User_Datagram_Protocol#​Packet_structure|buffer UDP]] est adressé en 16 bits. 2 puissance 16 = 65536 bits soit 8192 octets. Quelques octets sont occupés par des datas d'​identification. Par exemple, une image 80 x 80 pixels avec un entier court entre 0 et 99 comme variable occupe 80 x 80 x 2 x 4 bits = 51200 bits. Le maxi serait 65000 / 2 x 4 = 8125 pixels soit 90 x 90 = 8100 pixels ! Avec 2 entiers courts possible sur chaque pixel ( ce n'est pas une image en couleurs ).+Le [[http://​en.wikipedia.org/​wiki/​User_Datagram_Protocol#​Packet_structure|buffer UDP sur en.wikipedia]] est adressé en 16 bits. 2 puissance 16 = 65536 bits soit 8192 octets. Quelques octets sont occupés par des datas d'​identification. Par exemple, une image 80 x 80 pixels avec un entier court entre 0 et 99 comme variable occupe 80 x 80 x 2 x 4 bits = 51200 bits. Le maxi serait 65000 / 2 x 4 = 8125 pixels soit 90 x 90 = 8100 pixels ! Avec 2 entiers courts possible sur chaque pixel ( ce n'est pas une image en couleurs ).
  
 ===== Description du symptôme ===== ===== Description du symptôme =====
Ligne 19: Ligne 19:
 En anglais, c'est une Queue LIFO : Last In First Out {{:Lifo queue.png?​300|fig:​Lifo queue.png}} En anglais, c'est une Queue LIFO : Last In First Out {{:Lifo queue.png?​300|fig:​Lifo queue.png}}
  
-=== Latence normale des programmes et des dispositifs === 
- 
-Par exemple, [[Kinect_dans_le_Blender_Game_Engine#​Les_conseils_de_Microsoft|Microsoft]] annonce une latence de 130 ms avec la Kinect. 
  
 ===== Explications : Le Blender Game Engine pulse ===== ===== Explications : Le Blender Game Engine pulse =====
Ligne 29: Ligne 26:
 Le test ci-dessous montre des compteurs avec des valeurs de pulse de 0, 1 et 2. Le test ci-dessous montre des compteurs avec des valeurs de pulse de 0, 1 et 2.
  
-Blender tourne à 60 fps: {{:Pulse 1.png?​300|fig:​Pulse 1.png}} +Blender tourne ​au maximum ​à 60 fps: {{:Pulse 1.png?​300|fig:​Pulse 1.png}}
- +
-Les briques logiques: {{:Pulse 2.png?​800|fig:​Pulse 2.png}}+
  
-En mode "​Pulse",​ f définit le nombre de frames pendant lesquels la sortie n'est pas activée. Le tableau ci-dessous donne les fréquences et périodes, si le Blender Game Engine est à 60 fps. 
  
 ===== Des solutions ===== ===== Des solutions =====
Ligne 39: Ligne 33:
 === 1 - Solution avec une initialisation de la connexion à chaque pulsation dans Blender === === 1 - Solution avec une initialisation de la connexion à chaque pulsation dans Blender ===
  
-Si la connexion est réinitialisée à chaque pulsation de Blender, cela vide le Buffer. Mais Pure Data se déconnecte avec cette solution, cela marche avec OSCeleton et le [[Manette_wii_dans_Blender|wiiOSC]] de [[http://​www.selectparks.net/​modules.php?​name=News&​file=article&​sid=628|Julian]].+Si la connexion est réinitialisée à chaque pulsation de Blender, cela vide le Buffer. Mais Pure Data se déconnecte avec cette solution, cela marche avec OSCeleton et le wiiOSC de [[http://​www.selectparks.net/​modules.php?​name=News&​file=article&​sid=628|Julian]].
  
 === 2 - Solution simple : fréquence d'​envoi < fréquence de réception === === 2 - Solution simple : fréquence d'​envoi < fréquence de réception ===
Ligne 45: Ligne 39:
 Le tableau ci-dessous donne les fréquences et périodes dans Blender et Pure Data. Le tableau ci-dessous donne les fréquences et périodes dans Blender et Pure Data.
  
-{{:Pulse 3.png|Pulse 3.png Pulse 3.png}}+{{Pulse 3.png|Pulse 3.png}}
  
 La solution la plus rationnelle est de régler la fréquence d' envoi plus basse que la fréquence de réception dans Blender, idem est régler le "​timer"​ dans pure data à une valeur supérieure à la période dans Blender. Le tableau ci-dessus donne la période en fonction du "Pulse Mode" si Blender est à 60 "​fps"​! Bourrer Blender ne le fera pas aller plus vite ! La solution la plus rationnelle est de régler la fréquence d' envoi plus basse que la fréquence de réception dans Blender, idem est régler le "​timer"​ dans pure data à une valeur supérieure à la période dans Blender. Le tableau ci-dessus donne la période en fonction du "Pulse Mode" si Blender est à 60 "​fps"​! Bourrer Blender ne le fera pas aller plus vite !
Ligne 51: Ligne 45:
 Régler le "​Pulse"​ à 0 sur tous les Actuators peut sembler efficace, mais cela va probablement faire chuter le "​fps"​ de Blender, si le jeu est un peu lourd. Régler le "​Pulse"​ à 0 sur tous les Actuators peut sembler efficace, mais cela va probablement faire chuter le "​fps"​ de Blender, si le jeu est un peu lourd.
  
-=== 3 - Définir la taille du Buffer UDP ===+=== 3 - Définir la taille du Buffer UDP: la meilleure solution !===
  
   GameLogic.socket.setsockopt(socket.SOL_SOCKET,​ socket.SO_RCVBUF,​ 1024)   GameLogic.socket.setsockopt(socket.SOL_SOCKET,​ socket.SO_RCVBUF,​ 1024)
  
-Ce {{:OSC buffer mini 2.49.zip|fig:OSC buffer mini 2.49.zip}} utilise cette option, si elle est commentée le cube est en retard.+Ce {{OSC buffer mini 2.49.zip| OSC buffer mini 2.49.zip}} utilise cette option, si elle est commentée le cube est en retard.
  
 === 4 - Vider le buffer si il contient plus de 1 valeur === === 4 - Vider le buffer si il contient plus de 1 valeur ===
  
-C'est la méthode proposée par dfelinto. Ce script a été testé avec un patch avec un timer de 10 ms. Sans vider le buffer, la latence est de 15 secondes, avec ce script il n' ya plus de latence. Bien sûr ce script peut sans doute être amélioré.+C'est la méthode proposée par [[https://​developer.blender.org/​p/​dfelinto/​|dfelinto]]. Ce script a été testé avec un patch avec un timer de 10 ms. Sans vider le buffer, la latence est de 15 secondes, avec ce script il n' ya plus de latence. ​
  
 +**Cette solution est lourde: Définir la taille du Buffer UDP est bien plus éléguante**
 <code python> <code python>
  
Ligne 114: Ligne 109:
         GameLogic.handWii = OSC.decodeOSC(data)         GameLogic.handWii = OSC.decodeOSC(data)
 </​code>​ </​code>​
 +
 === 5 - Définir la taille du Buffer UDP avec Pure Data === === 5 - Définir la taille du Buffer UDP avec Pure Data ===
  
-{{:Osc 08.png|Osc 08.png ​Osc 08.png}}+{{Osc 08.png|Osc 08.png}}
  
 bufsize 1024 sur packOSC définit la taille du buffer. bufsize 1024 sur packOSC définit la taille du buffer.
Ligne 126: Ligne 122:
 ===== Ressources ===== ===== Ressources =====
  
-  * http://​blenderartists.org/​forum/​showthread.php?​152785-BGE-Python-OSC-Performance-issues +  * [[http://​blenderartists.org/​forum/​showthread.php?​152785-BGE-Python-OSC-Performance-issues|OSC-Performance sur blenderartists]] 
-  * http://​ubuntuforums.org/​showthread.php?​t=1757909+  * [[http://​ubuntuforums.org/​showthread.php?​t=1757909|ubuntuforums.org]]
  
 +{{tag>​logiciels_de_communication sb blender}}
  • latence_de_l_osc_dans_blender.1531986352.txt.gz
  • Dernière modification: 2018/07/19 09:45
  • par serge