|
| 1 | +--- |
| 2 | +title: "GSoC ’25 Week 06 Update by Aditya Kumar Singh" |
| 3 | +excerpt: "Model optimizations, onboarding tutorial, adding json for body parts, and Shared mode enhancements in Paint Mode for the 3D Human Activity in Sugarizer." |
| 4 | +category: "DEVELOPER NEWS" |
| 5 | +date: "2025-06-20" |
| 6 | +slug: "2025-06-20-gsoc-25-AdityaKrSingh26-week06" |
| 7 | +author: "@/constants/MarkdownFiles/authors/aditya-singh.md" |
| 8 | +tags: "gsoc25,sugarlabs,week06,AdityaKrSingh26" |
| 9 | +image: "assets/Images/GSOC.png" |
| 10 | +--- |
| 11 | + |
| 12 | +<!-- markdownlint-disable --> |
| 13 | + |
| 14 | +# Week 06 Progress Report by Aditya Kumar Singh |
| 15 | + |
| 16 | +**Project:** [Sugarizer](https://github.com/llaske/sugarizer) |
| 17 | +**Mentors:** [Lionel Laské](https://github.com/llaske) |
| 18 | +**Assisting Mentors:** [Samarth Bagga](https://github.com/SamarthBagga) |
| 19 | +**Reporting Period:** 2025-05-12 - 2025-06-18 |
| 20 | + |
| 21 | +--- |
| 22 | + |
| 23 | +## Goals for This Week |
| 24 | + |
| 25 | +- **Goal 1:** Optimize organ model to reduce file size and improve performance. |
| 26 | +- **Goal 2:** Add a onboarding tutorial for users. |
| 27 | +- **Goal 3:** Improve organ model proportions (eye-mouth distance). |
| 28 | +- **Goal 4:** Create and integrate `.json` file for body parts and organs. |
| 29 | +- **Goal 5:** Enhancing shared mode logic for **Paint Mode**. |
| 30 | + |
| 31 | +--- |
| 32 | + |
| 33 | +## This Week’s Achievements |
| 34 | + |
| 35 | +1. ***Organ Model Optimization** |
| 36 | + - Reduced the organ model size from **19MB to 5.92MB** by applying **Merge Vertices by Distance** and **Mesh Decimation** in Blender. |
| 37 | + - These steps simplified mesh geometry while retaining anatomical accuracy. |
| 38 | + - Resulted in faster loading on low-end devices and web platforms without compromising visual quality. |
| 39 | + |
| 40 | +2. **Onboarding Tutorial Integration** |
| 41 | + - Implemented an interactive onboarding experience using the **Intro.js** library, following Sugarizer's developer tutorial guidelines. |
| 42 | + - Integrated a custom help button in the toolbar (`help.svg`) to trigger the tutorial on demand. |
| 43 | + - Defined tutorial steps in a dedicated `tutorial.js` module using `introJs().setOptions()` to guide users through the UI. |
| 44 | + - Customized the UI using Sugarizer-themed CSS classes for a consistent visual style. |
| 45 | + - Enabled full localization support using `l10n.get()` to adapt tutorial text based on the user’s language settings. |
| 46 | +  |
| 47 | +  |
| 48 | + |
| 49 | + |
| 50 | +3. **Body Parts Metadata via JSON** |
| 51 | + - Introduced a new `.json` file structure to define: |
| 52 | + - **Name** |
| 53 | + - **Mesh name** |
| 54 | + - **Position (x, y, z)** |
| 55 | + - Enables simpler mapping between UI and 3D model meshes. |
| 56 | + - Supports future work on localization, click handling, and performance enhancements. |
| 57 | + ```json |
| 58 | + { |
| 59 | + { "name": "Hair", "mesh": "Hair_mesh", "position": [-0.01, 7.03, -0.32] }, |
| 60 | + { "name": "LeftEyebrow", "mesh": "Mesh0207_1", "position": [0.06, 6.69, 0.63] }, |
| 61 | + { "name": "RightEyebrow", "mesh": "Mesh0207_3", "position": [0.06, 6.69, 0.63] }, |
| 62 | + { "name": "Left Ear", "mesh": "leftear_mesh", "position": [0.62, 6.42, -0.13] }, |
| 63 | + { "name": "Right Ear", "mesh": "righear_mesh", "position": [-0.53, 6.4, -0.13] }, |
| 64 | + { "name": "Face", "mesh": "Face_mesh", "position": [0.05, 6.35, 0.36] }, |
| 65 | + { "name": "Neck", "mesh": "Neck_mesh", "position": [0.04, 5.54, -0.23] }, |
| 66 | + { "name": "Chest", "mesh": "Chest_mesh", "position": [0.04, 4.55, 0.11] }, |
| 67 | + { "name": "Back", "mesh": "back_mesh", "position": [0.04, 3.78, -0.83] }, |
| 68 | + { "name": "Stomach", "mesh": "stomach_mesh", "position": [0.04, 2.41, 0.2] }, |
| 69 | + ... |
| 70 | + } |
| 71 | + |
| 72 | + |
| 73 | +4. **Shared Mode enhancements for Paint Mode** |
| 74 | + - **Model sync:** when any participant switches to a different anatomical model, the client now emits a `switchModel` event; all connected users load the same model instantly. |
| 75 | + - **Shared painting:** a `paintPart` broadcast (object name, color, body-part name, painter ID) lets everyone see the newly painted part in real time. A modal on each peer shows **“<user> painted: <part>”** for clear attribution. |
| 76 | +  |
| 77 | + |
| 78 | + |
| 79 | +--- |
| 80 | + |
| 81 | +## Challenges & How I Overcame Them |
| 82 | + |
| 83 | +- **Challenge:** Displaying context-aware feedback for painting actions without breaking UX flow. |
| 84 | + **Solution:** Built a shared modal system that shows **“User X painted: Part Y”** without interrupting interactions. Ensured consistent color application using hex values and mesh IDs. |
| 85 | + |
| 86 | +- **Challenge:** Keeping the tutorial visually aligned with Sugarizer UI guidelines while supporting localization. |
| 87 | + **Solution:** Customized Intro.js with Sugarizer-style buttons, icons, and tooltips. Integrated `l10n.get()` to provide multilingual support across tooltips, button labels, and descriptions. |
| 88 | + |
| 89 | + |
| 90 | +--- |
| 91 | + |
| 92 | +## Key Learnings |
| 93 | + |
| 94 | +- Gained practical experience in implementing **real-time collaboration** using socket-based event broadcasting for 3D interactions. |
| 95 | +- Learned how to **synchronize complex state changes** (like model switching, paint actions, and UI mode transitions) across multiple clients in a shared environment. |
| 96 | +- Deepened understanding of **modular and scalable architecture** by separating shared logic into dedicated handlers and avoiding code duplication. |
| 97 | + |
| 98 | +--- |
| 99 | + |
| 100 | +## Next Week’s Roadmap |
| 101 | + |
| 102 | +- Write Weekly Blog Post summarizing progress, screenshots, and key learnings. |
| 103 | +- Reduce file size of the organ model to improve load time and performance across devices (optimize meshes, reduce texture resolution). |
| 104 | +- Add an onboarding tutorial for users |
| 105 | +- Create and integrate .json files containing metadata (name, position, mesh reference) for body parts and organs to simplify mesh mapping and future i18n support. |
| 106 | +- Begin developing shared logic for **Paint Mode** and **Tour Mode**. |
| 107 | + |
| 108 | +--- |
| 109 | + |
| 110 | +## Acknowledgments |
| 111 | + |
| 112 | +Thank you to my mentors, the Sugar Labs community, and fellow GSoC contributors for ongoing support. |
| 113 | + |
| 114 | +--- |
0 commit comments