สำหรับสายพัฒนา Augmented Reality ฝั่ง iOS นั้นก็ได้มี ARKit มาสักสักใหญ่ฝั่ง Android เองทาง Google ก็ออกเจ้า ARCore มาให้ลองใช้กับ Android Studio และ Unity 3D เหมือนกัน
อย่างที่บอกว่าหลังจาก Apple ได้ออก ARKit มาสักพัก https://developer.apple.com/videos/play/wwdc2017/602/
ทางวิทยาลัยครีเอทีฟดีไซน์ แอนด์ เอ็นเตอร์เทนเมนต์เทคโนโลยี หรือ ANT DPU ที่ผมสังกัดอยู่ก็ไม่นิ่งเฉยมีการทดสอบและนำสอนในโครงการ True App Builder ของ True Incube ไปแล้ว โดยผู้สอนคือ คณบดี ของวิทยาลัย ผศ.ดร. วรสิทธิ์ ชูชัยวัฒนา (Embeded จาก Facebook Post ของคณบดี)
ฝั่ง Android เองก็ใช้ Third Party มาเสียเยอะ จนกระทั่ง Google ออกเจ้า ARcore มานำเสนอ
แล้วตอนนี้นักพัฒนาก็สามารถหยิบมาพัฒนาได้แล้ว! https://developers.google.com/ar โดยแพลตฟอร์มที่รองรับก็ตามภาพประกอบด้านล่าง:
ในบทความนี้เลยจะมา Review ชิมลางการพัฒนาเจ้า ARCore ของ Google เสียหน่อยทั้งบน Android Studio และบนเครื่องประมวลผลเกมยอดฮิตอย่างเจ้า Unity 3D ทั้ง 2 ตัวเลย
มาเริ่มที่ Android Studio กันก่อน วิธีการแสนง่ายคือทาง Google ARCore มี git ให้เรา clone ไปใช้ได้เลยโดย Include เจ้า SDK ไว้อยู่แล้ว ขั้นตอนก็คือเปิด CMD หรือ Terminal แล้วพิมพ์
git clone https://github.com/google-ar/arcore-android-sdk.git
สาธิตวิธีการก็แบบนี้ครับ (ใครไม่รู้ว่า git ทำงานยังไงไปศึกษามา เพราะมันบาปหนามาก!!!)
ทำการตั้งค่ามือถือ Android ของเราให้พร้อมโดยการดาวน์โหลดและติดตั้ง ARCore Service แน่นอนว่าอุปกรณ์ที่รองรับคือ
- Google Pixel and Pixel XL
- Samsung Galaxy S8 (SM-G950U, SM-G950N, SM-G950F, SM-G950FD, SM-G950W, SM-G950U1)
หลังจากนั้นให้เราเปิด Android Studio ขึ้นมาเลือก Open an existing Android Studio project แล้วชี้ไปยัง Folder ที่เราทำการ Clone git ไว้ตัวอย่างของผมคือ ARCore
รอจนกว่าตัว Android Studio Project จะพร้อมใช้งาน เมื่อพร้อมให้เราลอง Run แอพพลิเคชันของเราผ่าน USB Debugging ก่อนเลย เพื่อทดสอบ ARCore ส่วนของโมเดลทั้งหมดจะอยู่ที่ folder ที่ชื่อว่า assets/models
คำสั่งในการเรียก Assets มาแสดงนั้นจะใช้เมธอด onSurfaceCreate() แทน และจะอัพเด็ตตำแหน่งการแสดงผ่าน onSurfaceChanged()
@Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { GLES20.glClearColor(0.1f, 0.1f, 0.1f, 1.0f); // Prepare the rendering objects. This involves reading shaders, so may throw an IOException. try { // Create the texture and pass it to ARCore session to be filled during update(). backgroundRenderer.createOnGlThread(/*context=*/ this); planeRenderer.createOnGlThread(/*context=*/ this, "models/trigrid.png"); pointCloudRenderer.createOnGlThread(/*context=*/ this); virtualObject.createOnGlThread(/*context=*/ this, "models/andy.obj", "models/andy.png"); virtualObject.setMaterialProperties(0.0f, 2.0f, 0.5f, 6.0f); virtualObjectShadow.createOnGlThread( /*context=*/ this, "models/andy_shadow.obj", "models/andy_shadow.png"); virtualObjectShadow.setBlendMode(BlendMode.Shadow); virtualObjectShadow.setMaterialProperties(1.0f, 0.0f, 0.0f, 1.0f); } catch (IOException e) { Log.e(TAG, "Failed to read an asset file", e); } }
ลองทดสอบดูสักหน่อย อันนี้ตัวอย่างจากเว็บไซต์ก่อนชิมลาง
หากสังเกตจะเห็นว่า ไฟล์แบบจำลอง 3 มิติหรือ Model 3D นั้นจะมาพร้อม Texture อยู่ใน Folder Assets ของ Android Studio: (ตัวอย่างไฟล์นามสกุล .obj)
ทีนี้ลอง Build ลงเครื่องมือถือส่วนตัวบ้างหน่อย ถ้าแสงน้อยก็จะจับลำบากไปสักนิด:
ทดสอบจากเครื่องตัวเอง สักหน่อย หา โมเดลอื่นมาใส่ให้
มาดูส่วนของ Unity 3D สิว่ามันแตกต่างกับ Vuforia SDK แค่ไหน? อ่าน Instruction ของมันก่อนนะครับ Google บอกว่า Unity นั้นต้องเป็นเวอร์ชัน 2.2017 Beta ขึ้นไป นั่นหมายความว่าต้องไปติดตั้ง Unity ตัว Beta มาครับ:
https://unity3d.com/unity/beta
ผมเปิด Unity Project ขึ้นมาครับ
ทำการดาวน์โหลด Unity Package ของ ARCore ที่ SDK Preview for Unity มาใช้งาน โดยการ Import Custom Asset จาก Unity
ทั้งหมดคือ Package ที่ทำการแตกออกมาจาก Unity Package กด Import ให้เรียบร้อย
เปิด Scene ของ Unity ที่ชื่อว่า HelloAR ขึ้นมา
สามารถเลือก Canvas->Example Controller ใน Hierachy ไปที่ Inspector ดูตรง Andy Android Prefab คลิกเพื่อแก้ไข โมเดล Andy ด้วยเต่าทะเล Squirt ของเราแทน
ใส่ โมเดลลงไป
ไปที่ Build Setting ทำการ Build แอพพลิเคชันของเราเป็นแพลตฟอร์ม Android ทำการเสียบสาย USB แล้ว Build and Run ให้เรียบร้อย
ไปที่ Build Setting เลือก Player Setting เปิด XR ขึ้นมาเลือก ARcore Feature ซะ
รอการ Build ให้เรียบร้อย:
มาดูผลลัพธ์ของเรากันหน่อยดีกว่าว่า ถ้ารันผ่าน Unity เป็นยังไง:
ก็คิดว่า ARCore น่าจะเป็นอะไรที่น่าจะเป็นการเล่น Content สำหรับการตลาดมากขึ้นในอนาคตสำหรับสาย Android นะครับส่วน iOS ก็ ARKit ซึ่งตอนนี้ก็กลายเป็น ของใกล้ตัวกันไปแล้วกับ Augmented Reality เอาไปศึกษากันต่อเองเลยล่ะกันนะครับ
3 Comments