Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

mago3D의 파일 포맷(F4D)를 둘러싼 각종 알고리즘들

908 views

Published on

One of big hurdle to integrate BIM and 3D GIS simultaneously is handling and visualization of massive 3D data. The file size of 3D surface model converted from parametric BIM model is usually very large. And converted 3D surface model has a tendency to contain many duplicated objects and meshes since those objects are mainly artificial ones. It is usually big challenge to visualize those large size 3D surface model with WebGL Globe itself without applying special techniques to handle it.
To overcome this hurdle, new format called F4D has been developed for reducing file size and increasing rendering speed. F4D can be regarded as a service format for increasing 3D data service speed over the internet just like tile map service in 2D GIS does the same thing. F4D format aims at reducing file size of surface model by removing duplicated objects and recording only one object information for duplicated objects with block reference model. F4D format can contain unique mesh IDs, transformation matrix, and color to constitute each 3D objects also.
F4D format is not file based but folder based one that contains several datasets in folders. F4D format is composed of 1 header file and 3 sub folders, those are HeaderAsimetric.hed, Bricks folder, Models folder and References folder respectively. Parents folder name of datasets is the same as that of object name in BIM or other 3D files.
To increase the rendering speed and to reduce network traffic, F4D adopted variable depth octree indexing. This indexing recursively decomposes the 3 dimensional space and removes empty space till to find so-called ‘Survived’ octree. This kind of Octree indexing gives several benefits over conventional method. First, server can use this indexing information as an efficient data packet. Second, client can increase the rendering speed by easily determining which object should be drawn. Thirdly, network traffic can be reduced by sending/receiving the bundle of Octree data.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

mago3D의 파일 포맷(F4D)를 둘러싼 각종 알고리즘들

  1. 1. MAGO3D에서 사용하는 서비스 데이터(F4D)를 만드는 방법 2017년 6월
  2. 2. F4D 제작 과정 원시 데이터 로딩 삼각형 꼭지점 순서 보정 bounding box 계산 VBO(Vertex Buffer Object) 생성 model/reference 결정 공간 octree에 reference 할당 LEGO structure 생성 작업순서 face culling을 위한 normal vector 보정 rougher LOD를 위한 데이터 생성 경량화 logic 삼각형 크기 별로 정렬해서 저장 flexible octree depth 적용 loading time out 적용 가시성 색인(visibility index) 생성 exterior object extraction not yet fixed. occlusion culling을 위한 pre-processing
  3. 3. 삼각형 꼭지점 순서 보정 ▲ face culling - WebGL이 지원하는 성능 향상 기법 → WebGL이 rendering을 수행할 때 기본적으로 face culling을 수행하여 성능을 향상시킨다. → face culling이란 카메라가 삼각형의 뒷면을 보고 있다면 삼각형을 그리지 않는 기법 → 삼각형의 앞/뒷면을 결정하는 것은 삼각형의 꼭지점 순서
  4. 4. 삼각형 꼭지점 순서 보정 - 계속 ▲ plane normal이 주변 삼각형과 일치하지 않는 삼각형 사례 발생 → 이 경우 정상적으로 렌더링 되지 않아 화면에서 사라지는 현상 발생 잘못된 삼각형 꼭지점 저장 순서에 의해 face culling 기법으로 사라진 삼각형들
  5. 5. 삼각형 꼭지점 순서 보정 - 계속 ▲ vertex normal을 이용해 plane normal 오류 여부 판단 → 대부분의 원시 자료 포맷의 경우 vertex normal을 지원하므로 이를 이용해 오류 판단 vertex의 순서가 뒤집혔다고 판단하는 예시vertex normal은 plane normal들로부터 산출
  6. 6. model/reference ▲ one model, multi-instance - 경량화 logic → 건축물/시설물 등 인공적인 구조물들은 필연적으로 기하학적으로 합동인 객체들이 많다. → 따라서 원본 geometry(model) 1개와 실체화 될 객체들의(reference) 실체화 정보만 관리한다면 데이터 용량 부분을 크게 개선할 수 있다. model/reference 원리
  7. 7. model/reference - 계속 ▲ 두 객체의 합동 여부 확인 - core logic → congruence test는 2단계의 logic으로 구성 → 1단계는 기본 검증 단계 1) 비교 대상의 두 객체들 각각의 vertex/삼각형 개수가 같은지 확인 2) 각 객체의 첫 번째 삼각형이 기하학적으로 합동인지 확인 → 2단계는 상세 검증 단계 1) source 객체의 첫 번째 삼각형을 target의 첫 번째 삼각형과 일치시키는 변환행렬 산출 2) 산출된 변환행렬을 source의 모든 삼각형에 적용했을 때 target의 모든 삼각형과 일치하는지 확인 → 변환행렬은 두 번의 회전행렬과 한 번의 평행이동 행렬로 구성
  8. 8. source/target triangles 1st rotational matrix translational matrix2nd rotational matrix
  9. 9. VBO(Vertex Buffer Object) 생성 ▲ VBO를 생성할 때 삼각형을 크기별로 정렬했다는 의미는? → VBO란 3차원 데이터를 그래픽 카드가 이해할 수 있는 형태로 가공된 binary 덩어리 → VBO에 기록되는 데이터는 모두 array 형태 → array이기 때문에 모두를 사용할 수 도 있지만 일부 구간만을 사용 가능 → 따라서, array를 만들 때 삼각형을 크기 구분 별로 정렬해서 만들게 되면 삼각형 크기에 대한 filtering-out logic/algorithm 추가 구현 및 수행 필요 없이 크기 별 삼각형 취급이 가능 → 데이터가 매우 무거운 plant/infrastructure 종류의 F4D에 적용하게 되면 성능/utility 확보 가능
  10. 10. 어떤 방식으로 기록하든 VBO는 array의 집합 삼각형 크기 별로 array를 만들게 되면 추가 logic 구현/수행 필요 없이 크기 별 취급 가능
  11. 11. 화면 이동 중에 원본 3차원 데이터에서 작은 크기의 삼각형을 생략하고 표출하고 있는 모습 정지 화면 마우스로 화면 조작 중
  12. 12. 공간 octree ▲ octree란? → 2D GIS에서의 tile처럼 3D GIS에서 공간자료를 volume 별로 묶는 단위 → rendering 대상을 결정할 때나, network를 통해 데이터를 요청/수신할 때 유리 개로 나누어 가는 octree 원리 octree를 depth 1로 구성한 모습
  13. 13. octree를 사용하면 rendering 대상 결정 logic 수행 시 성능 저하 방지 network를 통해 octree 단위로 송/수신하게 되면 resource 절감
  14. 14. 공간 octree - 계속 ▲ flexible depth octree - what and why? → 데이터셋을 구성하는 객체들이 매우 먼 거리로 분리되어 있는 원시 자료 사례 발생 → bounding box/octree node 단위로 수행되는 logic/algorithm들이 오작동 실제 객체 크기에 비해 매우 먼 거리로 객체들이 분리되어 있는 원시 자료 사례
  15. 15. 가변 공간 octree - 적절한 크기의 octree가 될 때까지 octee depth 적용 및 빈 octree 제거
  16. 16. Lego Structure ▲ simplified data의 필요성 → 기존의 데이터 volume 크기 별 분류 후 LOD에 적용하는 방식은 적용 불가 → rough LOD를 위해 큰 volume의 데이터만 모았음에도 데이터를 구성하는 객체들의 숫자와 용량이 매우 크기 때문 → rough LOD용 데이터 structure 설계 및 구현 → flexible depth octree 기법을 활용하여 가로/세로/높이가 고정된 단위 블록을 활용한 레고 블록 집합체 생성
  17. 17. PC 통신 시절 ASCII로 그린 그림들. 레고 블록으로 데이터를 표현하는 방식과 같은 개념 가변 depth octree 기법으로 rougher 구조물을 구성하는 과정
  18. 18. 단위 블록의 크기를 변경하면 레고 블록 집합체의 정교함도 제어 가능하다 원본 model로부터 만들어진 레고 블록 형태의 구조물
  19. 19. 가시성 색인(Visibility Indexing) ▲ occlusion culling을 위한 pre-processing - Visibility Indexing → occlusion culling이란 앞의 객체에 의해 가려진 뒤의 객체는 그리지 않는 방식 → 가려짐 여부를 run-time에서 수행하는 것은 성능에 매우 좋지 않은 영향을 미치므로 미리 해당 정보를 만들어놔야 한다. 말 그대로 가시성 색인. → off-screen rendering을 이용한 color coding 방식으로 가시성 테스트 수행 → 공간 octree node별로 가시성 색인 정보를 만들어서 rendering 수행 시 바로 적용 미리 보이는 대상을 기록해두면 rendering time때 빠르게 대상을 선별할 수 있다. 가시성 색인에(visibility index) 의한 occlusion culling 원리
  20. 20. 각 vision cell에서 촬영방향마다 가시성 테스트를 수행하여 보이는 객체들을 산출 [각 vision cell에서의 indexing 정보] ∩ [각 공간 octree에 속해 있는 객체들] = 해당 vision cell에서 해당 octree를 바라봤을 때 보이는 객체들
  21. 21. 감사합니다. https://github.com/gaia3d

×