Skip to main content

3dgs-visualizer

Generate publication-quality visualizations for 3DGS research: radar charts, comparison tables, method timelines. Static (PDF/PNG) and interactive (HTML) output.

معلومات المصدر

المستودع
RabbitAI-Lab/rabbit-plugins-upstream
آخر نشاط في المصدر
٢٦ يوليو ٢٠٢٦ في ٢٠:٥٠
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٠
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
4 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
3dgs-visualizer
description
Generate publication-quality visualizations for 3DGS research: radar charts, comparison tables, method timelines. Static (PDF/PNG) and interactive (HTML) output.
version
1.0.2
author
jaccen
tags
["3dgs","gaussian-splatting","visualization","radar-chart","timeline","research"]
# 3DGS Visualizer — Publication-Quality Research Visualizations Generate publication-quality charts for 3DGS method landscape comparison and evolution tracking. ## Capabilities - **Radar Charts**: Multi-dimensional method capability comparison - **Comparison Tables**: Visual performance/efficiency tables with highlighting - **Method Timelines**: Chronological evolution showing trends and paradigm shifts - **Dual Output**: Static (PDF/PNG via matplotlib) and interactive HTML (via plotly) ## Data Sources | File | Content | |------|---------| | `../../references/3dgs-methods-overview.md` | Master index, metrics summary | | `../../references/methods-core.md` | Foundation, Geometry, CAD, Generation, Feed-Forward, Compression, Dynamic | | `../../references/methods-semantic-editing.md` | Semantic, Editing, Avatar, Material methods | | `../../references/methods-systems-apps.md` | Robustness, Driving, SLAM, Simulation, Cross-Domain | | `../../references/baselines.md` | Standard baselines with core metrics | | `../../references/experiments.md` | Dataset configs, efficiency reference values | --- ## Visualization 1: Radar Charts (Method Capability Comparison) **When to use**: Comparing 3–8 methods across multiple dimensions; showing quality/speed/memory trade-offs; use-case recommendation. ### Dimensions | Dimension | Scoring Criteria (0–10) | |-----------|------------------------| | **Render Quality** | 10=SOTA, 7=competitive, 5=acceptable, 3=below baseline | | **Render Speed** | 10=200+ FPS, 7=60–100, 5=30–60, 3=<30 | | **Memory Efficiency** | 10=<50MB, 7=100–500MB, 5=0.5–2GB, 3=>2GB | | **Geometry Quality** | 10=mesh-ready (2DGS/SuGaR), 7=decent depth, 5=approx, 3=poor | | **Scalability** | 10=city-scale, 7=building, 5=room, 3=object-only | | **Ease of Use** | 10=single script, 7=standard pipeline, 5=multi-stage, 3=complex setup | | **Novelty** | 10=paradigm shift, 7=significant extension, 5=incremental, 3=minor tweak | Adjust dimensions by context (compression: add "Compression Ratio"; avatar: add "Expression Fidelity"; SLAM: add "Tracking Accuracy"). ### API ```python OKABE_ITO = ['#E69F00', '#56B4E9', '#009E73', '#F0E442', '#0072B2', '#D55E00', '#CC79A7', '#000000'] # Static (matplotlib) def plot_radar(methods_data, dimensions, title="3DGS Method Comparison", output_path="radar_comparison.pdf", figsize=(8, 8)): """methods_data: {name: [score1, ...]}, dimensions: [label, ...]""" N = len(dimensions) angles = np.linspace(0, 2*np.pi, N, endpoint=False).tolist() angles += angles[:1] fig, ax = plt.subplots(figsize=figsize, subplot_kw=dict(polar=True)) for i, (name, values) in enumerate(methods_data.items()): values = values + values[:1] ax.plot(angles, values, 'o-', linewidth=2, label=name, color=OKABE_ITO[i%8]) ax.fill(angles, values, alpha=0.1, color=OKABE_ITO[i%8]) ax.set_xticks(angles[:-1]); ax.set_xticklabels(dimensions, fontsize=10) ax.set_ylim(0, 10); ax.set_yticks([2,4,6,8,10]) ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1), fontsize=9) ax.grid(color='grey', linewidth=0.3, alpha=0.5) plt.tight_layout() plt.savefig(output_path, dpi=300, bbox_inches='tight', facecolor='white') plt.savefig(output_path.replace('.pdf','.png'), dpi=300, bbox_inches='tight', facecolor='white') plt.close() # Interactive (plotly) def plot_radar_interactive(methods_data, dimensions, title="3DGS Method Comparison", output_path="radar_comparison.html"): fig = go.Figure() for i, (name, values) in enumerate(methods_data.items()): fig.add_trace(go.Scatterpolar( r=values+values[:1], theta=dimensions+dimensions[:1], fill='toself', name=name, line_color=OKABE_ITO[i%8], opacity=0.8)) fig.update_layout(polar=dict(radialaxis=dict(visible=True, range=[0,10])), showlegend=True, title=dict(text=title), width=900, height=700) fig.write_html(output_path) ``` --- ## Visualization 2: Comparison Tables (Visual Performance Tables) **When to use**: Summarizing quantitative results across methods/datasets; paper-ready tables with visual emphasis; efficiency vs quality trade-off. ### Table Types | Type | Description | Best For | |------|-------------|----------| | **A: Quantitative Performance** | Color-coded cells (green=best, blue=second) | Multi-dataset metric comparison | | **B: Efficiency-Quality Scatter** | FPS vs PSNR scatter with category coloring | Speed/quality trade-off analysis | ### API — Type A: Performance Table ```python def plot_comparison_table(data, methods, datasets, metric="PSNR (dB)", higher_is_better=True, output_path="perf_table.pdf"): """data: 2D array [method][dataset]""" fig, ax = plt.subplots(figsize=(len(datasets)*1.8+2, len(methods)*0.6+1)) ax.axis('off') cell_text, cell_colors = [], [] for i in range(len(datasets)): row, row_colors = [], [] col_vals = [data[k][i] for k in range(len(methods))] for j in range(len(methods)): val = data[j][i]; row.append(f"{val:.2f}") is_best = abs(val - (max if higher_is_better else min)(col_vals)) < 0.01 is_second = abs(val - sorted(col_vals, reverse=higher_is_better)[1]) < 0.01 if len(col_vals)>1 else False row_colors.append('#C6EFCE' if is_best else '#BDD7EE' if is_second else '#FFFFFF') cell_text.append(row); cell_colors.append(row_colors) table = ax.table(cellText=cell_text, rowLabels=datasets, colLabels=methods, cellColours=cell_colors, loc='center', cellLoc='center') table.auto_set_font_size(False); table.set_fontsize(10); table.scale(1, 1.8) for j in range(len(methods)): table[0,j].set_facecolor('#4472C4'); table[0,j].set_text_props(color='white', fontweight='bold') ax.set_title(f"{metric} Comparison", fontsize=14, fontweight='bold', pad=20) plt.tight_layout(); plt.savefig(output_path, dpi=300, bbox_inches='tight', facecolor='white') plt.close() ``` ### API — Type B: Efficiency Scatter ```python CATEGORY_COLORS = { 'Foundation': '#0072B2', 'Compression': '#E69F00', 'Feed-Forward': '#009E73', 'Geometry': '#D55E00', 'Dynamic': '#CC79A7', 'Other': '#56B4E9', 'Surface/Geometry': '#D55E00', 'Editing': '#56B4E9', 'Semantic/Language': '#F0E442', 'Avatar/Human': '#994F00', 'SLAM': '#661100', 'Cross-Domain': '#5B5B5B', 'Robustness': '#984EA3', 'Generation': '#4daf4a', 'System/Acceleration': '#377eb8', 'CAD/Mesh': '#ff7f00', } def plot_efficiency_scatter(methods_info, output_path="efficiency_scatter.pdf"): """methods_info: [{name, psnr, fps, category, size}]""" fig, ax = plt.subplots(figsize=(8, 6)) for info in methods_info: color = CATEGORY_COLORS.get(info.get('category','Other'), '#56B4E9') ax.scatter(info['fps'], info['psnr'], s=info.get('size',100), c=color, alpha=0.8, edgecolors='black', linewidth=0.5) ax.annotate(info['name'], (info['fps'], info['psnr']), textcoords="offset points", xytext=(5,5), fontsize=8) ax.set_xlabel('Rendering Speed (FPS)'); ax.set_ylabel('PSNR (dB)') ax.axhline(y=27, color='grey', linestyle='--', alpha=0.3) ax.axvline(x=60, color='grey', linestyle='--', alpha=0.3) ax.spines['top'].set_visible(False); ax.spines['right'].set_visible(False) plt.tight_layout(); plt.savefig(output_path, dpi=300, bbox_inches='tight', facecolor='white') plt.close() # Interactive table (plotly) def plot_interactive_table(data, methods, datasets, metric="PSNR (dB)", output_path="perf_table.html"): fig = go.Figure(data=[go.Table( header=dict(values=[metric]+methods, fill_color='#4472C4', font=dict(color='white', size=12)), cells=dict(values=[[f"{v:.2f}" for v in col] for col in zip(*data)], fill_color='white'))]) fig.update_layout(width=800, title=metric); fig.write_html(output_path) ``` --- ## Visualization 3: Method Timelines (3DGS Evolution) **When to use**: Chronological development; identifying research trends; literature review figures; conference slides. ### Design Principles - **Horizontal axis**: Time (year/quarter) - **Vertical lanes**: Research categories - **Node size**: Significance (citation count) - **Node color**: Category (use CATEGORY_COLORS, consistent with other charts) - **Connections**: Show lineage (e.g., 3DGS → Scaffold-GS, 3DGS → 2DGS) ### API — Static Timeline ```python def plot_timeline(events, output_path="3dgs_timeline.pdf", figsize=(16, 10)): """events: [{name, date(YYYY-MM), category, venue, citation_count}]""" fig, ax = plt.subplots(figsize=figsize) y_positions = {cat: i for i, cat in enumerate(sorted(set(e['category'] for e in events)))} for event in events: y = y_positions[event['category']] dt = datetime.strptime(event['date'][:7], '%Y-%m') x = mdates.date2num(dt) color = CATEGORY_COLORS.get(event['category'], '#666666') size = min(200, 50 + event.get('citation_count', 20) * 0.5) ax.scatter(x, y, s=size, c=color, alpha=0.8, edgecolors='black', linewidth=0.5, zorder=5) venue = event.get('venue', '') label = f"{event['name']}\n({venue})" if venue else event['name'] ax.annotate(label, (x, y), textcoords="offset points", xytext=(0, -size**0.5/2 - 8), ha='center', fontsize=6,
عرض على GitHub
ملف SKILL.md هذا كبير جدا، لذلك يعرض SkillsMP القسم الاول فقط هنا. عرض على GitHub