From eb1ecf002132a8fc399475bf7e57b4bc5864b972 Mon Sep 17 00:00:00 2001 From: gahusb Date: Sat, 13 Jun 2026 00:19:16 +0900 Subject: [PATCH] =?UTF-8?q?feat(deepfield):=20HeroField=20WebGL=20?= =?UTF-8?q?=ED=8C=8C=ED=8B=B0=ED=81=B4=20=ED=95=84=EB=93=9C=20(full/lite/s?= =?UTF-8?q?tatic=20+=20=EC=BB=A4=EC=84=9C=20=EC=9E=90=EA=B8=B0=EC=9E=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/deepfield/HeroField.tsx | 329 +++++++++++++++++++++++++ 1 file changed, 329 insertions(+) create mode 100644 app/components/deepfield/HeroField.tsx diff --git a/app/components/deepfield/HeroField.tsx b/app/components/deepfield/HeroField.tsx new file mode 100644 index 0000000..55180b2 --- /dev/null +++ b/app/components/deepfield/HeroField.tsx @@ -0,0 +1,329 @@ +'use client'; + +import { useEffect, useRef, useState } from 'react'; +// 타입만 정적 import — 번들에 코드가 들어가지 않음 (import type) +import type * as THREE from 'three'; + +import { useFieldMode } from './useFieldMode'; + +interface Props { + className?: string; +} + +/** + * 정적 2광원 radial 그래디언트. + * static 모드 단독 비주얼이자, full/lite에서 캔버스 아래에 항상 깔리는 베이스. + * (WebGL 로딩 전/실패 시에도 비주얼 공백 없음) + */ +function StaticField() { + return ( +