Outils pour utilisateurs

Outils du site


latence_de_l_osc_dans_blender

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édentesRévision précédente
Prochaine révision
Révision précédente
latence_de_l_osc_dans_blender [2018/07/19 07:47] – [Description du symptôme] sergelatence_de_l_osc_dans_blender [2021/04/08 06:01] (Version actuelle) – [Définition: Wikipedia EN] serge
Ligne 1: Ligne 1:
 ======Latence de l' OSC dans Blender====== ======Latence de l' OSC dans Blender======
 +
 +<WRAP center round box 60% centeralign>
 +**[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Flatence_de_l_osc_dans_blender|English Version]]**
 +</WRAP>
 +
 +
  
 ===== 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 15: Ligne 21:
 Si l'envoi de data se fait à une fréquence supérieure à la lecture, le Buffer se remplit et les datas qui sont lues dans ce buffer ne sont pas les dernières envoyées. Si l'envoi de data se fait à une fréquence supérieure à la lecture, le Buffer se remplit et les datas qui sont lues dans ce buffer ne sont pas les dernières envoyées.
  
-C'est un problème de **baignoire, de robinet et d'écoulement**: {{:Osc 05.jpg?300|fig:Osc 05.jpg}} Si le débit de sortie est plus faible que le débit d'entrèe, le niveau monte.+C'est un problème de **baignoire, de robinet et d'écoulement**: {{media_10:osc_05.jpg?300|fig:Osc 05.jpg}} Si le débit de sortie est plus faible que le débit d'entrèe, le niveau monte.
  
-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 {{media_08:lifo_queue.png?300|fig:Lifo queue.png}}
  
  
Ligne 26: Ligne 32:
 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: {{media_12: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 36: Ligne 39:
 === 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 42: Ligne 45:
 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}}+{{media_12: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 48: Ligne 51:
 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 {{media_10: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 111: Ligne 115:
         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}}+{{media_10: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 123: Ligne 128:
 ===== 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.txt · Dernière modification : 2021/04/08 06:01 de serge