Blender, React Three Fiber, Rapier 물리 엔진을 조합해 현실감 있는 3D 이벤트 배지(랜야드+카드)를 인터랙티브하게 구현하는 방법을 단계별로 다룬다. 80줄 남짓의 선언형 코드로 물리 기반 줄, 드래그 가능한 카드, 실시간 텍스처 렌더링까지 구현하는 과정을 설명한다.
핵심 포인트- react-three-rapier 물리 엔진으로 조인트(관절) 체인을 연결해 실제 줄처럼 늘어지고 흔들리는 랜야드를 구현한다
- MeshLine으로 3D 곡선 형태의 끈을 렌더링하고, 포인터 이벤트와 카메라 언프로젝션으로 드래그 인터랙션을 처리한다
- Drei의 RenderTexture 컴포넌트로 사용자 이름 등 동적 텍스트를 배지 표면에 실시간으로 렌더링한다
- 조인트는 물리 엔진이 두 셰이프의 상호작용을 규정하는 제약 조건으로, 체인 구조를 통해 물리 기반 움직임을 구현한다
- 기술 스택: Blender(3D 모델), React Three Fiber(선언형 3D), Drei(헬퍼 컴포넌트), react-three-rapier(물리), MeshLine(곡선 렌더링)
상세 정리- 전체 구조: Canvas → 씬 안에 랜야드(Band) + 배지 카드(Card) 두 주요 컴포넌트. Rapier 물리 시뮬레이션이 전체 씬을 관할.
- Blender 연동: 배지와 카드 3D 모델을 Blender에서 제작·익스포트하고 React Three Fiber에서 useGLTF로 로드.
- 랜야드(Band) 구현: 균등 간격의 구체들을 Rapier BallJoint로 체인 연결. 상단 구체는 고정(fixed body), 나머지는 동적(dynamic body)로 설정.
- 조인트 설명: Joint는 두 RigidBody가 서로 어떻게 제약되는지를 물리 엔진에 알려주는 설정. BallJoint는 볼-소켓 관절처럼 회전 자유도를 허용.
- 끈 렌더링: Rapier 조인트 체인의 위치 배열을 CatmullRom 커브로 보간해 MeshLine에 넘기면 부드러운 3D 줄이 그려진다.
- 드래그 인터랙션: 포인터 이벤트에서 카메라 언프로젝션으로 3D 월드 좌표를 구하고, 드래그 중인 구체를 kinematic body로 전환해 물리 시뮬레이션을 일시 제어.
- 배지 카드: 포인터 위치에 따라 카드가 기울어지는 효과를 useSpring으로 구현. 드롭 시 dynamic body로 복귀해 물리 낙하 동작.
- RenderTexture 동적 텍스처: Drei의 RenderTexture는 별도 React 트리를 오프스크린 렌더링해 3D 표면에 텍스처로 적용. 사용자 이름, 직함 등을 실시간으로 배지에 새긴다.
- 코드 규모: 물리 로직, 드래그 인터랙션, 텍스처 렌더링 포함 전체 약 80줄의 선언형 JSX.
왜 읽나웹에서 물리 기반 3D 인터랙션을 처음 도전하거나, React Three Fiber + 물리 엔진 조합을 실전 프로젝트에 적용하려는 프론트엔드 엔지니어.