[vtk]Data pipelines(vtk 핵심 설계 철학, stl예시)

박두팔이·2025년 5월 16일

3D

목록 보기
2/8

Data pipelines(vtk 핵심 설계 철학)

예시: stl file

  1. FileReader로 STL 파일 데이터를 읽음
  2. STL 파일 데이터를 ArrayBuffer 형식으로 변환
  3. vtkSTLReader가 데이터를 받아서 3D 모델로 변환
  • vtkSTLReader(STL → PolyData 변환)
    - reader.getOutputPort() → STL 파일을 vtkPolyData로 변환하여 출력 normals.setInputConnection() → 법선 벡터를 계산하여 새로운 vtkPolyData를 생성
    - STLReader가 데이터를 polyData로 변환할 때,
    법선 계산이 없으면 표면이 각지고 어둡게 보이며 조명이 적용되지 않는 상태
    법선 계산이 적용되면 표면이 부드럽고 자연스러운 조명 효과 적용.

  • vtkMapper(PolyData를 GPU가 이해할 수 있도록 변환, 무엇을 어떻게 보여줄지에 대한 처리자)
    - vtkMapper는 vtkActor와 vtkPolyData를 연결하는 필수 요소

    • 없으면 vtkActor가 데이터를 받을 수 없기 때문에 렌더링 불가
  • vtkActor (최종 화면에 출력되는 3D객체)

    • Mapper에서 변환된 데이터를 받아 화면에 배치하고, 색상·조명·위치·크기 등을 조절하는 역할
    • actor의 주요 역할은 색상, 투명도, 머티리얼 설정 및 위치, 회전, 크기 등을 설정하고, 조명과의 상호작용, 애니메이션 적용을 가능하도록 함.
  • vtkRenderer (씬에 추가)

  • vtkRenderWindow (최종 화면 출력)


정리

vtkPolyData (3D 모델 원본 데이터 = 기하학적 데이터): VTK: vtkPolyData Class Reference

vtkMapper (PolyData → GPU용 데이터로 변환)

vtkActor (위치, 색상, 조명 등 최종 설정)

vtkRenderer (씬에 추가)

vtkRenderWindow (최종 화면 출력)


VTK 핵심 설계 원칙

plantUML로 표현한 VTK ERD

  • VTK의 파이프라인 구조는 “분리된 단계들 간의 느슨한 결합(loose coupling)”과 “데이터 흐름 제어”를 중심 원칙으로 한다.

  • 데이터는 상태를 공유하지 않고 흐른다.

  • 각 컴포넌트는 자기 역할만 수행하고, 다음 단계에 위임한다.

  • 컴포넌트 간의 연결은 인터페이스(input/output port)로만 이뤄짐.

  • 데이터를 변환하거나 렌더링할 때, 진짜로 필요한 순간까지 계산을 미룬다. (예: render()를 호출하기 전까지는 어떤 계산도 실제로 일어나지 않음.)

  • 각 파이프라인 단계는 단일 책임 원칙(SRP)을 따름.
    - 예: STLReader는 “읽기”, Normals는 “법선 계산”, Mapper는 “GPU 렌더링 데이터 생성”만 한다.


vtkActor는 직접적으로 PolyData를 가지고 있지 않음

  1. vtkActor가 PolyData를 가지지 않는 이유는 vtk가 모듈화된 파이프라인 구조로 설계되어 있기 때문
    • 단일책임원칙에 따라 설계가 되어있기 때문에, actor는 시각적으로 보여주기 위한 표면 객체일 뿐 데이터 자체는 mapper를 통해 연결된 polyData가 가지고 있음.

이렇게 설계된 이유는,
만약 Actor가 PolyData를 직접 갖게 된다면?

  • polyData가 바뀔 때 마다 actor가 일일이 관리해야 함
  • 여러 actor가 같은 데이터를 쓸 수 없게 됨 → 비효율적
  • 데이터와 표현 로직이 섞임 → 복잡도 증가
profile
기억을 위한 기록 :>

0개의 댓글