# SSBO Editor Component Usage Guide This directory contains a modular SSBO Scene Editor component for Panda3D RenderPipeline. ## 📁 File Structure - `ssbo_editor.py`: Main component class `SSBOEditor`. Handles ImGui, RP integration, and input. - `ssbo_controller.py`: Core logic for object ID baking and SSBO matrix packing. - `effects/ssbo_instancing.yaml`: The custom shader effect for RenderPipeline (includes Normal Matrix fix). - `demo_component.py`: Example usage script. ## 🚀 How to Integrate ### 1. Prerequisites Ensure your project has: - `RenderPipeline` setup - `imgui_bundle` and `p3dimgui` installed - `panda3d` (version 1.10.15+) ### 2. Basic Setup (See demo_component.py) ```python from direct.showbase.ShowBase import ShowBase from rpcore import RenderPipeline from ssbo_component.ssbo_editor import SSBOEditor class MyApp(ShowBase): def __init__(self): # 1. Initialize RP self.rp = RenderPipeline() self.rp.pre_showbase_init() super().__init__() self.rp.create(self) # 2. Add SSBO Component # Pass your ShowBase instance (self), the RP instance (self.rp), and your model path self.editor = SSBOEditor( base_app=self, render_pipeline=self.rp, model_path="path/to/your/model.glb", font_path="path/to/chinese/font.ttc" # Optional ) app = MyApp() app.run() ``` ### 3. Key Features - **SSBO Instancing**: Efficiently renders thousands of objects using hardware instancing. - **Normal Correction**: Default shaders are patched to correctly handle non-uniform scaling (Inverse Transpose Normal Matrix). - **ImGui Editor**: Built-in scene tree browsing, search, and selection. - **Object Manipulation**: Select and move objects (Arrows + Z/X keys). - **Shadow Integration**: Correctly injects SSBO data into RP shadow passes. - **Motion Blur Support**: Computes per-object velocity for correct motion blur. ### 4. Notes - **Model Preparation**: The input model should have a clear hierarchy. The component will flatten it but preserve logical objects for selection. - **Effects Path**: The `ssbo_instancing.yaml` is loaded relative to the `ssbo_editor.py` file, so the directory structure inside `ssbo_component` should be preserved. - **GPU Picking**: Basic GPU picking is implemented using shaders in `ssbo_component/shaders/`. These are loaded automatically relative to the component path. ## ⚠️ Important for RenderPipeline If you encounter `ImportError: No module named 'rplibs.six.moves'`, ensure you apply the compatibility fix at the start of your main script (as seen in `demo_component.py`).