2026-06-13 큐빅뷰 — 3D 다중창 뷰어 (1세대 레이아웃 엔진)
개요
27개+ 라이브 창/화면을 3차원 N×N×N 격자(큐브)로 동시 배치·동시실행해 보는 도구.
세대: 1→3×3×3=27 / 2→9×9×9=729 / 3→27×27×27=19683. N=3^세대. 3진 27-큐브 세계관 자연 매핑.
타깃: CrownyVM 위 CrownyOS 3D 프레임 + Windows/macOS/Web. 울트라 병렬 + 딥리서치 자율주도.
무엇을 했는지 (1세대 기반)
큐빅뷰.한선 — 레이아웃/3진주소/가상화 엔진 (백엔드 무관)
/Users/ef/CrownyBrowser/src/v2/큐빅뷰.한선, rc=0, 자가검증 9/9 티
- 함수:
큐빅뷰_N(세대)(3^세대), 큐빅뷰_총셀, 큐빅뷰_좌표(인덱스→ijk, 뺄셈 floor-division), 큐빅뷰_인덱스, 큐빅뷰_배치행렬(4x4 열우선 16원소=GPU렌더러 변환행렬 포맷), 큐빅뷰_셀깊이(Y축 요회전 z), 큐빅뷰_가시셀(온디맨드 가시, 앞면우선 컬링), 큐빅뷰_배치계획(셀→레이어배치)
- 아키텍트 핵심 통찰: 3세대 19683셀 ≫ 한선씨 배열 1023상한 → 전체 materialize 불가(추가 silent-stop). 처음부터 가상화(가시 셀만 ≤200 온디맨드) = VM제약이자 올바른 LOD/컬링 성능 아키텍처.
3D 기판(기존 자산 확인)
- GPU렌더러.한선(Metal):
GPU레이어생성(텍스처 백킹), 레이어변환(16원소 4x4), 레이어합성(z순서+블렌딩 버블정렬), 레이어투명도, 레이어필터, 가시타일계산(컬링) — 27레이어 3D 배치/합성/컬링 프리미티브 이미 존재
- 컴포지터.한선:
레이어생성, 행렬곱(4x4) 정본
- 각 셀 = GPU레이어 1개, 배치행렬을 레이어변환으로 적용, 레이어합성으로 z순서 합성
한선씨 함정 (이번에 재확인)
- 인라인
; 주석(코드 뒤 다중단어)=파싱 오류() expected) → 주석은 독립 줄만
- 나눗셈 자연반올림 → 인덱스 분해는
/ 금지, 뺄셈 floor-division
관련 파일
/Users/ef/CrownyBrowser/src/v2/큐빅뷰.한선 (1세대 엔진)
/Users/ef/CrownyBrowser/src/v2/GPU렌더러.한선, 컴포지터.한선 (3D 기판)
잔여/다음 (딥리서치 후)
- 딥리서치(wf 진행중): 렌더 백엔드(WebGL/WebGPU vs Metal vs VM프레임버퍼 단일코드 전략), 라이브 창→텍스처 합성, 27→729→19683 가상화/LOD, 3D→2D 입력 역투영, 선행사례 → 권고안
- 1세대 렌더 결선: 큐빅뷰_배치계획 → GPU레이어 27개 생성+레이어변환+레이어합성, 카메라 회전 인터랙션
- 입력 라우팅: 화면 클릭 → 3D 역투영 → 포커스 셀, 셀 줌
- 동시실행: 각 셀 = 독립 VM/프로세스 창, 라이브 텍스처 갱신
- 크로스플랫폼: 한선씨 컴포지터 단일코드 → Metal/WebGL/VM프레임버퍼 백엔드 분기
딥리서치 결론 (105 에이전트, 적대검증) + 렌더러 바인딩
백엔드 결정
- HIGH(3-0): 단일 GPU 추상화(WebGPU·Dawn)가 D3D12/Vulkan/Metal 네이티브 + WebGPU/WebGL2 웹을 한 코드베이스로. WebGPU=최전략 단일 API(Dawn 웹+네이티브). MethaneKit RHI=기존 Metal 렌더러 크로스플랫폼 확장 검증 템플릿
- 미해결(다수 rate-limit 미검증): 라이브창→텍스처, LOD/컬링, 3D→2D 입력역투영, 선행사례 → 경험적 프로토타입
- 아키텍트 결정: 한선씨 컴포지터=정본 → 백엔드 무관 명령스트림 → 얇은 어댑터(WebGPU 웹+Dawn네이티브 / 기존 Metal GPU렌더러 / VM프레임버퍼). 헌법+연구권고 동시충족. (메모리 reference_cubicview_backend_research)
큐빅뷰렌더.한선 — 백엔드 무관 드로우 명령스트림 (gen-1)
/Users/ef/CrownyBrowser/src/v2/큐빅뷰렌더.한선, rc=0, 자가검증 7/7 티
- 명령스트림(줄):
CUBE 세대 N 가시수 / LAYER idx 폭 높이 / XFORM idx m0..m15 / Z idx 깊이 / COMPOSITE id...(깊이 오름차순 뒤→앞)
- gen-1=27 LAYER+27 XFORM+27 Z+1 COMPOSITE / gen-2=60 LAYER(729 가상화 페이지상한). 깊이 버블정렬 합성순서
- 큐빅뷰.한선을 깨끗한 라이브러리화(top-level 단위검증 호출 제거 → import 부작용 0, 헬스체크 교훈 적용)
gen-1 파이프라인 완성 (검증)
큐빅뷰.한선(레이아웃/3진/가상화 9/9) → 큐빅뷰렌더.한선(드로우계획 7/7) → [어댑터 미구현]
다음: 어댑터 1종 결선 — 네이티브(기존 Metal GPU렌더러: LAYER→GPU레이어생성, XFORM→레이어변환, COMPOSITE→레이어합성) 또는 웹(WebGPU). 그 후 카메라회전·입력역투영·동시실행(셀=독립VM창)
gen-1 종단 파이프라인 완성 (네이티브 어댑터 + 카메라, 검증)
권장안(네이티브 Metal) 진행 — 울트라 병렬(2 소넷) + 딥리서치 활용.
큐빅뷰.한선 레이아웃/3진/가상화 9/9 티
큐빅뷰카메라.한선 오빗카메라+원근투영+MVP 9/9 티 (Bhaskara 도단위 trig)
큐빅뷰렌더.한선 드로우스트림+카메라MVP결선 7/7 + 통합 5/5 티
큐빅뷰_GPU어댑터.한선 스트림→Metal GPU렌더러 5/5 티 (레이어27/변환27/합성1)
큐빅뷰_통합테스트.한선 종단 카메라→MVP→스트림 5/5 티
- GPU어댑터(소넷): LAYER→GPU레이어생성, XFORM→레이어변환, COMPOSITE→레이어합성. Metal 헤드리스 초기화 OK(Metal3.0/Apple GPU). GPU 내부 _GPU레이어목록 27개 등록 확인. 시각픽셀은 디스플레이 필요·미실측
- 카메라(소넷, 오푸스 수정): VM 사인()이 정수라디안만 정상(~57°분해능) 발견 → Bhaskara 도단위 trig(사인도/코사인도) 직접 구현으로 cot(45°)=1000 복원, 9/9
- MVP 결선(오푸스): 큐브드로우계획_카메라(XFORM=투영×뷰×모델, Z=뷰공간깊이 인라인). 모델배열 재구성 OOB→인라인 깊이로 우회
딥리서치 #2 (라이브창→텍스처, 16 검증클레임)
- macOS: ScreenCaptureKit SCContentFilter(desktopIndependentWindow:) 창단위 캡처→IOSurface backed CMSampleBuffer→CVMetalTextureCache zero-copy Metal텍스처. minimumFrameInterval로 셀별 fps(활성高/비활성低). "다수 thumbnail 라이브스트림" 설계목적 부합 (3-0)
- Windows: Windows.Graphics.Capture 창단위→Direct3D11CaptureFramePool(B8G8R8A8)→Frame.Surface→IDXGIResource GetSharedHandle+OpenSharedResource 공유텍스처 (3-0)
- Web: getDisplayMedia/CropTarget/WebGPU importExternalTexture (세션한도로 미검증, 알려진 API)
다음 (정확도 정련)
- ★MVP 고정소수점 스케일 통일: 행렬곱4가 곱마다 /1000 재정규화 + 모델행렬 ×1000 → MVP ×1000 일관, 퍼스펙티브 divide (feedback_hanseon_fixedpoint_matrix_scale)
- 라이브 텍스처 어댑터: macOS ScreenCaptureKit→IOSurface→GPU레이어 텍스처 바인딩(.m), 셀=창
- 입력 3D→2D 역투영 포커스, 카메라 회전 인터랙션, 동시실행(셀=독립VM창)
MVP 고정소수점 정련 완료 (오푸스 직접, 정확도)
울트라병렬+딥리서치+레이트리미트 관리 — 임계 수치작업은 메인세션에서 직접.
- 큐빅뷰카메라.한선 ×1000 규약 재작성: 행렬곱4 곱마다 /1000 재정규화(스케일 누적 방지), 뷰=회전Y(-요)×회전X(-피치)×이동(0,0,-거리)(lookAt 대신, 전 ×1000), 투영 전원소 ×1000(cot_k=cos×1000·1000/sin, m11=-1000), 모델 ×1000 승격 후 MVP
- 검증 9/9: 핵심 점변환 — 큐브중심(0,0,0)→클립 x=0,y=0(화면중앙) + w=+300000(=-z_view=카메라거리, 퍼스펙티브 divide용). 회전Y(90) m8=1000, 투영 cot45=1000
- 결과: XFORM MVP 값 10¹¹ 비일관 → 10⁵ 일관 정상화. gen-1 통합 5/5 유지, 어댑터 5/5 회귀 OK, v2 빌드 rc=0(이름충돌 1=밀리초 불변)
- 메모리 feedback_hanseon_fixedpoint_matrix_scale ✅해결 표시. 크라우니코드 행렬곱4 패턴 학습
진행 중 (백그라운드, 레이트리미트 관리)
- 딥리서치 #3: 웹(getDisplayMedia→WebGPU importExternalTexture) + VM 오프스크린→텍스처 (미검증 트랙 C·D)
- 소넷 위임: 큐빅뷰입력.한선 — 화면클릭→셀 3D→2D 픽(셀중심 투영 방식)
gen-1 논리 파이프라인 전체 완성 (검증)
큐빅뷰.한선 레이아웃/3진/가상화 9/9 티
큐빅뷰카메라.한선 오빗+원근+MVP(고정소수점×1000) 9/9 티
큐빅뷰렌더.한선 드로우스트림+카메라MVP결선 7/7 + 통합 5/5 티
큐빅뷰_GPU어댑터.한선 스트림→Metal GPU렌더러 5/5 티
큐빅뷰입력.한선 화면클릭→셀 3D→2D 픽 6/6 티
- 큐빅뷰입력(소넷): 셀화면좌표(MVP→퍼스펙티브divide→NDC→픽셀) + 화면픽(가시셀 투영 최소거리+임계반경, w>0 앞셀만, 깊이 타이브레이크). 왕복(셀→화면→픽→같은셀), 화면밖→-1. 역행렬 불필요·견고
- 전 모듈 헤드리스 검증. 시각 픽셀·실클릭은 디스플레이 필요·미실측
딥리서치 #3 — 웹/VM 라이브 텍스처 (확정)
- 웹(3-0): getDisplayMedia→MediaStreamTrackProcessor→VideoFrame→
GPUDevice.importExternalTexture()(zero-copy YUV)→GPUExternalTexture. Element Capture(RestrictionTarget.restrictTo)=셀별 DOM 서브트리. 텍스처 JS task마다 만료→매프레임 재import. Chromium/HTTPS/same-tab. 다수타일=전셀 매프레임 렌더가 비용주범→활성셀만 검증
- VM: 외부근거 없음, importExternalTexture 유추 설계(오프스크린 렌더타깃 직결)
- 3트랙 전체 확정: macOS ScreenCaptureKit→Metal / Win WGC→D3D공유 / Web getDisplayMedia→WebGPU / VM 오프스크린(자체)
다음 (라이브 콘텐츠 — 디스플레이 필요)
- 라이브 텍스처 어댑터: macOS ScreenCaptureKit→IOSurface→CVMetalTextureCache→GPU레이어 텍스처(.m), 셀=실제 창
- 웹 트랙: getDisplayMedia→importExternalTexture→큐브드로우계획 소비(WebGPU 어댑터)
- 카메라 인터랙션(드래그→오빗, 휠→줌), 동시실행(셀=독립VM창)
macOS 라이브 텍스처 어댑터 (네이티브, de-risk + 구축)
플랫폼 de-risk: macOS 26.0.1/SDK26.2, ScreenCaptureKit+Metal+CoreVideo 헤드리스 컴파일·init OK(Apple M2 Max).
native/cubic/큐빅뷰_라이브텍스처.m — 셀별 창 캡처→Metal텍스처(연구확정 경로):
CubicLiveTextureManager(device, CVMetalTextureCache, 셀별 캡처딕셔너리)
CubicCellCapture(SCStreamOutput): CMSampleBuffer(IOSurface CVPixelBuffer) → CVMetalTextureCacheCreateTextureFromImage(zero-copy) → id<MTLTexture> latestTexture
startCaptureForCell:window:config:(SCContentFilter desktopIndependentWindow), textureForCell:, setCell:active:(활성/비활성 프레임예산)
검증 4/4: Metal device / Manager+캐시 / SCStreamConfiguration 480x320@60 / SCShareableContent 질의 — 캡처가능 창 346개 열거(권한 있음, 실동작). 시각 픽셀=디스플레이 필요·미실측
한선씨 동반=큐빅뷰렌더 드로우계획(정본). 이 .m은 LAYER 셀에 라이브 텍스처 공급하는 macOS 트랙 어댑터큐빅뷰 gen-1 현황 (논리 완성 + macOS 캡처 실동작)
- 한선씨 논리: 레이아웃9/9·카메라9/9(고정소수점)·렌더7/7·MVP·어댑터5/5·입력픽6/6
- macOS 네이티브: 라이브텍스처 캡처 4/4(346창 열거)
- 남은 1조각(디스플레이 필요): Metal 렌더패스 — 큐브드로우계획(LAYER/XFORM=MVP/COMPOSITE) + 셀 라이브텍스처 → 텍스처 쿼드 27개를 MVP로 그려 z순서 합성 + NSWindow/CAMetalLayer + 마우스픽 결선. 헤드리스는 컴파일까지만 가능
Metal 오프스크린 렌더(MTLTexture 타깃→픽셀 리드백)로 디스플레이 없이 지오메트리/MVP/합성 검증.
native/cubic/큐빅뷰_렌더패스.m — 한선씨 플랜(/tmp/cube_plan.txt: LAYER/XFORM=MVP×1000) 파싱 → 셀당 단위쿼드를 MVP로 변환(셰이더 /1000 후 GPU 원근분할) → 512×512 오프스크린 합성 → 리드백
- 검증 6/6: Metal device / 플랜 27셀 파싱 / 셰이더 컴파일 / PSO / 비배경 픽셀 101211(38.6%) / 4사분면 분산(L48674 R52537 T50294 B50917=3×3 격자 확산)
- 시각 아티팩트:
native/cubic/gen1_render.png — 원근투영 3×3×3 컬러격자가 yaw25°/pitch15° 3D 큐브면으로 정확히 렌더(고정소수점 MVP 시각 검증)
- 브리지:
src/v2/큐빅뷰_플랜내보내기.한선(한선씨 큐브드로우계획_카메라 → /tmp/cube_plan.txt)
gen-1 전체 체인 증명 완료
[한선씨] 레이아웃9/9 → 카메라9/9(고정소수점) → 렌더7/7+통합5/5 → 입력픽6/6
↓ 백엔드무관 드로우계획(/tmp/cube_plan.txt)
[macOS] 라이브텍스처캡처4/4(346창) + 렌더패스6/6(실픽셀+PNG)
디스플레이 없이 실제 Metal 픽셀까지 전 구간 검증. 남은 건 라이브텍스처를 렌더패스 프래그먼트에 결선(단색→샘플) + NSWindow 인터랙티브 + 카메라 드래그 + gen-2/3.
🎯 라이브 창 결선 완료 — 셀에 진짜 macOS 창
캡처(큐빅뷰_라이브텍스처)+렌더(MVP) 결합. 실제 창이 큐브 셀에 렌더되는 첫 결선.
native/cubic/큐빅뷰_라이브텍스처.h — 캡처 인터페이스 추출(깨끗한 구조)
- 텍스처 수명 버그 수정: CVMetalTexture 즉시 CFRelease→MTLTexture 무효화. _curCVTex 보유로 수정(zero-copy 유효성 유지)
native/cubic/큐빅뷰_라이브렌더.m — SCShareableContent 온스크린 창 선별→셀 할당→SCStream 캡처→프레임 대기(런루프 1.8s)→셰이더(UV 텍스처 샘플, hasTex 플래그)→오프스크린 렌더→리드백+PNG
- 검증 5/5: Metal / 플랜27셀 / 라이브 프레임 수신 12셀(325 온스크린창 중 12 캡처) / PSO / 비배경 138422px
- 시각 아티팩트:
native/cubic/gen1_live.png — 실제 터미널 창(텍스트 판독 가능)·앱 창들이 3D 원근 큐브 격자에 렌더, 미할당 셀은 단색. IOSurface→Metal zero-copy + UV 매핑 + 깊이합성 실동작 확인
gen-1 큐빅뷰 = 완성 (라이브 창 3D 큐브뷰, 헤드리스 전구간 검증)
[한선씨] 레이아웃9/9·카메라9/9(고정소수점)·렌더7/7·입력픽6/6 → 드로우계획
[macOS] 라이브텍스처캡처4/4 → 렌더패스6/6(단색) → 라이브렌더5/5(실제 창)
시각: gen1_render.png(지오메트리) / gen1_live.png(라이브 창)
남은 단계: NSWindow 인터랙티브 실시간 표시(현재 오프스크린 1샷) + 마우스픽(큐빅뷰입력) 결선 + 카메라 드래그 오빗 + 활성셀 프레임예산 + gen-2/3 스케일
인터랙티브 앱 완성 — NSWindow + 실시간 + 마우스
아키텍처: 한선씨=정적 셀 모델(큐브드로우계획→/tmp/cube_models.txt 정본), 네이티브=매 프레임 카메라(orbit view+perspective, 실수 simd float trig — 네이티브는 정밀).
native/cubic/큐빅뷰_앱.m — NSWindow+MTKView 60fps 렌더루프, CubicRenderer(네이티브 행렬 matPerspective/matRotY/matRotX/orbitView, 모델 NSData 로드), 라이브캡처(최대27셀), MVP=proj·view·model 매프레임
마우스: mouseDragged=오빗(yaw/pitch), scrollWheel=줌(거리), mouseDown=pickAtViewX(셀중심 투영 최소거리)→focusIdx 하이라이트
--auto N: 오프스크린 N프레임 요회전 애니메이션→PNG (헤드리스 검증)
버그 수정: NSValue가 simd_float4x4 @encode 불가→nil 예외 → Cell을 NSData 원시바이트로 저장
검증: 컴파일 rc=0, --auto 40프레임 라이브셀12 비배경154526px 티(네이티브 카메라 회전 동작). gen1_app_auto.png(yaw145° 회전 확인). 인터랙티브 창은 디스플레이+사용자 실행 필요
빌드/실행: native/cubic/build.sh → ./cubicapp(인터랙티브: 드래그=오빗·휠=줌·클릭=셀픽) | ./cubicapp --auto 60(검증)gen-1 큐빅뷰 = 인터랙티브 앱 완성
한선씨 정본(레이아웃/모델/픽 로직) + 네이티브 3트랙 어댑터(macOS Metal 실동작). 27셀 라이브 창 3D 큐브, 오빗/줌/픽. gen-2/3(729/19683) 가상화는 큐빅뷰.한선에 이미 내장(엔진 9/9), 렌더 스케일만 남음.