# 같은 젤리 무한 자르기 설계 작성일: 2026-11-01. 상태: 사용자 승인(2026-11-01). ## 목적과 확정한 선택 한 덩어리의 젤리를 계속 잘게 쪼개며 단면·조각 수·쌓이는 모습에서 만족감을 얻는 신규 모드다. 레퍼런스는 [망고 큐브 절단 영상](https://www.youtube.com/shorts/KrLYex_f1Lo)이다. 영상은 여러 절단 횟수에 따른 결과를 비교하며, 그 비교 규칙까지 게임으로 옮기지는 않는다. 사용자가 확정한 요구는 다음과 같다. - 새 젤리가 공급되는 방식이 아니라 같은 젤리를 반복해서 자른다. - 도마 전체와 잘린 조각을 유지하고 사용자가 직접 확대·이동한다. - 검수는 기초 구현 + 사용자 시각 조정이다. 기능 연결과 필수 검증까지 구현하며 외관·조작감의 사용자 검수는 미완료로 남긴다. 이하 초기 젤리·조작·별·확대 범위는 작성자의 제안이며, 이 문서 승인으로 확정한다. ## 접근 방식 선택한 방식은 도마 전체 유지 + 직접 확대·이동이다. 여러 조각을 가로질러 자를 수 있고 잘게 나뉘는 전체 모습을 보존한다. 자동 초점 전환이 없어 사용자가 자를 곳을 정한다. 대안은 선택한 조각에 자동 확대하는 방식이다. 극소 조각 조작에는 유리하지만 다른 조각과 도마를 함께 보는 흐름을 끊는다. 사용자 선택에 따라 적용하지 않는다. 기존 HealingMode를 직접 변경하는 대신 전용 EndlessMode를 추가한다. 힐링 판의 두 단계 조준·깊이 조절과 새 모드의 빠른 연속 절단·핀치를 분리하고, 검증된 입체 절단·단면 표시·착지 연출 중 필요한 연산을 재사용한다. 기존 힐링 판 조작은 유지한다. ## 초기 콘텐츠와 진행 - 기존 207판 뒤에 208판 한 판을 추가한다. 고유 ID는 `endless-jelly`, 실행 모드는 `endless`로 제안한다. 기존 ID·순서·legacy-stage-order.json은 변경하지 않는다. - 초기 재료는 절차 생성하는 두툼한 둥근 사각 젤리 한 덩어리다. 투명한 피치색 외관과 밝은 단면을 기본으로 하고, 절단 전후의 색·내부 무늬 좌표를 연속되게 유지한다. 외부 모델 생성과 Smart Mesh는 사용하지 않는다. - 시간·정확도·목표 조각 수·칼질 횟수로 플레이를 종료하지 않는다. 조각이 많아졌다는 이유로 칼질을 막거나 새 젤리로 교체하지 않는다. - 첫 유효 절단으로 단면이 실제 열린 뒤 기존 힐링 모드처럼 고정 3별을 한 번 기록하고 수동 이동을 제공한다. 반복 절단·Retry·재방문으로 별을 중복 지급하지 않는다. 결과 카드나 자동 이동은 없다. - Retry는 같은 초기 한 덩어리로 돌아간다. 재방문·앱 재실행에서 조각 배치를 복원하는 저장 기능은 초기 범위에 포함하지 않는다. 기존 진행·별·도감 저장은 유지한다. ## 조작과 절단 - 모바일 한 손가락으로 젤리를 가로질러 직선을 그린 뒤 손을 떼면 한 번 자른다. 드래그 중 실제 절단 예정선과 칼 방향을 표시한다. 짧은 탭은 자르지 않는다. - 절단선은 실제 시작·끝점을 도마 좌표에 투영해 정하며 중심·정답·특정 각도로 스냅하지 않는다. 곡선 입력도 시작–끝 직선 한 번으로 해석한다. - 선분이 한 조각의 실제 외곽을 진입부터 이탈까지 가로지르면 절단 후보가 된다. 한 선분이 여러 조각을 완전히 가로지르면 해당 조각들을 같은 평면으로 함께 자른다. 일부만 건드린 조각·빈 도마는 잘리지 않는다. 화면 투영과 입체 교차 판정은 같은 절단 평면을 사용한다. - 실제 입체 메시를 분할하고 새 단면을 만든다. 보이는 절단선만 추가하거나 미리 만들어 둔 큐브로 교체하지 않는다. 기울어진 조각도 현재 자세의 실제 절단 평면으로 다시 자른다. - 손을 뗀 후 짧은 칼 하강·복귀와 조각 분리를 자동 재생한다. 깊이 조절 단계는 두지 않는다. 해당 칼질이 진행되는 동안 새 칼질은 받지 않으며, 완료 후 즉시 다음 칼질을 받는다. 입력 대기열은 만들지 않는다. - 조각은 그 자리에서 조금 벌어지고 도마 위에 기울거나 눕는다. 영상의 큐브 쌓임은 참고하되 초기 버전은 임의 높이의 실제 강체 적층 물리까지 구현하지 않는다. 도마 밖으로 조각을 밀어 없애거나 매 절단 후 전체를 재정렬하지 않는다. - 작은 조각이 화면에서 조작 불가능할 만큼 작으면 확대 안내를 제공한다. 작은 화면 크기를 이유로 조각을 삭제하거나 기존 메시 검사 임계값을 완화하지 않는다. ## 확대·이동과 입력 충돌 - 두 손가락 핀치로 확대·축소하고 두 손가락 평행 드래그로 도마를 이동한다. 핀치 중점 아래의 월드 위치가 유지되게 한다. 카메라 회전은 초기 범위에 포함하지 않는다. - 두 번째 손가락이 닿으면 진행 중인 한 손가락 절단 미리보기를 취소한다. 두 손가락에서 하나만 남아도 모든 손가락을 떼기 전에는 절단을 재개하지 않는다. 핀치를 마치며 의도치 않은 칼질을 내지 않는다. - 데스크톱은 왼쪽 드래그로 자르고, 휠로 포인터 위치를 중심으로 확대하며 Shift + 왼쪽 드래그로 이동한다. 기존 pointer 장치의 Shift 정보를 사용하고 필요한 휠 전달은 공통 입력 인터페이스를 통해 추가한다. Game에 모드 이름 분기를 넣지 않는다. - 전체 보기 버튼으로 초기 배율·중심을 복구한다. 초기 확대 범위는 1~64배를 제안한다. 확대·이동·전체 보기는 조각의 실제 크기·모양·개수에 영향을 주지 않는다. 이동은 도마를 다시 찾을 수 있는 범위로 제한한다. - Resize·회전 시 배율과 보고 있던 도마 위치를 보존하고 유효 화면에 맞게 보정한다. 숨김·메뉴·레벨 전환·컨텍스트 손실에서는 공통 장치 취소가 먼저다. - pointercancel·두 손가락 전환·숨김이 절단 확정 전이면 미리보기만 사라진다. 손을 떼어 확정했더라도 단면 인계 전 중단되면 원본을 유지한다. 인계가 끝난 뒤에는 한 번 완료한 절단을 취소 처리로 되돌리지 않는다. 취소로 별이 지급되지 않게 한다. ## 무한의 의미와 계산 한계 이 모드에서 무한은 정해진 절단 횟수·조각 수·시간 없이 계속 즐기는 규칙을 뜻한다. 유한한 메모리와 좌표 정밀도로 수학적으로 끝없는 개별 조각을 보장하지는 않는다. 64배에서도 구분할 수 없는 극소 조각은 초기 버전의 조작 범위 밖이며, 그 한계는 완료 보고에 명시한다. 조각 수에 따른 하드 종료·몰래 합치기·부피 삭제는 하지 않는다. 절단 불가능한 얇은 배치는 미리보기에서 알리고 원본을 보존한다. 메시 품질 임계값을 낮춰 억지로 통과시키지 않는다. 반복 절단의 수치 안정성은 조각별 지역 좌표 정규화와 원본 무늬 좌표의 분리로 확보한다. 부모가 나뉘면 실제 부피 합이 유지되고 단면이 닫혀 있어야 한다. 초기 기능 기준은 한 세션의 유효 절단 1,000회와 1,024개 이상 조각이다. 단일 조각을 반복해서 극소화하는 검사와 전체를 잘게 분할하는 검사를 분리한다. 이 수치는 플레이 종료 상한이 아니라 검증 범위다. ## 성능·자원 소유권 - 입력 콜백은 선·후보·취소 정보만 기록한다. 새 메시와 단면은 프레임별 작업 큐에서 준비하고 한 프레임에 자식 메시를 최대 하나 생성한다. 준비가 끝나기 전 원본을 숨기지 않는다. - 한 칼질의 모든 후보를 먼저 검증하고, 자식들이 모두 유효할 때 한 번에 인계한다. 한 후보 준비가 실패하면 준비한 자식들을 모두 해제하고 이번 칼질 전체를 취소한다. 일부만 조용히 자르지 않는다. - 다음 입력·Resize·새 카메라 제스처가 준비 중 절단 좌표를 바꾸지 않게 확정 시 평면과 후보 자세를 고정한다. 레벨 전환·취소·컨텍스트 손실은 준비 작업 토큰을 무효화한다. - 정지한 조각은 매 프레임 물리·레이캐스트 전체 검사를 하지 않는다. 공간 인덱스로 선분과 보이는 영역의 후보를 좁히고, 재질을 공유하며 화면 밖 조각은 렌더링에서 제외한다. 작은 조각의 움직임은 짧은 시간 후 정지한다. - 모든 조각의 논리 상태와 실제 형상은 보존한다. 성능 저하를 숨기려고 조각 수를 줄이지 않는다. 전체 보기에서 다수 조각은 가능하면 배치 렌더링하며, 모양·위치·색·개수는 바꾸지 않는다. 구체적인 배치 방식과 상수는 구현자가 정한다. - exit에서 원본·자식·준비 중 메시·선·공유 재질·그림자 자원을 소유권에 따라 해제한다. 기존 FeelService와 GameClock을 쓰고 절단음·Sound 토글·움직임 줄이기를 따른다. 새 오디오 샘플은 추가하지 않는다. ## 코드와 문서의 경계 - EndlessMode는 입력·진행·카메라·HUD를 조립하며 Game을 import하지 않는다. 전용 세션/절단 상태와 장면을 분리한다. 순수 세션·입력 수학은 three 없이 테스트한다. - 입체 렌더링·Three.js 메시 분할은 렌더링 계층에 두고 기존 HealingSolid 중 검증 가능한 부분을 재사용한다. 공유 연산을 바꾸면 기존 힐링 회귀를 검사한다. - Game 변경은 모드 등록·공통 훅 전달에 한정한다. HUD와 결과·안내 UI는 모드 제공 데이터로 그린다. 저장은 ProgressService/GameStore를 통한다. - 신규 모드·판·젤리 이름과 안내는 src/i18n/texts.csv의 영어·한국어 및 생성 절차를 따른다. 208판 편성·도감·진행·개발자 이동·라벨을 함께 갱신한다. - window.__jellyDebug에 신규 endless 상태(준비 여부·칼질 수·조각 수·확대/중심·취소/준비 수치·입력 중 메시 생성 수)를 추가하고 debug-api E2E 계약도 갱신한다. 기존 이름과 시그니처는 보존한다. - 근거 스펙·계획·PROGRESS.md와 현재 판 수에 의존하는 문서 생성 정보를 갱신한다. DocsSite를 수정할 때는 해당 프로젝트 스킬을 적용한다. 운영 푸시·배포는 이 작업에 포함하지 않는다. ## 검증과 인계 단위 검사는 실제 부피 보존·닫힌 단면·반복 절단·여러 조각 동시 관통·단순 접촉 무효·원본 보존·취소/인계 경계·별 멱등성·확대 중심·다중 포인터 억제·Resize를 다룬다. 검증 범위에서 NaN·퇴화 메시·부피 유실·입력 중 메시 생성이 없어야 한다. 기존 메시 품질/퍼즈 검사의 임계값을 완화하지 않는다. 브라우저 기능 검사는 모바일 390×844와 데스크톱 1280×800에서 첫 절단·재절단·분리된 조각 선택 영역·여러 조각 동시 절단·핀치/휠·이동·전체 보기·숨김/취소·Retry·수동 이동·기존 힐링 회귀를 확인한다. 단위 전체·strict TypeScript/Vite 빌드·번역 검사와 변경 범위의 E2E를 실행한다. main 푸시를 추가 요청받으면 그 커밋의 필수 모바일 전체 검사를 따른다. 1,000회 절단과 1,024개 조각 상태에서는 준비 시간·최대 프레임 지연·draw call·메모리·exit 후 자원 회수를 기록한다. 측정 결과가 나쁘면 원인과 개선을 거친 뒤 재측정하며, 실제 모바일 기기 성능으로 확대 해석하지 않는다. 장시간 스트레스는 직접 세션 검사와 렌더 부하 검사를 나눠 실행한다. 기초 구현이므로 반복 화면 비교·취향에 따른 시각 수정은 하지 않는다. 사용자가 조정할 곳은 젤리 색/투명도·칼 속도·벌어짐/착지·확대 감도/상한·조각과 안내의 가독성이다. 해당 상수와 파일 위치를 인계한다. 최종 코드 독립 리뷰는 gpt-6.1-sol / medium으로 수행한다. 사용자 외관/조작감 검수와 Android/iOS 실기기 검수는 미완료로 명시한다. ## 후속 사용자 조정: 말랑하고 탱글한 젤리 (2026-11-01) 사용자 요청에 따라208판의 시각 탄성을 강화한다. 칼이 내려오면 높이를 최대18% 눌러 옆으로 퍼지고, 절단 뒤에는 약2.4Hz의 감쇠 복원과 좌우 흔들림이1.45초 안에 잦아든다. 새 젤리 진입에는 약한 첫 출렁임을 준다. 바닥 높이를 고정한 부피 보존 시각 행렬만 적용하며 원본 입체·절단 평면·무늬·물리 위치·논리 부피는 바꾸지 않는다. 외피 베벨의 법선을 부드럽게 잇고 새 단면은 평평한 법선을 유지하며 반투명도와 젖은 광택을 높인다. 움직임 줄이기는 눌림·복원·잔흔들림을 끈다. 정지한 조각은 계속 갱신하지 않으며 움직임 때문에 새 메시를 만들지 않는다. 기초 구현 + 사용자 시각 조정 선택을 유지한다. ## 후속 사용자 조정: 투명한 무지개 둥근 육면체 (2026-11-01) 사용자 요청으로 기존 피치색을 무지개색으로 바꾼다. 고유 ID와 저장은 유지하고 표시 이름은 Rainbow jelly/무지개 젤리로 갱신한다. 원본 좌표의 가로 방향에 빨강·주황·노랑·초록·하늘·파랑·보라를 부드럽게 연결하며 잘린 단면과 조각에서도 색 좌표를 유지한다. 투과율0.76·거칠기0.055·투명 코팅 거칠기0.035, 중성 흡수색으로 윤기와 투명도를 강화한다. 형상 반폭1.2/0.48/0.85는 유지하고 모서리 반경0.22의 둥근 상자 지지 평면으로12개 모서리와8개 꼭짓점을 실제로 라운딩한다. 볼록 입체·원본 무늬·평평한 새 단면·기존 말랑한 움직임을 유지하며 실제 절단도 같은 둥근 입체를 사용한다. 도감/미리보기/문서의 이름과 색도 맞춘다. 기초 구현 + 사용자 시각 조정을 유지한다. ## 후속 사용자 조정: 분리 조각의 자연스러운 낙하·착지 (2026-11-01) 사용자 요청으로 정해진 바닥 높이에 붙여 이동시키는 연출을 교체한다. 실제 질량중심과 지지점을 준비하고, 절단 순간 작은 분리/들림/회전 속도를 준 뒤 중력·도마 반력·마찰·작은 반발로 낙하·착지한다. 좁고 높은 조각은 넘어지며 넓은 조각은 안정된 자세로 내려앉는다. 정상 정지 시 실제로 얻은 자세를 유지하고 강제로 작은 각도에 고정하지 않는다. 지지점 교대의 미세 떨림은 충분한 감쇠3.6초 이후 다음 도마 접촉에서 같은 자세로 멎게 한다. 착지 충격에 말랑한 복원을 연결하고 안정된 조각의 갱신은 멈춘다. 고정1/120초 적분으로30/60/120Hz를 맞춘다. 원본 입체/무늬/부피/프레임당 준비1개는 유지하며 질량중심·관성·지지점도 자식 준비 프레임에 나눠 계산한다. 이동 중 새 절단을 취소하면 중단했던 원본의 낙하와 속도를 이어 간다. 움직임 줄이기는 실제 도마 위의 안정된 자세로 즉시 배치한다. 조각 사이의 정교한 적층 충돌은 기존 초기 범위 밖으로 유지하며 도마와의 접촉을 구현한다. 낮게 누운 조각을 자를 때 고정 높이0.5를 쓰지 않고, 화면에서 실제로 닿는 시각 메시 표면 높이를 골라 같은 획 전체를 투영한다. 화면 좌표의 시작/끝과 실제 절단 평면은 보정·스냅하지 않는다. 디버그에 낙하 중 조각 수·착지 수·도마 간격과 조각별 바닥/높이/기울기/실제 화면 중심을 추가한다. 기존center/min/max 조회는 입력 기준 평면 계약을 보존한다. 기초 구현 + 사용자 시각 조정을 유지한다. ## 후속 사용자 조정: 어두운 반전색 단면과 반짝가루 (2026-11-01) 잘린 내부 면에만 원본 무지개 RGB의 보색을 어두운 남색 계열 바탕과 섞어 적용한다. 단면 투과율을 낮춰 바탕색이 도마색에 씻기지 않게 하고 젖은 광택은 유지한다. 원본3D무늬 좌표에 두 크기의 미세한 색 가루를 고정하고 시선/면 방향에 따라 일부 입자가 강하게 반사되는 느낌을 준다. 시간으로 깜빡이지 않으며 재절단/낙하/확대 때 가루가 조각을 따라간다. 기존 외피 투명 무지개·입체/물리/절단/부피/추가메시0를 유지한다. 기초 구현 + 사용자 시각 조정 선택을 유지하고 데스크톱1280×800/모바일390×844의 첫 렌더/절단/재절단 컴파일·기능을 검사한다. 반복 캡처/취향 비교는 하지 않는다. 사용자 후속 조정으로 미세 입자를 더 큰 다섯 꼭짓점 별 홀로그램으로 바꾼다. 원본 좌표의 단면 투영에 별의 위치·크기·회전을 난수로 정하고 이웃 셀까지 검사해 규칙적인 열을 피한다. 별 반경은 약0.029~0.055 월드 단위이며 청록/보라/분홍 계열 박의 색이 면/시선 각도에 따라 변한다. 시간 점멸은 사용하지 않는다. 어두운 보색 단면과 낮은 투과를 유지한다. ## 후속 사용자 조정: 키위 젤리 같은 반투명감 (2026-11-01) 키위 공통 재질의 낮은 환경 반사/코팅과 빛을 머금은 색을 참고해208판의 반투명감을 강화한다. 외피 투과율0.88, 단면은 그0.68배로 은은한 배경/굴절광을 통과시키며 단면의 어두운 보색 표면색은 유지한다. 투과광에는 별도 밝은 보색을 사용해 검은 표면색이 속빛을 모두 차단하지 않게 한다. 반사 강도를 키위에 가깝게 줄이고 거칠기를 완만하게 해 젖은 젤리 광택과 부드러운 속빛을 준다. 홀로그램 별은 투과를 추가로 낮춰 박 조각이 남아 보이게 한다. 알파 정렬을 추가하지 않고 현재 Three 투과 패스 안에서 처리하며 형상/배치/낙하/절단은 유지한다. 기초 구현 + 사용자 시각 조정 유지, 반복 캡처 없이289단위/빌드와 양Chromium 컴파일·재절단 기능·독립리뷰로 검증한다. ## main 통합에 따른 표시 순서 갱신 사용자의 커밋·main 병합·푸시 요청 시 원격main ca6d8fe에 힐링208~210판이 먼저 반영되어 있음을 확인했다. 해당 고유ID·표시 순서를 그대로 보존하고 무한 자르기는211판으로 배치한다. 본문208판은 최초 개발 당시 표시 번호이며, 배포와 현재 테스트/도감/문서는211판을 기준으로 한다. endless-jelly ID와 저장 계약은 유지한다.