Pascal Editor:开源Web 3D建筑设计编辑器,零安装专业级建模与实时渲染

原创 发布日期:
89

一、Pascal Editor是什么

Pascal Editor是一款完全开源、浏览器原生运行的专业级3D建筑编辑器,由pascalorg团队开发维护,核心定位是打造无需安装、开箱即用的轻量化3D建筑设计工具,替代传统桌面端BIM软件(如Revit、SketchUp)的基础建模与渲染能力。它基于现代Web技术栈构建,依托WebGPU实现硬件加速渲染,结合React生态与状态管理方案,构建出一套完整的3D场景编辑、数据管理与交互系统,让用户在浏览器中即可完成从场地规划、建筑搭建到构件细节编辑的全流程3D建筑设计工作。

该项目采用Monorepo(单体仓库)架构,通过Turborepo管理,将核心能力拆分为core(核心数据层)、viewer(3D渲染层)、editor(应用交互层)三大模块,实现关注点分离,既保证代码可维护性,又支持各模块独立扩展与复用。Pascal Editor的核心设计理念是“轻量化、高性能、易上手”,面向建筑师、室内设计师、学生、个人创作者等群体,提供免费、开源的3D建筑设计解决方案,打破专业建模软件的高门槛与高成本限制。

二、功能特色

Pascal Editor围绕3D建筑设计全流程,打造了从基础建模到高级编辑、从实时渲染到数据管理的完整功能体系,核心特色如下:

1. 零安装、跨端可用,浏览器原生运行

  • 无需客户端:纯Web应用,打开浏览器即可访问使用,无需下载安装任何软件,适配Windows、macOS、Linux、平板、手机等全平台设备。

  • 响应式设计:界面自适应不同屏幕尺寸,支持触屏操作,移动端可完成基础建模与查看,桌面端提供完整编辑能力。

  • 轻量化启动:无需配置复杂环境,打开网页即可进入编辑界面,加载速度快,降低使用门槛。

2. 专业级建筑层级建模体系

Pascal Editor采用节点式层级数据模型,贴合建筑领域真实结构,支持从宏观到微观的全维度建模:

  • 层级结构Site(场地)→ Building(建筑)→ Level(楼层)→ Wall(墙体)/Slab(楼板)/Ceiling(天花板)/Zone(区域)/Item(门窗/灯具/家具),逻辑清晰,层级化管理所有建筑元素。

  • 参数化构件:所有构件(墙体、楼板、门窗等)均支持参数化编辑,可精确调整尺寸、位置、厚度、高度、材质等属性,实现精准建模。

  • 智能几何生成:墙体自动切角(Mitering)、门窗自动开洞(CSG布尔运算)、楼板智能对齐高度、碰撞检测与放置校验,减少手动调整工作量。

3. 高性能实时3D渲染与交互

  • WebGPU硬件加速:基于WebGPU实现3D渲染,调用本地显卡算力,渲染性能接近原生桌面软件,支持复杂场景流畅运行。

  • 脏节点更新机制:仅重渲染修改过的“脏节点”,而非全场景刷新,大幅提升编辑时的渲染效率,操作无卡顿。

  • 多视角控制:支持360°旋转、平移、缩放,提供俯视、透视、轴测等多种视角,可一键切换楼层堆叠、爆炸、单独查看三种模式,方便查看建筑内部结构。

  • 实时预览:编辑操作(如绘制墙体、调整尺寸)实时反馈到3D视口,所见即所得,提升设计效率。

4. 完善的场景数据管理

  • 状态持久化:场景数据自动保存到浏览器IndexedDB,关闭页面后重新打开可恢复编辑进度,无需手动保存。

  • 撤销/重做:内置Zundo插件,支持50步以上撤销/重做操作,应对编辑失误,提升操作容错率。

  • 自动保存:每2秒自动同步场景状态,避免数据丢失,支持版本控制,未来可实现模型回滚。

  • 数据导入导出:支持场景数据以JSON格式导出,可分享给他人,也可导入外部场景文件,实现跨设备协作。

5. 丰富的编辑工具与交互能力

  • 基础工具集:提供墙体工具、楼板工具、屋顶工具、区域划分工具、构件放置工具等,覆盖建筑建模全流程。

  • 选择与编辑:支持单选、框选建筑元素,右侧属性面板实时显示并可编辑选中元素的所有参数,支持批量修改。

  • 层级导航:通过面包屑导航快速跳转不同层级(场地→建筑→楼层→构件),支持元素层级展开/折叠,方便管理复杂场景。

  • 主题切换:内置浅色/深色双主题,可一键切换,适配不同使用场景与视觉偏好。

6. 开源可扩展,生态友好

  • 完全开源:代码托管于GitHub,采用开源协议,支持二次开发、定制修改与商业使用(需遵循协议)。

  • 模块化架构:三大核心模块解耦,coreviewer可独立作为npm包使用,方便集成到其他Web项目中。

  • 社区支持:提供Discord社区、GitHub Discussions,支持用户交流、反馈问题、提交贡献,持续迭代功能。

核心模块职责对比表

模块名称 核心职责 技术依赖
@pascal-app/core 节点Schema定义、场景状态管理、几何生成、空间查询、事件总线、数据持久化 TypeScript、Zustand、Zundo、IndexedDB、Zod
@pascal-app/viewer 3D渲染、相机控制、后期处理、场景渲染优化 React Three Fiber、Three.js、WebGPU
apps/editor UI组件、交互工具、编辑行为、面板管理、用户交互逻辑 Next.js、React、TypeScript

Pascal Editor

三、技术细节

Pascal Editor的技术架构围绕“高性能、可维护、易扩展”设计,采用现代Web技术栈,结合3D渲染与状态管理最佳实践,核心技术细节如下:

1. 整体架构:Turborepo Monorepo

项目采用Turborepo管理Monorepo,将代码拆分为apps(应用)、packages(核心包)、tooling(工具配置)三大目录,实现代码复用与构建优化:

  • apps/editor:基于Next.js开发的编辑器主应用,负责UI渲染、用户交互、工具集成,是用户直接使用的入口。

  • packages/core:核心数据层,定义所有建筑节点的Schema(Zod校验)、场景状态Store(Zustand)、几何生成系统、空间网格(碰撞检测)、事件总线,是整个编辑器的数据基础。

  • packages/viewer:3D渲染层,基于React Three Fiber封装Three.js能力,提供默认相机、控制器、后期处理、脏节点渲染优化,负责将core层的节点数据渲染为3D场景。

  • tooling:包含ESLint、TypeScript、Biome等共享配置,统一代码规范,简化开发流程。

2. 状态管理:Zustand + Zundo + IndexedDB

采用Zustand作为状态管理库,替代Redux等复杂方案,实现轻量、高效的状态管理,同时结合Zundo与IndexedDB实现高级能力:

  • 多Store隔离:分为useScene(core层,场景数据)、useViewer(viewer层,渲染状态)、useEditor(editor层,交互状态),每个Store专注单一职责,避免状态混乱。

    • useScene:管理所有节点数据、CRUD操作、脏节点标记、撤销/重做历史,数据持久化到IndexedDB,支持组件内外访问。

    • useViewer:管理相机状态、选中元素、楼层显示模式、渲染参数,控制3D视口的渲染行为。

    • useEditor:管理激活工具、面板状态、用户偏好、编辑模式,控制编辑器的交互逻辑。

  • 状态访问方式:React组件内通过订阅式获取状态(const nodes = useScene((state) => state.nodes)),组件外通过getState()直接访问/修改(useScene.getState().createNode(...)),灵活适配不同场景。

  • 撤销/重做:集成Zundo插件,为useScene添加撤销/重做历史,支持50步以上操作回溯,提升编辑容错率。

  • 持久化useScene数据自动同步到IndexedDB,浏览器关闭后数据不丢失,重新打开可恢复场景。

3. 3D渲染:React Three Fiber + WebGPU

渲染层基于React Three Fiber(R3F)构建,R3F是Three.js的React绑定,将3D场景元素转化为React组件,实现声明式3D开发,结合WebGPU实现高性能渲染:

  • 声明式渲染:通过React组件语法描述3D场景(如<mesh /><geometry />),与React生态无缝集成,降低3D开发门槛。

  • WebGPU加速:使用WebGPU替代传统WebGL,利用现代显卡的并行计算能力,大幅提升渲染帧率,支持复杂建筑场景流畅运行。

  • 脏节点优化:core层标记修改过的节点为“脏节点”,viewer层仅重渲染脏节点对应的3D对象,减少渲染计算量,提升交互响应速度。

  • 相机与控制:内置默认透视相机、轨道控制器,支持自动旋转、视角切换、楼层模式切换,提供专业级3D交互体验。

4. 数据模型:节点式Schema设计

所有建筑元素均基于节点(Node)模型设计,采用Zod进行类型校验,保证数据安全与一致性:

  • BaseNode基类:所有节点继承自BaseNode,包含id(唯一标识,带类型前缀)、type(节点类型)、parentId(父节点ID)、visible(可见性)、metadata(元数据)等通用属性。

  • 扁平存储+父子引用:节点采用扁平字典(Record<string, Node>)存储,通过parentIdchildren数组维护层级关系,避免嵌套树的复杂遍历,提升数据访问效率。

  • 类型化节点:定义SiteNodeBuildingNodeLevelNodeWallNodeSlabNodeItemNode等具体节点类型,每个类型有专属属性(如墙体的pointsheightthickness),通过Zod Schema校验数据合法性。

5. 开发与构建:Next.js + Bun + Turborepo

  • 前端框架:主应用基于Next.js开发,支持服务端渲染(SSR)、静态站点生成(SSG),优化首屏加载速度与SEO。

  • 包管理器:使用Bun替代npm/yarn,提升依赖安装、构建、运行速度,简化开发流程。

  • 构建优化:Turborepo提供增量构建、缓存复用能力,大幅缩短Monorepo的构建时间,支持多包并行开发。

  • 代码规范:集成ESLint、TypeScript、Biome,统一代码风格,强制类型安全,减少运行时错误。

四、应用场景

Pascal Editor凭借轻量化、开源、高性能的特点,适用于多个领域的3D建筑设计与可视化需求,核心应用场景如下:

1. 建筑设计与BIM辅助

  • 方案快速建模:建筑师可快速搭建建筑概念方案,生成3D模型,替代传统手绘与2D图纸,提升方案沟通效率。

  • BIM轻量化应用:作为BIM软件的补充工具,完成简单建筑的建模与渲染,导出数据后可集成到专业BIM平台,降低BIM使用成本。

  • 户型设计:室内设计师快速绘制户型图,生成3D模型,实时调整墙体、门窗、家具布局,直观展示设计效果。

2. 室内装修与家居设计

  • 家居布局规划:个人用户或设计师可快速搭建室内场景,放置家具、灯具、软装,预览不同布局效果,辅助装修决策。

  • 软装搭配可视化:调整家具尺寸、材质、颜色,实时查看搭配效果,解决传统2D图纸无法直观展示的问题。

  • 装修方案分享:导出3D场景数据,分享给业主或施工方,实现方案可视化沟通,减少理解偏差。

3. 教育教学与学习

  • 建筑专业教学:高校建筑、室内设计专业可用于教学,让学生在浏览器中学习3D建模、建筑结构知识,无需安装专业软件。

  • 科普与兴趣学习:面向青少年的建筑科普工具,通过简单操作了解建筑结构,激发设计兴趣,降低3D建模学习门槛。

  • 课程作业:学生可使用Pascal Editor完成建筑设计作业,快速生成3D模型,提交可视化成果。

4. 游戏与虚拟场景搭建

  • 游戏场景原型:独立游戏开发者快速搭建建筑类游戏场景(如模拟经营、冒险游戏),生成3D建筑模型,导入游戏引擎使用。

  • 虚拟展厅搭建:搭建线上虚拟展厅、展馆,3D展示产品或内容,适配线上展会、虚拟活动场景。

  • 元宇宙场景构建:作为元宇宙空间的建筑搭建工具,快速生成虚拟建筑,适配虚拟社交、办公场景。

5. 其他场景

  • 房产可视化:房产中介、开发商快速生成房源3D模型,在线展示户型结构,提升房源吸引力。

  • 工程可视化:小型建筑工程的3D可视化,辅助施工交底、进度展示,降低沟通成本。

  • 个人创作:建筑爱好者、设计师的个人创作工具,免费实现3D建筑设计想法,无需承担专业软件费用。

五、使用方法

Pascal Editor提供在线使用本地开发两种方式,满足不同用户需求,操作简单易上手:

(一)在线使用(推荐,零配置)

  1. 打开在线地址:访问Pascal Editor官方在线演示地址(https://editor.pascal.org),无需注册即可进入编辑界面(注册后可支持云端同步)。

  2. 创建新场景

    • 点击左侧工具栏的「Site」工具,在3D视口中点击创建场地(Site)节点。

    • 选中场地节点,点击「Building」工具,创建建筑(Building)节点。

    • 选中建筑节点,点击「Level」工具,创建楼层(Level)节点,可创建多个楼层。

  3. 基础建模操作

    • 绘制墙体:选中楼层节点,切换到「Wall」工具,在2D网格上拖拽鼠标绘制墙体,系统自动处理墙角切角与连接。

    • 添加楼板:切换到「Slab」工具,点击楼层区域,自动生成对齐墙体的楼板,可调整厚度与高度。

    • 放置构件:切换到「Item」工具,选择门窗、灯具、家具等构件,点击墙体或楼板放置,可调整尺寸与位置。

  4. 编辑与调整

    • 选中任意节点(墙体、楼板、构件等),右侧属性面板显示其参数,可直接修改数值(如长度、高度、厚度),实时生效。

    • 使用鼠标左键旋转视角,右键平移,滚轮缩放,切换楼层模式(堆叠/爆炸/单独)查看建筑结构。

  5. 保存与导出

    • 场景自动保存到浏览器IndexedDB,关闭页面后重新打开可恢复。

    • 点击顶部「Export」按钮,导出场景JSON数据,可分享或导入到其他设备。

(二)本地开发与部署(适合开发者)

1. 环境准备

  • 安装Bun(https://bun.sh),作为包管理器与运行时。

  • 克隆仓库:git clone https://github.com/pascalorg/editor.git

  • 进入项目目录:cd editor

2. 安装依赖

# 安装所有依赖
bun install

3. 本地运行

# 启动开发服务器,默认端口3000
bun dev

运行成功后,打开浏览器访问 http://localhost:3000 即可使用本地版本。

4. 构建生产版本

# 构建所有包与应用
bun run build

构建产物位于 apps/editor/.next 目录,可部署到Vercel、Netlify等平台。

5. Docker部署(可选)

项目提供Docker Compose配置,可快速容器化部署:

# 启动Docker容器
docker compose up -d

访问 http://localhost:3000 即可使用。

(三)核心操作快捷键

  • Ctrl/Cmd + Z:撤销操作

  • Ctrl/Cmd + Y:重做操作

  • 鼠标左键:旋转视角

  • 鼠标右键:平移视角

  • 鼠标滚轮:缩放视角

  • Esc:取消当前工具/选中状态

六、常见问题解答(FAQ)

Pascal Editor是否完全免费?

是的,Pascal Editor是完全开源免费的工具,个人与商业使用均无需支付费用,代码托管于GitHub,可自由使用、修改、分发(需遵循开源协议)。

使用Pascal Editor需要安装软件吗?

不需要,Pascal Editor是纯Web应用,打开浏览器即可在线使用;开发者可克隆代码本地运行,但普通用户无需任何安装操作。

Pascal Editor支持哪些浏览器?

支持所有现代浏览器,包括Chrome、Edge、Firefox、Safari(需更新到最新版本),需浏览器支持WebGPU(Chrome 113+、Edge 113+、Firefox 119+、Safari 17+)。

场景数据保存在哪里?关闭页面会丢失吗?

默认情况下,场景数据保存在浏览器的IndexedDB中,关闭页面、刷新页面均不会丢失;注册并登录后,数据可同步到云端,支持跨设备访问。

可以导出3D模型到其他软件(如Blender、Revit)吗?

目前支持导出场景JSON数据,可用于Pascal Editor的跨设备导入;暂不直接导出FBX、OBJ、Revit格式,可通过二次开发或第三方工具实现格式转换。

编辑大型复杂场景时会卡顿吗?

Pascal Editor采用WebGPU硬件加速与脏节点渲染优化,普通电脑可流畅编辑中小型场景;大型复杂场景(如多层建筑+大量构件)可能会有轻微卡顿,建议升级显卡或简化场景细节。

如何提交bug或功能建议?

可通过GitHub Issues提交bug反馈,通过GitHub Discussions或Discord社区提交功能建议,项目团队会定期查看并处理。

可以二次开发Pascal Editor吗?

可以,项目采用开源协议,开发者可克隆代码进行二次开发、定制功能,也可将coreviewer包集成到自己的Web项目中。

Pascal Editor支持多人协作编辑吗?

目前暂不支持实时多人协作,仅支持单人编辑、数据导出分享;未来版本计划添加多人协作功能。

移动端可以使用Pascal Editor吗?

可以,移动端浏览器可打开在线地址,支持基础的建模、查看、编辑操作,但受屏幕尺寸限制,桌面端体验更完整。

七、相关链接

八、总结

Pascal Editor是一款基于React Three Fiber与WebGPU打造的开源3D建筑编辑器,凭借零安装、浏览器原生运行、高性能渲染、专业级建模能力,为建筑设计、室内装修、教育教学等领域提供了轻量化、低成本的3D设计解决方案。它采用模块化Monorepo架构,实现数据层、渲染层、应用层解耦,结合Zustand状态管理、脏节点优化、参数化建模等技术,既保证了操作的流畅性与数据的安全性,又降低了3D建筑建模的技术门槛。作为完全开源的工具,Pascal Editor打破了专业BIM软件的付费壁垒,让更多用户能够免费使用专业级3D建筑设计能力,同时支持二次开发与社区贡献,具备广阔的应用与扩展前景,是Web端3D建筑编辑领域的优质开源选择。

打赏
THE END
作者头像
97ai
我不是在训练模型,而是在与未来的自己对话。