← 목록
기타 2026-06-11 3KB 읽기 3분

F3 — 진짜 박스블러 그림자(opcode 805) + 감마보정 블렌딩

개요

갭마감 트랙 F3. crownyc.c VM에 진짜 박스블러 드롭섀도(opcode 805)를 추가하고, 감마보정(2.2 근사) 블렌딩 함수를 도입. 기존 804(링근사)는 보존(재작성 없음). 목표: Cocoa NSShadow 동급의 부드러운 연속 그라데이션 그림자.

무엇을 했는지

1. opcode 805 — 박스블러그림자 (FB_RGB_BOXBLUR_SHADOW)

  • 가우시안 근사 = 박스블러 3패스 (슬라이딩 윈도우 합, O(n) per pass).
  • 박스 영역에 알파(=al) 채운 알파맵 생성 → 수평/수직 3패스 박스블러 → fb_blend_pixel로 검정 합성.
  • margin = 2*blur 로 블러 퍼짐 폭 확보. blur 1~64 클램프, 알파맵 8M 셀 상한 가드.
  • 804(링근사)는 그대로 보존. 805는 별도 case로 추가.

2. 감마보정 블렌딩 (fb_blend_pixel_gamma)

  • sRGB→선형광(12bit LUT 256) 합성 → 선형→sRGB(LUT 4096) 역변환. pow(2.2) 근사.
  • AA 글리프 가장자리 품질 향상용. 기존 fb_blend_pixel 경로 완전 보존(별도 함수).
  • 미배선(정직): C 헬퍼로 컴파일·심볼 확인은 됐으나(nm 확인) 아직 opcode/내장함수에
바인딩하지 않음. 호출자 연결은 후속 작업.

3. 컴파일러 + 라이브러리 배선

  • hanseonc_high.c 내장함수 테이블: {"박스블러그림자", 805, 6} 추가.
  • libs/컴포지터.한선: 박스블러그림자직접(x,y,w,h,blur,알파) 함수 추가 (HiDPI _물리 변환 + BBSHADOW cmd 발행). 반환 1 검증.

검증 (실측)

  • crownyc.c 재빌드 EXIT=0 (Security/CoreFoundation/Accelerate -lm).
  • hanseonc_high.c 재빌드 EXIT=0.
  • 통합여정(원크라우니_통합여정.한선) 전체통과 — 검증1~6 모두 1, [결과] 티. 회귀 0.
  • PPM 실측 (tests/박스블러그림자검증.한선, 320x240 흰배경, 박스 100,80,120,80 blur10 알파200):
  • 805: 가장자리 fade 28 distinct 레벨, max adjacent step 8, reversal 0 → 연속 그라데이션.
  • 804(비교): 10 레벨, max step 100 (255→155 급점프 후 255 복귀) → 링/밴딩 아티팩트.
  • 그림자 코어(160,120)=55, 배경 코너=255.
  • 컴포지터 자가검증 [결과] 티 유지 + 박스블러그림자직접 반환 1.
  • 관련 파일

    • /Users/ef/CrownyOS/crownyc/crownyc.c (opcode 805, fb_blend_pixel_gamma + LUT)
    • /Users/ef/CrownyOS/crownyc/hanseonc_high.c (805 내장함수 등록)
    • /Users/ef/CrownyOS/crownyc/libs/컴포지터.한선 (박스블러그림자직접)
    • /Users/ef/CrownyOS/crownyc/tests/박스블러그림자검증.한선 (PPM 검증 테스트)

    잔여 이슈

    • fb_blend_pixel_gamma 미배선: AA 텍스트(텍스트AA/788) 경로에 감마 옵션 플래그로 연결 필요.
    • 박스블러그림자직접의 BBSHADOW cmd를 렌더브라우저/브라우저크롬 cmd 파서에 추가하면
    네이티브 m 렌더러에서도 동작.
    • 시각 픽셀은 PPM 헤드리스 실측으로만 검증(디스플레이 미실측).