ほとんどの建築設計ツールは、高価なプロプライエタリソフトウェア(Revit、ArchiCAD)か、機能の限られたWebツールのいずれかです。Pascal Editorはそのどちらでもありません — React Three FiberとWebGPUで構築されたオープンソースの3D建築エディタで、ブラウザ上で建築プロジェクトを作成・共有するために設計されています。
Pascal Editorとは#
Pascal EditorはPascalOrgが開発した3D建築エディタです。Turborepoモノレポで、5つのパッケージにまたがる洗練されたアーキテクチャを採用しています:
@pascal-app/core— ノードスキーマ、シーン状態(Zustand)、レジストリコントラクト、空間クエリ、イベントバス@pascal-app/viewer— React Three Fiberによる3Dレンダリング、共有レンダリングシステム、カメラ/コントロール、ポストプロセッシング@pascal-app/editor— 編集ツール、パネル、選択、直接操作UI@pascal-app/nodes— ノード定義、レンダラー、ジオメトリ、システムを含むビルトインレジストリプラグイン@pascal-app/ui— 共有UIコンポーネント
エディタはReact 19を搭載したNext.js 16アプリケーションとして動作し、WebGPUでレンダリング、Bunをパッケージマネージャーとして使用します。
コアアーキテクチャ#
ノードベースのシーングラフ#
Pascal Editorのすべてはノードです。すべてのノードは基本型を拡張します:
BaseNode {
id: string
type: string
parentId: string | null
visible: boolean
camera?: Camera
metadata?: JSON
}typescriptノードは階層を形成します:
Site
└── Building
└── Level
├── Wall → Item (doors, windows)
├── Slab
├── Ceiling → Item (lights)
├── Roof
├── Zone
├── Scan (3D reference)
└── Guide (2D reference)textスマートな部分:ノードはネストされたツリーではなく、フラットな辞書(Record<id, Node>)に保存されます。親子関係はparentIdとchildren配列で維持され、高速なルックアップとシンプルな状態管理を実現します。
Zustandによる状態管理#
各パッケージは独自のZustandストアを持ちます:
| ストア | パッケージ | 責務 |
|---|---|---|
useScene | @pascal-app/core | シーンデータ、ノードCRUD、アンドゥ/リドゥ(Zundoで50ステップ)、IndexedDB永続化 |
useViewer | @pascal-app/viewer | ビューワ状態:選択、レベル表示モード |
useEditor | apps/editor | エディタ状態:アクティブツール、パネル設定 |
Dirty Nodeシステム#
ノードが変更されると、dirtyとしてマークされます。システムは毎フレームdirtyセットをチェックし、影響を受けるノードのジオメトリのみを再計算します。これがPascal Editorがブラウザでリアルタイムパフォーマンスを達成する方法です。
システムアーキテクチャ#
システムは、レンダーループ(useFrame)で実行されるReactコンポーネントで、ジオメトリとトランスフォームを更新します。
| システム | 責務 |
|---|---|
| WallSystem | マイター接合とドア/窓用CSGカットアウト付き壁ジオメトリを生成 |
| SlabSystem | ポリゴンから床ジオメトリを生成 |
| CeilingSystem | 天井ジオメトリを生成 |
| RoofSystem | 屋根ジオメトリを生成 |
| ItemSystem | 壁、天井、床にアイテムを配置 |
| LevelSystem | レベル表示と垂直位置決めを処理 |
シーンレジストリ#
レジストリはノードIDをThree.jsオブジェクトにマッピングし、シーングラフのトラバースなしで高速ルックアップを実現します。
編集ツール#
エディタは特殊なツールを備えたツールバーを提供します:
- SelectTool — 階層ナビゲーションによる選択と操作
- WallTool — マイター接合とカットアウト付きの壁を描画
- ZoneTool — 機能ゾーンを作成
- ItemTool — 家具、備品、ドア、窓を配置
- SlabTool — 床スラブを作成
プラグインシステム#
Pascal Editorはプラグインで拡張可能です。プラグインはビルトインと同じマニフェストを通じて、ノード種類(スキーマ、3D/2Dレンダリング、配置ツール、インスペクタパラメトリック)と左サイドバーパネルを提供します。
技術スタック#
| レイヤー | 技術 |
|---|---|
| フレームワーク | React 19 + Next.js 16 |
| 3Dレンダリング | Three.js (WebGPU) + React Three Fiber + Drei |
| 状態管理 | Zustand + Zundo + IndexedDB |
| バリデーション | Zod |
| ジオメトリ | three-bvh-csg |
| モノレポ | Turborepo |
| パッケージマネージャー | Bun |
始め方#
git clone https://github.com/pascalorg/editor
cd editor
bun install
bun dev
# http://localhost:3002 を開くbashPascal Editorが重要な理由#
ほとんどのオープンソース3Dエディタはゲームエンジン(Godot)か汎用CADツールです。Pascal Editorは建築設計に特化して構築されています — 壁のマイター接合、スラブ生成、階管理、ドア/窓のカットアウトが組み込まれています。
WebGPUレンダラーにより、複雑な建築モデルをブラウザでリアルタイムパフォーマンスで処理できます。そしてプラグインアーキテクチャにより、建築エディタから完全な建築設計プラットフォームへと成長できます。
開発者にとっては、React Three Fiberアーキテクチャの実践的な教科書でもあり、実際の3Dアプリケーションでストア、システム、レンダラー、プラグインを構造化する方法を示しています。