โปรแกรมเมอร์กราฟิกใหม่ควรเรียนรู้ Vulkan แทนที่จะเป็น OpenGL หรือไม่


53

จากวิกิ : "Vulkan API ถูกเรียกว่า 'การริเริ่ม OpenGL รุ่นต่อไป' โดย Khrono" และนั่นคือ "ความพยายามในการออกแบบใหม่โดยมีเหตุผลที่จะรวม OpenGL และ OpenGL ES ไว้ใน API ทั่วไปที่จะไม่ย้อนหลัง เข้ากันได้กับรุ่น OpenGL ที่มีอยู่ "

ดังนั้นผู้ที่เข้าร่วมในการเขียนโปรแกรมกราฟิกควรจะได้รับบริการที่ดีกว่าในการเรียนรู้ Vulkan แทนที่จะเป็น OpenGL หรือไม่ ดูเหมือนว่าพวกเขาจะทำหน้าที่จุดประสงค์เดียวกัน


1
หากคุณสามารถทำอะไรบางอย่างใน API เดียวคุณสามารถทำ API อื่นใดก็ได้วิธีการทำขึ้นอยู่กับ API
A --- B

คำตอบ:


33

แทบจะไม่ได้!

ดูเหมือนว่าจะเป็นการถามว่า "โปรแกรมเมอร์ใหม่ควรเรียนรู้ C ++ แทนที่จะเป็น C" หรือ "ศิลปินใหม่ควรเรียนรู้การวาดภาพดิจิทัลแทนการลงสีจริง"

โดยเฉพาะอย่างยิ่งเนื่องจากมันไม่เข้ากันได้ย้อนกลับโปรแกรมเมอร์กราฟิกจะโง่เขลาที่จะยกเว้น API กราฟิกที่พบมากที่สุดในอุตสาหกรรมเพียงเพราะมีใหม่ นอกจากนี้ OpenGL ยังทำสิ่งที่แตกต่างออกไป เป็นไปได้ทั้งหมดที่ บริษัท จะเลือก OpenGL เหนือ Vulkan โดยเฉพาะในช่วงต้นเกมและ บริษัท นั้นจะไม่สนใจใครที่ไม่รู้จัก OpenGL ไม่ว่าพวกเขาจะรู้จัก Vulkan หรือไม่ก็ตาม

ความเชี่ยวชาญไม่ค่อยมีทักษะทางการตลาด

สำหรับผู้ที่ไม่จำเป็นต้องทำการตลาดทักษะของพวกเขาเช่นนักพัฒนาอินดี้มันคงจะโง่กว่าที่จะเอาเครื่องมือออกจากกล่องเครื่องมือของพวกเขา อุปกรณ์อินดี้นั้นขึ้นอยู่กับความยืดหยุ่นและความสามารถในการเลือกสิ่งที่ได้ผลมากกว่าสิ่งที่ได้รับเงินทุน เชี่ยวชาญใน Vulkan จำกัด ตัวเลือกของคุณเท่านั้น

ความเชี่ยวชาญเป็นกระบวนทัศน์ที่มีประสิทธิภาพไม่ค่อย


2
คำตอบที่ดีทำให้ฉันนึกถึงสิ่งนี้: elise.com/quotes/heinlein_-_specialization_is_for_insects
Will

7
การเปรียบเทียบ C ++ นี้ไม่เหมาะสม Vulkan เป็น API รุ่นใหม่ที่พัฒนาโดยผู้สร้าง OpenGL C ++ เป็นคู่แข่งที่ยอมรับได้ซึ่งส่วนใหญ่เป็นแบบย้อนกลับไปที่ C
Moby Disk

ข้อมูลจำเพาะเหล่านั้นไม่เกี่ยวข้องกับจุดเปรียบเทียบ
mHurley

6
การอ้างสิทธิ์ในความเชี่ยวชาญนั้นไม่มีประสิทธิภาพหรือไม่สามารถขายได้นั้นไร้เดียงสาอย่างไม่น่าเชื่อ นักแปลที่รู้ทั้งห้าคำในทุกภาษาที่พูดไม่มีประโยชน์คนจะจ้างนักแปลที่เชี่ยวชาญ (หรือที่เชี่ยวชาญใน) ภาษาจำนวนน้อย ตอนนี้มากกว่า -specializing เป็นปัญหา นักแปลที่เชี่ยวชาญภาษาเดียวอย่างสมบูรณ์และรู้เพียงว่าภาษานั้นไม่ใช่นักแปลที่มีประโยชน์ และ devs (อินดี้หรืออื่น ๆ ) จะต้องระมัดระวังไม่ให้ใช้เวลาตลอดเวลาในการเรียนรู้เครื่องมือใหม่ ๆ ในที่สุดพวกเขาจำเป็นต้องทำบางสิ่งบางอย่างเพื่อขายจริง ๆ เพื่อพวกเขาจะพบว่าตัวเองล้มละลาย
8bittree

เพื่อที่จะชัดเจนฉันไม่จำเป็นต้องไม่เห็นด้วยกับคุณเกี่ยวกับ OpenGL และ Vulkan นี่อาจเป็นกรณีที่การเรียนรู้ทั้งสองแทนที่จะเป็นแค่ Vulkan เป็นตัวเลือกที่ดีกว่า
8bittree

40

หากคุณกำลังเริ่มต้นและคุณต้องการทำงาน GPU (ซึ่งตรงกันข้ามกับการใช้เอ็นจิ้นเกมเช่น Unity) คุณควรเริ่มต้นด้วยการเรียนรู้ Vulkan บางทีคุณควรเรียนรู้ GL ในภายหลังด้วย แต่มีเหตุผลสองประการที่จะคิด Vulkan ก่อน

  1. GL และ GLES ถูกออกแบบมาหลายปีแล้วเมื่อ GPU ทำงานแตกต่างกันมาก (ความแตกต่างที่เห็นได้ชัดที่สุดคือโหมดการโทรแบบเร่งด่วนเทียบกับการเรียงลำดับและคิวคำสั่ง) GL สนับสนุนให้คุณคิดในสไตล์โหมดทันทีและมี cruft รุ่นเก่าจำนวนมาก Vulkan นำเสนอโมเดลการเขียนโปรแกรมที่ใกล้เคียงกับการทำงานของ GPU ร่วมสมัยมากดังนั้นหากคุณเรียนรู้ Vulkan คุณจะมีความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการทำงานของเทคโนโลยีจริงๆและสิ่งที่มีประสิทธิภาพและไม่มีประสิทธิภาพ ฉันเห็นผู้คนจำนวนมากที่เริ่มต้นด้วย GL หรือ GLES และเข้าสู่นิสัยที่ไม่ดีเช่นการออกสายการวาดแยกต่อวัตถุแทนการใช้ VBOs หรือแย่กว่านั้นคือใช้รายการที่แสดง เป็นเรื่องยากสำหรับโปรแกรมเมอร์ GL ที่จะทราบว่าไม่มีอะไรได้รับการสนับสนุนอีกแล้ว

  2. การย้ายจาก Vulkan ไปยัง GL หรือ GLES นั้นง่ายกว่าในทางกลับกัน Vulkan ทำให้สิ่งต่าง ๆ ชัดเจนซึ่งถูกซ่อนหรือไม่สามารถคาดเดาได้ใน GL เช่นการควบคุมภาวะพร้อมกันการแบ่งปันและสถานะการแสดงผล มันเพิ่มความซับซ้อนมากขึ้นจากไดรเวอร์ไปยังแอปพลิเคชัน: แต่ด้วยการทำเช่นนั้นจะช่วยควบคุมแอปพลิเคชันและทำให้การคาดการณ์ประสิทธิภาพและความเข้ากันได้ระหว่างผู้จำหน่าย GPU ต่าง ๆ ง่ายขึ้น หากคุณมีรหัสบางอย่างที่ใช้งานได้ใน Vulkan มันค่อนข้างง่ายที่จะย้ายพอร์ตนั้นไปยัง GL หรือ GLES แทนและคุณก็จบลงด้วยสิ่งที่ใช้นิสัย GL / GLES ที่ดี หากคุณมีรหัสที่ทำงานใน GL หรือ GLES คุณเกือบจะต้องเริ่มต้นใหม่เพื่อให้สามารถทำงานได้อย่างมีประสิทธิภาพใน Vulkan: โดยเฉพาะอย่างยิ่งถ้ามันถูกเขียนในรูปแบบดั้งเดิม (ดูจุดที่ 1)

ฉันกังวลในตอนแรกว่า Vulkan เป็นเรื่องยากที่จะตั้งโปรแกรมและในขณะที่มันจะโอเคสำหรับนักพัฒนาที่มีประสบการณ์ใน บริษัท ขนาดใหญ่มันจะเป็นอุปสรรคใหญ่สำหรับชาวอินเดียและมือสมัครเล่น ฉันโพสต์คำถามนี้ให้กับสมาชิกของ Working Group และพวกเขากล่าวว่าพวกเขามีจุดข้อมูลจากคนที่พวกเขาพูดกับผู้ที่ย้ายไปยัง Vulkan แล้ว คนเหล่านี้มีตั้งแต่ผู้พัฒนาที่ Epic กำลังทำงานร่วมกับ UE4 ไปจนถึงนักพัฒนาเกมมือสมัครเล่น ประสบการณ์ของพวกเขาคือการเริ่มต้น (เช่นการมีหนึ่งสามเหลี่ยมบนหน้าจอ) เกี่ยวข้องกับการเรียนรู้แนวคิดเพิ่มเติมและการใช้รหัสสำเร็จรูปอีกต่อไป แต่มันก็ไม่ซับซ้อนเกินไปแม้แต่ในหมู่อินดีส แต่หลังจากไปถึงขั้นตอนนั้นพวกเขาพบว่าการสร้างแอปพลิเคชั่นที่แท้จริง เพราะ (a) พฤติกรรมนั้นสามารถคาดเดาได้มากขึ้นระหว่างการใช้งานของผู้ขายที่แตกต่างกันและ (b) การเข้าถึงบางสิ่งที่ทำงานได้ดีเมื่อเปิดเอฟเฟกต์ทั้งหมดไม่เกี่ยวข้องกับการลองผิดลองถูก ด้วยประสบการณ์เหล่านี้จากนักพัฒนาที่แท้จริงพวกเขาทำให้ฉันเชื่อว่าการเขียนโปรแกรมกับ Vulkan นั้นสามารถใช้ได้แม้สำหรับผู้เริ่มต้นในกราฟิกและความซับซ้อนโดยรวมนั้นน้อยลงเมื่อคุณผ่านบทช่วยสอนและเริ่มสร้างการสาธิตหรือแอปพลิเคชัน

ดังที่คนอื่น ๆ กล่าวว่า: GL มีให้บริการในหลายแพลตฟอร์ม WebGL เป็นกลไกการจัดส่งที่ดีมีซอฟต์แวร์ที่มีอยู่มากมายที่ใช้ GL และมีนายจ้างจำนวนมากที่จ้างทักษะดังกล่าว ในอีกไม่กี่ปีข้างหน้า Vulkan จะเพิ่มขึ้นและพัฒนาระบบนิเวศ ด้วยเหตุผลเหล่านี้คุณจะโง่ที่จะเลิกเรียนรู้ GL อย่างสิ้นเชิง ถึงแม้ว่าคุณจะมีเวลาง่ายขึ้นและกลายเป็นโปรแกรมเมอร์ GL ที่ดีกว่า (และโปรแกรมเมอร์ GPU ที่ดีขึ้นโดยทั่วไป) หากคุณเริ่มต้นด้วยบางสิ่งที่ช่วยให้คุณเข้าใจ GPU แทนที่จะเข้าใจวิธีการทำงานของมัน 20 ปีที่แล้ว

แน่นอนมีอีกหนึ่งตัวเลือก ฉันไม่รู้ว่าสิ่งนี้เกี่ยวข้องกับคุณโดยเฉพาะหรือไม่ แต่ฉันรู้สึกว่าควรพูดกับผู้เยี่ยมชมคนอื่น ๆ ด้วย

ในการเป็นผู้พัฒนาเกมอินดี้หรือนักออกแบบเกมหรือเพื่อสร้างประสบการณ์ VR คุณไม่จำเป็นต้องเรียนรู้ Vulkan หรือ GL หลายคนเริ่มต้นด้วยเอ็นจิ้นเกม (Unity หรือ UE4 กำลังเป็นที่นิยมในขณะนี้) การใช้เครื่องมือเช่นนั้นจะช่วยให้คุณมุ่งเน้นไปที่ประสบการณ์ที่คุณต้องการสร้างแทนที่จะเป็นเทคโนโลยีที่อยู่เบื้องหลัง มันจะซ่อนความแตกต่างระหว่าง GL และ Vulkan จากคุณและคุณไม่ต้องกังวลว่าแพลตฟอร์มของคุณรองรับอะไร มันจะช่วยให้คุณเรียนรู้เกี่ยวกับพิกัด 3 มิติการแปลงแสงและแอนิเมชั่นโดยไม่ต้องจัดการกับรายละเอียดทั้งหมดในทันที สตูดิโอเกมหรือ VR บางตัวทำงานในเอนจิ้นเท่านั้นและพวกเขาไม่มีผู้เชี่ยวชาญ GL แบบเต็มเวลาเลย แม้แต่ในสตูดิโอขนาดใหญ่ที่เขียนเอ็นจิ้นของตัวเองคนที่ทำโปรแกรมกราฟิกนั้นเป็นชนกลุ่มน้อย

การเรียนรู้เกี่ยวกับรายละเอียดของวิธีการโต้ตอบกับ GPU นั้นเป็นทักษะที่มีประโยชน์อย่างแน่นอนและเป็นสิ่งที่นายจ้างหลายคนให้ความสำคัญ แต่คุณไม่ควรรู้สึกว่าต้องเรียนรู้ที่จะเข้าโปรแกรม 3D และแม้ว่าคุณจะรู้ว่ามันไม่จำเป็นต้องเป็นสิ่งที่คุณใช้ทุกวัน


2
ฉันค่อนข้างไม่เห็นด้วย Vulkan (และ DX12) ได้พิสูจน์แล้วว่าเป็นเรื่องยากมากที่จะใช้สำหรับประสบการณ์ devs ด้วยพลังทั้งหมดที่ Vulkan มอบให้คุณมันเป็นเรื่องง่ายมากที่จะยิงตัวเองด้วยการเดินเท้า นอกจากนี้ Vulkan ต้องการรหัสสำเร็จรูปมากขึ้น สำหรับใครบางคนที่เพิ่งเรียนรู้เกี่ยวกับการเขียนโปรแกรม GPU ฉันมักจะคิดว่า Vulkan จะล้นหลามมาก
RichieSams

2
@ RichieSams ฉันไม่คิดว่าคุณหมายถึง "ใช้งาน" มีเพียงผู้จำหน่าย GPU ที่ต้องใช้ Vulkan และง่ายกว่าการใช้ OpenGL มาก (เชื่อฉันฉันได้ทำไปแล้ว!) แต่ถ้าคุณคิดว่าเป็นการยากที่จะรวมเข้ากับหรือโปรแกรมต่อต้านฉันได้เพิ่มย่อหน้าด้วยข้อมูลบางอย่างที่ฉันได้เรียนรู้จาก Vulkan WG
Dan Hulme

แก้ไข. การนำไปใช้อาจเป็นตัวเลือกคำที่ไม่ดี ฉันหมายถึง 'ใช้' ในโปรแกรมของคุณ แต่ฉันชอบการแก้ไขของคุณ ใส่อย่างดี
RichieSams

@DanHulme - ฉันประหลาดใจกับความคิดเห็นของคุณ "GL กระตุ้นให้คุณคิดในสไตล์โหมดทันที" ฉันคิดว่ามันเป็นจริงสำหรับรุ่น OpenGL รุ่นแรกเท่านั้นหรือ
ToolmakerSteve

1
@ToolmakerSteve OpenGL WG ได้ทุ่มเทงานจำนวนมากในการเพิ่มการทำงานพร้อมกันและการเขียนแบบแบตช์ดังนั้นคุณสามารถแสดงโปรแกรมของคุณในแบบที่เหมาะสำหรับการติดตั้งแบบเรียงต่อกัน / เลื่อนเวลา แต่มันยังเป็นรากฐานที่ตั้งขึ้นในยุคโหมดทันทีซึ่งเป็นเหตุผลว่าทำไมคนเหล่านั้นจึงตัดสินใจเริ่มต้นใหม่ใน Vulkan และฉันยังคงเห็นผู้ใช้ใหม่จำนวนมากที่เริ่มต้นด้วย GL และสร้างแบบจำลองทางจิตในโหมดทันทีว่าการใช้งานทำงานอย่างไร
Dan Hulme

26

การเรียนรู้การเขียนโปรแกรมกราฟิกเป็นมากกว่าการเรียนรู้ 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 อย่างแน่นอน

จะใช้เวลานานกว่านั้นก่อนที่คุณจะไปถึงจุดที่คุณสามารถเรียนรู้เทคนิคการแสดงผลกราฟิก


1
ฉันดีใจที่คุณโพสต์สิ่งนี้เพราะมันทำให้ความคิดบางอย่างชัดเจนที่ฉันลังเลที่จะแสดงในคำตอบของฉัน: การเรียนรู้แนวคิดเป็นสิ่งสำคัญที่สุด ฉันคิดว่าสิ่งที่แตกต่างคือคุณให้กำลังใจ GL เพราะเริ่มต้นได้ง่ายกว่าในขณะที่ฉันคิดว่าความสะดวกในการเริ่มต้นทำให้มีความเสี่ยงในการทำสิ่งต่าง ๆ ด้วยวิธีดั้งเดิม มันค่อนข้างยากที่จะรู้ใน GL ว่า "สำนวนที่ทันสมัย ​​GL" คืออะไรเมื่อเทียบกับการเขียนโปรแกรมในรูปแบบดั้งเดิม หากไม่มีใครบอกให้คุณใช้ VAO แทนการดึงสายแยกต่อการดั้งเดิมมันยากที่จะเข้าใจความผิดพลาดนั้นในภายหลัง
Dan Hulme

1
@DanHulme: มันเป็นเรื่องของการใช้สื่อการเรียนรู้ที่เหมาะสม มีสื่อออนไลน์มากมายที่ใช้สำนวนทันสมัย ไม่มีใครควรลองเรียนรู้กราฟิกเพียงแค่อ่านคู่มืออ้างอิงหรือข้อมูลจำเพาะ
Nicol Bolas

คุณทำให้มันฟังดูง่ายมาก! ถึงกระนั้นฉันยังเห็นโปรแกรมเมอร์เริ่มต้นใช้งานกราฟิก - บางคนมีความสามารถในด้านอื่น ๆ - และใช้คุณสมบัติดั้งเดิมและเรียนรู้อะไรเกี่ยวกับคุณสมบัติด้านประสิทธิภาพ เป็นเรื่องยากที่จะเข้าใจผิดใน Vulkan เพราะมันทำให้ราคาแพงดูแพง อย่างไรก็ตามเราไม่จำเป็นต้องโต้แย้ง ฉันเห็นด้วยกับประเด็นหลักของคุณ: การเรียนรู้แนวคิดเป็นสิ่งสำคัญที่สุดและคุณสามารถทำได้โดยไม่ต้อง Vulkan หรือ GL
Dan Hulme

@DanHulme: " มันยากมากที่จะเข้าใจผิดใน Vulkan " เพราะคุณยุ่งมากเกินไปที่จะทำทุกอย่างผิดไป); การประสานที่ไม่จำเป็น ใช้เฉพาะเค้าโครงรูปภาพ "ทั่วไป" ไม่ได้ใช้ประโยชน์จาก Subpass การเปลี่ยนแปลงไปป์ไลน์บ่อยครั้ง และอื่น ๆ ไม่พูดถึงผู้ขายต่างไม่เห็นด้วยกับวิธีที่ดีที่สุดในการใช้ Vulkan
Nicol Bolas

2
@DanHulme: สำหรับวิธีที่ง่ายก็คือการใช้ OpenGL ทันสมัยฉันทำของฉันดีที่สุดที่จะทำให้มันง่าย หากผู้คนยืนยันที่จะเรียนรู้จากไซต์ขยะเช่น NeHe หรือโดยการอ่านเอกสารแบบสุ่มนั่นไม่ใช่สิ่งที่ทุกคนสามารถช่วยได้ คุณสามารถนำม้าขึ้นน้ำ แต่ไม่สามารถทำให้พวกเขาดื่มได้
Nicol Bolas

7

ความสนใจหลักของ OpenGL (อย่างน้อยสำหรับฉัน) ก็คือมันสามารถใช้ได้กับหลายแพลตฟอร์ม ปัจจุบัน Vulkan ไม่ทำงานบน OSX และ Apple มี API การแข่งขันชื่อ Metal อาจเป็นไปได้ว่าจะมีสักครู่ก่อนที่ Apple จะรองรับ Vulkan และเมื่อพวกเขาทำเช่นนั้นการสนับสนุน Vulkan อาจมาถึงฮาร์ดแวร์ล่าสุดเท่านั้น OpenGL รองรับฮาร์ดแวร์ส่วนใหญ่แล้วและจะดำเนินการต่อไป


ฉันจะเดิมพันว่าหาก OSX เคยสนับสนุน Vulkan มันจะสนับสนุนเพียงชุดย่อยเล็ก ๆ ของมันและนั่นก็จะกลายเป็นกราฟิคยุคต่อไปสำหรับเว็บเบราว์เซอร์ OpenGL ยังคงใช้งานง่ายกว่า (ในระดับหนึ่ง) Vulkan, สิ่งที่ vulkan ได้รับในความเรียบง่ายกว่าการเรนเดอร์ไปมันจะสูญเสียมันไปในการจัดการกับสิ่งอื่น ๆ อย่างชัดเจน
GameDeveloper

1
@DarioOO โหมด OpenGL ทันทีเป็นวิธีที่ง่ายต่อการใช้งานมากกว่าสิ่งที่คุณเรียกสิ่งที่ไม่ได้ทันทีโหมด แต่ก็ไม่แนะนำ
user253751

1
@Gavin: ควรสังเกตว่า OpenGL เวอร์ชั่น 4.2 หรือสูงกว่านั้นไม่รองรับกับ OSX เช่นกัน ดังนั้นหากคุณต้องการใช้สิ่งใหม่จาก OpenGL บน OSX คุณไม่สามารถทำได้ และ Apple ก็ไม่น่าจะนำมาใช้กับรุ่น OpenGL ในภายหลัง แพลตฟอร์ม Apple นั้นเป็นแบบ All-in on Metal ดังนั้นการข้ามแพลตฟอร์มจึงเป็นวิธีที่ไม่พึงประสงค์
Nicol Bolas

Apple จะไม่สนับสนุน Vulkan จนกว่าพวกเขาจะถูกบังคับและเศรษฐศาสตร์ของมันก็ค่อนข้างง่าย พวกเขาหวังว่าจะได้ล็อคในผู้พัฒนาเกมมือถือที่ต้องการมากกว่า GLES2 แต่พวกเขาไม่มีทรัพยากรในการเขียนเกมของพวกเขาสำหรับ Vulkan และ Metal พวกเขากำลังเตรียมที่จะเสียสละระบบเกมเล็ก ๆ ของ Mac สำหรับเรื่องนี้โดยเฉพาะอย่างยิ่งถ้า iOS devs ยังปล่อยใน Mac App Store
Jonathan Baldwin

Vulkan ทำงานบน macOS (OS X ก่อนหน้านี้): moltengl.com
Alexander

4

ขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ หากคุณต้องการเรียนรู้การเขียนโปรแกรมกราฟิกด้วยตัวคุณเองมันไม่สำคัญว่าคุณจะเลือกอะไร

หากคุณกำลังคิดเกี่ยวกับงานมืออาชีพฉันแนะนำ Vulkan มันใกล้กับฮาร์ดแวร์และฉันคิดว่าความรู้เกี่ยวกับสิ่งที่ฮาร์ดแวร์ทำมีความสำคัญสำหรับโปรแกรมเมอร์กราฟิก

Vulkan อยู่ใกล้กับฮาร์ดแวร์มากขึ้นเนื่องจาก OpenGL ทำสิ่งต่างๆมากมายภายใต้ประทุนซึ่งใน Vulkan คุณทำด้วยตนเองเช่นดำเนินการคิวคำสั่ง การจัดการหน่วยความจำขึ้นอยู่กับแอพพลิเคชั่นไม่ใช่ไดรเวอร์ คุณต้องกังวลเกี่ยวกับการจัดสรรหน่วยความจำสำหรับuniforms(ตัวแปรที่คุณส่งผ่านจาก CPU ไปยัง GPU) เกี่ยวกับการติดตามพวกเขา คุณมีสิ่งที่ต้องกังวลมากขึ้น แต่ก็ยังให้อิสระในการใช้หน่วยความจำมากขึ้น มันฟังดูน่ากลัวและล้นหลาม แต่จริง ๆ แล้วไม่ใช่ เป็นเพียง API ถัดไปที่คุณต้องเรียนรู้

การเข้าใจสิ่งนี้จะช่วยในการทำความเข้าใจวิธีการทำงานของ GPU สิ่งที่จะช่วยให้คุณทำการเพิ่มประสิทธิภาพบางอย่างทั้งใน Vulkan และ OpenGL

และอีกสิ่งหนึ่งที่อยู่ในใจของฉันถ้าคุณเริ่มเรียนรู้การเขียนโปรแกรมกราฟิกอาจเมื่อคุณมองหางานเพราะหนึ่ง Vulkan จะเป็นที่นิยมมากขึ้น (อาจเป็นที่นิยมมากกว่า OpenGL) นอกจากนี้เท่าที่ฉันรู้ บริษัท ส่วนใหญ่ที่ใช้กราฟิก API เขียนฟังก์ชั่นของตัวเองรอบ ๆ จึงมีโอกาสที่งานคุณจะไม่เขียนใน OpenGL หรือ Vulkan แต่ความรู้เกี่ยวกับ GPU จะมีประโยชน์เสมอ


2

ฉันได้ "เข้าสู่" การเขียนโปรแกรมกราฟิกเป็นเวลาสองสามเดือนแล้ว

ตอนนี้ฉันยังอยู่ในโรงเรียนมัธยมและฉันสามารถบอกคุณได้ว่าฉันมักจะมองหาการพัฒนาแอพพลิเคชั่นข้ามแพลตฟอร์ม นี่คือความจริงแล้วปัญหาอันดับหนึ่งของฉันกับ Vulkan - มันไม่ได้พัฒนาขึ้นเพื่อใช้งานบนทุกแพลตฟอร์ม ฉันทำงานกับ OpenGL ใน Java และมีมากกว่า 6 เดือน

ปัญหาอีกประการหนึ่งที่ฉันมีคือการเรียกร้องของ Vulkan คือวิธีที่อ้างว่าดีกว่า ในขณะที่ OpenGL ไม่ได้อัพเดทเว็บไซต์บ่อยนัก พวกเขายังคงปล่อยการปรับปรุงอย่างต่อเนื่องและฉันมักจะรอการปรับปรุงใหม่ที่ทำงานได้เร็วขึ้นหรือทำงานได้ดีขึ้นกับฮาร์ดแวร์ใหม่

ที่ถูกกล่าวว่าในขณะที่ฉันทำงานกับ OpenGL ส่วนใหญ่ฉันเข้าใจหลักการพื้นฐานของ DirectX และ Vulkan ในขณะที่ฉันไม่ได้ทำงานกับพวกเขาอย่างกว้างขวางโดยเฉพาะ Vulkan เพราะมันยากที่จะเรียนรู้และไม่มีโครงสร้างที่ดีสำหรับการเขียนโปรแกรมเป็น OpenGl และ DirectX

สุดท้ายฉันต้องการเพิ่มความเชี่ยวชาญในสาขาเดียวเช่นฉันส่วนใหญ่ใช้ Java และ OpenGL ไม่ใช่แบบสแตนด์อโลนที่สามารถทำการตลาดได้อย่างน่าอัศจรรย์ ถ้าฉันต้องการทำงานที่ บริษัท ที่สร้างเกมส่วนใหญ่ OpenGL จะใช้เพื่อสร้างเกมสำหรับการพัฒนา Linux และ Android และอาจเป็น OSX เท่านั้น DirectX สำหรับ Windows และคอนโซล <Vulkan ใดที่สามารถแทนที่ได้ในบางกรณี

ฉันไม่สามารถระงับการอัปเดต OpenGL ได้ตลอดไปและฉันจะไม่ทำ แต่มันเป็นความชอบของฉันสำหรับการพัฒนา


" ปัญหาอีกอย่างที่ฉันมีก็คือการเรียกร้องของ Vulkan คือวิธีที่อ้างว่าดีกว่า " Vulkan ไม่ได้อ้างว่าเป็นอะไร มันเป็นเพียง API ไม่สามารถอ้างสิทธิ์ได้
Nicol Bolas

คุณรู้หรือไม่ว่า Vulkan และ GL ส่วนใหญ่ทำโดยคนเดียวกัน?
Dan Hulme

ใช่ฉันทำ. ฉันยังชอบ GL
Winter Roberts

2

ฉันต้องการให้มุมมองเริ่มต้นกราฟิกของคุณเกี่ยวกับเรื่องนี้ สิ่งที่ฉันรู้ (ในหลายปีที่ทำงานเป็นวิศวกรในสาขาอื่น) คือแนวคิดพื้นฐานเป็นส่วนที่สำคัญที่สุด เมื่อคุณมีความเข้าใจอย่างถ่องแท้แล้วการเรียนรู้ API ใหม่ที่ล้ำสมัยเป็นส่วนที่ยากที่สุด ฉันไม่รู้ว่าคุณเป็นเด็กที่ไม่เชื่อฟังพยายามเขียนโปรแกรม Skyrim ใหม่หรือไม่หรือกำลังมองหางานในสาขา CG

ฉันบอกคุณว่าฉันคิดว่ามันเป็นวิธีที่ดีที่สุดในความคิดของฉันในการเรียนรู้คอมพิวเตอร์กราฟิก "อย่างมืออาชีพ"

  1. เรียนรู้พีชคณิตเชิงเส้นและเรขาคณิตอย่างมืออาชีพ หากไม่มีสิ่งนี้ให้ลืม API แฟนซีหรือกราฟิกใด ๆ
  2. ซื้อหนังสือที่ดีเกี่ยวกับคอมพิวเตอร์กราฟิก (เช่นความรู้พื้นฐานของคอมพิวเตอร์กราฟิก )
  3. ในขณะที่คุณศึกษาหนังสือตั้งสภาพแวดล้อมการเขียนโปรแกรมด้วยสิ่งที่ช่วยให้คุณสามารถวาดภาพและใช้อัลกอริทึม! มันสามารถเป็น Java 2D หรือ C ++ และ SDL หรือแม้แต่ Python และ Pygame สำหรับสิ่งที่สำคัญ ในขั้นตอนนี้คุณจะต้องใช้อุปกรณ์ที่มีการหมุนของพื้นผิวที่มีมุมมองกล้องหลายตัวและเปิดใช้งานก่อนที่จะพยายามรับ 10,000 FPS
  4. ตอนนี้ใช้ OpenGL, Vulkan หรือ DirectX แล้วทำซ้ำตัวอย่างแฟนซีของคุณ (ดูด้านบน)

เริ่มกังวลเกี่ยวกับประสิทธิภาพก่อนที่จะเข้าใจวิธีการวาดเส้นเหมือนกังวลเกี่ยวกับอากาศพลศาสตร์ของรถของคุณก่อนที่จะได้รับใบขับขี่


0

ฉันสอนด้วยตัวเองใน C ++ โดยไม่ต้องมีการศึกษาอย่างเป็นทางการและตลอด 15 ปีที่ผ่านมาฉันได้เรียนรู้ทั้ง OpenGL 1.0 จนถึง Modern OpenGL และ DirectX 9c, 10 และ 11 ฉันยังไม่ได้เข้าสู่ DirectX 12 และฉันต้องการ ลองใช้มือของฉันที่ Vulkan ฉันเพิ่งทำแบบฝึกหัดพื้นฐานเพียงไม่กี่ครั้งเพื่อวาดรูปสามเหลี่ยมที่เรียบง่ายหรือลูกบาศก์ที่เรียบง่ายด้วย Vulkan เช่นเดียวกับ DirectX 11 และ OpenGL 3.3+ ฉันได้เขียนเอ็นจิ้นเกม 3D ที่ทำงานได้อย่างสมบูรณ์แล้วและยังใช้เอ็นจิ้นเหล่านั้นเพื่อสร้างเกมที่เรียบง่าย

ฉันต้องบอกว่ามันขึ้นอยู่กับสภาพแวดล้อมโดยรวมของคนที่กำลังเรียนรู้ หากคุณเพิ่งเข้าสู่การเขียนโปรแกรมกราฟิก 3D ฉันจะบอกให้ starters กระโดดเข้าสู่ OpenGL หรือ DirectX 11 เนื่องจากมีบทเรียนแหล่งข้อมูลตัวอย่างและแอปพลิเคชันที่ใช้งานอยู่มากมาย การเรียนรู้กราฟิก 3 มิตินั้นไม่ได้เป็นเรื่องง่าย

ถ้าเราแยกออกจากแง่มุมการเขียนโปรแกรมของมันและเพียงแค่มุ่งเน้นไปที่แนวคิดของชนิดของเทคนิคที่ใช้ในระดับต่าง ๆ ของคณิตศาสตร์ที่นำไปสู่ชุดข้อมูลและโครงสร้างข้อมูลและอัลกอริธึม มีหลายอย่างที่คุณต้องรู้และเข้าใจก่อนจึงจะสามารถสร้าง 3D Game Engine หรือใช้เกมที่มีอยู่ได้อย่างมีประสิทธิภาพ

ตอนนี้ถ้าคุณเข้าใจคณิตศาสตร์และทฤษฎีทั้งหมดแล้วและคุณมีประสบการณ์การเขียนโปรแกรมบางอย่างคุณสามารถใช้ APIs ไลบรารีและแอปพลิเคชั่นที่มีอยู่แล้วเช่น Unity หรือ Unreal Engine และเขียนซอร์สโค้ดและสคริปต์ที่คุณต้องการเพื่อให้แอปพลิเคชันของคุณทำงาน .

ดังนั้นจากความเข้าใจของฉันเองและวิธีที่ฉันเห็นมันคือถ้าคุณกำลังมองหาการสร้างเกมที่รวดเร็วเพียงเพื่อการสร้างเกม ไปกับเฟรมที่มีอยู่แล้วซึ่งจะทำให้เวลาในการผลิตของคุณน้อยลงมาก ในทางตรงกันข้ามถ้าคุณต้องการเข้าใจการทำงานภายในของเกมเอ็นจิ้น / ฟิสิกส์เครื่องยนต์ / แอนิเมชั่นเอ็นจิ้นและซิมูเลเตอร์ได้รับการออกแบบและต้องการสร้างด้วยตัวคุณเองนี่คือที่คุณมีทางเลือกระหว่างการเลือก API เช่น DirectX OpenGL หรือ Vulkan หนึ่งในปัจจัยที่กำหนดที่นี่ก็จะเป็นความรู้การเขียนโปรแกรมที่มีอยู่ของคุณ สิ่งที่ฉันหมายถึงคือถ้าคุณไม่รู้อะไรเกี่ยวกับการโทรหลายเธรดแบบซิงโครนัส vs อะซิงโครนัสรั้วหน่วยความจำการแข่งขันข้อมูลเซมาฟอร์และการขนาน (การเขียนโปรแกรมแบบขนาน)

ฉันพูดถึงเรื่องนี้เพราะถ้าคุณไม่ทราบวิธีการจัดการหน่วยความจำของคุณอย่างถูกต้องพร้อมกับหัวข้อและเวลาในการเข้าถึงของคุณ Vulkan จะกัดคุณในตูด! ที่ OpenGL และ DirectX จะจับมือของคุณตลอดทางผ่านการใช้พลังงาน CPU มากขึ้น

ตอนนี้ถ้าระดับความรู้การเขียนโปรแกรมของคุณเหมาะสมและคุณมีภูมิหลังทางคณิตศาสตร์ต่อไปนี้ที่เกี่ยวข้องกับทุกระดับของพีชคณิตเรขาคณิตตรีโกณมิติพีชคณิตแบบบูลความน่าจะเป็นสถิติเวกเตอร์ - พีชคณิตอิงเมทริกซ์แคลคูลัส I, II, ... Infinty (ฮ่า ๆ ) แคลคูลัสเวกเตอร์, พีชคณิตเชิงเส้น, ระบบสมการเชิงเส้น, เรขาคณิตเชิงวิเคราะห์ด้วยแคลคูลัสเวกเตอร์ของการคำนวณหลายตัวแปร, ทฤษฎีจำนวนและเซต, ชุดข้อมูลและโครงสร้าง, การวิเคราะห์เชิงคำนวณ, การออกแบบเชิงคำนวณและอัลกอริธึม จากนั้นคุณสามารถเข้าสู่แนวคิดของสิ่งที่ต้องทำเพื่อสร้างเอ็นจิ้นเกมจริงและนี่คือไม่มีคณิตศาสตร์ประยุกต์หรือสมการทางฟิสิกส์ใด ๆ ที่คุณต้องการ เมื่อคุณมีพื้นหลังนั้นและมีประสบการณ์การเขียนโปรแกรมมากพอโดยเฉพาะการจัดการหน่วยความจำและเลขคณิตตัวชี้แล้วคุณสามารถเริ่มสร้าง Game Engine ของคุณ

ดังนั้นสิ่งที่นี่คือคุณต้องเข้าใจทุกแง่มุมของสิ่งที่ต้องทำเพื่อสร้าง Game Engine เพื่อที่จะทำการเขียนโปรแกรมกราฟิกขั้นสูง หากคุณกำลังทำกราฟิก 2D อยู่แล้วชีวิตก็ไม่ยากอย่างที่คุณสามารถทำได้ใน Python โดยไม่มี API ดังกล่าวข้างต้น! แต่ถ้าคุณต้องการจริงจังและออกแบบ Game Engine พลังเต็มเปี่ยมที่แข็งแกร่งด้วยชุดคุณสมบัติมากมายตัวเลือกที่นี่จะเป็น C หรือ C ++ และใช้ OpenGL, Direct X หรือ Vulkan ใด ๆ ของพวกเขาจะไม่เป็นไร ตอนนี้ถ้าคุณกำลังสร้างเครื่องยนต์จากศูนย์และคุณกำลังมองหา Engine ที่ใช้งาน "มีประสิทธิภาพ" มากที่สุดโดยใช้ทรัพยากรจำนวนน้อยที่สุดจากนั้นคุณจะต้องเลือก Vulkan แต่ถ้าคุณไปเส้นทางนี้อย่างน้อยคุณควรรู้ทุกอย่างที่ฉันได้กล่าวไว้ข้างต้นและบางอย่าง!

ดังนั้นอย่างที่คุณเห็น Vulkan นั้นไม่ได้มุ่งเน้นไปที่โปรแกรมเมอร์มือใหม่ในสาขานี้ คุณต้องมีความรู้อย่างกว้างขวางเกี่ยวกับคณิตศาสตร์กระบวนทัศน์การเขียนโปรแกรมชุดข้อมูลและอัลกอริธึมชนิดต่าง ๆ ทั้งหมดรวมถึงเธรดการซิงโครไนซ์หน่วยความจำการเขียนโปรแกรมแบบขนาน และแม้กระทั่งนั้นก็เพื่อให้แอปพลิเคชั่นโหลดรูปสามเหลี่ยมสองมิติแบบง่ายบนหน้าจอ สิ่งที่สามารถทำได้ในรหัสประมาณ 100 บรรทัดใน OpenGL หรือรหัส 250 บรรทัดใน DirectX ใช้รหัสเกือบ 1,000 บรรทัดใน Vulkan!

Vulkan ทิ้งทุกสิ่งทุกอย่างขึ้นอยู่กับคุณเนื่องจากคุณเป็นผู้รับผิดชอบทุกด้านเกี่ยวกับวิธีการใช้ Vulkan ในใบสมัคร ไม่มีการจับมือมันไม่เข้าทางคุณจะช่วยให้คุณยิงตัวเองด้วยการเดินเท้าหรือให้คุณแขวนตัวเองเพื่อซื้อบ่วงแบบเวียนเกิด!

ตอนนี้นี่ไม่ใช่การบอกว่าผู้เริ่มต้นหรือผู้ที่เพิ่งเริ่มต้นใหม่ในสาขานี้ไม่ควรเรียนรู้ Vulkan แต่สิ่งที่ฉันจะแนะนำสำหรับพวกเขาก็คือ: ก่อนอื่นเรียนรู้เพียงพอของ OpenGL และหรือ DirectX เพื่อทำให้เท้าของคุณเปียก แอปพลิเคชันพื้นฐานมีโครงสร้างเพียงเพื่อแสดงรูปสามเหลี่ยมอย่างง่ายหรือลูกบาศก์ที่กำลังหมุน ทำความคุ้นเคยกับ API และรูปแบบโครงสร้างของพวกเขาที่เกิดขึ้นเป็นประจำ ในขณะที่เรียนรู้ว่าคุณสามารถเรียนรู้ Vulkan ทางด้าน Parallel ได้ด้วยวิธีนี้คุณจะเห็นได้ว่าทั้งสามทำหน้าที่เดียวกันได้อย่างไร แต่รู้ว่าพวกเขาทำมันแตกต่างกันอย่างไรจากนั้นคุณสามารถเปรียบเทียบผลลัพธ์ระหว่าง API ที่แตกต่างกันกับ จากนั้นคุณสามารถเลือกสิ่งที่คุณต้องการ วิธีนี้จะให้เครื่องมืออื่นในกล่องเครื่องมือของคุณและคุณสามารถเขียนใบสมัครเพื่อรองรับทั้ง 3 และมี "

ในที่สุดมันก็ขึ้นอยู่กับบุคคลนั้นในการเลือกเส้นทางที่พวกเขาต้องการลงไปและจากนั้นความสำเร็จของพวกเขาจะถูกกำหนดโดยความทุ่มเทการศึกษาอย่างต่อเนื่องการทำงานหนักการทดลองและข้อผิดพลาดและที่สำคัญที่สุดคือความล้มเหลว หากคุณไม่ล้มเหลวคุณก็จะไม่ประสบความสำเร็จ! คุณจะประสบความสำเร็จก็ต่อเมื่อคุณล้มเหลวพบข้อผิดพลาดแก้ไขพวกเขาย้ายไปและกลับมาและทำมันซ้ำแล้วซ้ำอีก!


-1

คุณควรเรียนรู้ OpenGL เป็นอันดับแรกเนื่องจากเป็นมาตรฐานสำหรับกราฟิกในหลาย ๆ แพลตฟอร์ม

แม้ว่าจะมีห้องสมุดที่ใหม่กว่าการทำความเข้าใจพื้นฐานและการทำงานกับภาษาที่ใช้ทั่วทุกอุตสาหกรรมเป็นสิ่งที่สำคัญมาก ... โดยเฉพาะอย่างยิ่งตั้งแต่ Vulkan จะไม่ถูกนำมาใช้ใน บริษัท ขนาดใหญ่มานานแล้ว

  1. ไม่มีใครต้องการที่จะปรับตัวทันทีและจบลงด้วยการเข่นฆ่าด้วย Framework / Library ที่ไม่มั่นคง

  2. พวกเขาจะต้องจ้าง / ฝึกอบรมโปรแกรมเมอร์ Open-GL ปัจจุบันของพวกเขาและไม่จำเป็นต้อง


นอกจากนี้ฉันเคยได้ยินว่า OpenGL และ Vulkan ไม่เหมือนกันทั้งหมด ฉันได้ยิน Vulkan เป็น API ระดับต่ำกว่าและใกล้กับรหัสเครื่องมากกว่า OpenGL

คำตอบที่ฉันเพิ่งพบนี้ดูเหมือนว่าจะมีข้อมูลที่ดีมาก

https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl


สิ่งที่ต้องพิจารณาอีกอย่างคือปัญหาที่เกิดขึ้นกับ OpenGL 1

OpenGL 1 เป็น OpenGL 2 มีการเปลี่ยนแปลงที่สำคัญและเนื่องจากผู้คนจำนวนมากใช้ OpenGL1 และฮาร์ดแวร์ที่รองรับจึงจำเป็นต้องมีความเข้ากันได้อย่างหนักในการใช้งานในบางแอปพลิเคชั่น / เครื่องยนต์และบางครั้งก็เจ็บปวดสำหรับผู้พัฒนา .

นอกจากการสนับสนุนแล้วภาษาก็เปลี่ยนไปมากจนคุณต้องเรียนรู้สิ่งใหม่

สิ่งนี้เกิดขึ้นกับเฟรมเวิร์กเช่น JavaFX (จาก 1.x ถึง 2.x) และ Play! Framework (1.x ถึง 2.x ด้วย) เปลี่ยนแปลงกรอบงานให้เสร็จสิ้นซึ่งหมายความว่าเราต้องเรียนรู้ ... ทุกสิ่ง ...


สิ่งสำคัญที่คุณควรทำคือรอจนกระทั่ง Vulkan มีเสถียรภาพ นั่นหมายถึงรอจนกว่าอาจเป็น 2.0 แพทช์ มันไม่ได้หมายความว่าคุณไม่สามารถเรียนรู้เกี่ยวกับพื้นฐานของ Vulkan แต่เพียงแค่รู้ว่าสิ่งนี้อาจเปลี่ยนแปลงได้ ฉันจะสมมติว่ากลุ่มอย่าง Kronos จะให้ API ที่เสถียรมากตั้งแต่เริ่มต้นโดยเฉพาะอย่างยิ่งเนื่องจากมีวิศวกรของ Nvidia และ AMD หลายคนที่ทำงานใน Vulkan รวมถึงคน Nvidia ที่ดูแลโครงการอย่างชัดเจนรวมถึงฐานของเสื้อคลุม; อย่างไรก็ตามเช่นเดียวกับซอฟต์แวร์ใด ๆ เราโค้ดจะดูว่ามันทำงานได้ดีตั้งแต่เริ่มต้น แต่หลายคนระมัดระวังและรอดูว่าเกิดอะไรขึ้น


Vulkan เสถียรในขณะนี้ การเปรียบเทียบ GL 1.0 กับ 2.0 ของคุณนั้นเหมาะสม การเริ่มต้นด้วย GL ตอนนี้ก็เหมือนกับการเริ่มต้นเรียนรู้ GL 1.0 หกเดือนหลังจาก GL 2.0 ออกมา
Dan Hulme

1
Vulkan อาจ "เสถียร" ไม่ได้หมายความว่าสิ่งต่าง ๆ จะไม่เปลี่ยนแปลงนี่คือลักษณะของภาษาที่ฉันนำเสนอการเปลี่ยนแปลงล่าสุด 2 ภาษาในช่วงสองสามปีที่ผ่านมาดังนั้นเราจะรู้ได้อย่างไรว่าสิ่งนี้จะไม่เกิดขึ้นกับ Vulkan? คุณบอกว่าการเรียนรู้ OpenGL เป็นการสิ้นเปลืองและเป็นเรื่องผิด ทำให้ดูเหมือนว่า OpenGL นั้นตายแล้วและจะไม่ใช้อีกต่อไป ... นอกจากนี้ฉันไม่ใช่คนเดียวที่เชื่อว่า Vulkan อาจมีปัญหาด้านความมั่นคง มันอาจไม่ได้ แต่ด้วยภาษาใหม่ใด ๆ นั่นคือสิ่งที่คุณมองหา
XaolingBao

1
แน่นอนว่าสิ่งต่าง ๆ จะเปลี่ยนไปและคณะทำงานกำลังทำงานกับคุณสมบัติใหม่สำหรับรุ่นจำเพาะต่อไป (คุณไม่ได้ยินจากฉัน) เสถียรหมายความว่าสิ่งเหล่านั้นจะเพิ่มไปยังสเป็คและสิ่งที่คุณเรียนรู้เกี่ยวกับมันในวันนี้จะยังคงถูกต้องสองปีนับจากนี้ OTOH สิ่งที่คุณเรียนรู้เกี่ยวกับ GL ในวันนี้นั้นมีการจับคู่ที่ไม่ดีสำหรับการทำงานของ GPU: เช่นเดียวกับการเรียนรู้เกี่ยวกับท่อคงที่ที่มีฟังก์ชั่นคงที่ในโลกของโปรแกรม ถ้าคุณอ่านคำตอบของฉันคุณจะเห็นว่าฉันไม่คิดว่าการเรียนรู้ GL ในตอนนี้จะเป็นการสิ้นเปลือง แต่ "Vulkan ใหม่เกินไป" ไม่ใช่เหตุผลที่ดีที่จะลดราคา
Dan Hulme

1
@ ลาซานญ่า: " มันอาจมีการเปลี่ยนแปลงได้ แต่มีหลาย บริษัท ที่จะปรับตัวให้เข้ากับการใช้งานได้ทันที " Valve มหากาพย์ เอกภาพ พวกเขาทั้งหมดลงทุนอย่างหนักเพื่อให้เครื่องยนต์ทำงานกับ Vulkan CryTech และ Id ไม่ได้สนใจมันเหมือนกัน ดังนั้นข้อความของคุณจึงไม่ตรงกับข้อเท็จจริง
Nicol Bolas

2
@ ลาซานญ่า: " เพียงเพราะมันถูกดัดแปลงเป็นเครื่องมือ 3 มิติไม่ได้หมายความว่า บริษัท ต่าง ๆ กำลังลงทุนในโครงการของพวกเขา " ... ดังนั้นเครื่องมือ 3 มิติจึงไม่ถือว่าเป็น "โครงการ" DOTA2 นับเป็น "โครงการ" หรือไม่? เพราะมันมีการสนับสนุนสำหรับ Vulkan ในขณะนี้ สมาร์ทโฟนและแท็บเล็ตของ Samsung นับเป็น "โครงการ" หรือไม่? เพราะพวกเขากำลังมองหาการรวมเข้ากับ UI ความจริงก็คือผู้คนจำนวนมากยินดีที่จะ "เป็นคนที่จะทดสอบแพลตฟอร์มใหม่" ถ้าแพลตฟอร์มนั้นได้รับสิ่งที่พวกเขาต้องการ
Nicol Bolas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.