home / skills / pluginagentmarketplace / custom-plugin-game-developer / optimization-performance

optimization-performance skill

/skills/optimization-performance

This skill helps optimize games and profile performance across platforms by guiding frame budgets, bottleneck analysis, and platform-specific tuning.

npx playbooks add skill pluginagentmarketplace/custom-plugin-game-developer --skill optimization-performance

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
14.5 KB
---
name: optimization-performance
version: "2.0.0"
description: |
  Game optimization, performance profiling, multi-platform support, and
  frame rate optimization for smooth gameplay experiences.
sasmp_version: "1.3.0"
bonded_agent: 02-game-programmer
bond_type: SECONDARY_BOND

parameters:
  - name: bottleneck
    type: string
    required: false
    validation:
      enum: [cpu, gpu, memory, loading, network]
  - name: platform
    type: string
    required: false
    validation:
      enum: [pc, console, mobile, vr, web]

retry_policy:
  enabled: true
  max_attempts: 3
  backoff: exponential

observability:
  log_events: [start, complete, error]
  metrics: [frame_time_ms, draw_calls, memory_mb, cpu_usage]
---

# Optimization & Performance

## Performance Targets

```
FRAME BUDGETS:
┌─────────────────────────────────────────────────────────────┐
│  TARGET FPS │ FRAME TIME │ PLATFORM                        │
├─────────────┼────────────┼─────────────────────────────────┤
│  30 FPS     │ 33.3 ms    │ Console (heavy games)           │
│  60 FPS     │ 16.6 ms    │ PC, Console, Mobile             │
│  90 FPS     │ 11.1 ms    │ VR (minimum)                    │
│  120 FPS    │ 8.3 ms     │ Competitive games               │
│  144+ FPS   │ 6.9 ms     │ High-end PC                     │
└─────────────┴────────────┴─────────────────────────────────┘

FRAME TIME BREAKDOWN (16.6ms target):
┌─────────────────────────────────────────────────────────────┐
│  CPU: 8ms                                                    │
│  ├─ Game Logic:    3ms                                      │
│  ├─ Physics:       2ms                                      │
│  ├─ Animation:     1.5ms                                    │
│  └─ Audio/Other:   1.5ms                                    │
│                                                              │
│  GPU: 8ms                                                    │
│  ├─ Geometry:      2ms                                      │
│  ├─ Lighting:      3ms                                      │
│  ├─ Post-process:  2ms                                      │
│  └─ UI:            1ms                                      │
└─────────────────────────────────────────────────────────────┘
```

## Profiling Process

```
OPTIMIZATION WORKFLOW:
┌─────────────────────────────────────────────────────────────┐
│  1. MEASURE: Profile before optimizing                      │
│     → Never guess, always profile                          │
│                                                              │
│  2. IDENTIFY: Find the bottleneck                           │
│     → CPU-bound: Frame time > GPU time                     │
│     → GPU-bound: GPU time > CPU time                       │
│                                                              │
│  3. ANALYZE: Drill into specific systems                    │
│     → Which function? Which shader? Which asset?           │
│                                                              │
│  4. OPTIMIZE: Fix the actual bottleneck                     │
│     → One change at a time                                 │
│     → Measure before/after                                  │
│                                                              │
│  5. VERIFY: Confirm improvement                             │
│     → Check all platforms                                   │
│     → Test edge cases                                       │
│                                                              │
│  6. REPEAT: Move to next bottleneck                         │
└─────────────────────────────────────────────────────────────┘
```

## CPU Optimization

```
CPU OPTIMIZATION TECHNIQUES:
┌─────────────────────────────────────────────────────────────┐
│  ALGORITHMIC:                                                │
│  • Use appropriate data structures (spatial hashing)       │
│  • Early-out conditions                                     │
│  • Reduce O(n²) to O(n log n)                              │
├─────────────────────────────────────────────────────────────┤
│  CACHE:                                                      │
│  • Data-oriented design (SoA vs AoS)                       │
│  • Minimize cache misses                                    │
│  • Process data linearly                                    │
├─────────────────────────────────────────────────────────────┤
│  ALLOCATION:                                                 │
│  • Object pooling                                           │
│  • Avoid GC in hot paths                                    │
│  • Pre-allocate collections                                 │
├─────────────────────────────────────────────────────────────┤
│  THREADING:                                                  │
│  • Offload work to job system                              │
│  • Async loading                                            │
│  • Parallel processing                                      │
└─────────────────────────────────────────────────────────────┘
```

## GPU Optimization

```
GPU OPTIMIZATION TECHNIQUES:
┌─────────────────────────────────────────────────────────────┐
│  DRAW CALLS:                                                 │
│  • Static/dynamic batching                                  │
│  • GPU instancing                                           │
│  • Merge meshes                                             │
│  Target: <2000 on PC, <200 on mobile                        │
├─────────────────────────────────────────────────────────────┤
│  OVERDRAW:                                                   │
│  • Front-to-back rendering                                  │
│  • Occlusion culling                                        │
│  • Reduce transparency                                      │
├─────────────────────────────────────────────────────────────┤
│  SHADERS:                                                    │
│  • Reduce instruction count                                 │
│  • Use lower precision (half)                              │
│  • Minimize texture samples                                 │
├─────────────────────────────────────────────────────────────┤
│  GEOMETRY:                                                   │
│  • LOD systems                                              │
│  • Mesh simplification                                      │
│  • Frustum culling                                          │
└─────────────────────────────────────────────────────────────┘
```

## Platform-Specific Guidelines

```
MOBILE OPTIMIZATION:
┌─────────────────────────────────────────────────────────────┐
│  CRITICAL CONSTRAINTS:                                       │
│  • Thermal throttling                                       │
│  • Battery drain                                            │
│  • Memory limits (500MB-2GB)                               │
│                                                              │
│  TARGETS:                                                    │
│  • Draw calls: 100-200                                      │
│  • Triangles: 100K-500K/frame                              │
│  • Texture memory: 200-500MB                                │
│  • 30-60 FPS stable                                         │
└─────────────────────────────────────────────────────────────┘

VR OPTIMIZATION:
┌─────────────────────────────────────────────────────────────┐
│  CRITICAL: Maintain 90 FPS constantly                       │
│  • Single-pass stereo rendering                            │
│  • Fixed foveated rendering                                │
│  • Aggressive LOD                                           │
│  • Minimal post-processing                                  │
└─────────────────────────────────────────────────────────────┘
```

## 🔧 Troubleshooting

```
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Frame rate drops during gameplay                   │
├─────────────────────────────────────────────────────────────┤
│ DEBUG:                                                       │
│ → Profile to find CPU vs GPU bound                          │
│ → Check for GC spikes                                       │
│ → Look for expensive operations in Update()               │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS:                                                   │
│ → Move logic to FixedUpdate or coroutines                   │
│ → Implement object pooling                                  │
│ → Add LOD for distant objects                               │
│ → Reduce draw calls with batching                           │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Long loading times                                 │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS:                                                   │
│ → Async loading with progress bar                           │
│ → Stream assets in background                               │
│ → Compress assets more aggressively                         │
│ → Pre-warm caches                                           │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Inconsistent frame pacing                          │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS:                                                   │
│ → Enable VSync                                              │
│ → Use fixed timestep for physics                            │
│ → Spread heavy work across frames                           │
│ → Check for background processes                            │
└─────────────────────────────────────────────────────────────┘
```

## Profiling Tools

| Engine | CPU Profiler | GPU Profiler | Memory |
|--------|--------------|--------------|--------|
| Unity | Profiler | Frame Debugger | Memory Profiler |
| Unreal | Insights | RenderDoc | Memreport |
| Godot | Profiler | GPU Debugger | Built-in |
| Any | Platform tools | RenderDoc/PIX | Valgrind/Instruments |

---

**Use this skill**: When optimizing games, profiling performance, or supporting multiple platforms.

Overview

This skill helps game developers optimize performance across platforms by providing concrete profiling workflows, CPU/GPU tuning patterns, and platform-specific targets. It focuses on measurable outcomes—stable frame rates, lower memory and draw call budgets, and predictable load times—for smoother gameplay experiences. The guidance covers engine-agnostic techniques and engine-specific tool recommendations.

How this skill works

The skill teaches a repeatable profiling workflow: measure, identify bottlenecks, analyze details, optimize one change at a time, verify across platforms, and repeat. It inspects CPU vs GPU time, frame time breakdowns, draw call counts, overdraw, shader complexity, memory allocations, and loading patterns to pinpoint hotspots. Recommendations include algorithmic fixes, cache- and allocation-aware code, batching/instancing, LODs, and platform constraints for mobile and VR.

When to use it

  • When frame rates drop or stutter appears during gameplay
  • Before shipping to ensure target platforms meet frame budgets
  • When porting to mobile, VR, or lower-end hardware
  • During feature development to prevent regressions
  • To reduce load times, memory use, or thermal/battery impact

Best practices

  • Profile first—never guess where the bottleneck is
  • Optimize one subsystem at a time and measure before/after
  • Design data-oriented systems and minimize cache misses
  • Avoid allocations in hot paths; use pooling and pre-allocation
  • Target platform budgets (draw calls, triangles, memory) and test edge cases

Example use cases

  • Identify whether a scene is CPU- or GPU-bound and apply targeted fixes
  • Reduce mobile draw calls with batching and texture atlases to hit 30–60 FPS
  • Implement job systems and async loading to remove frame spikes
  • Apply LODs, frustum/occlusion culling, and instancing for high-entity scenes
  • Tune shaders and reduce texture samples to lower GPU time on consoles

FAQ

What frame time should I budget for?

Choose a target based on platform and mode: 16.6 ms for 60 FPS, 11.1 ms for 90 FPS VR, 8.3 ms for 120 FPS competitive titles.

How do I know if the problem is CPU or GPU?

Use profilers to compare CPU vs GPU times per frame: if CPU time exceeds GPU, it’s CPU-bound; if GPU time is higher, optimize rendering and shaders.

What quick wins reduce frame spikes?

Move heavy work off the main update loop, avoid GC in hot paths, implement pooling, and spread expensive tasks across frames.