":"Boven <0/>","Account":"Account","Add address":"Adres toevoegen","Add another product to start comparing.":"Voeg nog een product toe om te vergelijken","Add new address":"Voeg nieuw adres toe","Add to Cart":"In winkelwagen","Add to cart quantity":"Voeg toe aan winkelwagen aantal","Add to comparison":"Toevoegen aan vergelijking","Add to wishlist":"In verlanglijst","Addition":"Toevoeging","Address not found":"Adres niet gevonden","Addresses":"Adressen","All filters":"Alle filters","All products":"Alle producten","All {name}":["Alle ",["name"]],"Apply":"Toepassen","As low as <0/>":"Vanaf <0/>","As soon as the payment is completed, you will automatically return to the webshop.":"Als de betaling is voltooid, keert u automatisch terug naar de webshop.","Authentication":"Authenticatie","Back":"Terug","Back to home":"Terug naar home","Be the first to know about everything new!":"Wees de eerste die op de hoogte is van alles wat er nieuw is!","Be the first to write a review!":"Wees de eerste die een review schrijft!","Below <0/>":"Onder <0/>","Billing address":"Factuuradres","Blog":"Blog","Buy {quantity} for <0/> and save {percent}%":["Koop ",["quantity"]," voor <0/> en bespaar ",["percent"],"%"],"Cart":"Winkelwagen","Cart ({0})":["Winkelwagen (",["0"],")"],"Change":"Verander","Checkout summary":"Samenvatting","Choose your bank":"Kies uw bank","Choose your bank, and place your order.":"Kies uw bank en plaats uw bestelling.","City":"Plaats","Clear":"Wissen","Clear all filters":"Alle filters wissen","Close":"Sluiten","Compare":"Vergelijk","Compare ({0})":["Vergelijk (",["0"],")"],"Compare products":"Vergelijk producten","Complete the payment on your bank’s website.":"Voltooi de betaling op uw bank's website.","Complete your purchase":"Maak uw bestelling compleet","Configure":"Configureer","Confirm new email":"Bevestig nieuwe email","Confirm password":"Bevestig wachtwoord","Confirmation + Track & trace":"Bevestiging + Track & trace","Contact":"Contact","Continue":"Doorgaan","Continue shopping":"Verder winkelen","Could not create a new compare list":"Kon geen nieuwe vergelijkingslijst maken","Could not create an empty cart":"Kon geen lege winkelwagen aanmaken","Country":"Land","Create Account":"Maak account","Create a password and tell us your name":"Maak een wachtwoord en vertel ons uw naam","Create account!":"Maak account!","Create an account":"Maak een account","Create new password":"Maak een nieuw wachtwoord","Current Password":"Huidige wachtwoord","Current email":"Huidige email","Customer Service":"Klantenservice","Dark Mode":"Donkere modus","Decrease":"Verminderen","Delete this address":"Verwijder dit adres","Discount code":"Kortingscode","Discover our collection and add items to your cart!":"Ontdek onze collectie en voeg producten toe aan uw winkelwagen!","Discover our collection and add items to your comparelist!":"Ontdek onze collectie en voeg producten toe aan je vergelijklijst!","Discover our collection and add items to your wishlist!":"Ontdek onze collectie en voeg producten toe aan uw verlanglijst!","Discover our collection and place your first order!":"Ontdek onze collectie en plaats uw eerste bestelling!","Discover our collection and write your first review!":"Ontdek onze collectie en schrijf uw eerste review!","Edit":"Bewerk","Edit address":"Wijzig adres","Edit billing address":"Wijzig factuuradres","Email":"E-mail","Email address":"E-mailadres","Emails don't match":"E-mailadressen komen niet overeen","Empty comparelist":"Wissen","Fill in your e-mail to login or create an account":"Vul uw e-mailadres in om in te loggen of maak een account aan","Fill in your new password, confirm it and click on the save button.":"Vul uw nieuwe wachtwoord in, bevestig het en klik op de opslaan knop.","Fill in your password":"Vul uw wachtwoord in","First Name":"Voornaam","Follow order":"Volg bestelling","Forgot Password":"Wachtwoord vergeten","Forgot password?":"Wachtwoord vergeten?","Forgot your password?":"Wachtwoord vergeten?","Free":"Gratis","Grand total":"Totaal","Have an account?":"Heeft u al een account?","Hi {firstname}! You’re now logged in!":["Hallo ",["firstname"],"! U bent nu ingelogd!"],"Home":"Home","Housenumber":"Huisnummer","If you’ve successfully paid your order, the order <0>will0> come through, but there is a communication error with the website.":"Als u uw bestelling succesvol heeft betaald, dan zal de bestelling <0>doorkomen0>, maar er is een communicatiefout met de website.","In comparelist":"In vergelijking","Including {0}":["Inclusief ",["0"]],"Increase":"Verhogen","Invalid date":"Ongeldige datum","Invalid email address":"Ongeldig e-mailadres","Invalid phone number":"Ongeldig telefoonnummer","It appears you are offline, please try again later.":"Het lijkt erop dat u offline bent, probeer het later opnieuw.","Last Name":"Achternaam","Latest orders":"Laatste bestellingen","Less options":"Minder opties","Light Mode":"Lichte modus","Loading":"Laden","Loading your account":"Uw account laden","Loading your data":"Uw gegevens laden","Log in to continue shopping":"Log in om verder te winkelen","Menu":"Menu","Minimum of different classes of characters in password is {passwordMinCharacterSets}. Classes of characters: Lower Case, Upper Case, Digits, Special Characters.":["Het minimumaantal verschillende klassen van tekens in het wachtwoord is ",["passwordMinCharacterSets"],". Klassen van tekens: Kleine letters, Hoofdletters, Cijfers, Speciale tekens."],"More information":"Meer informatie","More options":"Meer opties","Mr":"Dhr","Mrs":"Mvr","Name":"Naam","Navigate to item {0}":["Navigeer naar item ",["0"]],"New address":"Nieuw adres","New email":"Nieuwe email","New password":"Nieuw wachtwoord","Newsletter":"Nieuwsbrief","Next":"Volgende","Next day delivery - Shipping free":"Volgende dag levering - Verzending gratis","No Image":"Geen afbeelding","No account yet?":"Nog geen account?","No orders found":"Geen bestellingen gevonden","No payment information":"Geen betalingsinformatie","No worries! Enter your email address and we will send an email with instructions to reset your password.":"Geen zorgen! Vul uw e-mailadres in en we sturen een email met instructies om het wachtwoord te resetten.","Number":"Nummer","Ok":"Ok","Older":"Ouder","Only 1 left in stock.":"Nog maar 1 op voorraad.","Only a few left":"Nog maar een paar op voorraad.","Only {amount_left_in_stock} left in stock.":["Nog maar ",["amount_left_in_stock"]," op voorraad."],"Or follow these links to get you back on track!":"Of klik op één van deze links om weer op het pad te komen!","Order #{orderId}":["Bestelling #",["orderId"]],"Order before 22:00":"Bestel voor 22:00","Order date":"Besteldatum","Order details":"Besteldetails","Order not found":"Bestelling niet gevonden","Order number":"Bestelnummer","Order summary":"Besteloverzicht","Ordered items":"Bestelde items","Orders":"Bestellingen","Other":"Overige","Out of stock":"Niet op voorraad","Page {page} of {count}":["Pagina ",["page"]," van ",["count"]],"Password":"Wachtwoord","Password must have at least {minPasswordLength} characters":["Wachtwoord moet minimaal ",["minPasswordLength"]," tekens bevatten"],"Passwords don't match":"Wachtwoorden komen niet overeen","Pay":"Betaal","Pay with iDEAL":"Betaal met iDEAL","Payment":"Betaling","Payment failed with status: {paymentStatus}":["Betaling mislukt met status: ",["paymentStatus"]],"Payment has not completed succesfully, please try again.":"Betaling is niet succesvol afgerond, probeer het opnieuw.","Payment method":"Betaalmethode","Per page":"Per pagina","Personal details":"Persoonlijke details","Place order":"Plaats bestelling","Please check your inbox to validate your email ({email})":["Controleer uw inbox om uw e-mailadres te valideren (",["email"],")"],"Please enter a valid email address":"Vul een geldig e-mailadres in","Please fill out an address to be able to select a shipping method":"Vul een adres in om een verzendmethode te kunnen selecteren","Please provide a valid house number":"Vul een geldig huisnummer in","Please reauthenticate and try again":"U bent niet meer ingelogd, log in om verder te gaan","Please select a payment method":"Selecteer een betaalmethode a.u.b.","Please select a shipping address":"Selecteer a.u.b. een verzendadres","Please select a shipping method":"Selecteer een verzendmethode a.u.b.","Please select a value for ‘{label}’":["Selecteer een waarde voor ",["label"]],"Postcode":"Postcode","Prefix":"Voorvoegsel","Processing your payment":"Uw betaling aan het verwerken","Product could not be found":"Product kan niet worden gevonden","Product not available in {allLabels}":["Product niet beschikbaar in ",["allLabels"]],"Products":"Producten","Recently viewed products":"Recent bekeken producten","Region":"Regio","Remove":"Verwijder","Remove Product":"Verwijder product","Remove from comparison":"Uit vergelijking verwijderen","Remove from wishlist":"Verwijder van verlanglijst","Reset":"Resetten","Reset Cart and Return to home":"Reset winkelwagen en ga terug naar home","Results for ‘{search}’":["Resultaten voor ‘",["search"],"’"],"Review":"Review","Review score":"Review score","Reviews":"Reviews","Save changes":"Wijzigingen opslaan","Save new password":"Sla nieuw wachtwoord op","Search":"Zoeken","Search...":"Zoeken...","Select":"Selecteer","Select your bank":"Kies uw bank","Send password reset email":"Stuur een wachtwoord reset e-email","Set your new password":"Stel uw nieuwe wachtwoord in","Several errors occured":"Er zijn verschillende fouten opgetreden","Shipping":"Verzending","Shipping ({0} {1})":["Verzending (",["0"]," ",["1"],")"],"Shipping address":"Verzendadres","Shipping addresses":"Verzendadressen","Shipping method":"Verzendmethode","Sign in":"Inloggen","Sign in or create an account!":"Log in of maak een account aan!","Sign out":"Uitloggen","Sign up for our newsletter and stay updated":"Abonneer u op onze nieuwsbrief en blijf op de hoogte","Skip to main content":"Ga naar hoofdinhoud","Some items in your cart contain errors, please update or remove them, then try again.":"Sommige items in uw winkelwagen bevatten fouten, pas deze aan of verwijder ze en probeer het opnieuw.","Something went wrong":"Er is iets misgegaan","Something went wrong on the server, please try again later.":"Er is iets misgegaan op de server, probeer het later opnieuw.","Sort":"Sorteer","Sort By":"Sorteer op","Start Checkout":"Afrekenen","Store home":"Winkel home","Street":"Straat","Submit review":"Verstuur review","Subscribe":"Abonneren","Subscribe to newsletter":"Abonneer op de nieuwsbrief","Subscribe to our newsletter to stay informed about our new products!":"Schrijf u in voor onze nieuwsbrief om op de hoogte te blijven van onze nieuwe producten! ","Subscribed":"Geabonneerd","Successfully changed password":"Wachtwoord aangepast","Successfully saved changes":"Wijzigingen succesvol opgeslagen","Successfully updated email":"Email succesvol bijgewerkt","Summary":"Omschrijving","Switch stores":"Verander winkel","Tagged in: {title}":["Getagged in: ",["title"]],"Telephone":"Telefoon","Thank you for your order!":"Bedankt voor je bestelling!","Thank you! Your review was successfully submitted for approval":"Bedankt! Uw review is succesvol verstuurd voor goedkeuring","The payment has been canceled, please try again.":"De betaling is geannuleerd, probeer het opnieuw.","The payment has expired, please try again.":"De betaling is verlopen, probeer het opnieuw.","The payment hasn't been completed yet, please try again.":"De betaling is nog niet voltooid, probeer het opnieuw.","The payment hasn't completed, please try again or select a different payment method.":"De betaling is niet voltooid, probeer het opnieuw of selecteer een andere betaalmethode.","The payment is refused, please try again or select a different payment method.":"De betaling is geweigerd, probeer het opnieuw of selecteer een andere betaalmethode.","There is a maximum of ‘{maxLength}’ characters":["Er is een maximum van ‘",["maxLength"],"’ karakters"],"This cart is assigned to {email}. Please sign in to continue shopping.":["Deze winkelwagen is toegewezen aan ",["email"],". Log in om verder te winkelen."],"This field is required":"Dit veld is verplicht","This may take a second":"Dit kan een seconde duren","Total <0/>":"Totaal <0/>","Try a different product":"Probeer een ander product","Try a different search":"Probeer een andere zoekopdracht","View Product":"Bekijk product","View all items":"Bekijk alle items","View comparison":"Bekijk vergelijking","View less items":"Bekijk minder items","View shopping cart":"Bekijk winkelwagen","View wishlist":"Bekijk verlanglijst","View your account":"Bekijk uw account","We are fetching your favorite products, one moment please!":"Je favoriete artikelen worden momenteel ingeladen!","We are sorry, this product is currently out of stock.":"We zijn sorry, dit product is momenteel niet op voorraad.","We can not process your payment, we received an unsupported status \"<0>{resultCode}0>\". Please try again or select a different payment method.":["We kunnen uw betaling niet verwerken, we hebben een niet-ondersteunde status ontvangen \"<0>",["resultCode"],"0>\". Probeer het opnieuw of selecteer een andere betaalmethode."],"We couldn't find any results for {term}":["We konden geen resultaten vinden voor ",["term"]],"We couldn't find the page you were looking for":"We kunnen de pagina niet vinden waar u naar op zoek bent.","We’re processing your payment, this will take a few seconds.":"Uw betaling wordt verwerkt, dit duurt een paar seconden","We’ve send a password reset link to your email address!":"Een wachtwoord reset link naar uw e-mailadres gestuurd","Which size is right?":"Wat is de juiste maat?","Whoops our bad...":"Oeps..","Wishlist":"Verlanglijst","Write a review":"Schrijf een review","Written by {nickname}":["Geschreven door ",["nickname"]],"Written {0} reviews":[["0"]," reviews geschreven"],"You are reviewing {0}":["U reviewt ",["0"]],"You can find your order history in your account!":"U kunt uw bestelgeschiedenis in uw account vinden!","You can now<0>sign in again0>.":"U kunt nu <0>opnieuw inloggen0>","You can track your order status and much more!":"U kunt uw bestelstatus bijhouden en veel meer!","You have been successfully subscribed to our newsletter.":"U bent succesvol aangemeld voor onze nieuwsbrief.","You have no addresses saved yet":"U heeft nog geen adressen opgeslagen","You have no orders yet":"Je hebt nog geen bestellingen","You have not placed an order":"Je hebt nog geen bestelling geplaatst","You have now successfully reset your password":"Je hebt je wachtwoord gereset","You have to agree in order to proceed":"U moet akkoord gaan met de voorwaarden om verder te gaan","You haven't placed any reviews yet":"Je hebt nog geen reviews geplaatst","You must sign in to continue":"U moet inloggen om verder te gaan","Your address has been added":"Uw adres is toegevoegd","Your cart is empty":"Je winkelwagen is leeg","Your comparelist is empty":"Jouw vergelijking is leeg","Your order has been canceled":"Uw bestelling is geannuleerd","Your order has been invoiced":"Uw bestelling is gefactureerd","Your order has been partially processed":"Uw bestelling is gedeeltelijk verwerkt","Your order has been refunded":"Uw bestelling is terugbetaald","Your order has been returned":"Uw bestelling is geretourneerd","Your order is being processed":"Uw bestelling wordt verwerkt","Your order is on its way!":"Uw bestelling is onderweg!","Your session is expired":"Uw sessie is verlopen","Your wishlist is empty":"Uw verlanglijst is leeg","Zip code or city":"Postcode of stad","canceled":"geannuleerd","invoiced":"gefactureerd","no products":"geen producten","one product":"één product","partially processed":"gedeeltelijk verwerkt","processed":"verwerkt","refunded":"terug betaald","returned":"terug gestuurd","shipped":"verzonden","{count} Per page":[["count"]," Per pagina"],"{metaDescription} - Page {currentPage}":[["metaDescription"]," - Pagina ",["currentPage"]],"{title} - Page {currentPage}":[["title"]," - Pagina ",["currentPage"]],"{totalResults} result":[["totalResults"]," resultaat"],"{totalResults} results":[["totalResults"]," resultaten"],"{total_count} products":[["total_count"]," producten"]}
Interactieve 3D-modellen worden steeds vaker gebruikt in webshops van high-end e-commerce merken. Ze bieden een goede manier om producten echt tot leven te laten komen en zorgen voor een betere impressie dan foto’s kunnen bieden. Een populaire toepassing hiervan zijn geavanceerde 3D-configurators, waarmee je direct kunt zien hoe jouw keuzes eruitzien in een realistisch 3D-model. In dit artikel laten we je zien hoe eenvoudiger toegankelijke technologie, photogrammetry, het mogelijk maakt om snel en met minimale middelen zeer realistische 3D-modellen te creëren. Met geavanceerde technologie integreren we het 3D-model op de Adobe Magento productpagina en optimaliseren we zowel laadtijden als UX.
Voordat je normaliter een interactief 3D-model hebt, komt er nog best wat kijken. De grootste uitdaging is dat een 3D-ontwerper het product helemaal met de hand moet namaken als een digitaal 3D-object. Elk klein detail moet precies worden gemodelleerd en voorzien van realistische texturen (materialen). En het is een ingewikkelde taak om de belichting en reflecties er levensecht uit te laten zien. Het is een nauwkeurig en vaak kostbaar proces, wat het helaas niet voor elk merk of product haalbaar maakt.
Een vroege fase in het handmatige 3D-proces: De mesh (vorm) is af, maar het object mist nog texturen, een dieptemap en belichting.
In het verleden hebben we configurators gebouwd voor fietsen, bedden, banken en lenzen. Soms met een 3D-render van het product en soms met mooie, hoge kwaliteit productfoto’s. Een configurator met een 3D-functie vraagt om heel precieze 3D-modellen, wat deze aanpak soms minder geschikt maakt.
Een ronddraaiend 3D-model van je product is echter ook een mooie toevoeging als interactief element op je productpagina. In combinatie met video’s en hoogwaardige productfoto’s geeft zo’n model je bezoekers een veel beter gevoel voor het product, inclusief de materialen, vormen en kleuren. Ze kunnen het als het ware oppakken met een muisklik en van alle kanten bekijken. Dit zorgt voor een veel betere en realistischere ervaring.
Het resultaat van de beschreven aanpak: een 3D-render van het product, gecreëerd in slechts 10 minuten.
De theorie achter deze methode heet fotogrammetrie, waarbij een object wordt vastgelegd en opgemeten door overlappende foto’s te maken. Het werkt eigenlijk vergelijkbaar met hoe een 3D-ontwerper een object handmatig zou modelleren in een 3D-programma. Net als de ontwerper gebruikt fotogrammetrie foto’s als referentie om te bepalen hoe het product er in drie dimensies uitziet.
Fotogrammetrie wordt in de praktijk vaak gebruikt om kaarten te maken op basis van luchtfoto’s die met speciale meetcamera’s worden genomen. Het wordt ook toegepast in de architectuur om een ruimte nauwkeurig in kaart te brengen, of in de archeologie om een object in 3D vast te leggen en gedetailleerd te bestuderen. Tot een paar jaar geleden vereiste fotogrammetrie dure camera’s en meetapparatuur, wat het voor veel mensen onbereikbaar maakte. Maar dankzij de vooruitgang in smartphone-technologie, en met name de implementatie van Lidar, heb je tegenwoordig alles wat je nodig hebt gewoon op je telefoon om zelf producten in 3D te scannen.
Voor onze research hebben we Polycam gebruikt, een 3D-scan-app voor iPhone en Android. Er zijn echter ook andere vergelijkbare apps beschikbaar die hetzelfde kunnen.
Om te laten zien hoe krachtig deze technologie is, gaan we voor een simpele setup. Het product staat op een ronddraaiende schijf, zodat we vanuit één vaste plek foto’s kunnen maken. Dit is niet per se nodig, maar het maakt het fotograferen wel een stuk makkelijker en sneller. We zetten het product op een transparante buis om zo min mogelijk contact met de ondergrond te hebben—een glas werkt trouwens ook prima. Hoe minder contactpunten, hoe beter de kwaliteit van het 3D-model (de mesh) aan de onderkant van het object.
Als je dit op grotere schaal wilt doen, is het handig om een kleine studio in te richten die onveranderd blijft. Zorg voor gelijkmatige, stabiele verlichting, zodat elke opname onder dezelfde omstandigheden plaatsvindt. Dat zorgt ervoor dat je 3D-modellen er consistent en nauwkeurig uitzien.
De opstelling waarmee wij experimenteerden. Een kleine studio zal veel beter resultaat geven.
We maken ongeveer 80-100 foto’s van het product vanuit verschillende hoeken. We letten erop dat de foto’s scherp zijn en proberen alle kanten van het product vast te leggen: de onderkant, zijkanten en bovenkant. Doordat het product ronddraait, kunnen we gewoon op één plek blijven staan en hoeven we niet om het object heen te lopen.
Na het maken van de gewenste hoeveelheid foto’s (meer is beter, waarbij tijd de grootste beperking is), wordt de app ingesteld om de foto’s te verwerken tot een 3D-model. Polycam maakt hierbij gebruik van fotogrammetrie om het 3D-model te genereren, waarbij een kunstmatige intelligentie de tweedimensionale foto’s zo nauwkeurig mogelijk interpreteert. Dit proces duurt meestal 2 tot 5 minuten.
Een nadeel van deze 'pipeline' is dat er beperkte mogelijkheden zijn voor aanpassingen of kleine correcties. Hoewel de app enige opties biedt, gaat de efficiëntie verloren zodra je de mesh moet bewerken in een 3D-programma zoals Blender. In plaats van tijd te besteden aan uitgebreide nabewerking, is het vaak efficiënter om gewoon een nieuwe scan te maken. Gelukkig is het resultaat in veel gevallen al bij de eerste poging goed genoeg en bijzonder indrukwekkend:
Screenshot van Polycam; kleurcorrectie voeren we later uit in onze 3D-scène.
Om het 3D-model op de productpagina te plaatsen, downloaden we het als een GLTF 3D-object (in .glb-bestandsformaat) van de Polycam-website. Dit .glb-bestand is een enkel binair bestand waarin verschillende onderdelen van het 3D-model zijn opgeslagen. Later zullen we dit bestand uploaden bij het product in het CMS of het e-commerce systeem (bijvoorbeeld Magento Commerce, Shopify, Hygraph, Contentful).
Als we het .glb-bestand uitpakken, zien we de volgende componenten:
Het .glb bestand bevat een GLTF file, waarin de Mesh (3d vorm) opgeslagen zit die onder andere te bekijken is in 3d applicatie Blender
De texture van het 3D model die de engine genereert
Het doel is om het 3D-bestand zo klein mogelijk te maken, zodat bezoekers niet lang hoeven te wachten voordat het geladen is. Hiervoor gebruiken we de commandline interface van gltf-transform.dev om het bestand te optimaliseren. In onze situatie kunnen we vooral winst behalen door het bestand automatisch op te schonen, de mesh te comprimeren en de grootte van de texture te verkleinen (van 4K naar een iets kleinere resolutie, in ons geval 1800x1800px). We gebruiken de volgende commandline:
gltf-transform optimize input.glb optimized.glb --compress meshopt --texture-compress webp --texture-size 1800
De bestandsgrootte van het 3D-model is nu verkleind van 2,8 MB naar 1,2 MB, wat vergelijkbaar is met de grootte van een productfoto van hoge kwaliteit.
Nu we het 3D-model klaar hebben, is de volgende uitdaging om het als interactief object op de productpagina's van de shop te krijgen. We implementeren hiervoor open-source technologie die goed aansluit op de techniek die wij gebruiken voor het realiseren van headless frontends: React en Next.js. De libraries die we gebruiken zijn: three.js en React Three Fiber.
We gaan niet te diep in op de details, maar de technische implementatie moet een eenvoudig proces mogelijk maken dat bestaat uit slechts drie stappen:
Het 3D model geimplementeerd in onze headless e-commerce template voor Adobe Commerce
Het renderen van het 3D-object op de pagina vereist het gebruik van JavaScript-libraries zoals de 3D-engine three.js en R3F (React Three Fiber), de React-renderer voor three.js. Het uitvoeren van JavaScript neemt tijd in beslag, waardoor bezoekers langer moeten wachten totdat de elementen op de pagina interactief zijn. Dit willen we zoveel mogelijk voorkomen.
We willen voorkomen dat het 3D model in de viewport staat en en daarmee de LCP metric beinvloed
Om een goede en snelle gebruikerservaring te bieden, willen we het 3D-component slim inladen. Een deel van de oplossing is om het 3D-object niet meteen in de viewport (de bovenkant van de pagina) te plaatsen, maar iets verder naar beneden. In e-commerce is het een best practice om de productpagina te openen met productfoto’s, opties en een ‘voeg toe aan winkelwagen’-knop. Dus net onder deze informatie, buiten de viewport, is een ideale plek voor het 3D-model.
Nu het element wat verder op de pagina staat, kunnen we het verbergen totdat de bezoeker ernaartoe scrollt. Dit concept heet lazyloading en is een veelgebruikte techniek om de gebruikerservaring te optimaliseren wanneer er met grote bestanden wordt gewerkt. We checken zelf of het component in de viewport is (met behulp van Framer Motion). Zodra dat het geval is, renderen we het component en laden we de benodigde 3D-libraries pas op dat moment in. Op deze manier blijft de INP-score optimaal.
Daarnaast reserveren we de ruimte door het parent element van de canvas een vaste aspectratio te geven, vergelijkbaar met hoe een afbeelding zich gedraagt. Dit doen we ook als het canvas-element nog niet is ingeladen. Zo voorkomen we dat de pagina verschuift, wat anders impact zou hebben op de Core Web Vital CLS-metric (Cumulative Layout Shift).
Een uitstekende performance score na lazyloading van het 3D-model. Logisch, want er staat aanvankelijk weinig op de pagina.
Hey! Je hebt het einde van ons artikel bereikt. Waarschijnlijk sta je nu te trappelen om je eigen schoenen in 3D te fotograferen. Of misschien iets anders? We zien dit ook wel werken voor bijvoorbeeld kamerplanten, handgemaakte artikelen, speelgoed, keukenspullen, meubels, en meer.
Voordat je aan de slag gaat, nog een laatste tip: als je overweldigd bent of graag hulp en advies van een expert wilt, neem dan contact op met Reach Digital. We hebben de know-how om je te helpen met vergelijkbare innovatieve vraagstukken (veel AI de laatste tijd), maar ook met de bekende e-commerce uitdagingen zoals replatforming, ipaas, integraties, en het optimaliseren van snelheid, design en UX.
Leuk om te weten: klanten vinden het vaak een verademing om met ons samen te werken. We houden de communicatie duidelijk, zorgen voor een ontspannen samenwerking, denken actief mee over wat het beste is voor jouw organisatie, en vinden waar mogelijk voordeligere of eenvoudigere oplossingen. Simpel gezegd, we weten waar we mee bezig zijn.
Dus, als je op zoek bent naar een partner die je kan helpen om je e-commerce ambities waar te maken, ben je bij ons aan het juiste adres. Zin om eens kennis te maken of van gedachten te wisselen? We staan voor je klaar. Spreek je snel!