EG/VR_Manager 模块化拆分计划.md
2025-12-12 16:16:15 +08:00

446 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

VR Manager 模块化拆分计划
📊 现状分析
当前状态:
- 文件core/vr_manager.py
- 行数4736行严重超标标准为900行
- 方法数138个方法
- 问题:典型的"上帝类"反模式,承担了过多职责
主要职责识别:
1. 性能监控和调试 (~900行)
2. 测试模式系统 (~800行)
3. 对象池和优化 (~300行)
4. 姿态跟踪系统 (~900行)
5. 设备管理 (~300行)
6. 渲染缓冲管理 (~400行)
7. 相机系统 (~350行)
8. 合成器和提交 (~300行)
9. RenderPipeline集成 (~250行)
10. 核心生命周期 (~500行)
---
🎯 拆分策略
核心原则
1. 渐进迭代:每次拆分一个模块,立即验证
2. 组合模式新模块作为VRManager属性保持接口不变
3. 依赖顺序:先拆分独立模块,后拆分核心模块
4. 向后兼容所有公开API通过委托方法保持可用
拆分顺序(按依赖关系)
阶段1性能监控 → 最独立,零依赖
阶段2测试调试 → 依赖少,可独立测试
阶段3对象池优化 → 小而关键,性能核心
阶段4跟踪系统 → 中等复杂度
阶段5渲染系统 → 核心功能,最复杂
阶段6核心管理器 → 整合所有子系统
---
📋 详细拆分计划
🔷 阶段1拆分性能监控系统 (2-3小时)
创建文件core/vr/performance/monitoring.py (~900行)
迁移方法 (35个)
- 性能报告_print_performance_report, _print_performance_recommendations, _print_brief_performance_report
- 性能监控_init_performance_monitoring, _update_performance_metrics, _update_gpu_metrics, _track_frame_time
- GPU计时_get_gpu_frame_timing, enable_gpu_timing_monitoring, disable_gpu_timing_monitoring
- 管线统计_get_pipeline_stats, test_pipeline_monitoring, _start_timing, _end_timing
- 诊断工具_print_render_callback_diagnostics, _check_rendering_optimizations, _diagnose_opengl_state
- 调试控制enable_debug_output, disable_debug_output, set_debug_mode, toggle_debug_output, get_debug_status
- 配置方法set_performance_check_interval, set_frame_time_history_size, set_performance_report_interval
- 查询方法get_performance_stats, get_current_performance_summary, get_performance_monitoring_config
- 控制方法enable_performance_monitoring, disable_performance_monitoring, force_performance_report, reset_performance_counters
- 状态查询print_performance_monitoring_status, set_prediction_time
迁移属性 (~30个)
# 性能监控开关
performance_monitoring, debug_output_enabled, debug_mode
enable_pipeline_monitoring, enable_gpu_timing
# 性能数据
cpu_usage, memory_usage, gpu_usage, gpu_memory_usage
frame_times, max_frame_time_history
wait_poses_time, left_render_time, right_render_time, submit_time
total_frame_time, vr_sync_wait_time
# GPU计时
gpu_scene_render_ms, gpu_pre_submit_ms, gpu_post_submit_ms
gpu_total_render_ms, gpu_compositor_render_ms
gpu_timing_history, gpu_timing_failure_count
# 历史记录
wait_poses_times, render_times, submit_times, sync_wait_times
pipeline_history_size
类结构:
class VRPerformanceMonitor:
"""VR性能监控系统"""
def __init__(self, vr_manager):
self.vr_manager = vr_manager
# 初始化所有性能监控属性
VRManager集成
# __init__
self.performance_monitor = VRPerformanceMonitor(self)
# 委托方法保持API兼容
def enable_performance_monitoring(self):
return self.performance_monitor.enable_performance_monitoring()
验证步骤:
1. ✅ 编译检查python -m py_compile core/vr/performance/monitoring.py
2. ✅ 导入测试:启动应用,确认无导入错误
3. ✅ 功能测试:调用 vr_manager.enable_performance_monitoring()
4. ✅ 输出验证:检查性能报告正常生成
5. ✅ API测试验证所有委托方法可用
---
🔷 阶段2拆分测试调试系统 (2-3小时)
创建文件core/vr/testing/test_mode.py (~800行)
迁移方法 (17个)
- 测试模式enable_vr_test_mode, disable_vr_test_mode, switch_test_display_mode
- 纹理管理_ensure_test_mode_textures, _create_cached_ovr_textures, _batch_submit_textures
- 显示系统_initialize_test_display, _update_test_display, _create_stereo_display, _cleanup_test_display
- HUD系统_initialize_test_performance_hud, _update_test_performance_hud, _cleanup_test_performance_hud
- 状态查询get_test_mode_status, get_test_mode_features, set_test_mode_features
- 性能测试run_vr_performance_test
迁移属性 (~15个)
vr_test_mode, test_display_mode
test_display_quad, test_right_quad, stereo_display_created
test_performance_hud, test_performance_text
test_mode_initialized
hud_update_counter, hud_update_interval
test_mode_submit_texture, test_mode_wait_poses
类结构:
class VRTestMode:
"""VR测试模式系统"""
def __init__(self, vr_manager):
self.vr_manager = vr_manager
验证步骤:
1. ✅ 启用测试模式vr_manager.enable_vr_test_mode('stereo')
2. ✅ 检查显示验证测试quad显示正确
3. ✅ HUD验证检查性能HUD显示
4. ✅ 切换模式:测试 left/right/stereo 模式切换
5. ✅ 禁用测试vr_manager.disable_vr_test_mode()
---
🔷 阶段3拆分对象池和优化系统 (1-2小时)
创建文件core/vr/performance/optimization.py (~300行)
迁移方法 (19个)
- 对象池_initialize_object_pools, _get_pooled_matrix, _return_pooled_matrix
- GC控制_manual_gc_control, enable_gc_control, disable_gc_control, set_manual_gc_interval, force_manual_gc
- 分辨率set_resolution_scale, set_quality_preset, cycle_quality_preset, _apply_resolution_scale
- 查询方法get_object_pool_status, get_resolution_info, print_resolution_info
- 性能模式enable_performance_mode, disable_performance_mode, set_performance_mode_trigger_frame, get_performance_mode_status
迁移属性 (~20个)
# 对象池
_matrix_pool, _matrix_pool_size
_cached_matrices, _controller_poses_cache
_left_ovr_texture, _right_ovr_texture
# GC控制
_gc_control_enabled, _gc_disabled
_manual_gc_interval, _last_manual_gc_frame
# 分辨率
resolution_scale, base_eye_width, base_eye_height
scaled_eye_width, scaled_eye_height
quality_presets, current_quality_preset
# 性能模式
performance_mode_enabled, performance_mode_trigger_frame
验证步骤:
1. ✅ 对象池检查Mat4对象池正常工作
2. ✅ GC控制验证手动GC按预期触发
3. ✅ 分辨率:测试质量预设切换
4. ✅ 性能测试运行30秒性能测试确认优化生效
---
🔷 阶段4拆分跟踪系统 (3-4小时)
创建文件1core/vr/tracking/poses.py (~600行)
迁移方法 (12个)
- 姿态获取_wait_get_poses, _wait_get_poses_immediate, _wait_get_poses_with_prediction
- 姿态缓存_cache_poses_for_next_frame, _reset_waitgetposes_flag
- 姿态更新_update_tracking_data, update_hmd, _update_camera_poses, _update_camera_poses_with_cache
- 矩阵转换_convert_openvr_matrix_to_panda, _update_matrix_from_openvr, convert_mat
迁移属性:
hmd_pose, controller_poses, tracked_device_poses
poses, game_poses
tracking_space, hmd_anchor, left_eye_anchor, right_eye_anchor
coord_mat, coord_mat_inv
use_prediction_time, poses_updated_in_task
_waitgetposes_called_this_frame
_cached_render_poses, _first_frame
创建文件2core/vr/tracking/devices.py (~300行)
迁移方法 (8个)
- 控制器_initialize_controllers, _detect_controllers, get_controller_by_role
- 设备管理_create_tracked_device_anchor, update_tracked_devices
- 状态查询are_controllers_connected, get_connected_controllers
- 震动trigger_controller_haptic
迁移属性:
left_controller, right_controller
controllers, tracked_device_anchors
创建文件3core/vr/tracking/input_wrapper.py (~200行)
迁移方法 (12个)
- 按钮查询is_trigger_pressed, is_trigger_just_pressed, is_grip_pressed, is_grip_just_pressed, is_menu_pressed
- 触摸板is_trackpad_touched, get_trackpad_position
- 交互查询get_selected_object, get_grabbed_object, is_grabbing_object
- 交互控制force_release_all_grabs, add_interactable_object
类结构:
class VRPoseTracker:
"""VR姿态跟踪系统"""
class VRDeviceManager:
"""VR设备管理系统"""
class VRInputWrapper:
"""VR输入包装层"""
验证步骤:
1. ✅ 姿态跟踪启动VR检查头显跟踪正常
2. ✅ 控制器检测:验证控制器正确识别
3. ✅ 输入测试:测试按钮和触摸板输入
4. ✅ 震动测试:触发控制器震动反馈
---
🔷 阶段5拆分渲染系统 (4-5小时)
创建文件1core/vr/rendering/buffers.py (~400行)
迁移方法 (10个)
- 缓冲区创建_create_vr_buffers, _create_vr_buffer, _create_vr_buffers_with_pipeline
- 纹理管理_create_vr_texture, _prepare_and_cache_textures
- Pipeline效果_apply_pipeline_vr_effects
- 天空盒_check_skybox_status, _create_vr_skybox
- 诊断_diagnose_buffer_performance
- 清理_cleanup_vr_buffers
迁移属性:
vr_left_eye_buffer, vr_right_eye_buffer
vr_left_texture, vr_right_texture
left_texture_id, right_texture_id, textures_prepared
eye_width, eye_height, near_clip, far_clip
scaled_eye_width, scaled_eye_height
创建文件2core/vr/rendering/cameras.py (~350行)
迁移方法 (6个)
- 相机设置_setup_vr_cameras, _get_eye_offset
- 优化_optimize_vr_rendering, _apply_lightweight_rendering, _disable_vr_buffer_extras
- 主相机_disable_main_cam, _enable_main_cam
迁移属性:
vr_left_camera, vr_right_camera
创建文件3core/vr/rendering/compositor.py (~300行)
迁移方法 (9个)
- 渲染回调simple_left_cb, simple_right_cb
- 纹理提交submit_texture
- GPU同步_sync_gpu_if_needed, _smart_gpu_sync
- ATW控制_disable_async_reprojection, enable_async_reprojection_disable, disable_async_reprojection_disable
迁移属性:
vr_compositor, submit_together
openvr_frame_id
left_eye_last_render_frame, right_eye_last_render_frame
disable_async_reprojection
创建文件4core/vr/rendering/pipeline.py (~250行)
迁移方法 (4个)
- Pipeline集成_create_vr_buffers_with_pipeline, _apply_pipeline_vr_effects
- 模式切换set_vr_render_mode, get_vr_render_mode
迁移属性:
vr_render_mode, render_pipeline_enabled
vr_pipeline_left_target, vr_pipeline_right_target
pipeline_resolution_scale, vr_pipeline_controller
pipeline_vr_config
验证步骤:
1. ✅ 缓冲区:检查左右眼缓冲区正确创建
2. ✅ 相机:验证双眼相机位置和视锥
3. ✅ 渲染:测试左右眼渲染回调
4. ✅ 提交确认纹理正确提交到OpenVR
5. ✅ Pipeline测试RenderPipeline模式切换
---
🔷 阶段6重构核心管理器 (2-3小时)
保留在 core/vr_manager.py (~500行)
保留方法 (10个核心方法)
- 生命周期__init__, cleanup
- VR初始化is_vr_available, initialize_vr
- VR控制enable_vr, disable_vr
- 主循环_start_vr_task, _update_vr
- 状态查询get_vr_status
新增子系统属性(组合模式):
def __init__(self, world):
# ... 基础初始化 ...
# 子系统初始化(按依赖顺序)
self.optimization = VROptimization(self)
self.performance_monitor = VRPerformanceMonitor(self)
self.test_mode = VRTestMode(self)
self.pose_tracker = VRPoseTracker(self)
self.device_manager = VRDeviceManager(self)
self.input_wrapper = VRInputWrapper(self)
self.buffer_manager = VRBufferManager(self)
self.camera_manager = VRCameraManager(self)
self.compositor = VRCompositor(self)
self.pipeline_manager = VRPipelineManager(self)
委托方法保持API兼容
# 性能监控委托
def enable_performance_monitoring(self):
return self.performance_monitor.enable_performance_monitoring()
# 测试模式委托
def enable_vr_test_mode(self, display_mode='stereo'):
return self.test_mode.enable_vr_test_mode(display_mode)
# 优化系统委托
def set_resolution_scale(self, scale):
return self.optimization.set_resolution_scale(scale)
# ... 其他委托方法 ...
验证步骤:
1. ✅ 完整启动启动应用测试VR完整流程
2. ✅ API测试验证所有公开API可用
3. ✅ 性能测试:运行性能测试,确认无回退
4. ✅ 集成测试:测试传送、交互、渲染等所有功能
---
✅ 每阶段验证清单
静态验证
- python -m py_compile 检查语法
- python main.py --help 验证模块导入
- 运行 pylint 检查代码质量
功能验证
- 启动应用python main.py
- 检查VR可用性vr_manager.is_vr_available()
- 测试VR启用切换到VR模式
- 测试头显跟踪:移动头显查看跟踪
- 测试控制器:检测和交互
- 测试传送:使用控制器传送
- 测试性能监控:查看性能报告
- 测试VR禁用退出VR模式
性能验证
- 运行性能测试vr_manager.run_vr_performance_test(30)
- 检查帧率稳定在90fps
- 对比拆分前后性能指标
- 确认无性能回退
---
🛡️ 风险控制
备份策略
# 每个阶段开始前
cp core/vr_manager.py core/vr_manager.py.backup.stage{N}
回滚方案
# 恢复备份
cp core/vr_manager.py.backup.stage{N} core/vr_manager.py
循环依赖预防
- ✅ 所有子模块通过 self.vr_manager 访问其他子系统
- ✅ 子模块间不直接引用
- ✅ VRManager 作为中介协调所有子系统
性能保护
- ✅ 热点路径(渲染回调)保持直接调用
- ✅ 非关键路径使用委托模式
- ✅ 对象池和缓存机制保持不变
---
📊 预期成果
代码结构
core/vr_manager.py (500行) ✅
core/vr/
├── performance/
│ ├── monitoring.py (900行) ✅
│ └── optimization.py (300行) ✅
├── testing/
│ └── test_mode.py (800行) ✅
├── tracking/
│ ├── poses.py (600行) ✅
│ ├── devices.py (300行) ✅
│ └── input_wrapper.py (200行) ✅
└── rendering/
├── buffers.py (400行) ✅
├── cameras.py (350行) ✅
├── compositor.py (300行) ✅
└── pipeline.py (250行) ✅
改进指标
- ✅ 文件行数4736行 → 最大900行符合规范
- ✅ 目录文件数:所有目录 ≤ 4个文件远小于8个限制
- ✅ 方法数138个 → 每个类 ≤ 20个方法
- ✅ 职责清晰:每个模块单一职责
- ✅ 可维护性:大幅提升
- ✅ 可测试性:模块化便于单元测试
- ✅ 向后兼容100%保持现有API
时间估算
- 阶段1: 2-3小时
- 阶段2: 2-3小时
- 阶段3: 1-2小时
- 阶段4: 3-4小时
- 阶段5: 4-5小时
- 阶段6: 2-3小时
总计15-20小时分6个阶段逐步完成
---
🚀 开始执行
确认此计划后,将按以下顺序执行:
1. 创建备份
2. 阶段1拆分性能监控系统
3. 验证通过后进入阶段2
4. 依次完成所有6个阶段
5. 最终整体测试和文档更新