Vercel 팀이 Next.js Conf 2022 등록 페이지에 3D 인터랙티브 경험을 react-three-fiber와 drei로 구현한 과정을 3단계로 정리했다. 커서를 따라가는 빛이 프리즘에 닿아 무지개를 만드는 씬을 WebGL로 구성하고, FPS 기반 적응형 화질 조정까지 적용했다.
핵심 포인트- react-three-fiber: Three.js를 React 컴포넌트로 선언적 사용, React 스케줄러 덕분에 대규모에서 raw Three.js보다 성능 우위
- 빛 광선과 글로우 효과는 PNG 텍스처로 처리 — 절차적 렌더링 대비 GPU 부하 절감
- Bloom, LUT 색상 필터, Screen Space Reflections(레이마칭)을 react-postprocessing으로 적용
- PerformanceMonitor(drei): GPU 사용률 대신 FPS 기반 적응형 화질 조정, 모바일 자동 품질 하향
상세 정리- 씬 기반 설계: 직교(orthographic) 2D 렌더링으로 씬 단순화. 커서 위치를 useFrame 훅으로 매 프레임 추적, Block/Triangle 컴포넌트가 광선 접촉에 반응.
- 텍스처 최적화: 빛 광선과 글로우를 GPU로 절차 생성하는 대신 PNG 텍스처 사용. GPU 렌더링 작업을 최소화하는 핵심 성능 선택.
- Bloom 효과: 밝은 영역 주변에 빛 번짐 추가해 카메라 렌즈 효과 재현. 프리즘 굴절 표현에 시각적 깊이를 더함.
- LUT(Color Lookup Table): 전체 렌더링에 색상 필터를 레이어로 적용해 영화적 푸른 톤 연출. IWLTBAP 등 사전 제작 LUT 사용 가능.
- Screen Space Reflections: 레이마칭으로 프리즘 내부 반사를 계산. 연산 비용이 높아 프리즘 객체에만 한정 적용, 모바일에선 완전 비활성화.
- 무지개 셰이더: Shadertoy 커뮤니티 셰이더 2개 결합 — Alan Zucconi의 가시광선 스펙트럼 셰이더 + Juliapoo의 무지개 흐름 이리데선스.
- PerformanceMonitor 도입 배경: GPU 사용률은 장치마다 신뢰도가 달라 과잉/과소 렌더링 문제 발생. 대신 FPS를 측정해 허용 범위를 개발자가 설정하면 픽셀 비율(dpr)과 효과 품질 factor(0~1)를 자동 조정.
- 적응형 렌더링 동작: FPS가 허용치 아래로 떨어지면 dpr 낮추거나 효과 품질 감소. 성능 여유가 생기면 자동으로 품질 상향. 코드 변경 없이 저사양/고사양 기기 대응.
왜 읽나react-three-fiber로 고성능 3D 씬을 구현하려는 프론트엔드 개발자에게 포스트프로세싱 적용법, 텍스처 기반 GPU 최적화, FPS 기반 적응형 렌더링 패턴의 실제 구현 사례를 제공한다.