Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
latence_de_l_osc_dans_blender [2018/07/19 09:50]
serge [Explications : Le Blender Game Engine pulse]
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 39: 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 45: 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 108: 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 120: 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.1531986654.txt.gz
  • Dernière modification: 2018/07/19 09:50
  • par serge