Skip to content

Wip/streaming back#35

Merged
AyakorK merged 6 commits intodevelopfrom
wip/streaming_back
Oct 26, 2024
Merged

Wip/streaming back#35
AyakorK merged 6 commits intodevelopfrom
wip/streaming_back

Conversation

@Thomlam
Copy link
Copy Markdown
Contributor

@Thomlam Thomlam commented Oct 26, 2024

Summary by CodeRabbit

  • Nouvelles Fonctionnalités

    • Ajout d'un nouveau prefab pour un système de streaming avec une caméra intégrée.
    • Introduction d'une classe pour capturer des images à partir d'une caméra et les envoyer via Socket.IO.
  • Modifications

    • Mise à jour des paramètres de rendu et d'éclairage dans la scène EmptyRoom_2.
    • Ajout de nouveaux composants, y compris une caméra et un écouteur audio, dans la scène EmptyRoom_2.
  • Fichiers de Métadonnées

    • Création de nouveaux fichiers de métadonnées pour les assets Camera.meta et StreamingSystem.prefab.meta.

@Thomlam Thomlam self-assigned this Oct 26, 2024
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Oct 26, 2024

Walkthrough

Cette demande de tirage introduit plusieurs fichiers et modifications dans un projet Unity. Un nouveau fichier de métadonnées pour le prefab de caméra a été créé, ainsi qu'un prefab pour un système de streaming, comprenant des objets de jeu et des composants associés. Des modifications ont également été apportées à une scène existante, mettant à jour divers paramètres de rendu et d'objets. Enfin, un nouveau script a été ajouté pour capturer des images à partir d'une caméra de rendu et les envoyer via une connexion Socket.IO.

Changes

Fichiers Résumé des changements
Assets/Prefabs/Camera.meta Nouveau fichier de métadonnées créé, spécifiant la version et un GUID pour l'actif.
Assets/Prefabs/Camera/StreamingSystem.prefab Nouveau prefab créé, incluant RenderStreamingSystem et RenderCamera, avec des composants et propriétés définis.
Assets/Prefabs/Camera/StreamingSystem.prefab.meta Nouveau fichier de métadonnées pour le prefab, spécifiant la version et un GUID.
Assets/Scenes/EmptyRoom_2.unity Modifications significatives des paramètres de rendu, d'occlusion, et ajout de nouveaux composants comme Camera et AudioListener.
Assets/Scripts/Camera Control/RenderCameraCapture.cs Nouveau script pour capturer des images de la caméra de rendu et les envoyer via Socket.IO.
Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta Nouveau fichier de métadonnées pour le script, spécifiant la version et un GUID.

Possibly related PRs

Suggested reviewers

  • AyakorK

🐰 Dans le monde des pixels et des lumières,
Une caméra capture, sans aucun déplaisir.
Un système de streaming, tout en douceur,
Envoie des images, avec tant de ferveur.
Dans la pièce vide, tout prend vie,
Grâce à nos changements, quel bel esprit ! 🌟


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@Thomlam Thomlam requested a review from AyakorK October 26, 2024 15:36
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (1)
Assets/Scripts/Camera Control/RenderCameraCapture.cs (1)

14-14: Le champ frameIndex est déclaré static

Le champ frameIndex est déclaré static, ce qui signifie qu'il est partagé entre toutes les instances de RenderCameraCapture. Si plusieurs instances de cette classe sont utilisées, elles partageront le même compteur de frames. Est-ce le comportement souhaité ? Sinon, envisagez de le déclarer sans le modificateur static.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 19f64b6 and da530c6.

📒 Files selected for processing (6)
  • Assets/Prefabs/Camera.meta (1 hunks)
  • Assets/Prefabs/Camera/StreamingSystem.prefab (1 hunks)
  • Assets/Prefabs/Camera/StreamingSystem.prefab.meta (1 hunks)
  • Assets/Scenes/EmptyRoom_2.unity (3 hunks)
  • Assets/Scripts/Camera Control/RenderCameraCapture.cs (1 hunks)
  • Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta (1 hunks)
✅ Files skipped from review due to trivial changes (3)
  • Assets/Prefabs/Camera.meta
  • Assets/Prefabs/Camera/StreamingSystem.prefab.meta
  • Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta
🔇 Additional comments (8)
Assets/Prefabs/Camera/StreamingSystem.prefab (4)

113-115: Vérifier les paramètres de la caméra de rendu

Les plans de découpage (near: 0.2, far: 10) semblent très restrictifs pour une caméra de streaming. Cela pourrait limiter la visibilité des objets distants.

Considérez d'ajuster :

  • near clip plane: 0.1
  • far clip plane: 100
    pour une meilleure visibilité.

201-203: Position de la caméra à vérifier

La position initiale (4.4, 3.8, -10) semble arbitraire. Assurez-vous que cette position offre une vue appropriée de la scène à streamer.

Considérez de :

  1. Documenter pourquoi cette position spécifique a été choisie
  2. Ajouter des commentaires sur la zone de visualisation attendue

119-121: Vérifier le masque de culling

Le masque de culling est défini à 87 (bits: 0b1010111). Assurez-vous que cela correspond aux layers nécessaires pour le streaming.

#!/bin/bash
# Rechercher d'autres utilisations du même masque
rg "m_Bits: 87" -A 2 -B 2

47-48: Référence de caméra principale manquante

La référence mainCamera n'est pas assignée, ce qui pourrait causer des problèmes lors de l'exécution si le script en dépend.

✅ Verification successful

Let me gather more information about the mainCamera usage in the codebase.


La référence manquante de mainCamera est attendue

La référence non assignée de mainCamera dans le prefab StreamingSystem est normale et ne pose pas de problème. Le script RenderCameraCapture utilise cette référence pour synchroniser la position et la rotation de la caméra de rendu avec la caméra principale, qui sera assignée dynamiquement lors de l'exécution. Cette configuration est cohérente avec l'architecture du système de streaming.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Vérifier si le script utilise mainCamera
ast-grep --pattern 'mainCamera'

Length of output: 645


Script:

#!/bin/bash
# Search for mainCamera references in C# scripts
rg "mainCamera" -t cs -A 3 -B 3

Length of output: 5937

Assets/Scenes/EmptyRoom_2.unity (3)

922-926: ⚠️ Potential issue

Vérification requise pour le composant Camera marqué comme 'stripped'.

Le composant Camera ajouté aux lignes 922-926 est indiqué comme 'stripped', ce qui peut signifier que les données du composant sont manquantes ou corrompues. Cela peut entraîner des problèmes lors de l'exécution du jeu. Veuillez vérifier que le composant Camera est correctement ajouté et configuré dans la scène.


985-991: ⚠️ Potential issue

Évitez d'avoir plusieurs AudioListeners actifs dans la scène.

Aux lignes 985-991, un composant AudioListener a été ajouté. En Unity, il est recommandé de n'avoir qu'un seul AudioListener actif par scène pour éviter des conflits audio ou des avertissements. Veuillez vous assurer qu'il n'y a qu'un seul AudioListener actif dans la scène.


993-994: Vérifiez les paramètres du Culling Mask du composant Camera.

Le Culling Mask est défini sur 4294967295 aux lignes 993-994, ce qui signifie que la caméra rendra toutes les couches. Cela peut avoir un impact sur les performances si des couches inutiles sont rendues. Veuillez confirmer si c'est l'effet recherché ou ajuster le Culling Mask pour inclure uniquement les couches nécessaires.

Exécutez le script suivant pour lister les valeurs de Culling Mask de toutes les caméras du projet :

Assets/Scripts/Camera Control/RenderCameraCapture.cs (1)

28-51: Synchronisation des caméras et capture des frames dans la méthode Update()

La méthode Update() synchronise les transformations des caméras et gère la capture des frames. Cependant, si mainCamera ou renderCamera sont nulles, cela pourrait entraîner des exceptions. Assurez-vous que ces caméras sont toujours assignées ou ajoutez une gestion pour le cas où elles ne le seraient pas.

Comment on lines +126 to +132
m_HDR: 1
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 0
m_StereoConvergence: 10
m_StereoSeparation: 0.022
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Configuration de rendu à optimiser

Plusieurs paramètres de rendu pourraient être optimisés pour le streaming :

  • HDR activé mais MSAA désactivé
  • Pas d'occlusion culling

Suggestions pour le streaming en temps réel :

  1. Désactiver HDR si non nécessaire
  2. Activer l'occlusion culling pour de meilleures performances
  3. Considérer l'activation du MSAA pour une meilleure qualité visuelle

private RenderTexture renderTexture;
private Texture2D texture;
private float timeSinceLastCapture = 0f;
private float captureInterval = 0f;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

captureInterval est initialisé à zéro, entraînant une capture à chaque frame

Le champ captureInterval est initialisé à 0f, ce qui fait que la condition timeSinceLastCapture >= captureInterval est toujours vraie dans la méthode Update(). Cela entraîne une capture à chaque frame, ce qui peut affecter les performances. Voulez-vous définir un intervalle spécifique entre les captures ? Si oui, pensez à initialiser captureInterval avec une valeur supérieure à zéro ou à le rendre configurable via l'Inspector.

Comment on lines +17 to +26
async void Start()
{
int width = 1280;
int height = 720;

renderTexture = new RenderTexture(width, height, 24);
renderCamera.targetTexture = renderTexture;
texture = new Texture2D(width, height, TextureFormat.RGB24, false);
socket = SocketManager.Instance.ClientSocket;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Absence de gestion des exceptions dans la méthode Start()

La méthode Start() effectue des initialisations importantes, mais aucune gestion des exceptions n'est présente. Si une erreur survient lors de l'initialisation du socket ou des textures, cela pourrait entraîner des problèmes silencieux. Envisagez d'ajouter un bloc try-catch pour gérer d'éventuelles exceptions et informer l'utilisateur en cas d'échec.

Comment on lines +53 to +62
async void SendFrameToSocketIO()
{
if (socket != null && socket.Connected)
{
Debug.Log("Sending frame " + frameIndex);
byte[] imageBytes = texture.EncodeToJPG();
string base64Image = System.Convert.ToBase64String(imageBytes);
await socket.EmitAsync("camera:request", base64Image);
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Utilisation de async void pour les méthodes asynchrones

Les méthodes SendFrameToSocketIO() et OnDestroy() sont déclarées en tant que async void. Il est généralement recommandé d'utiliser async Task pour les méthodes asynchrones afin de permettre une meilleure gestion des exceptions et d'éviter les problèmes liés aux méthodes asynchrones non attendues.

Comment on lines +57 to +60
Debug.Log("Sending frame " + frameIndex);
byte[] imageBytes = texture.EncodeToJPG();
string base64Image = System.Convert.ToBase64String(imageBytes);
await socket.EmitAsync("camera:request", base64Image);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Impact sur les performances dû à l'encodage JPEG et la conversion Base64

La méthode SendFrameToSocketIO() encode l'image en JPEG puis la convertit en chaîne Base64 à chaque envoi. Ces opérations sont coûteuses en termes de performances et peuvent entraîner des pics de mémoire, surtout si les captures sont fréquentes. Envisagez d'optimiser ce processus en réduisant la fréquence des captures, en utilisant un format d'image moins gourmand, ou en mettant en place une file d'attente pour les envois afin de lisser la charge.

Comment on lines +55 to +61
if (socket != null && socket.Connected)
{
Debug.Log("Sending frame " + frameIndex);
byte[] imageBytes = texture.EncodeToJPG();
string base64Image = System.Convert.ToBase64String(imageBytes);
await socket.EmitAsync("camera:request", base64Image);
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Absence de gestion des exceptions lors de l'envoi des données via le socket

Actuellement, aucune gestion des exceptions n'est mise en place lors de l'émission des données avec socket.EmitAsync(). Si une erreur réseau survient, cela pourrait provoquer des exceptions non gérées. Il serait judicieux d'ajouter un bloc try-catch pour capturer et gérer ces exceptions, garantissant ainsi la stabilité de l'application.

@AyakorK AyakorK merged commit da23367 into develop Oct 26, 2024
@AyakorK AyakorK deleted the wip/streaming_back branch October 26, 2024 18:26
AyakorK added a commit that referenced this pull request Oct 27, 2024
* Chore/shadering map (#24)

* technical : add shadering and post-traitement system, adapt asset and sprite for using this

* feat: update Room2

* feat: Link the chat to the back sockets (#25)

* feat: Link chat to backend (#26)

* feat: Link the chat to the back sockets

* fix: Move the dialogue script outside the canvas to avoid it to be disabled while the canvas is going to be disabled

* fix: remove dual camera

* fix: fix crossbow system (#27)

* fix: add request to back (room name)

* fix: Revert trap manager

* hotfix: Fix things that weren't working

* feat: RPS (#29)

* feat : add multiple option and itemscollider for RockPaperCissor

* feat: Link Rock Paper Scissors to backend socket

* feat: Link RockPaperScissors, but display missing

---------

Co-authored-by: Thomas Lamiable <lamiablethomas@gmail.com>

* hotfix: Change RPS size to match the screen

* fix: fix Crossbow up sprite and arrow system, change color pixel dead font

* chore: change EmptyRoom2

* feat: add death system (#30)

* feat: add death system

* chore: add socket emiter for end game

* fix: fix heart generator if develop don't have socket

* fix: remove crossbow

* feature: add audio system and fix crossbow with sound (#32)

Co-authored-by: Guillaume MORET <90462045+AyakorK@users.noreply.github.com>

* chore: Fix env for windows (#31)

* feat: add death system

* chore: add socket emiter for end game

* fix: fix heart generator if develop don't have socket

* fix: remove crossbow

* chore: try to fix .env for Windows and Unity

* fix: Quick Fix in production

* fix: QuickFx PlayerHealth fail merge

* Fix: fix Room

* feat: Adapt Waiting Room (#33)

* feat: Instantiate waiting room when arriving in the corridor 0

* fix: Add a flag to change message one time and avoid repetition of it

* feat: Add the creation of the room when instanciating the WaitingRoom process

* feat: Try to remove the Door collider before game has started

* fix: fix lock and door system, add waiting room, last fix for dialogue system for pity

---------

Co-authored-by: Thomlam <lamiablethomas@gmail.com>

* fix: rename bear_trap to prefab

* fix: quick fix prefab room for crossbow

* fix: quickfix for bear_trap

* feat: Add room deletion when disconnection from a game

* Wip/streaming back (#35)

* feat: add streaming system with recording and sending frame jpeg

* feat: add config

* feat: first try to add socketIOSystem

* feat: Add the right socket

* feature : deploy for 60fps

---------

Co-authored-by: AyakorK <guillaume.moret@yahoo.com>

* hotfix: Get rid of a Debug

* fix: fix arrows component and stade 24 fps to streaming

* fix: Global rendering fixes (#36)

* fix: Update corridor displays + additions of colliders to avoid glitching

* fix: Add a door transition lock

* feat: Add collision to the walls in the room

* fix: Fix collisions of the hole

* fix: Fix glitched hitboxes

* fix: Destory arrows when going to an other room

---------

Co-authored-by: Guillaume MORET <90462045+AyakorK@users.noreply.github.com>
Co-authored-by: AyakorK <guillaume.moret@yahoo.com>
@coderabbitai coderabbitai Bot mentioned this pull request Oct 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants