VR 三维切片渲染漫游

本页面含有人体图像等可能引起不适的内容\text{本页面含有人体图像等可能引起不适的内容}

项目概述

本项目是基于 Unity 的 DICOM/PNG 切片体数据加载、缓存、三维体渲染、正交三视图浏览与 XR 浏览插件。项目既可作为独立示例场景运行,也可集成到现有 Unity 工程中。

项目依赖 NuGet For Unity、Odin Serializer、FellowOakDicom 等 package,依赖 .NET Framework 脚本运行时,使用 Odin Serializer 缓存元数据和序列化二进制数据,FellowOakDicom 读取 DICOM 文件与标签。系统兼容 OpenXR Plugin 1.10 以适配 VR 设备,并提供基于 XR Interaction Toolkit 的可选适配工具。目标部署平台为 Windows PC,可通过 SteamVR/ALVR 等路径串流至 Apple Vision Pro 查看渲染结果。

数据可靠支持能力为 ≤ 1024 × 512 × 300 的切片体数据,最大支持能力为 ≤ 2048 × 1024 × 500 的切片体数据。对于超大体数据,插件采用按 Z 轴分段的 Texture3D 组织方式,避免单个 Texture3D 或单个托管数组超过 GPU 与 .NET 运行时限制。

本项目提供以下核心能力:

  1. DICOM 序列导入、排序、窗宽窗位映射与 R8 体纹理生成;
  2. PNG 序列导入、自然排序、RGBA 体纹理生成与用户自定义体素间距;
  3. 体数据分段缓存,可在源数据未变化时复用缓存并减少重复解析成本;
  4. 横断 (Axial)、冠状 (Coronal)、矢状 (Sagittal) 三视图联动显示;
  5. 任意平面实时裁切控制器,支持在三维体渲染中保留指定半空间;
  6. 基于 Raymarching 的三维体显示,支持灰度 DICOM 体和彩色 PNG 体;
  7. XR 辅助配置菜单,可为对象自动添加抓取与 UI 射线交互相关组件。

演示视频

演示使用 PICO 4 Ultra;扫描数据均来自网络公开数据库(VHP 和 TCIA)。

使用说明

支持 Unity 2022.x ~ 2023.x。建议通过 VR 进行交互。

📁 数据目录

  1. 将 DICOM 或 PNG 序列放入 Game/StreamingAssets 下的独立子目录。
  2. 一个目录仅放置一套体数据序列,避免混合不同主体或不同尺寸的数据。
  3. PNG 序列请使用自然排序的命名,例如 slice_0001.pngslice_0002.png
  4. DICOM 数据优先保留完整的 ImagePositionPatientImageOrientationPatientPixelSpacingWindowCenterWindowWidth 标签。

⚙️ 集成流程

  1. (可选)安装可选依赖:OpenXR Plugin 与 XR Interaction Toolkit(详见 VR 配置参考)。
  2. 导入 OmnisDCM.unitypackage(或复制插件目录)。
  3. 将体数据放入 StreamingAssets
  4. 根据目标平台配置普通相机或 XR Origin。
  5. 在场景中放入 Volume.prefab,在 Inspector 面板中配置 DCM/PNG 文件夹名和以及参数。
  6. (可选)放入 Ortho Canvas.prefabOrtho Pivot.prefab,启用三视图联动。
  7. (可选)放入 Slice.prefab,启用任意平面裁切。

👓 VR 配置参考

  1. 在 Unity Package Manager 中安装或确认已安装 OpenXR Plugin
  2. Project Settings > XR Plug-in Management 中启用 OpenXR。
  3. 按目标运行环境配置 OpenXR Feature 和 Interaction Profile。
  4. 若需要使用抓取或 XR UI,请安装 XR Interaction Toolkit
  5. 在场景中创建 XR Origin、左右手 Controller 或 Hand 相关输入对象。
  6. 导入 OmnisDCM.unitypackage 插件(或复制插件目录)。
  7. 将 Assets/OmnisDCM 下的 Volume、Ortho Pivot、Ortho Canvas、Slice 等 prefab 放入场景。
  8. 若需要抓取某个体数据、切片控制器或 UI 面板,请在 Hierarchy 中选中目标对象,执行 GameObject/Omnis/XR/Setup XR Grab Support
  9. 若需要 XR 射线点击 Canvas,请在 Hierarchy 中选中 Canvas 对象,执行 GameObject/Omnis/XR/Setup Tracked Device Graphic Raycaster
  10. 对需要从 Overlay 切换为 World Space 的 Canvas,可挂载 CanvasRenderModeSwitch 并右键 Inspector 脚本执行 Switch Render Mode,使 Canvas 进入世界空间并绑定主相机。
  11. 运行后通过 XR 控制器或手部交互查看、移动或切换体数据与切片 UI。

下载方式

未开放仓库或下载链接,如有需要可与本人联系。