2026-01-15 17:57:44 +01:00
|
|
|
# Test Scenarios Document
|
|
|
|
|
**Project**: Master's Thesis - Game Engine Performance Comparison
|
2026-01-23 17:50:30 +01:00
|
|
|
**Date**: January 19, 2026
|
2026-01-15 17:57:44 +01:00
|
|
|
**Author**: Krzysztof Rudnicki
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Overview
|
|
|
|
|
|
|
|
|
|
This document defines the test scenarios for comparing Unity and Unreal Engine performance using bullet-hell games and NVIDIA Nsight profiling.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Test Hardware
|
|
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
- **CPU**: AMD Ryzen 9 7900X3D 12-Core Processor (24 cores, 48 threads)
|
|
|
|
|
- **GPU**: NVIDIA GeForce RTX 3090 (24 GB GDDR6X)
|
|
|
|
|
- **RAM**: 32 GB
|
|
|
|
|
- **OS**: Arch Linux (kernel 6.18.5-arch1-1)
|
|
|
|
|
- **NVIDIA Drivers**: 590.48.01
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Test Methodology
|
|
|
|
|
|
|
|
|
|
### Game: Bullet-Hell (Unity & Unreal implementations)
|
|
|
|
|
|
|
|
|
|
Both games implement identical gameplay mechanics:
|
|
|
|
|
- Player-controlled ship
|
2026-01-23 17:50:30 +01:00
|
|
|
- Enemy spawning system with escalating load
|
2026-01-15 17:57:44 +01:00
|
|
|
- Bullet pattern generation
|
|
|
|
|
- Collision detection
|
2026-01-23 17:50:30 +01:00
|
|
|
- 90-second survival mode with progressive load increase
|
|
|
|
|
|
|
|
|
|
> **Note**: The game runs continuously for 90 seconds with three load phases:
|
|
|
|
|
> - **0-30 seconds**: Low load phase
|
|
|
|
|
> - **30-60 seconds**: Medium load phase
|
|
|
|
|
> - **60-90 seconds**: High load phase
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
### Performance Metrics to Capture
|
|
|
|
|
|
|
|
|
|
1. **Frame Time** (ms) - Time to render one frame
|
|
|
|
|
2. **FPS** (frames per second) - Derived from frame time
|
|
|
|
|
3. **GPU Utilization** (%) - Percentage of GPU capacity used
|
|
|
|
|
4. **Memory Usage** (MB) - VRAM and system RAM consumption
|
|
|
|
|
5. **Draw Calls** - Number of draw calls per frame
|
|
|
|
|
6. **Vertex Count** - Total vertices rendered per frame
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
## Load Phases
|
2026-01-15 17:57:44 +01:00
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
### Phase 1: Low Load (0-30 seconds)
|
2026-01-15 17:57:44 +01:00
|
|
|
**Objective**: Establish baseline performance with minimal load
|
|
|
|
|
|
|
|
|
|
**Parameters**:
|
|
|
|
|
- **Bullet count on screen**: 50-100 bullets
|
|
|
|
|
- **Active enemies**: 2-3 enemies
|
2026-01-23 17:50:30 +01:00
|
|
|
- **Time window**: 0-30 seconds of gameplay
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
**Expected Outcomes**:
|
|
|
|
|
- Stable frame rate (60 FPS target)
|
|
|
|
|
- Low GPU utilization (<50%)
|
|
|
|
|
- Minimal memory usage
|
|
|
|
|
|
|
|
|
|
**Nsight Capture Points**:
|
2026-01-23 17:50:30 +01:00
|
|
|
- 10 seconds (early low load)
|
|
|
|
|
- 20 seconds (stable low load)
|
|
|
|
|
- 25 seconds (end of low load phase)
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
### Phase 2: Medium Load (30-60 seconds)
|
2026-01-15 17:57:44 +01:00
|
|
|
**Objective**: Test performance under moderate load
|
|
|
|
|
|
|
|
|
|
**Parameters**:
|
|
|
|
|
- **Bullet count on screen**: 200-300 bullets
|
|
|
|
|
- **Active enemies**: 5-7 enemies
|
2026-01-23 17:50:30 +01:00
|
|
|
- **Time window**: 30-60 seconds of gameplay
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
**Expected Outcomes**:
|
|
|
|
|
- Moderate GPU utilization (50-70%)
|
|
|
|
|
- Frame rate may drop slightly
|
|
|
|
|
- Increased memory usage
|
|
|
|
|
|
|
|
|
|
**Nsight Capture Points**:
|
2026-01-23 17:50:30 +01:00
|
|
|
- 35 seconds (transition to medium load)
|
|
|
|
|
- 45 seconds (stable medium load)
|
|
|
|
|
- 55 seconds (end of medium load phase)
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
### Phase 3: High Load (60-90 seconds)
|
|
|
|
|
**Objective**: Test performance under maximum load (stress test)
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
**Parameters**:
|
|
|
|
|
- **Bullet count on screen**: 500+ bullets
|
|
|
|
|
- **Active enemies**: 10+ enemies
|
2026-01-23 17:50:30 +01:00
|
|
|
- **Time window**: 60-90 seconds of gameplay
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
**Expected Outcomes**:
|
|
|
|
|
- High GPU utilization (>70%)
|
|
|
|
|
- Potential frame drops
|
|
|
|
|
- Maximum memory usage observed
|
|
|
|
|
|
|
|
|
|
**Nsight Capture Points**:
|
2026-01-23 17:50:30 +01:00
|
|
|
- 65 seconds (transition to high load)
|
|
|
|
|
- 75 seconds (peak sustained load)
|
|
|
|
|
- 85 seconds (end of high load phase)
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Data Collection Procedure
|
|
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
### For Each Test Run:
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
1. **Pre-test Setup**:
|
2026-01-23 17:50:30 +01:00
|
|
|
- Run `./scripts/close_background_apps.sh` to close unnecessary applications
|
|
|
|
|
- Verify system is idle
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
2. **Unity Testing**:
|
2026-01-23 17:50:30 +01:00
|
|
|
- Start NVIDIA Nsight Systems (`nsys-ui`)
|
|
|
|
|
- Configure Nsight to profile the Unity game executable
|
|
|
|
|
- Launch Unity bullet-hell game through Nsight
|
|
|
|
|
- Let the game run for full 90 seconds (all three load phases)
|
|
|
|
|
- Nsight captures performance data throughout the entire run
|
|
|
|
|
- Save capture data with naming: `unity_run_[N].nsight-rep`
|
|
|
|
|
- Export metrics to CSV: `unity_metrics_[N].csv`
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
3. **Unreal Testing**:
|
|
|
|
|
- Close Unity completely
|
2026-01-23 17:50:30 +01:00
|
|
|
- Start NVIDIA Nsight Systems (`nsys-ui`)
|
|
|
|
|
- Configure Nsight to profile the Unreal game executable
|
|
|
|
|
- Launch Unreal bullet-hell game through Nsight
|
|
|
|
|
- Let the game run for full 90 seconds (all three load phases)
|
|
|
|
|
- Nsight captures performance data throughout the entire run
|
|
|
|
|
- Save capture data with naming: `unreal_run_[N].nsight-rep`
|
|
|
|
|
- Export metrics to CSV: `unreal_metrics_[N].csv`
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
4. **Post-test Data Organization**:
|
|
|
|
|
- Organize captures in folders: `data/nsight/unity/` and `data/nsight/unreal/`
|
|
|
|
|
- Compile metrics into master spreadsheet: `performance_comparison.xlsx`
|
|
|
|
|
- Take screenshots of key Nsight analysis views
|
|
|
|
|
- Document any anomalies or issues observed
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Expected Data Outputs
|
|
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
### Per Test Run (3 runs per engine, 6 total):
|
|
|
|
|
- Nsight capture file (.nsight-rep)
|
2026-01-15 17:57:44 +01:00
|
|
|
- Metrics CSV with frame time, FPS, GPU %, memory, draw calls, vertices
|
2026-01-23 17:50:30 +01:00
|
|
|
- Screenshot of Nsight GPU trace for each load phase
|
2026-01-15 17:57:44 +01:00
|
|
|
- Screenshot of Nsight memory analysis
|
|
|
|
|
|
|
|
|
|
### Aggregate Data:
|
2026-01-23 17:50:30 +01:00
|
|
|
- Comparison table: Unity vs Unreal per load phase
|
|
|
|
|
- Performance graphs showing all metrics over 90-second timeline
|
|
|
|
|
- Statistical analysis (mean, std dev, min, max) per load phase
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Quality Assurance
|
|
|
|
|
|
|
|
|
|
### Validation Checks:
|
2026-01-23 17:50:30 +01:00
|
|
|
- [ ] All three runs completed for Unity
|
|
|
|
|
- [ ] All three runs completed for Unreal
|
2026-01-15 17:57:44 +01:00
|
|
|
- [ ] All CSV metrics exported
|
2026-01-23 17:50:30 +01:00
|
|
|
- [ ] Screenshots saved for all load phases
|
2026-01-15 17:57:44 +01:00
|
|
|
- [ ] Data organized in proper folder structure
|
|
|
|
|
- [ ] No system crashes or anomalies during testing
|
|
|
|
|
- [ ] Comparable conditions between Unity and Unreal runs
|
|
|
|
|
|
|
|
|
|
### Data Integrity:
|
|
|
|
|
- [ ] Frame times make sense (>0ms, <100ms typically)
|
|
|
|
|
- [ ] GPU utilization in valid range (0-100%)
|
|
|
|
|
- [ ] Memory values reasonable for game scope
|
|
|
|
|
- [ ] No obvious outliers without explanation
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Timeline
|
|
|
|
|
|
2026-01-23 17:50:30 +01:00
|
|
|
- **Day 1 (Sunday, Jan 19)**: Setup Nsight, run first test on Unity engine
|
|
|
|
|
- **Day 2 (Monday, Jan 20)**: Complete Unity tests (3 runs), run first test on Unreal engine
|
|
|
|
|
- **Day 3 (Tuesday, Jan 21)**: Complete Unreal tests (3 runs), verify data integrity
|
|
|
|
|
- **Day 4 (Wednesday, Jan 22)**: Analyze results, create comparison graphs, organize data
|
2026-01-15 17:57:44 +01:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Notes
|
|
|
|
|
|
|
|
|
|
- If a capture fails, note the reason and retry
|
2026-01-23 17:50:30 +01:00
|
|
|
- Document any differences in how load phases manifest in Unity vs Unreal
|
2026-01-15 17:57:44 +01:00
|
|
|
- Pay attention to engine-specific optimizations that may affect results
|
|
|
|
|
- Consider recording video of test runs for reference
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
**Status**: Ready for execution
|
2026-01-23 17:50:30 +01:00
|
|
|
**Next Action**: Run `./scripts/close_background_apps.sh` and start Nsight profiling
|