ปัจจุบันผู้คนมักพกอุปกรณ์ที่รองรับ Augmented Reality (AR) และ Virtual Reality (VR) ไว้ในกระเป๋า ปัจจุบันเนื้อหาที่เราแชร์กันบนอุปกรณ์เหล่านี้เป็นแบบ 3 มิติมากขึ้นเรื่อยๆ ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีใช้คอมโพเนนต์ของเว็บที่ชื่อ <model-viewer> เพื่อเพิ่มเนื้อหา 3 มิติลงในเว็บไซต์หรือ Progressive Web App (PWA) ได้ง่ายๆ เหมือนกับการเพิ่มรูปภาพด้วย HTML
สิ่งที่คุณจะสร้าง

เว็บไซต์ที่มีโมเดล 3 มิติแบบอินเทอร์แอกทีฟซึ่งแสดงภาพโฮโลแกรม AR ได้
สิ่งที่คุณจะได้เรียนรู้
- วิธีติดตั้ง
<model-viewer>คอมโพเนนต์เว็บในเว็บไซต์ - วิธีใช้
<model-viewer>เพื่อนำเสนอโมเดล 3 มิติในเลย์เอาต์เว็บมาตรฐาน - วิธีปรับแต่ง
<model-viewer>เพื่อเพิ่มลูกเล่นให้งานนำเสนอ
สิ่งที่ต้องมี
- เว็บเบราว์เซอร์ เราขอแนะนำให้ใช้ Chrome แต่เบราว์เซอร์ที่ทันสมัยอื่นๆ (Firefox, Safari, Edge) ก็ใช้ได้เช่นกัน
- Node.js และโปรแกรมแก้ไขข้อความ หรือสิทธิ์เข้าถึง Glitch
- มีความรู้พื้นฐานเกี่ยวกับ HTML, CSS, JavaScript และ Chrome DevTools
Codelab นี้มุ่งเน้นที่ <model-viewer> และโมเดล 3 มิติ เราจะข้ามแนวคิดและบล็อกโค้ดที่ไม่เกี่ยวข้องไป และจะให้คุณคัดลอกและวางได้ง่ายๆ
ตัวเลือกที่ 1 - กลิตช์
คุณสามารถใช้เครื่องมือแก้ไขโค้ดออนไลน์ เช่น Glitch เพื่อโฮสต์โปรเจ็กต์และดูการเปลี่ยนแปลงได้
หากต้องการเริ่มต้นใช้งานใน Glitch ให้คลิกปุ่มต่อไปนี้
เปิดสภาพแวดล้อม Glitch ที่โหลดไว้ล่วงหน้า
จากนี้ไป คุณสามารถใช้โปรแกรมแก้ไขโค้ดใน Glitch เพื่อแก้ไขไฟล์ และเมื่อพร้อมแล้ว ให้เริ่มแสดงแอปพลิเคชันโดยใช้ปุ่ม "แสดงแบบสด" ลองทำตอนนี้ แล้วคุณจะเห็นหน้าต่อไปนี้

ตัวเลือกที่ 2 - เซิร์ฟเวอร์ภายใน
เซิร์ฟเวอร์ภายในจะช่วยให้คุณใช้เครื่องมือแก้ไขโค้ดที่ต้องการได้
ติดตั้งเซิร์ฟเวอร์
เราจะต้องมีวิธีแสดงหน้าเว็บในเครื่อง วิธีง่ายๆ คือใช้ Node.js และ serve ซึ่งเป็นเซิร์ฟเวอร์เนื้อหาแบบคงที่ที่ใช้งานง่าย
ดูวิธีการติดตั้งในระบบปฏิบัติการได้ที่เว็บไซต์ของ Node.js หลังจากติดตั้ง Node.js แล้ว ให้เรียกใช้คำสั่งนี้เพื่อติดตั้ง serve
npm install -g serve
ดาวน์โหลดโค้ด
คุณสามารถดาวน์โหลดเทมเพลตเริ่มต้นพร้อมกับชิ้นงานตัวอย่างทั้งหมดได้ คลิกลิงก์ต่อไปนี้ แล้วแตกไฟล์เนื้อหาลงในไดเรกทอรีที่คุณต้องการให้มีโปรเจ็กต์
หรือจะใช้ git เพื่อโคลนที่เก็บก็ได้
git clone https://github.com/googlecodelabs/model-viewer-codelab.git
การเรียกใช้เซิร์ฟเวอร์
จากไดเรกทอรีเทมเพลตที่แยกออกมาข้างต้น (หรือภายในไดเรกทอรีที่โคลน หากคุณใช้ git) ให้เรียกใช้คำสั่ง serve เพื่อเริ่มเว็บเซิร์ฟเวอร์

ไปที่ที่อยู่นั้น (ในภาพหน้าจอด้านบนคือ http://localhost:5000 แต่อาจแตกต่างกันในเครื่องของคุณ) เพื่อดูจุดเริ่มต้นที่เรียบง่ายมาก

เราจะเริ่มด้วยการแก้ไขไฟล์ index.html ผ่านเครื่องมือแก้ไขเว็บของ Glitch หรือโปรแกรมแก้ไขโค้ดที่คุณชื่นชอบ หากคุณใช้เซิร์ฟเวอร์ในเครื่อง
เพิ่มไลบรารี <model-viewer>
เราจะต้องรวมชุดไฟล์ JavaScript เพื่อใช้ <model-viewer>
ส่วนต่อไปนี้จะเพิ่มไลบรารี <model-viewer> ลงในหน้าเว็บ วางโค้ดต่อไปนี้ที่ส่วนท้ายของ <body>
<!-- 💁 Include both scripts below to support all browsers! -->
<!-- Loads <model-viewer> for modern browsers: -->
<script type="module"
src="https://unpkg.com/@google/model-viewer/dist/model-viewer.js">
</script>
<!-- Loads <model-viewer> for old browsers like IE11: -->
<script nomodule
src="https://unpkg.com/@google/model-viewer/dist/model-viewer-legacy.js">
</script>เราเพิ่งเพิ่มไลบรารีโดยไม่ได้เปลี่ยนแปลงเนื้อหา หากรีเฟรชหน้าเว็บ คุณจะเห็นเนื้อหาเดิม หากเปิดคอนโซลเครื่องมือสำหรับนักพัฒนาเว็บ คุณอาจเห็นคำเตือนบางอย่างเกี่ยวกับ WebXR API ที่ขาดหายไป แต่คำเตือนเหล่านี้เป็นเรื่องปกติจนกว่า API จะได้รับการเผยแพร่โดยสมบูรณ์

เพิ่มความเข้ากันได้สูงสุด
<model-viewer> รองรับเบราว์เซอร์สมัยใหม่หลายตัวทันทีที่ติดตั้ง อย่างไรก็ตาม หากต้องการเพิ่มจำนวนเบราว์เซอร์ที่หน้าเว็บรองรับ คุณสามารถใส่ Polyfill เพิ่มเติมได้
ดูชุดคำแนะนำทั้งหมดได้ที่ด้านล่าง ซึ่งจะช่วยให้คุณมอบประสบการณ์การใช้งานที่ยอดเยี่ยมในเบราว์เซอร์ที่ทันสมัยทั้งหมดได้ ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Polyfill ของ<model-viewer>
วางโค้ดต่อไปนี้ลงใน <head>
<!-- The following libraries and polyfills are recommended to maximize browser support -->
<!-- NOTE: you must adjust the paths as appropriate for your project -->
<!-- 🚨 REQUIRED: Web Components polyfill to support Edge and Firefox < 63 -->
<script src="https://unpkg.com/@webcomponents/webcomponentsjs@2.1.3/webcomponents-loader.js"></script>
<!-- 💁 OPTIONAL: Intersection Observer polyfill for better performance in Safari and IE11 -->
<script src="https://unpkg.com/intersection-observer@0.5.1/intersection-observer.js"></script>
<!-- 💁 OPTIONAL: Resize Observer polyfill improves resize behavior in non-Chrome browsers -->
<script src="https://unpkg.com/resize-observer-polyfill@1.5.1/dist/ResizeObserver.js"></script>
<!-- 💁 OPTIONAL: Fullscreen polyfill is required for experimental AR features in Canary -->
<!--<script src="https://unpkg.com/fullscreen-polyfill@1.0.2/dist/fullscreen.polyfill.js"></script>-->
<!-- 💁 OPTIONAL: Include prismatic.js for Magic Leap support -->
<!--<script src="https://unpkg.com/@magicleap/prismatic@0.18.2/prismatic.min.js"></script>-->เพิ่ม <model-viewer>
ตอนนี้มาเพิ่มแท็ก <model-viewer> จริงๆ ลงในหน้าเว็บเพื่อให้เราเห็นโมเดล 3 มิติกัน แทนที่องค์ประกอบ <p> ที่มีอยู่ด้วยโค้ดต่อไปนี้
<model-viewer src="third_party/Astronaut/Astronaut.glb"
alt="A 3D model of an astronaut">
</model-viewer>มีแอตทริบิวต์เพียง 2 รายการที่ต้องกล่าวถึงที่นี่
- แอตทริบิวต์
srcระบุตำแหน่งที่จะโหลดโมเดล 3 มิติ ในตัวอย่างนี้ เราใช้โมเดลนักบินอวกาศจาก Poly ซึ่งพร้อมใช้งานภายใต้สัญญาอนุญาต CC-BY - แอตทริบิวต์
altมีคำอธิบายข้อความแทนของโมเดลเพื่อการช่วยเหลือพิเศษ
คุณอาจสังเกตเห็นว่าแอตทริบิวต์ทั้ง 2 นี้มีความคล้ายคลึงกับแอตทริบิวต์ของแท็ก img อย่างมาก
การโหลดซ้ำจะแสดงนักบินอวกาศดังนี้

เยี่ยมไปเลย คุณมีโมเดล 3 มิติบนเว็บแล้ว
ในขั้นตอนต่อไปนี้ เราจะทดลองใช้การโต้ตอบและการเคลื่อนไหวเพิ่มเติม เปลี่ยนลักษณะที่ปรากฏขององค์ประกอบ และลองใช้ AR
มาเพิ่มการโต้ตอบเล็กๆ น้อยๆ ให้กับโมเดลกัน โดยค่าเริ่มต้น เราจะหมุนโมเดลเพื่อบอกเป็นนัยให้ผู้ใช้ทราบว่าโมเดลโต้ตอบได้ (และเพื่อแสดงโมเดลด้วย) จากนั้นเราจะเปิดใช้ตัวควบคุมเพื่อให้ผู้ใช้ย้ายโมเดลได้ด้วยตนเองโดยใช้เมาส์หรือผ่านการสัมผัส
โดยในการดำเนินการ เพียงแค่เพิ่มแอตทริบิวต์ auto-rotate และ camera-controls ลงในองค์ประกอบ <model-viewer>
<model-viewer src="third_party/Astronaut/Astronaut.glb"
auto-rotate camera-controls
alt="A 3D model of an astronaut">
</model-viewer>เมื่อรีเฟรชหน้าเว็บ นักบินอวกาศจะหมุนช้าๆ หากคุณลองลากโมเดล (โดยคลิกและเลื่อนเมาส์ หรือหากใช้อุปกรณ์ที่รองรับการสัมผัส ให้ลากนิ้ว) โมเดลจะหมุน

เมื่อรวมกันแล้ว ฟีเจอร์เหล่านี้จะช่วยให้ผู้ใช้ทราบว่ารูปภาพนี้ไม่ใช่แค่ภาพนิ่ง และรู้สึกถึงการโต้ตอบเพื่อให้รู้สึกว่ามีส่วนร่วม (และเพื่อให้ผู้ใช้เห็นด้านหลังของโมเดล)
ตอนนี้เรามีภาพเคลื่อนไหวแล้ว มาดูวิธีปรับแต่งลักษณะที่ปรากฏเพื่อให้โมเดลน่าสนใจจริงๆ กัน
อัปเดตโมเดล
การเปลี่ยนแปลงบางอย่าง (โดยเฉพาะการเปลี่ยนแปลงแสง) จะแสดงผลได้ดีที่สุดในบางรุ่น ก่อนอื่น มาอัปเดตแอตทริบิวต์ src เพื่อชี้ไปยังโมเดลใหม่ third_party/DamagedHelmet/DamagedHelmet.gltf (เผยแพร่ภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา-ไม่ใช้เพื่อการค้าใน Sketchfab) ตอนนี้แหล่งที่มาขององค์ประกอบทั้งหมดควรเป็นดังนี้
<model-viewer src="third_party/DamagedHelmet/DamagedHelmet.gltf"
auto-rotate camera-controls
alt="A 3D model of a damaged sci-fi helmet">
</model-viewer>โมเดลนี้จะแสดงการเปลี่ยนแปลงบางอย่างที่เรากำลังจะดำเนินการ

เปลี่ยน สีพื้นหลัง
ก่อนอื่น มาเปลี่ยนสีพื้นหลังเพื่อให้โมเดลโดดเด่นบนหน้าเว็บกัน เพิ่มแอตทริบิวต์ต่อไปนี้ลงในแท็ก <model-viewer>
background-color="#70BCD1"
ตั้งค่าแผนที่สภาพแวดล้อม
แผนที่สภาพแวดล้อมใช้เพื่อจัดฉากที่ล้อมรอบซึ่งสะท้อนจากโมเดลและเพื่อระบุการกำหนดค่าแสง การจัดแสงเริ่มต้นนั้นยอดเยี่ยม (และเข้ากันได้กับการจัดแสงของ Scene Viewer ของ ARCore) แต่ในบางครั้งคุณอาจมีสภาพแวดล้อมที่กำหนดเองหรืออาจต้องมีการจัดแสงที่เฉพาะเจาะจงสำหรับผลลัพธ์ที่คุณต้องการ มาเจาะจงแอตทริบิวต์รูปภาพสภาพแวดล้อม (studio_small_07_1k.hdr มาจาก hdrihaven.com) กัน
environment-image="third_party/hdrihaven/studio_small_07_1k.hdr"
เพิ่มเงา
การทำให้วัตถุทอดเงาจะช่วยเพิ่มมิติให้กับฉาก เมื่อเพิ่มแอตทริบิวต์ต่อไปนี้ลงในองค์ประกอบ <model-viewer> ของเรา จะทำให้เกิดเงา
shadow-intensity="1"
เปลี่ยนความเข้มของแสง
โมเดลดูมืดไปหน่อย ลองเปิดไฟให้สว่างขึ้นอีกนิดหน่อยเพื่อให้เห็นรายละเอียดมากขึ้น คุณปรับทั้งการจัดแสงบนเวทีเริ่มต้นและการจัดแสงจากแผนที่สภาพแวดล้อมที่เราเพิ่มได้แยกกัน เพิ่มสิ่งต่อไปนี้
stage-light-intensity="3" environment-intensity="2"การเปลี่ยนแปลงแต่ละครั้งมีขนาดเล็กมาก แต่ตอนนี้โมเดลดูดีขึ้นมาก

ต่อไปเราจะมาดูโหมดการแสดงผลทางเลือกกัน
อุปกรณ์จำนวนมากขึ้นเรื่อยๆ มีเทคโนโลยี Augmented Reality (AR) บางประเภทพร้อมใช้งาน โหมดบางโหมดเรียกใช้ได้ยากหรือต้องใช้โค้ดพิเศษ แต่ <model-viewer> สามารถจัดการความซับซ้อนทั้งหมดนี้ให้คุณได้
Scene Viewer ของ ARCore
ในอุปกรณ์ที่รองรับ <model-viewer> จะทริกเกอร์ Scene Viewer ของ ARCore ได้ เพิ่มแอตทริบิวต์ ar ลงในองค์ประกอบ <model-viewer> และใช่ คุณต้องทำเพียงเท่านี้
<model-viewer src="third_party/DamagedHelmet/DamagedHelmet.gltf"
ar
auto-rotate camera-controls
background-color="#70BCD1"
shadow-intensity="1"
alt="A 3D model of a damaged sci-fi helmet">
</model-viewer>ตอนนี้หากคุณดูในอุปกรณ์ที่รองรับซึ่งมี ARCore เวอร์ชันล่าสุด คุณจะเห็นไอคอนเพิ่มเติม (ดังในรูปภาพด้านล่าง) การคลิกจะเปิดโมเดลใน Scene Explorer

อุปกรณ์อื่นๆ - iOS Quick Look, Magic Leap, WebXR
อุปกรณ์อื่นๆ อีกหลายรุ่นต้องใช้การดำเนินการเพิ่มเติมอีกเล็กน้อย
ใน iOS แอตทริบิวต์ ios-src จะช่วยให้ระบุโมเดล 3 มิติเวอร์ชัน USDZ เพิ่มเติมได้ (ซึ่งจำเป็นใน iOS) เมื่อระบุแอตทริบิวต์นี้ ไอคอน AR Quick Look มาตรฐานจะปรากฏในโมเดลสำหรับอุปกรณ์ iOS ที่รองรับ ดูข้อมูลเพิ่มเติมเกี่ยวกับ USDZ ได้ที่เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ของ Apple
ในอุปกรณ์ Magic Leap แอตทริบิวต์ magic-leap จะเปิดใช้การรองรับ AR โปรดทราบว่าคุณต้องรวมไลบรารี prismatic.js ด้วย (รวมอยู่แล้ว แต่มีการแสดงความคิดเห็นใน Polyfill ที่ไม่บังคับ) และโมเดล 3 มิติต้องเป็นไฟล์ .glb (ไม่ใช่ .gltf)
<script src="https://unpkg.com/@magicleap/prismatic@0.18.2/prismatic.min.js"></script>คุณควบคุมมุมและตำแหน่งเริ่มต้นของกล้องได้ การควบคุมนี้ช่วยให้เราแสดงมุมมองเริ่มต้นของหมวกกันน็อกที่ดีขึ้นแก่ผู้ใช้ได้ เพิ่มข้อมูลโค้ดต่อไปนี้ลงในแท็ก <model-viewer>
camera-orbit="-20deg 75deg 2m"
แน่นอนว่าคุณสามารถใช้โมเดลเหล่านี้กับเนื้อหาอื่นๆ รวมถึงในหน้าเว็บที่ตอบสนองได้ด้วย การสร้างหน้าเว็บที่ตอบสนองตามอุปกรณ์อยู่นอกขอบเขตของ Codelab นี้ แต่คุณดูข้อมูลเพิ่มเติมได้ในพื้นฐานการออกแบบเว็บที่ตอบสนองตามอุปกรณ์
เราได้รวมหน้าตัวอย่างไว้ในที่เก็บแล้ว ดู responsive.html ในจอกว้าง (เหมือนเดสก์ท็อป)

หน้าเดียวกันในวิวพอร์ตแคบ (เช่น อุปกรณ์เคลื่อนที่)

คุณได้ฝังเนื้อหา 3 มิติลงในเว็บแล้ว เก่งมาก!
สิ่งต่อไปที่ควรทำ
นอกจากนี้ยังมีตัวเลือกการกำหนดค่าอื่นๆ อีกมากมาย ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบออนไลน์หรือโค้ด
เมื่อระบุโมเดลแล้ว ขั้นตอนถัดไปที่คุณอาจต้องพิจารณามีดังนี้
- โมเดลบางรายการอาจมีขนาดใหญ่มาก ในกรณีเหล่านี้ <model-viewer> มีหลายวิธีที่จะยังคงมอบประสบการณ์ที่ยอดเยี่ยมได้ ดูข้อมูลเพิ่มเติมได้ที่หน้าเอกสารประกอบเกี่ยวกับการโหลดแบบ Lazy Loading
- โมเดลภาพเคลื่อนไหวอาจสนุกมาก ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปิดใช้ (และการสลับระหว่าง) ภาพเคลื่อนไหวที่กำหนดไว้ในโมเดลได้ที่หน้าภาพเคลื่อนไหว
- และนี่ก็ยังคงเป็นเว็บอยู่ โดยคุณสามารถฝังโมเดลลงในหน้าเว็บเพื่อเสริมเนื้อหาได้
กระบวนการพัฒนาของเราเปิดให้ดูได้ที่ GitHub เรายินดีรับฟังความคิดเห็นจากคุณ