AgentSkillsCN

vtj-debug-panel

为3D组件配置Tweakpane调试面板。在添加调试控件、实时监控组件状态,或通过该工具即时调整参数时使用此功能。

SKILL.md
--- frontmatter
name: vtj-debug-panel
description: Configures Tweakpane debug panels for 3D components. Use when adding debug controls, monitoring component state, or adjusting parameters in real-time via the #debug interface.

vite-threejs Debug Panel (Tweakpane)

Overview

Creates real-time parameter adjustment panels using Tweakpane. Activated via #debug URL hash.

Core principles:

  • Every tunable parameter gets a control
  • Colors must use view: 'color'
  • Group panels hierarchically (max 3 levels)

Quick Start

javascript
constructor() {
  this.experience = new Experience()
  this.debug = this.experience.debug
  
  this.params = { intensity: 1.0, color: '#ffffff' }
  
  if (this.debug.active) {
    this.debugInit()
  }
}

debugInit() {
  this.debugFolder = this.debug.ui.addFolder({
    title: 'Component Name',
    expanded: false,
  })
  
  this.debugFolder.addBinding(this.params, 'intensity', {
    min: 0, max: 10, step: 0.1,
  })
}

When to Use

  • Creating new 3D components
  • Adding ShaderMaterial uniform controls
  • Monitoring runtime state
  • Adding action buttons

Control Types

TypeKey Config
Numbermin, max, step
Colorview: 'color' (required)
3D Pointview: 'point3d'
BooleanNo extra config
Selectoptions: { label: value }
ButtonaddButton({ title })

Detailed examples: See references/controls.md

ShaderMaterial Integration

All ShaderMaterial uniforms must have debug controls:

javascript
folder.addBinding(this.params, 'color', { view: 'color' })
  .on('change', (ev) => {
    this.material.uniforms.uColor.value.set(ev.value)
  })

Full patterns: See references/shader-debug.md

Common Mistakes

  • ❌ Colors without view: 'color'
  • ❌ Direct this.debug.ui extraction
  • ❌ Calling debugInit() without checking debug.active
  • ❌ Nesting deeper than 3 levels
  • ❌ All panels expanded by default

Complete error catalog: See references/common-mistakes.md

Quick Reference

NeedCode
Access debugthis.debug = this.experience.debug
Check activeif (this.debug.active)
Create folderthis.debug.ui.addFolder({ title })
Bind parameterfolder.addBinding(params, 'key', options)
Handle change.on('change', callback)
Method namedebugInit()

Advanced patterns: See references/advanced-patterns.md