| .. | ||
| backup_merge_20260225_125202 | ||
| effects | ||
| shaders | ||
| demo_component.py | ||
| README.md | ||
| ssbo_controller.py | ||
| ssbo_editor.py | ||
SSBO Editor Component Usage Guide
This directory contains a modular SSBO Scene Editor component for Panda3D RenderPipeline.
📁 File Structure
ssbo_editor.py: Main component classSSBOEditor. 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:
RenderPipelinesetupimgui_bundleandp3dimguiinstalledpanda3d(version 1.10.15+)
2. Basic Setup (See demo_component.py)
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.yamlis loaded relative to thessbo_editor.pyfile, so the directory structure insidessbo_componentshould 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).