R3F Cookbook : Data3DTexture 클래스
- R3F의 기반인 Three.js에서 제공하는 Data3DTexture 클래스는 3차원 텍스처, 즉 '볼륨 데이터'를 표현하는 데 사용됩니다. 📦
- 이 기술은 CT/MRI 의료 영상, 지질학 데이터, 입자/유체 시뮬레이션 등 다양한 볼륨 데이터의 시각화에 활용됩니다. 🔬
- Data3DTexture를 제대로 활용하려면 버텍스 쉐이더와 프레그먼트 쉐이더에 대한 이해와 작성이 필수적입니다. 💻
- 실습 예제에서는 FBM(Fractal Brownian Motion) 노이즈를 이용해 실시간으로 생성된 볼륨 데이터를 반투명 큐브 내에서 움직이는 평면 슬라이스로 시각화하는 방법을 보여줍니다. 🧊
- 볼륨 데이터는
simplex-noise 패키지를 활용한 FBM 노이즈 생성 알고리즘으로 만들어지며, 3차원(가로, 세로, 깊이) 구조를 가집니다. 🌀
- 생성된 데이터는 0에서 255 사이의 값을 가지며,
Uint8Array 객체에 연속된 배열 형태로 저장됩니다. 📊
- R3F 환경에서는
useMemo 훅을 사용하여 THREE.Data3DTexture 객체를 생성하고, 볼륨 데이터의 크기, 형식, 필터링 방식 등을 설정합니다. ⚙️
- JavaScript에서 생성된
Data3DTexture 객체(uTexture)와 슬라이스 평면의 Z축 위치(uZ) 같은 값들은 '유니폼(uniforms)'을 통해 GPU의 쉐이더로 전달됩니다. 🔗
- 버텍스 쉐이더는 평면의 Z축 위치를
uZ 값으로 제어하고, 3차원 텍스처 매핑 좌표(vUv)를 프레그먼트 쉐이더로 전달하는 역할을 합니다. ↔️
- 프레그먼트 쉐이더는 전달받은
vUv 좌표를 이용해 uTexture에서 볼륨 데이터를 샘플링하고, 추출된 값으로 최종 색상과 투명도를 결정하여 화면에 렌더링합니다. ✨
useFrame 훅을 활용하여 uZ 값을 동적으로 변경함으로써 볼륨 데이터 슬라이스 평면이 Z축으로 앞뒤로 움직이는 애니메이션을 구현할 수 있습니다. 🎬
데브허브 | DEVHUB | R3F Cookbook : Data3DTexture 클래스