.

วันอังคารที่ 15 พฤษภาคม พ.ศ. 2561

เกมลื่นภาพสวยยุคนี้ Vulkan API ไง สวยพี่สวย !



ผลการค้นหารูปภาพสำหรับ vulkan android

กว่าจะพัฒนามาได้ !!!

ถ้าเกิดใครเป็นสาวกเกมมือถือแล้วผ่านหน้าผ่านตามาทั้ง IOS และ Android หรือแม้กระทั่งไม่เคยเล่น IOS แต่ก็คงจะเคยได้ยินชื่อเกมว่า Infinity Blade กันบ้างไหมครับ ?   เพราะถ้าเราย้อนเวลากลับไปสักสักช่วงปี 2010 - 2013 ช่วงนั้นจะเป็นช่วงที่ IPod Touch กำลังนิยมอยู่แล้วก็มีการชวนการกันเล่นต้นตำรับเกมปัดหน้าจอทางซ้ายทางขวา เพื่อฟันศัตรูจนเป็นต้นตำรับให้กำเนิดเกมตามๆมาอย่าง Blood And Glory, Real Boxing, Horn และเกมอื่นอีกมากมาย

ผลการค้นหารูปภาพสำหรับ infinity blade
ภาพจากเกม Infinity Blade บน IOS ซึ่งภาพสวยสดงดงามแม้กระทั่งปัจจุบันก็ยังต้องยอมรับ !
ซึ่งถ้าช่วงเวลานั้นเราคงจะต้องยอมรับเลยครับว่า IOS นี่มีเกมภาพสวยๆเทพจริงออกมาได้แล้วตอนนั้นก็รันอยู่บนอุปกรณ์ที่ Spec ไม่ได้เทพอลังการและแรงเท่าปัจจุบันเลยอย่างตอนนั้นเครื่องที่เล่น Infinity Blade ก็จะประมาณ Iphone 4, 5 หรือ IPod Touch เป็นต้น ซึ่งถ้าขอย้อน Spec กลับไปค่าวๆเพื่อใครที่ลืมกันไปแล้ว

IPhone 4

CPU1.0 GHz Cortex-A8
GPU
Ram
PowerVR SGX535
512 MB

นี่มันอะไรกัน !!! Spec เพียงเท่านี้ก็สามารถเล่นเกมภาพสวยขนาดนี้ได้ (ในปี 2010 - 2013 ) แล้วถ้าอย่งานั้นปัจจุบันนี้ล่ะที่ Spec ทั้ง Android และตัว IOS เดิมเองก็ทิ้ง IPhone 4 ไปไกลยิ่งกว่าดาวพลูโตเสียอีก
ส่วนในของฝั่ง Android ช่วงเวลาแถวๆนั้นก็เป็นช่วงที่ชิป Tegra 3 ของ Nvidia เปิดตัวแล้วเป็นข่าวฮือฮาถึงเรื่องสเปคความเทพต่างๆที่ออกมาแข่งกัน Tegra3 เปิดตัว

ผลการค้นหารูปภาพสำหรับ tegra 3 game
Horn เกมชูโรงกราฟฟิคของ Tegra 3 บนเครื่อง Android อย่าง HTC One X,  LG Optimus 4x

ซึ่งทั้งหมดที่ผมกล่าวขึ้นมาเบื้องต้นคงจะเหมือนย้อนเวลากลับไปหาอดีตให้หลายคนได้คิดถึงกันใช่ไหมครับ ?  เอ๋... ถ้าอย่างนั้น Spec ของมือถือต่างๆที่อัดกันเข้าไปอย่างไม่หยุดยั้งและพัฒนาต่อๆมาเรื่อยๆ แต่อะไรกันที่เป็นสิ่งเล็กๆ  ไม่จำเป็นต้องมีชิป CPU ไม่ต้องอัด Ram กันเข้าไปเยอะๆ แต่สามารถเพิ่มประสิทธิภาพได้ ?


Software คือคำตอบ !

ใช่แล้วครับเราลองมองข้ามเรื่อง Hardware ออกไปก่อนนะครับ เพราะเราทุกคนรู้โดย Common Sense พื้นฐานอยู่แล้วว่า โอเคเกมมันกระตุกอะ อัพสเปคคอมใหม่ล่ะกันนะ ?  แต่จริงๆแล้วสเปคคอมเรามันกากจริงเรอะ ? หรือคนทำเกมเค้าทำมาไม่ดีกันแน่ ?! 
 ตัวอย่างเกม PUBG

ถ้าเกิดใครเคยเล่น PUBG บนคอมพิวเตอร์มาก่อนตั้งแต่ยุคนู้นน ที่เป็นยุคบุกเบิกคือเป็น Early Access บน Steam เกมพึ่งออกอาทิตย์แรกๆเลย จะพบว่าเกมมัน "โคตรแลค !!!" คำว่าแลคกระตุกในที่นี้คือคอมเราดีในระดับหนึ่งแล้วสมมติว่า GTX 950 + Ram 8 + CPU Core I5  (จริงๆสเปคนี้สำหรับบางคนอาจจะถือว่ายังไม่สูง แต่โดยมาตราฐานเฉลี่ยๆแล้วสเปคนี้ควรเล่นเกมทั่วๆไปได้ลื่นไหลแล้วครับ)  ซึ่งถ้าเรามาเล่นเกม PUBG เราจะพบว่าทำไมมันกระตุกจังฟร้ะ ! ทั้งๆที่ถ้าเราเปรียบเทียบไปเล่น GTA V หรือ Dragon Age Inquistion ซึ่งก็เป็นเกมภาพสวย (กว่า PUBG) แถมยัง Open World อีกต่างหาก แต่กลับเล่นแล้วลื่นปรื้ดไม่กระตุก ?!  ซึ่งหลายๆคนน่าจะเคยเจอเหตุการณ์แบบนี้มาแล้วคือเกมที่ภาพกากกว่าแต่กลับกระตุก แต่เกมภาพสวยกว่าบางเกมกลับเล่นลื่น ?

ผลการค้นหารูปภาพสำหรับ assassin's creed bug meme
Texure ตัวละครมันหายไปไหนกันฟร้าาา 40 GB เลยนะโว้ยย?!! - ลัทธินักฆ่า

นั่นก็เป็นเพราะเรื่องของการทำงานของโปรแกรม (App บลาๆ แล้วแต่จะเรียกเลยครับ)  ที่เราใช้อยู่มันอาจจะยังไม่สามารถดึงประสิทธิภาพของ Hardwaare มาใช้ได้อย่างคุ้มค่านั่นเองเสมือนเรามีรถ Ferrari แต่ใช้งานไม่คุ้มนั่นเอง


อธิบายศัพท์
Hardware พวก RAM, CPU, Disk ต่างๆบนมือถือหรือคอมพิวเตอร์เราที่จับต้องได้ (คนทำงาน)
Software เหล่าโปรแกรมต่างๆเช่น PUBG, Microsoft Word, Google Chrome  (งานสักอย่างที่ต้องทำ)
API Application Program Interface เป็นสื่อกลางที่ใช้ในการติดต่อระหว่าง Hardware กับ Software (คนแจกจ่ายงาน)

รู้จัก OpenGL กันก่อน

ตัว OpenGL เองนั้นก็คือ API ที่ช่วยให้คนสร้างเกมหรือกราฟฟิคต่างๆลดปัญหาเรื่องการต้องไปนั่งคิดว่าจะแสดงภาพกราฟฟิคได้อย่างไรเช่น ก้อนสี่เหลี่ยม หรือก้อนวงกลมหน้าคนหรือจะเป็นวัตถุกราฟฟิคตต่างๆครับ ถ้าอธิบายง่ายๆ ให้คนไม่เคยเขียนโปรแกรมฟัง ก็คือจริงๆแล้วคอมพิวเตอร์เราเป็นเลขฐาน 0101110 อะไรแบบนี้ถูกไหมครับ แล้วถูกเกิดจะไปบอกว่า จงแสดงรูปในเกมมาซิ !!! เราจะทำได้อย่างไรกัน ? ตรงนี้เองก้เลยมีคนออกแบบมาตราฐาน API มาช่วยว่าก็สมมติพิมคำว่า drawCube(สูง 20, ลึก 20, กว้าง 20) แล้วคอมพิวเตอร์จะเข้าใจและเอาภาพมาแสดงให้นั่นเองครับ  พูดง่ายๆคือกราฟฟิคที่เราเห็นในเกมจริงๆก็คือตัวเลขนั่นแหละ !  (DirectX ก็เช่นกันครับ) ทีนี้มาดูข้างล่างกันดีกว่า




โดยตัวอย่างจากภาพคือเรื่องเของการแบ่งงาน Software เช่นเล่นเกมก็ต้อง โหลดแสง เงาสะท้อน       คำนวนกระสุนที่ลอยไปแล้วว่าไปไกลแค่ไหนยิงโดนมั้ย แล้วเราลงแยกงานเหล่านี้ออกเป็นส่วนๆดูครับ  แต่เนื่องจากชิ้นส่วนต่างๆมีเยอะมาก ! ถ้าหากเราให้คนสั่งคนที่ทำหน้าที่ตรงกลาง ( API)  เป็นคนสื่อสารไปหาคนใช้แรงงานอย่าง Hardware แต่ว่า งานนี้ มันจะไม่หมูหน่ะสิครับเพราะว่าเมื่อมี Order งานจาก Software เข้ามาแล้ว API ยังต้องมานั่งคิดว่าว่า  เอ๊ะ ?! งานมันมีแค่ไหนฟร้ะ โอะแล้วต้องแบ่งยังไง แบ่งแค่ไหน แล้วเกิดงานมีปัญหาต้องทำไงบอกแรงงานยังไงดี ?

ซึ่งปัญหาเหล่านั้นล้วนอยู่บน OpenGL ซึ่งอยู่กับเหล่ามาตั้งแต่ยุคนู้นนน จำไม่ได้เลยทีเดียวว่ายุคไหน ก็ยุคยอดฮิตคือปี 1992 เลยจ้าาา แก่ไหมครับ แตกหนึ่ง !!!

ผลการค้นหารูปภาพสำหรับ opengl meme
OpenGL ทำไมแกถึงต้องให้ชั้นยำโค้ดทุกอย่างไว้ในจุดเดียวฟร้าา แม่งอะไรกันฟร้ะเนี่ยโคตรเยอะ !!!
ดังนั้นจากข้างต้นที่ผมยกตัวอย่างเรื่องของรถไปแล้วว่าต่อให้เรามี Hardware ที่เป็น Ferrari เร็วแค่ไหนแต่คือคนนั่งรถไปกับเราคืออาม่าอายุ 80  แล้วอาม่าเป็นคนจดเช็คลิสต์ Order ของเอาไว้แถมอาม่ายังต้องมานั่งคิดด้วยอีกต่างหากว่าต้องไปซื้อของกี่ชิ้นอะไรบ้างนะ แล้วเกิดระหว่างน้ำมันหมดทำไง หรือรถชนขึ้นมา ซึ่งการที่อาม่ากังวลเรื่องต่างๆนอกเหนือจากหน้าที่ที่มีอยู่คือแค่ "ไปสั่งมาว่าลื้อเอาของจากหน้า 7-11 ไปส่งที่เยาวราชนะ"  จบครับ แต่อาม่ากับไปคิดเรื่องอื่นเยอะแยะแล้วกว่าจะมาบอกว่าต้องเอาของไรไปส่ง ก็ทำให้รถต้อง Start รถรออไปเปล่าๆ ไม่ไ่ด้อะไรในชีวิต  เสียเวลาฟรีๆ แถมการที่อาม่า ไม่กล้าสั่งงานอะไรหลายๆคนทำให้งานล่าช้าไปอีก ต่อให้มีรถเทพอีกสิบคันหรือจะมีเครื่องบิน แต่คนสั่งการยัง ไม่เฉียบขาด ก็ไม่ช่วยอะไรหรอกครับ ซึ่ง OpenGL จะมีลักษณะคล้ายๆกับที่กล่าวไปข้างต้นเลยครับ

เข้าสู่ยุคใหม่ Vulkan API !!!

ผลการค้นหารูปภาพสำหรับ vulkan game
Vulkan API ที่ใช้บนเกม Talos Principle (มีบน Tegra Android)
ซึ่งจากที่กล่าวไปข้างต้นนะครับ เราก็จะเห็นแล้วว่าปัญหาของ API สมัยก่อนอย่าง OpenGL นั้นก็ทางตัวบริษัท API เค้าเองก็พัฒนามาเรื่อยๆนะครับจนกระทั่งถึง OpenGL 4.0 ซึ่งจะทำมาแข่งกับ DirectX แต่ถึงกระนั้นก็ยังไม่สามารถสู้ได้นั่นเอง เราเลยมาดูผู้พลิกวงการอย่าง Vulkan ที่พัฒนาโดย Khronos Group ดูครับ ว่าเขาเจ๋งกว่ายังไง ?



ซึ่งด้วยเหตุนี้นั่นเองนี่หล่ะครับทำให้เกมมือถือของเราในปัจจุบันสามารถดึงประสิทธิภาพมาได้เต็มที่ด้วยความที่ Vulkan ยังสามารถกระจายงานไปให้ CPU หลายๆตัวอีกด้วยสังเกตดูจากภาพด้านล่างครับการทำงานบน OpenGL นั้นสามารถทำได้แค่บน CPU ตัวเดียวแล้วรับการทำงานคนเดียวไปเต็มที่แต่ในขณะเดียวกัน Vulkan API กับใช้หลักการกระจายงานไปให้ CPU ตัวอื่นๆรอบๆตัวมันทำให้สามารถทำงานได้อย่างเต็มที่ โดยที่ CPU แต่ล่ะตัวโหลดยังแทบจะไม่ถึง 20 % ด้วยซ้ำ !!!  ซึ่งนอกจาก App จะต้องรองรับแล้วอุปกรณ์มือถือเราก็ต้องรองรับด้วยเช่นกันนะครับจึงจะสามารถใช้งานหรือเล่นเกมที่ทำบน Vulkan ได้อย่างฟินสุดๆไปเลยเช่น Xiaomi MIX 2 ของผมเป็นต้น หรือจะตัวอื่นๆก็มีอีกมากมายอยู่ข้างล่างเลยครับสำหรับสเปคในรุ่นนี้


"สังเกตดูที่เรื่องของการใช้งาน CPU ฝั่งซ้าย Open GL ฝั่งขวา Vulkan "
ชมคลิปด้วยตัวเองดีกว่าครับ OpenGL VS Vulkan



สรุป Vulkan API
+ เพิ่มประสิทธิภาพการทำงานให้กับ Hardware เพราะทำงานได้เต็มที่ไม่ไป load ที่ตัวเดียว
+ ประหยัดแบตมากขึ้น

ส่วนใครที่ชอบ Emulator แล้วพึ่งซื้อเครื่องมาใหม่ก็ลองเช็คดูนะครับว่าเครื่องรองรับ Vulkan ไหมแล้วลองมาเล่นดูครับบน ppsspp แบบใช้ Vulkan render ขอบอกเลยภาพเนียนๆลื่นหัวแตก 60fps เลยครับ

ผลการค้นหารูปภาพสำหรับ ppsspp vulkan api
เพิ่มจาก Wololo.net


ภาพกราฟฟิคจาก Xiaomi Mix 2 บนเครื่องผมเองครับ


Need For Speed No Limit กราฟฟิคเทพเจ้าไม่ต้องอวย

Vulkan Benchmark สังเกตว่ามีพวกฝุ่นๆละอองเยอะมากในฉากซึ่งต้อง Render หนักมากครับ


ถ้าพื้นโล่งๆล่ะก็ Render สบาย !

เกมที่รองรับ Vulkan API

โหลดเลย VainGlory

ผลการค้นหารูปภาพสำหรับ vainglory
โหลดเกม : HIT

รูปภาพที่เกี่ยวข้อง

ซึ่งแต่ล่ะเกมข้างต้นจะเห้นว่าภาพสวยขั้นเทพทั้งนั้นก็เป็นเพราะรับพลังจาก Vulkan API ไปเต็มๆเลยนี่หล่ะครับ


ก็ขอจากลาเพื่อนๆไปแต่เพียงเท่านี้นะครับหวังว่าเพื่อนๆจะได้ความรู้ในการเลือกซื้อมือถือที่เหมาะสมและโดนใจแก่ตนเองนะครับหากชอบบทความแบบนี้บอกเราเลยครับ จะได้นำไปปรับปรุงและจัดเต็มให้สนุกมากขึ้นครับ :)

สุดท้ายแล้วถ้าในปีนี้ใครเล็งมือถือตัวใหม่ก็ขอแนะนำเครื่องที่ลองรับ Vulkan API ด้วยนะครับโดยเช็คได้ผ่านทางนี้ครับ  Vulkan API


CompanyHardwareSoftware support: Vulkan 1.0
MicroarchitectureAvailable sinceGPUs (chips)Graphic cards / SoCsAndroid[a]LinuxMicrosoft Windows[b]

ImaginationTechnologies
PowerVR Series 8February 2016GE8200, GE8300PowerVR Graphics SDK v4.1[94]
PowerVR Series 7November 2014GE7400, GE7800, GT7200, GT7400, GT7600, GT7800, GT7900Apple A9, A9X, A10 Fusion, Helio X30 (MT6799)
PowerVR Series 6January 2012G6100, G6200, G6230, G6400, G6430, G6630, RK3368, G6050, G6060, G6100 (XE), G6110, GX6240, GX6250, GX6450, GX6650Apple A7, A8, A8X, MediaTek MT8173, MT8176, MediaTek MT6595M, MT6595T, MT6595M, MT6795, MT8135, Helio X10 (MT6795), LG H13, Atom Z3460, Z3480, Z3530, Z3560, Z3570, Z3580
PowerVR Series 5January 2009SGX543, SGX544, SGX554Apple S1, A5, A5X, A6, A6X, NovaThor L8540, L8580, L9540, TI OMAP 4470, 5430, 5432, MediaTek MT5327, MT6589M, MT6589T, MT6589, MT8117, MT8121, MT8125, MT8389, Atom Z2460, Z2520, Z2560, Z2580, Z2760, Exynos 5410not supported
Qualcomm
Adreno 500 seriesAdreno 510, Adreno 530, Adreno 540
Adreno 512
Snapdragon 430, 625, 650, 652, 660,820, 821, 8351.0[95]
Adreno 400 seriesAdreno 418,Adreno 420,Adreno 430Snapdragon 415, 615, 616, 617, 805, 808, 8101.0(Adreno 418,430)[96]
Adreno 300 seriesSnapdragon 200, 208, 210, 212, 400, 410, 412, 600, 800, 801not supported
ARM
Bifrost[97]June 2016Mali-G71, …Kirin 960, 970, Exynos 8895, MediaTek Helio P23 (MT6763T), Helio P301.0[98]
Midgard 4thQ4 2015Mali-T860, Mali-T830, Mali-T880Exynos 8890, Exynos7880, Exynos 7870, Kirin 950, 955, MediaTek MT6738, MT6750, Helio X20 (MT6797), X25 (MT6797T), P10 (MT6755), P20 (MT6757)
Midgard 3rdOctober 2013Mali-T760, …Exynos 7420, Exynos 5433, MT6752, MT6732, RK3288
Midgard 2ndAugust 2012Mali-T600 series, T720Exynos 5250, 5260, 5410, 5420, 5422, 5430, 5800, 7580, Mediatek MT6735, MT6753, Kirin 920, 925, 930, 935not supported


อ้างอิง
Vulkan (API)

*หากนำไปอ้างอิงกรุณาใส่ Credit ให้ด้วยครับ