IT General
น้องๆ เคยเล่น Pokemon GO มั้ย? นั่นแหละ AR แบบง่ายๆ เลย คือการเอาภาพเสมือน (Virtual Image) มาซ้อนทับกับโลกจริงที่เราเห็นผ่านกล้องมือถือ หรืออุปกรณ์อื่นๆ ทำให้เราเห็น "โลกที่ถูกเติมแต่ง" นั่นเอง
AR Development ก็คือการสร้างไอ้ "โลกที่ถูกเติมแต่ง" นี่แหละ ไม่ว่าจะเป็นเกม, แอปพลิเคชั่น, หรืออะไรก็ตามที่เอา AR ไปใช้ได้ ทำไมถึงสำคัญน่ะเหรอ? เพราะมันเปิดโลกใหม่ของการใช้งานไง! ลองนึกภาพว่าเราลองเฟอร์นิเจอร์เข้าบ้านก่อนซื้อจริงได้, หรือซ่อมเครื่องยนต์โดยมีคู่มือ 3D ลอยอยู่ข้างๆ มันเจ๋งขนาดนั้นเลยนะ
หลายคนสับสน AR กับ VR (Virtual Reality) VR คือการจำลองโลกทั้งใบให้เราเข้าไปอยู่ในนั้นเลย ต้องใช้แว่น VR สวมเข้าไป AR แค่เอาภาพมาซ้อนทับโลกจริงที่เราเห็นอยู่แล้ว ไม่ต้องใช้อุปกรณ์อะไรเยอะแยะ แค่มือถือก็เล่นได้
สมัยผมทำร้านเน็ตฯ เกม 3D กำลังบูมเลย น้องๆ น่าจะคุ้นเคยกันดี การสร้าง AR ก็เหมือนการสร้างเกม 3D นั่นแหละ ต้องเข้าใจเรื่อง coordinate system, transformation, projection, อะไรพวกนี้ ถ้าไม่เข้าใจพื้นฐานตรงนี้ ทำ AR ออกมาก็จะไม่สมจริง หรือวางตำแหน่งผิดเพี้ยน
ลองนึกภาพว่าเราจะวางโมเดลเก้าอี้ AR ไว้ในห้องนั่งเล่น ถ้าเราไม่รู้ว่าพื้นห้องอยู่ตรงไหน เก้าอี้มันก็จะลอยคว้างอยู่กลางอากาศ หรือจมลงไปในพื้น แบบนั้นใครจะอยากใช้ล่ะ?
AR Development ก็คือการเขียนโปรแกรมอย่างหนึ่ง ดังนั้นทักษะการเขียนโปรแกรมจึงจำเป็นมาก ภาษาที่นิยมใช้กันก็มี C#, Java, Swift แล้วแต่ platform ที่เราจะพัฒนา (Unity, Android, iOS) ถ้าเคยเขียนโปรแกรมมาก่อน ก็จะเรียนรู้ได้เร็วขึ้น
สมัยก่อนตอนเริ่มเขียนโปรแกรมใหม่ๆ ผมชอบ copy code คนอื่นมา modify เดี๋ยวนี้มี AI ช่วยเขียน code ให้แล้ว ชีวิตง่ายขึ้นเยอะเลย!
SDK คือชุดเครื่องมือที่ช่วยให้เราพัฒนา AR ได้ง่ายขึ้น ไม่ต้องเขียน code ทุกอย่างเอง มี SDK ให้เลือกใช้หลายตัว เช่น ARKit (iOS), ARCore (Android), Vuforia แต่ละตัวก็มีข้อดีข้อเสียต่างกันไป เลือกใช้ให้เหมาะกับ project ของเรา
ARKit กับ ARCore เป็น SDK ที่ Apple และ Google พัฒนาขึ้นมาโดยตรง ทำให้ประสิทธิภาพดีมาก และรองรับฟีเจอร์ใหม่ๆ ได้เร็วกว่า ส่วน Vuforia เป็น SDK ที่เก่าแก่กว่า มีฟีเจอร์เยอะ แต่ก็อาจจะซับซ้อนกว่า
ดูวิดีโอเพิ่มเติมเกี่ยวกับAugmented Reality Ar Development:
ถ้าอยากลองเริ่มทำ AR ง่ายๆ ผมแนะนำให้เริ่มจาก Unity ร่วมกับ AR Foundation เพราะ Unity เป็น game engine ที่ใช้งานง่าย มี tutorial เยอะ และ AR Foundation เป็น framework ที่ช่วยให้เราเขียน code AR ได้ครั้งเดียว แล้ว deploy ได้ทั้ง iOS และ Android
ดาวน์โหลด Unity Hub และ Unity Editor (version 2021 หรือใหม่กว่า) จาก Unity Website จากนั้นเปิด Unity Hub แล้วสร้าง project ใหม่ เลือก template "3D" แล้ว import AR Foundation package จาก Package Manager (Window -> Package Manager)
ถ้าใครไม่เคยใช้ Unity มาก่อน อาจจะงงๆ หน่อย ลองดู tutorial ใน YouTube หรือใน SiamCafe Blog มีคนทำไว้เยอะแยะเลย
ใน Unity project ให้สร้าง scene ใหม่ (File -> New Scene) แล้วเพิ่ม ARCamera และ ARSession object เข้าไปใน scene จากนั้นสร้าง plane detection script เพื่อตรวจจับพื้นผิวในโลกจริง
using UnityEngine;
using UnityEngine.XR.ARFoundation;
public class PlaceObjectOnPlane : MonoBehaviour
{
public GameObject objectToPlace;
public ARRaycastManager raycastManager;
void Update()
{
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
List hits = new List();
raycastManager.Raycast(Input.GetTouch(0).position, hits, UnityEngine.XR.ARSubsystems.TrackableType.PlaneWithinPolygon);
if (hits.Count > 0)
{
Pose hitPose = hits[0].pose;
Instantiate(objectToPlace, hitPose.position, hitPose.rotation);
}
}
}
}
Code นี้จะทำการ raycast จากตำแหน่งที่เราแตะหน้าจอ ไปยังพื้นผิวที่ตรวจจับได้ ถ้า raycast ชนพื้นผิว ก็จะสร้าง objectToPlace (เช่น โมเดล 3D เก้าอี้) ขึ้นมาตรงตำแหน่งนั้น
ก่อนที่จะ build app ลงบนมือถือ ต้องทำการ configure Player Settings ให้ถูกต้องก่อน (Edit -> Project Settings -> Player) เลือก platform เป็น iOS หรือ Android แล้วใส่ bundle identifier ให้ถูกต้อง จากนั้น build app แล้วติดตั้งลงบนมือถือ
อย่าลืมเปิด AR permission ใน settings ของมือถือด้วยนะ ไม่งั้น app จะเข้าถึงกล้องไม่ได้
AR Development ไม่ได้มีแค่ Unity กับ AR Foundation นะ ยังมีทางเลือกอื่นๆ อีกเยอะ เช่น Native AR (ARKit/ARCore), WebAR, หรือ framework อื่นๆ
| ทางเลือก | ข้อดี | ข้อเสีย | เหมาะกับ |
|---|---|---|---|
| Unity + AR Foundation | Cross-platform, ใช้งานง่าย, มี tutorial เยอะ | Performance อาจจะไม่ดีเท่า Native AR | Project ที่ต้องการ deploy ได้ทั้ง iOS และ Android |
| Native AR (ARKit/ARCore) | Performance ดีที่สุด, รองรับฟีเจอร์ใหม่ๆ ได้เร็ว | ต้องเขียน code แยกสำหรับ iOS และ Android | Project ที่ต้องการ performance สูงสุด |
| WebAR | ไม่ต้องติดตั้ง app, ใช้งานได้บน browser | ข้อจำกัดด้าน hardware, ฟีเจอร์น้อยกว่า | Project ที่ต้องการเข้าถึงได้ง่าย |
เลือกทางเลือกที่เหมาะกับ project ของเราที่สุดนะ ไม่มีอะไรดีที่สุดเสมอไป
ถ้าอยากอ่านบทความ IT อื่นๆ เพิ่มเติม เข้าไปดูได้ที่ SiamCafe Blog นะครับ
น้องๆ ที่สนใจ AR Development ฟังพี่นะ สมัยพี่ทำร้านเน็ต SiamCafe น่ะ (ตั้งแต่ปี 97 นู่น) อะไรใหม่ๆ มาพี่ต้องลองก่อนเสมอ AR ก็เหมือนกัน มันไม่ใช่แค่เท่ แต่มันต้องแก้ปัญหาให้คนได้จริงด้วย
จำไว้เลยว่า User Experience (UX) สำคัญสุดๆ อย่าทำ AR แค่เพราะมันเจ๋ง แต่ต้องดูว่ามันใช้งานง่าย คนทั่วไปเข้าใจได้ไหม เพราะถ้ามันยาก คนก็เลิกใช้
Anchor คือจุดยึดให้วัตถุ AR เกาะอยู่กับโลกจริง ถ้า Anchor ไม่แม่น วัตถุมันจะสั่นๆ หลุดๆ ดูไม่เนียนเลย สมัยก่อนอุปกรณ์มันไม่แรงเท่าสมัยนี้ พี่ต้อง calibrate เองเลยนะ
ลองใช้พวก Plane Detection หรือ Image Tracking ช่วย Anchor จะแม่นขึ้นเยอะ ยิ่งถ้าเป็น ARKit หรือ ARCore เค้ามี algorithm ที่ฉลาดอยู่แล้ว ใช้ให้เป็นประโยชน์
AR มันกิน resource เยอะมาก มือถือรุ่นเก่าๆ นี่ดับอนาถเลย optimize model 3D ให้ดี ลด polygon count texture resolution ให้เหมาะสม อย่าใส่ effect เยอะเกินจำเป็น
พี่เคยเจอเคสนึง โมเดล 3D ละเอียดเกิน มือถือลูกค้าค้างไปเลย ต้องมานั่งแก้กันวุ่นวาย
ทดสอบเยอะๆ บนอุปกรณ์หลากหลายรุ่น อย่าเทสแค่ใน simulator ต้องลองบนมือถือจริงๆ ทั้ง Android และ iOS เพราะ performance มันต่างกัน
ยิ่งถ้าเป็น AR ที่ต้องใช้กลางแจ้ง แสงแดดมีผลต่อการทำงานของกล้องมาก ต้องเทสในสภาพแวดล้อมจริงด้วย
อย่าคิดว่าทุกคนจะเข้าใจ AR เหมือนเรา ต้องมีคำแนะนำชัดเจนว่าต้องทำอะไรบ้าง ต้องสแกนอะไร ต้องเล็งกล้องไปทางไหน
พี่แนะนำให้ทำ Tutorial สั้นๆ หรือ animation ง่ายๆ สอนการใช้งาน จะช่วยให้ user เข้าใจได้ง่ายขึ้นเยอะ
AR เหมาะกับธุรกิจที่ต้องการสร้างประสบการณ์ใหม่ๆ ให้ลูกค้า เช่น เฟอร์นิเจอร์ (ลองวางเฟอร์นิเจอร์ในบ้านก่อนซื้อ) เสื้อผ้า (ลองเสื้อผ้าแบบ virtual) หรือเกม (Pokemon Go คือตัวอย่างที่ดี)
ส่วนใหญ่ใช้ Unity (C#) หรือ Unreal Engine (C++) ถ้าทำ Native iOS ก็ใช้ Swift (ARKit) ถ้า Android ก็ใช้ Java/Kotlin (ARCore)
AR คือการเอาวัตถุ virtual มาซ้อนทับกับโลกจริง ส่วน VR คือการจำลองโลกเสมือนจริงขึ้นมาทั้งหมด (ต้องใช้แว่น VR)
ข้อจำกัดหลักๆ คือเรื่องของ performance บนมือถือ และความแม่นยำในการ Tracking นอกจากนี้ user interface (UI) ใน AR ก็ยังเป็นเรื่องที่ท้าทาย
AR Development เป็นอะไรที่น่าสนใจและมีอนาคต แต่ต้องเข้าใจหลักการและข้อจำกัดของมัน อย่าทำตามกระแส ต้องคิดถึง user เป็นหลัก แล้ว AR ของน้องๆ จะปังแน่นอน! อย่าลืมแวะไปอ่านบทความอื่นๆ ที่ SiamCafe Blog นะครับ
สำหรับน้องๆ ที่สนใจเรื่องการลงทุน พี่แนะนำ iCafeForex ลองเข้าไปศึกษาดูนะ