Kamado Chef

Fedélnyitás és 3D forgatás: működő minta

Ez az oldal nem koncepció, hanem futó kód. Ami itt látszik, az bemásolható a kamadochef.com főoldalába. Alul ott a pontos ok, amiért a CSS-elforgatásos út nem hozható tökéletesre, és mi kell a valódi 3D-s fedélnyitáshoz.

1.Fedélnyitás valódi termékfotóból

Desktopon vidd rá a kurzort, mobilon egyszerűen görgess ide. Ugyanaz a két trigger, amit Beatrix is megírt, csak nem egy lapos képet döntünk meg, hanem két HIVATALOS stúdiófotó között úsztatunk át: csukott fedél és nyitott fedél. Minden pixel valódi termék.

Kamado Chef Classic 19 piros, csukott fedéllel Kamado Chef Classic 19 piros, nyitott fedéllel
Classic 19 - Redhover / görgetés
Kamado Chef Shadow, csukott fedéllel Kamado Chef Shadow, nyitott fedéllel
Shadowhover / görgetés

2.A teljes kód, amit át kell venni

Ennyi az egész. Nincs benne könyvtár, nincs benne build, és nem tölt be semmit külső helyről.

<!-- HTML: two stacked images inside one figure -->
<div class="kc">
  <figure>
    <img class="closed" src="19red_main.jpg" alt="...">
    <img class="open"   src="19red_open.jpg" alt="..." loading="lazy">
  </figure>
</div>

/* CSS: stack them, fade the top one out */
.kc figure{position:relative;aspect-ratio:1200/848}
.kc figure img{position:absolute;inset:0;width:100%;height:100%;
               object-fit:contain;transition:opacity .45s cubic-bezier(.22,.61,.36,1)}
.kc figure img.open{opacity:0}

/* desktop: hover. Guarded so touch devices never get a stuck hover state. */
@media (hover:hover){
  .kc:hover figure img.closed{opacity:0}
  .kc:hover figure img.open  {opacity:1}
}
/* mobile: the observer below adds .seen when the card scrolls into view */
.kc.seen figure img.closed{opacity:0}
.kc.seen figure img.open  {opacity:1}

// JS: mobile only, opens the lid when the card is ~55% visible.
// It keeps .seen (does not toggle back), so the lid stays open once reached.
if (!window.matchMedia('(hover:hover)').matches) {
  const io = new IntersectionObserver((entries) => {
    entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('seen'); io.unobserve(e.target); } });
  }, { threshold: 0.55 });
  document.querySelectorAll('[data-kc]').forEach(el => io.observe(el));
}
Melyik modellnél megy ez azonnal, és melyiknél nem

A hatás azon áll vagy bukik, hogy a csukott és a nyitott fotó ugyanabból a beállításból készült-e: ha a grill mérete vagy helye eltér a két képen, akkor nem a fedél nyílik, hanem az egész grill ugrik egyet. Lemértem mind az öt fotópárt, és két csoport van.
Azonnal használható: Classic 19 Red és Shadow (a két fotó lépték-eltérése 0,3 és 4,5 százalék, a termék vízszintes közepe 1 százalékon belül egyezik) - ez a kettő van fent a mintán.
Előbb egységes kivágás kell: 22 Red (a nyitott kép 1,6-szer nagyobb léptékű), KC13 és Premium 19 (ezeknél már a képvászon mérete is más). Ezeket nem elég egymásra tenni, előbb közös kivágásba kell hozni őket, különben a váltásnál ugrik a termék.
Megpróbáltam ezt automatikusan megoldani (a kocsi talpára illesztve), de a végeredmény ránézésre rosszabb lett, mint a kiindulás, ezért nem tettem be. Ez kézi kivágást kíván, szólj ha kell.

Két apróság, ami sokat számít

A @media (hover:hover) nélkül érintőképernyőn beragad a hover-állapot, és a fedél nyitva marad az első koppintás után. A loading="lazy" pedig csak a nyitott képen legyen rajta, a csukotton ne, mert az a hajtás fölött van.

3.3D forgatás: ez már él

Kilenc modell van kész, forgatható és zoomolható, desktopon és mobilon egyaránt. Nem kell hozzá új fejlesztés, csak be kell emelni. Az AR kódban be van kötve mind a kilencre (ios-src + ar-modes="webxr scene-viewer quick-look"), és az USDZ-fájlok is ott vannak.

Az AR állapota, pontosan

Apple saját ellenőrzőjével (usdchecker --arkit) ma megnéztem a hivatalos oldal mind a kilenc AR-fájlját: 9-ből 9 átment. Korábban ugyanez a kilenc fájl megbukott, mert a textúrák WebP formátumúak voltak, amit az AR nem fogad el. A kollégánk azóta újraexportálta őket, és az ellenőrző ezt most igazolja. Ami még nincs igazolva: hogy egy valódi iPhone-on el is indul. Ezért az AR ma „a fájlok megfelelnek és be van kötve", nem „ki van próbálva". Amikor tesztelitek: iPhone-on Safariban nyissátok meg, mert a Telegram és a Messenger beépített böngészőjében a Quick Look nem indul el.

A teljes, több modellt és színváltozatot kezelő oldal: kamadochef-3d.pages.dev - éles használatra ezt vegyétek, ez a hivatalos.

Miért nem onnan tölti be ez az oldal a modellt

A fenti nézet a modell saját másolatát használja (assets/model.glb), hogy ez a mintaoldal akkor is stabil maradjon, ha a hivatalos oldalon dolgoznak. A másolat bájtra azonos az ottanival. Az AR-gomb viszont szándékosan a hivatalos fájlra mutat, mert ha valaki iPhone-on teszteli, az igazi fájlt kell tesztelnie, nem egy másolatot.

<script type="module" src="https://unpkg.com/@google/model-viewer@3.5.0/dist/model-viewer.min.js"></script>

<model-viewer src="model.glb" ios-src="model-v2.usdz" ar ar-modes="webxr scene-viewer quick-look"
              camera-controls touch-action="pan-y"
              shadow-intensity="1" exposure="1.05"></model-viewer>

4.Miért nem jött ki tökéletesre a mostani fedélnyitás

Megnéztem a kc_lidopen.html-t. A technika ez volt: egy beágyazott PNG-re transform: translateY(-8%) rotateX(26deg), hover és IntersectionObserver triggerrel. A triggerek jók, a probléma egy szinttel lejjebb van.

5.Ha valódi, zsanéros 3D-s nyitás kell

Ez is járható út, csak nem a mostani fájlokból. Megmértem a kilenc GLB-t: mindegyikben 0 animáció van, és összesen 2 node, vagyis a fedél nincs külön geometriaként leválasztva. Ahhoz, hogy nyíljon, három dolog kell.

És egy negyedik, amit megmértem, mert ez a tényleges akadály

A mostani modellek nyitott felületek, nem zárt testek: a 22 colos fájlban 58 831 pont és 100 263 lap mellett 16 669 perem-él van. Ez azt jelenti, hogy a grillnek nincs megmodellezve a belseje. Ha a fedelet felnyitnánk, nem a rács és a tűztér bukkanna elő, hanem egy üres héj. Vagyis a zsanéros nyitáshoz nem elég szétvágni a meglévő modellt, kell hozzá egy belsővel együtt modellezett példány. Ez ugyanaz a hiányzó-információ probléma, mint a lapos fotónál, csak három dimenzióban.

Ütemezés

A belsővel együtt modellezett, nagy felbontású példány a gyártói CAD megérkezésére vár. Addig a fenti fotós megoldás az, ami ma élesíthető, és ez egybevág azzal, amit Beatrix is írt: amíg a forgós kép nem élethű, addig maradjon a sima termékkép.