การเรียนรู้การเขียนโปรแกรมกราฟิกเป็นมากกว่าการเรียนรู้ API มันเกี่ยวกับการเรียนรู้วิธีการทำงานของกราฟิก การแปลงจุดยอดรุ่นแสงเทคนิคเงาการทำแผนที่พื้นผิวการเรนเดอร์แบบเลื่อนและอื่น ๆ สิ่งเหล่านี้ไม่มีอะไรเกี่ยวข้องกับ API ที่คุณใช้ในการปรับใช้
ดังนั้นคำถามคือ: คุณต้องการเรียนรู้วิธีการใช้ API หรือไม่? หรือคุณต้องการที่จะเรียนรู้กราฟิก ?
ในการทำสิ่งต่าง ๆ ด้วยกราฟิกที่เร่งความเร็วด้วยฮาร์ดแวร์คุณต้องเรียนรู้วิธีใช้ API เพื่อเข้าถึงฮาร์ดแวร์นั้น แต่เมื่อคุณมีความสามารถในการเชื่อมต่อกับระบบการเรียนรู้กราฟิกของคุณจะหยุดมุ่งเน้นไปที่สิ่งที่ API ทำเพื่อคุณและมุ่งเน้นไปที่แนวคิดกราฟิกแทน แสงสว่างเงาแผนที่การชน ฯลฯ
ถ้าเป้าหมายของคุณคือการได้เรียนรู้แนวคิดกราฟิกเวลาที่คุณใช้จ่ายกับ API เป็นเวลาที่คุณไม่ได้ใช้จ่ายการเรียนรู้แนวคิดกราฟิก วิธีการรวบรวมเฉดสีไม่เกี่ยวข้องกับกราฟิก หรือวิธีการส่งเครื่องแบบวิธีการอัปโหลดข้อมูลจุดยอดลงในบัฟเฟอร์ ฯลฯ เหล่านี้เป็นเครื่องมือและเครื่องมือสำคัญสำหรับการทำงานกราฟิก
แต่มันไม่ใช่แนวคิดกราฟิก พวกมันคือหนทางสู่จุดจบ
การทำงานและการเรียนรู้กับ Vulkan ต้องใช้เวลามากมายก่อนที่คุณจะถึงจุดที่คุณพร้อมที่จะเริ่มเรียนรู้แนวคิดกราฟิก การส่งผ่านข้อมูลไปยังเฉดสีต้องมีการจัดการหน่วยความจำอย่างชัดเจนและการประสานการเข้าถึงอย่างชัดเจน และอื่น ๆ
ในทางตรงกันข้ามการไปถึงจุดนั้นด้วย OpenGL ต้องใช้งานน้อยลง และใช่ฉันกำลังพูดถึง OpenGL core-profile หลักของโปรไฟล์ที่ทันสมัย
เพียงเปรียบเทียบสิ่งที่ต้องทำในการทำสิ่งที่เรียบง่ายเพียงแค่ล้างหน้าจอ ใน Vulkan สิ่งนี้ต้องการความเข้าใจอย่างน้อยเกี่ยวกับแนวคิดจำนวนมาก: บัฟเฟอร์คำสั่งคิวอุปกรณ์วัตถุหน่วยความจำรูปภาพและโครงสร้าง WSI ที่หลากหลาย
ใน OpenGL ... มันสามฟังก์ชั่น: glClearColor
, glClear
, และแพลตฟอร์มเฉพาะบัฟเฟอร์แลกเปลี่ยนโทร หากคุณใช้ OpenGL ที่ทันสมัยกว่านี้คุณสามารถลดได้ถึงสองรายการglClearBufferuiv
และเปลี่ยนบัฟเฟอร์ คุณไม่จำเป็นต้องรู้ว่า framebuffer คืออะไรหรือมาจากที่ใด คุณล้างมันและสลับบัฟเฟอร์
เนื่องจาก OpenGL ซ่อนตัวจากคุณเป็นอย่างมากจึงใช้ความพยายามน้อยกว่ามากในการเข้าถึงจุดที่คุณเรียนรู้กราฟิกมากกว่าการเรียนรู้อินเตอร์เฟสกับฮาร์ดแวร์กราฟิก
นอกจากนี้ OpenGL ยังเป็น API ที่ค่อนข้างปลอดภัย มันจะออกข้อผิดพลาดเมื่อคุณทำสิ่งผิดปกติ Vulkan ไม่ได้ ในขณะที่มีการดีบักเลเยอร์ที่คุณสามารถใช้เพื่อช่วย Core Vulkan API จะบอกอะไรคุณได้แทบจะไม่มีอะไรเว้นแต่ว่ามีข้อผิดพลาดของฮาร์ดแวร์ หากคุณทำสิ่งผิดปกติคุณสามารถทำให้การเรนเดอร์ขยะหรือ GPU พัง
บวกกับความซับซ้อนของวัลกานมันกลายเป็นเรื่องง่ายมากที่จะทำสิ่งผิดพลาดโดยไม่ตั้งใจ การลืมตั้งค่าพื้นผิวให้กับเค้าโครงที่ถูกต้องอาจใช้งานได้ในการนำไปใช้อย่างใดอย่างหนึ่ง การลืมจุด sychronization อาจใช้งานได้ในบางครั้ง แต่ทันใดนั้นก็ล้มเหลวโดยไม่มีเหตุผล และอื่น ๆ
ทุกสิ่งที่กล่าวมามีมากกว่าการเรียนรู้กราฟิกมากกว่าการเรียนรู้เทคนิคกราฟิก มีพื้นที่หนึ่งที่ Vulkan ชนะ
กราฟิกประสิทธิภาพ
การเป็นโปรแกรมเมอร์กราฟิก 3D มักต้องการแนวคิดในการเพิ่มประสิทธิภาพโค้ดของคุณ และนี่คือที่ซึ่งการซ่อนข้อมูลของ OpenGL และการทำสิ่งต่าง ๆ ที่อยู่ด้านหลังของคุณกลายเป็นปัญหา
แบบจำลองหน่วยความจำ OpenGL มีความสอดคล้องกัน การใช้งานได้รับอนุญาตให้ใช้คำสั่งแบบอะซิงโครนัสตราบใดที่ผู้ใช้ไม่สามารถบอกความแตกต่างได้ ดังนั้นหากคุณแสดงภาพบางภาพให้ลองอ่านจากภาพนั้นการนำไปใช้งานต้องออกเหตุการณ์การซิงโครไนซ์อย่างชัดเจนระหว่างสองงานนี้
แต่เพื่อให้เกิดประสิทธิภาพใน OpenGL คุณต้องรู้ว่าการใช้งานที่ทำเช่นนี้เพื่อให้คุณสามารถหลีกเลี่ยงได้ คุณต้องทราบว่าการติดตั้งใช้งานที่ออกเหตุการณ์การซิงโครไนซ์อย่างลับๆแล้วเขียนโค้ดของคุณใหม่เพื่อหลีกเลี่ยงเหตุการณ์ดังกล่าวให้มากที่สุด แต่ API เองก็ไม่ได้ทำให้ชัดเจน คุณต้องได้รับความรู้นี้จากที่อื่น
ด้วย Vulkan ... คุณคือคนที่ต้องออกเหตุการณ์การซิงโครไนซ์เหล่านั้น ดังนั้นคุณจะต้องตระหนักถึงความจริงที่ว่าฮาร์ดแวร์ไม่ได้ดำเนินการคำสั่งพร้อมกัน คุณต้องทราบเมื่อคุณต้องการออกเหตุการณ์เหล่านั้นและดังนั้นคุณต้องระวังว่าอาจทำให้โปรแกรมของคุณช้าลง ดังนั้นคุณทำทุกอย่างที่คุณสามารถทำได้เพื่อหลีกเลี่ยง
API ที่ชัดเจนเช่น Vulkan บังคับให้คุณทำการตัดสินใจด้านประสิทธิภาพเหล่านี้ ดังนั้นถ้าคุณเรียนรู้ Vulkan API คุณมีความคิดที่ดีเกี่ยวกับสิ่งที่กำลังจะช้าและสิ่งที่กำลังจะเร็ว
หากคุณต้องทำงาน framebuffer บางอย่างที่บังคับให้คุณสร้าง renderpass ... อัตราต่อรองที่ดีว่ามันจะช้ากว่าถ้าคุณสามารถใส่มันลงใน subpass แยกของ renderpass ได้ ไม่ได้หมายความว่าคุณไม่สามารถทำได้ แต่ API บอกคุณล่วงหน้าว่าอาจทำให้เกิดปัญหาด้านประสิทธิภาพ
ใน OpenGL นั้น API จะเชิญให้คุณเปลี่ยนไฟล์แนบ framebuffer โดยจำใจ ไม่มีแนวทางในการเปลี่ยนแปลงที่จะเร็วหรือช้า
ดังนั้นในกรณีนี้การเรียนรู้ Vulkan สามารถช่วยให้คุณเรียนรู้วิธีการทำกราฟิกได้เร็วขึ้น และจะช่วยลดค่าใช้จ่ายของ CPU อย่างแน่นอน
จะใช้เวลานานกว่านั้นก่อนที่คุณจะไปถึงจุดที่คุณสามารถเรียนรู้เทคนิคการแสดงผลกราฟิก