VR #8

Merged
Rowland merged 8 commits from VR into main 2025-10-21 08:09:34 +00:00
25 changed files with 350 additions and 16 deletions
Showing only changes of commit 66d3c8825c - Show all commits

View File

@ -50,7 +50,16 @@ EG/
│ ├── scene_manager.py # 场景和模型管理
│ ├── selection.py # 对象选择系统
│ ├── event_handler.py # 事件处理
│ └── tool_manager.py # 工具系统
│ ├── tool_manager.py # 工具系统
│ ├── vr_manager.py # VR管理器待重构
│ └── vr/ # VR模块模块化重构后
│ ├── rendering/ # 渲染子系统
│ ├── tracking/ # 跟踪子系统
│ ├── interaction/ # 交互子系统
│ ├── visualization/ # 可视化子系统
│ ├── performance/ # 性能优化子系统
│ ├── testing/ # 测试调试子系统
│ └── config/ # 配置子系统
├── gui/ # GUI元素管理
│ └── gui_manager.py # 2D/3D GUI组件
├── ui/ # 用户界面
@ -87,12 +96,46 @@ EG/
3. 在main.py中集成新模块
4. 更新界面管理器以添加UI控制
### VR模块开发
VR模块采用模块化架构包含7个子系统
1. **rendering/** - 渲染子系统
- `stages.py`: VR专用渲染stagesGBuffer、光照、环境光、最终合成
2. **tracking/** - 跟踪子系统
- `controllers.py`: VR控制器类LeftController, RightController
3. **interaction/** - 交互子系统
- `actions.py`: OpenVR动作系统
- `joystick.py`: 摇杆输入和转向/传送
- `teleport.py`: 传送系统(抛物线轨迹)
- `grab.py`: 对象抓取和交互
4. **visualization/** - 可视化子系统
- `controllers.py`: 控制器3D模型和射线可视化
- `effects.py`: VR特效管理
5. **config/** - 配置子系统
- `vr_config.py`: VR基础配置
- `joystick_config.py`: 摇杆配置
- `shadow_stage.py`: 阴影stage配置
6. **performance/** - 性能优化子系统(预留)
7. **testing/** - 测试调试子系统(预留)
**使用示例**:
```python
from core.vr import VRManager # 主接口(向后兼容)
from core.vr.interaction.teleport import VRTeleportSystem # 子模块
```
详细信息请查看 `core/vr/README.md`
### 材质和渲染
- 材质系统集成在scene/scene_manager.py
- 支持PBR材质和自定义着色器
- RenderPipelineFile提供高级渲染特性
### GUI开发
- 使用PyQt5构建主界面
- 3D GUI元素通过gui/gui_manager.py管理

163
core/vr/README.md Normal file
View File

@ -0,0 +1,163 @@
# VR模块重构说明
## 📋 重构概述
本次重构将原本分散在`core/`目录下的12个VR相关文件整理到`core/vr/`模块化目录结构中,提升了代码的可维护性和可扩展性。
## 🎯 重构目标
1. **符合编码规范**每个目录不超过8个文件
2. **职责清晰**:按功能模块组织,单一职责原则
3. **易于维护**:清晰的分层架构,降低耦合度
4. **向后兼容**:现有代码无需修改即可工作
## 📁 新目录结构
```
core/vr/
├── __init__.py # 主模块接口重新导出VRManager
├── rendering/ # 渲染子系统
│ ├── __init__.py
│ └── stages.py # VR渲染stages (867行)
├── tracking/ # 跟踪子系统
│ ├── __init__.py
│ └── controllers.py # 控制器类 (482行)
├── interaction/ # 交互子系统
│ ├── __init__.py
│ ├── actions.py # 动作系统 (582行)
│ ├── joystick.py # 摇杆系统 (700行)
│ ├── teleport.py # 传送系统 (421行)
│ └── grab.py # 抓取交互 (431行)
├── visualization/ # 可视化子系统
│ ├── __init__.py
│ ├── controllers.py # 控制器可视化 (780行)
│ └── effects.py # VR特效管理 (226行)
├── config/ # 配置子系统
│ ├── __init__.py
│ ├── vr_config.py # VR配置 (273行)
│ ├── joystick_config.py # 摇杆配置 (278行)
│ └── shadow_stage.py # 阴影stage配置 (173行)
├── performance/ # 性能优化子系统(预留)
│ └── __init__.py
└── testing/ # 测试调试子系统(预留)
└── __init__.py
```
## 📊 文件统计
| 目录 | 文件数 | 状态 |
|------|--------|------|
| config | 4 | ✅ 符合规范 (<8) |
| interaction | 5 | ✅ 符合规范 (<8) |
| rendering | 2 | ✅ 符合规范 (<8) |
| tracking | 2 | ✅ 符合规范 (<8) |
| visualization | 3 | ✅ 符合规范 (<8) |
| performance | 1 | ✅ 符合规范 (<8) |
| testing | 1 | ✅ 符合规范 (<8) |
**总计**: 所有目录都符合"不超过8个文件"的规范 ✅
## 🔄 文件迁移映射
| 原文件 | 新位置 | 行数 |
|--------|--------|------|
| `vr_stages.py` | `rendering/stages.py` | 867 |
| `vr_visualization.py` | `visualization/controllers.py` | 780 |
| `vr_effects_manager.py` | `visualization/effects.py` | 226 |
| `vr_controller.py` | `tracking/controllers.py` | 482 |
| `vr_actions.py` | `interaction/actions.py` | 582 |
| `vr_joystick.py` | `interaction/joystick.py` | 700 |
| `vr_teleport.py` | `interaction/teleport.py` | 421 |
| `vr_interaction.py` | `interaction/grab.py` | 431 |
| `vr_config.py` | `config/vr_config.py` | 273 |
| `vr_joystick_config.py` | `config/joystick_config.py` | 278 |
| `vr_shadow_stage.py` | `config/shadow_stage.py` | 173 |
## 🔧 导入路径更新
### ✅ 所有代码已更新为新路径
所有项目代码已完全迁移到新的模块化导入路径:
```python
# 主接口
from core.vr import VRManager, VRRenderMode
# 子模块(直接访问)
from core.vr.tracking.controllers import LeftController, RightController
from core.vr.interaction.actions import VRActionManager
from core.vr.interaction.joystick import VRJoystickManager
from core.vr.interaction.teleport import VRTeleportSystem
from core.vr.interaction.grab import VRInteractionManager
from core.vr.visualization.controllers import VRControllerVisualizer
from core.vr.visualization.effects import VREffectsManager
from core.vr.rendering.stages import VRPipelineController
from core.vr.config.vr_config import VRConfigManager
```
**已更新的文件**:
- ✅ `main.py` - VRManager导入
- ✅ `ui/main_window.py` - VRRenderMode导入
- ✅ `core/vr_manager.py` - 所有内部导入
- ✅ `core/vr/config/vr_config.py` - VRRenderMode导入
- ✅ `core/vr/tracking/controllers.py` - VRControllerVisualizer导入
- ✅ `core/vr/visualization/controllers.py` - VRRenderMode导入
## ✅ 完成的工作
1. ✅ 创建了完整的模块化目录结构
2. ✅ 移动了11个独立VR文件到对应子目录
3. ✅ 更新了所有内部导入路径
4. ✅ 创建了兼容性层(`core/vr/__init__.py`
5. ✅ 保持了向后兼容性
## 🚧 待完成的工作(未来)
### vr_manager.py重构优先级
`core/vr_manager.py`目前仍有**4736行代码138个方法**,严重超标。建议未来逐步拆分为:
1. **rendering/** 子系统
- `buffers.py` - 缓冲区和纹理管理 (~300行)
- `cameras.py` - 相机设置和更新 (~250行)
- `pipeline.py` - RenderPipeline集成 (~300行)
- `compositor.py` - 合成和OpenVR提交 (~200行)
2. **tracking/** 子系统
- `poses.py` - 姿态跟踪和更新 (~400行)
- `devices.py` - 设备检测管理 (~200行)
- `controller_wrapper.py` - 控制器输入包装 (~150行)
3. **performance/** 子系统
- `monitoring.py` - 性能监控 (~400行)
- `optimization.py` - 优化系统 (~300行)
- `diagnostics.py` - 诊断工具 (~250行)
4. **testing/** 子系统
- `test_mode.py` - VR测试模式 (~400行)
- `debug.py` - 调试工具 (~200行)
5. **manager.py** - VR管理器核心 (~400行)
- 保留核心初始化和生命周期管理
- 通过组合模式委托给各子系统
## 📝 注意事项
1. **旧文件保留**:原`core/vr_*.py`文件暂时保留,待测试无误后可删除
2. **导入兼容性**:所有旧的导入路径仍然有效
3. **测试验证**建议运行VR功能测试确认重构后代码正常工作
4. **渐进重构**vr_manager.py的拆分可以后续逐步进行不影响当前功能
## 🎉 重构成果
- ✅ **目录组织**从12个文件混乱分布 → 7个清晰子系统
- ✅ **规范遵守**:所有目录文件数 ≤ 8个
- ✅ **职责分离**:每个子系统职责明确,易于理解和维护
- ✅ **向后兼容**:现有代码无需修改即可工作
- ✅ **扩展性好**:新功能可轻松添加到对应子系统
---
**重构日期**: 2025-10-11
**重构人**: Claude Code
**版本**: v2.0.0

37
core/vr/__init__.py Normal file
View File

@ -0,0 +1,37 @@
"""
VR模块 - 虚拟现实功能
这个模块提供完整的VR功能支持包括
- VR设备初始化和管理
- 渲染系统双眼渲染RenderPipeline集成
- 跟踪系统HMD和控制器姿态跟踪
- 交互系统控制器输入摇杆传送抓取
- 可视化系统控制器模型特效
- 性能优化和监控
- 测试和调试工具
- 配置管理
主要接口
VRManager: VR管理器主类
VRRenderMode: VR渲染模式枚举
示例
from core.vr import VRManager
vr_manager = VRManager(world)
vr_manager.initialize_vr()
vr_manager.enable_vr()
"""
# 为了向后兼容从core.vr_manager重新导出
# vr_manager.py目前还包含VRManager的完整实现
# 未来可以逐步将其拆分到子模块中
# 使用相对导入从父目录的vr_manager模块导入
try:
from ..vr_manager import VRManager, VRRenderMode
__all__ = ['VRManager', 'VRRenderMode']
except ImportError as e:
print(f"警告无法从vr_manager导入: {e}")
__all__ = []
__version__ = '2.0.0'

View File

@ -0,0 +1,10 @@
"""
VR配置子系统
负责VR配置管理
- VR基础配置
- 摇杆配置
- 阴影stage配置
"""
__all__ = []

View File

@ -213,11 +213,10 @@ class VRConfigManager:
# 应用渲染模式
render_mode = config.get("render_mode", "normal")
from core.vr import VRRenderMode
if render_mode == "render_pipeline":
from .vr_manager import VRRenderMode
vr_manager.vr_render_mode = VRRenderMode.RENDER_PIPELINE
else:
from .vr_manager import VRRenderMode
vr_manager.vr_render_mode = VRRenderMode.NORMAL
# 应用分辨率缩放

View File

@ -0,0 +1,18 @@
{
"render_mode": "normal",
"resolution_scale": 0.75,
"pipeline_resolution_scale": 0.75,
"quality_preset": "balanced",
"anti_aliasing": "4x",
"refresh_rate": "90Hz",
"async_reprojection": true,
"pipeline_vr_config": {
"enable_shadows": true,
"enable_ao": true,
"enable_bloom": false,
"enable_motion_blur": false,
"enable_ssr": false,
"shadow_quality": "medium",
"ao_quality": "low"
}
}

View File

@ -0,0 +1,11 @@
"""
VR交互子系统
负责VR交互功能
- OpenVR动作系统
- 摇杆输入和转向/传送
- 传送系统抛物线轨迹
- 对象抓取和交互
"""
__all__ = []

View File

@ -0,0 +1,10 @@
"""
VR性能优化子系统
负责VR性能监控和优化
- 性能指标监控帧时间GPU时间
- 优化系统对象池GC控制分辨率缩放
- 诊断和调试工具
"""
__all__ = []

View File

@ -0,0 +1,12 @@
"""
VR渲染子系统
负责VR的渲染相关功能
- 缓冲区和纹理管理
- VR相机设置和更新
- RenderPipeline高级渲染集成
- VR专用渲染stages
- OpenVR合成器接口
"""
__all__ = []

View File

@ -0,0 +1,10 @@
"""
VR测试和调试子系统
负责VR测试和调试功能
- VR测试模式无头显测试
- 调试输出和诊断工具
- 性能测试工具
"""
__all__ = []

View File

@ -0,0 +1,11 @@
"""
VR跟踪子系统
负责VR设备的跟踪和姿态管理
- HMD和控制器姿态跟踪
- OpenVR姿态数据处理
- 设备检测和管理
- 控制器类和输入包装
"""
__all__ = []

View File

@ -23,7 +23,7 @@ except ImportError:
OPENVR_AVAILABLE = False
# 导入可视化器
from .vr_visualization import VRControllerVisualizer
from core.vr.visualization.controllers import VRControllerVisualizer
class VRController(DirectObject):

View File

@ -0,0 +1,10 @@
"""
VR可视化子系统
负责VR元素的可视化
- 控制器3D模型渲染
- 交互射线和指示器
- VR特效管理
"""
__all__ = []

View File

@ -701,7 +701,7 @@ class VRControllerVisualizer:
# 通过VR管理器获取渲染模式
vr_manager = self.controller.vr_manager
if hasattr(vr_manager, 'vr_render_mode'):
from core.vr_manager import VRRenderMode
from core.vr import VRRenderMode
is_render_pipeline = (vr_manager.vr_render_mode == VRRenderMode.RENDER_PIPELINE and
vr_manager.render_pipeline_enabled)
except Exception as e:

View File

@ -29,11 +29,11 @@ except ImportError:
print("警告: OpenVR未安装VR功能将不可用")
# 导入手柄控制器、动作系统、交互系统、摇杆系统和传送系统
from .vr_controller import LeftController, RightController
from .vr_actions import VRActionManager
from .vr_interaction import VRInteractionManager
from .vr_joystick import VRJoystickManager
from .vr_teleport import VRTeleportSystem
from core.vr.tracking.controllers import LeftController, RightController
from core.vr.interaction.actions import VRActionManager
from core.vr.interaction.grab import VRInteractionManager
from core.vr.interaction.joystick import VRJoystickManager
from core.vr.interaction.teleport import VRTeleportSystem
from enum import Enum
@ -243,7 +243,7 @@ class VRManager(DirectObject):
# 🎨 初始化VR配置管理器
try:
from .vr_config import VRConfigManager
from core.vr.config.vr_config import VRConfigManager
self.config_manager = VRConfigManager()
# 加载配置并应用
self.config_manager.apply_config_to_vr_manager(self)
@ -895,7 +895,7 @@ class VRManager(DirectObject):
# 导入VR stages模块
try:
from .vr_stages import VRPipelineController
from core.vr.rendering.stages import VRPipelineController
except ImportError as e:
print(f"❌ 无法导入VR stages模块: {e}")
return False

View File

@ -114,7 +114,7 @@ class MyWorld(CoreWorld):
# 初始化VR管理器
try:
from core.vr_manager import VRManager
from core.vr import VRManager
self.vr_manager = VRManager(self)
print("✓ VR管理器初始化完成")
except Exception as e:

View File

@ -3558,7 +3558,7 @@ class MainWindow(QMainWindow):
# 根据当前模式设置选中状态
if hasattr(self.world, 'vr_manager') and self.world.vr_manager:
from core.vr_manager import VRRenderMode
from core.vr import VRRenderMode
current_mode = self.world.vr_manager.get_vr_render_mode()
if current_mode == VRRenderMode.RENDER_PIPELINE:
pipeline_render_radio.setChecked(True)
@ -3702,7 +3702,7 @@ class MainWindow(QMainWindow):
config["async_reprojection"] = async_reprojection
# 4⃣ 检查渲染模式是否改变
from core.vr_manager import VRRenderMode
from core.vr import VRRenderMode
current_mode = self.world.vr_manager.get_vr_render_mode()
mode_changed = (current_mode.value != new_mode)