# TwinForge **Repository Path**: mic-HAO/twin-forge ## Basic Information - **Project Name**: TwinForge - **Description**: TwinForge — 基于 Vue3 + TypeScript + Three.js + Vite 的 3D 数字孪生基础框架。提供模块化引擎架构、多格式模型加载(GLTF/FBX/OBJ)、灯光/材质/动画/交互/标注/后处理六大子系统、插件机制,以及 10+ Vue Composables 深度集成,开箱即用。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 2 - **Created**: 2026-04-30 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TwinForge 基于 **Vue 3 + TypeScript + Three.js + Vite** 的 3D 数字孪生基础框架。提供模块化引擎架构、多格式模型加载(GLTF/FBX/OBJ)、灯光/材质/动画/交互/标注/后处理六大子系统、插件机制,以及 10+ Vue Composables 深度集成,开箱即用。 [English](./README.en.md) ## 效果展示 ### 整体界面 3D 视口 + 右侧控制面板,支持相机、灯光、材质、后处理、动画、辅助工具等全方位控制。 ![整体界面](./docs/images/demo-overview.png) ### 材质模式切换 一键切换四种显示模式,适用于不同的观察与分析场景: | 默认渲染 | 线框模式 | |:---:|:---:| | ![默认](./docs/images/Material-1.png) | ![线框](./docs/images/Material-2.png) | | 标准 PBR 材质渲染,还原真实质感 | 绿色线框显示,清晰展示模型网格结构 | | X-Ray 透视 | 透明模式 | |:---:|:---:| | ![X-Ray](./docs/images/Material-3.png) | ![透明](./docs/images/Material-4.png) | | 蓝色辉光透视效果,可观察内部结构 | 半透明显示,查看模型层叠关系 | ### 后处理效果 支持 Bloom 辉光、Outline 轮廓描边、SSAO 环境光遮蔽、FXAA 抗锯齿,可动态组合启停。 ![后处理效果](./docs/images/feature-postprocess.png) ## 特性 - **模块化引擎架构** — 核心引擎 + 子系统注册机制,各功能模块可独立装卸 - **多格式模型加载** — 支持 GLTF/GLB、FBX、OBJ 格式,内置 Draco 压缩解码 - **灯光系统** — 支持 5 种灯光类型(环境光、方向光、点光源、聚光灯、半球光),内置多套灯光预设 - **材质系统** — 一键切换线框、透明、X-Ray 等显示模式,支持材质预设与原始材质恢复 - **动画系统** — AnimationMixer 集成 + Tween 补间动画管理 - **射线拾取** — 支持点击、悬停、框选等交互事件 - **标注系统** — CSS2D / CSS3D 两种标注适配器 - **后处理效果** — Bloom、Outline、SSAO、FXAA 四种效果,支持动态启停 - **插件机制** — 统一的插件接口,便于功能扩展 - **Vue 深度集成** — 10+ 组合式函数(Composables)封装引擎功能,响应式数据驱动 - **TypeScript 全量类型** — 严格模式,所有 API 均有完整类型定义 ## 技术栈 | 类别 | 技术 | |------|------| | 框架 | Vue 3.5(Composition API + ` ``` ### 在子组件中使用 Composables ```ts import { useEngineInstance } from '@/composables/useEngine' import { useModel } from '@/composables/useModel' const engine = useEngineInstance() const { loadModel, progress, isLoading } = useModel() await loadModel('/models/example.glb', { castShadow: true }) ``` ### 自定义插件 实现 `IEnginePlugin` 接口即可创建自定义插件: ```ts import type { IEnginePlugin } from '@/engine' const myPlugin: IEnginePlugin = { name: 'my-plugin', install(engine) { engine.eventBus.on('object:click', ({ object }) => { console.log('点击了:', object.name) }) }, dispose() { // 清理资源 }, } ``` ### 引擎配置项 ```ts interface EngineOptions { antialias?: boolean // 抗锯齿(默认 true) alpha?: boolean // 透明背景(默认 false) shadowMap?: boolean // 阴影贴图(默认 true) pixelRatio?: number | 'auto' // 像素比(默认 'auto') toneMapping?: ToneMapping // 色调映射(默认 ACESFilmicToneMapping) toneMappingExposure?: number // 曝光度(默认 1.0) renderQuality?: 'high' | 'medium' | 'low' // 渲染质量 enablePostProcessing?: boolean // 后处理(默认 true) enableLabels?: boolean // 标注系统(默认 true) debug?: boolean // 调试模式(默认 false) } ``` ### 模型放置 将 3D 模型文件放入 `public/models/` 目录,支持以下格式: | 格式 | 扩展名 | 说明 | |------|--------|------| | glTF / GLB | `.gltf` `.glb` | 推荐格式,支持 Draco 压缩 | | FBX | `.fbx` | 支持骨骼动画 | | OBJ | `.obj` | 基础网格格式 | ## 可用脚本 | 命令 | 说明 | |------|------| | `pnpm dev` | 启动开发服务器 | | `pnpm build` | 类型检查 + 生产构建 | | `pnpm preview` | 预览生产构建结果 | | `pnpm type-check` | 仅运行 TypeScript 类型检查 | | `pnpm lint` | ESLint 检查并自动修复 | | `pnpm lint:style` | Stylelint 检查并自动修复 | | `pnpm format` | Prettier 格式化 | ## 浏览器兼容性 需要支持 WebGL 2.0 的现代浏览器: - Chrome >= 90 - Firefox >= 90 - Safari >= 15 - Edge >= 90 ## 参与贡献 1. Fork 本仓库 2. 新建 `feat/xxx` 分支 3. 提交代码(遵循 [Conventional Commits](https://www.conventionalcommits.org/) 规范) 4. 新建 Pull Request ## 开源协议 [MIT](./LICENSE)