"매 IFC BIM model 의 web-native streaming 형식". 매 2021 IFC.js (Antonio Gonzalez Viegas) → 매 2024 ThatOpen Components 로 rebrand 된 toolchain. 매 Fragment format 매 IFC 의 매 GPU-friendly binary representation — 매 1GB IFC 가 매 50MB Fragment 로 압축, 매 browser 의 매 instant load.
매 핵심
매 IFC 의 limitation
매 STEP-based ASCII format — 매 100MB+ project 매 routine.
매 spatial hierarchy + property + geometry 매 모두 nested — 매 partial load 의 X.
매 Three.js 의 직접 render 의 X — 매 tessellation needed.
매 Fragment 의 solution
매 web-ifc (WASM) 가 매 IFC parse + tessellate.
매 결과를 매 Fragment binary (FlatBuffers-based) 로 serialize.
매 InstancedMesh 단위 grouping → 매 draw call 격감.
매 property data 매 별도 SQLite-WASM file → 매 lazy query.
constindexer=components.get(OBC.IfcRelationsIndexer);awaitindexer.process(model);// Get all walls
constwalls=awaitindexer.getEntitiesByType(model,"IFCWALL");for(constexpressIDofwalls){constprops=awaitmodel.getProperties(expressID);console.log(props.Name.value);}
conststreamer=components.get(OBCF.IfcStreamer);streamer.url="https://cdn.example.com/fragments/";streamer.world=world;awaitstreamer.load(awaitfetch("model-streamed.json").then(r=>r.json()),true// coordinate to origin
);
매 결정 기준
상황
Approach
Small model (< 50MB IFC)
직접 IfcLoader.load()
Medium (50-500MB)
사전 변환된 .frag file
Large (500MB+)
IfcStreamer (tile-based LOD)
Property-heavy query
IfcRelationsIndexer + cached
Mobile viewer
Fragment + simplified geometry
기본값: ThatOpen Components 2026 + Fragment 사전 변환 + property cache.
언제: 매 web-based BIM viewer 매 build. 매 IFC model 매 browser 의 instant load 가 필요. 매 open-source 매 prefer (Forge 의 X).
언제 X: 매 desktop-only workflow (Revit/Navisworks 매 충분). 매 < 10MB model (overkill). 매 photorealistic render (use Unreal/Unity).
❌ 안티패턴
IFC 매 매번 parse: 매 100MB IFC 매 user 마다 30초 wait. 매 backend 사전 변환 필수.
Property 매 eager load: 매 모든 property 매 memory load → OOM. 매 lazy + query-on-demand.
InstancedMesh 무시: 매 IFC 의 매 1000+ identical column 매 매 separate Mesh → 매 draw call 폭발.
GlobalId 의 X: 매 Fragment internal ID 매 IFC GlobalId 와 매 different — 매 cross-system mapping 매 GlobalId 사용.