테두리 광을 회전시키고 three.js 모바일 대응을 고친다

회전 테두리
  conic 의 각도를 @property 로 돌리면 매 프레임 배경을 다시 칠한다 —
  컴포지터에서 못 돌고 메인 스레드가 페인트한다(하드 게이트 8).
  정사각형 원뿔 레이어를 마스크 안에서 rotate 시켰다. transform 만 움직인다.
  aspect-ratio: 1 이라야 회전 중 밝기가 일정하고,
  width: 200% 라야 1178x52 헤더에서 모서리까지 닿는다. 주기 11초.

three.js 모바일
  세로 화면에서 게이트가 통째로 안 보이고 있었다.
  수직 시야는 화면 비율과 무관하지만 수평 시야는 aspect 에 비례한다.
  데스크톱(2.5:1)에서 정한 판 폭 15 가 세로 화면(0.45:1)의 수평 시야
  2.5 에 비해 여섯 배라, 첫 판이 화면을 완전히 덮었다.
  fit() 에서 camera.aspect 를 갱신할 때 판의 scale.x 도 같이 잡는다.

  저사양 판정도 고쳤다. hardwareConcurrency <= 4 만 보면 요즘 폰이 전부
  고사양으로 잡힌다(8코어가 흔하다). innerWidth < 760 을 함께 본다.
  DPR 1.5 -> 1.25, 캔버스 불투명도 0.7 -> 0.45(세로는 화면 전체를 덮는다).

스킬
  svg-filters.md  테두리 광 회전은 각도가 아니라 정사각형 레이어 rotate
  three.md        지오메트리를 화면 비율에 맞춰 다시 잡아라
                  저사양 판정에 화면 폭을 넣어라
This commit is contained in:
Yun Chan 2026-08-20 16:37:49 +09:00
parent 54ec6fa582
commit 8267905c0c
8 changed files with 171 additions and 3 deletions

View file

@ -247,6 +247,54 @@ a:hover { color: var(--accent); }
(실측: computed backdrop-filter none 된다).
굴절은 재료 섹션의 SVG 타일이 진짜로 보여준다. 여기서는 두께를 만든다. */
/* ---- 테두리를 도는 --------------------------------------
`conic-gradient` 각도를 `@property` 애니메이션하면 프레임 배경을
다시 칠한다 컴포지터에서 돌고 메인 스레드가 페인트한다(하드 게이트 #8).
대신 **정사각형 원뿔 레이어를 마스크 안에서 회전**시킨다. 움직이는 것은
`rotate` 뿐이라 GPU 에서 돈다. 정사각형이라 회전해도 밝기가 균일하고,
요소보다 크게(200%) 잡아 납작한 헤더에서도 모서리까지 닿는다. */
.rim {
position: absolute;
inset: 0;
border-radius: inherit;
overflow: hidden;
pointer-events: none;
padding: 1px;
-webkit-mask:
linear-gradient(black 0 0) content-box,
linear-gradient(black 0 0);
-webkit-mask-composite: xor;
mask:
linear-gradient(black 0 0) content-box,
linear-gradient(black 0 0);
mask-composite: exclude;
}
.rim::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 200%;
aspect-ratio: 1;
translate: -50% -50%;
background: conic-gradient(
from 0deg,
transparent 0 58%,
color-mix(in oklab, var(--accent) 70%, white) 74%,
transparent 86%
);
opacity: 0.55;
}
@media (prefers-reduced-motion: no-preference) {
.rim::before {
animation: rim-spin 11s linear infinite;
}
}
@keyframes rim-spin {
to { rotate: 360deg; }
}
/* 가장자리를 도는 빛. 유리판 테두리의 굴절을 흉내낸다 */
.glass::after {
content: "";