EG/ssbo_component
2026-02-28 11:06:14 +08:00
..
backup_merge_20260225_125202 模型父子级关系修复 2026-02-25 15:06:54 +08:00
effects IMGui 2026-02-25 11:49:31 +08:00
shaders IMGui 2026-02-25 11:49:31 +08:00
demo_component.py IMGui 2026-02-25 11:49:31 +08:00
README.md IMGui 2026-02-25 11:49:31 +08:00
ssbo_controller.py 合并更新 2026-02-28 10:49:03 +08:00
ssbo_editor.py Merge remote-tracking branch 'origin/geng' into IMgui_hu 2026-02-28 11:06:14 +08:00

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)

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).