Traversal Shaders คืออะไรและมีแอพพลิเคชั่นอะไรบ้างใน GPU

ทราเวอร์ซัล เชเดอร์ส

เนื่องจาก DirectX 8 ปรากฏให้เห็นจำนวนประเภทของ shader ใหม่เพิ่มขึ้นเมื่อเวลาผ่านไป รายการถัดไปที่จะรวมอยู่ในรายการจึงเรียกว่า Traversal Shaders ซึ่งเกี่ยวข้องกับความก้าวหน้าในการปรับใช้ด้วยการหยุดชั่วคราว แต่ไม่มี ray tracing brake ใน เกม. มาดูกันว่ามันประกอบด้วยอะไรบ้างและจะปรับปรุงอะไรบ้างที่จะนำมาสู่เกมในแง่ของประสิทธิภาพ

Traversal Shaders เป็นหนึ่งในสองปรัชญาที่จะก่อให้เกิดปัญหาของเส้นทางของโครงสร้างข้อมูลเชิงพื้นที่ใน Ray Tracing ซึ่งประกอบด้วยการใช้โปรแกรม shader เพื่อสำรวจโครงสร้างข้อมูลเชิงพื้นที่ที่แสดงฉากแทนการใช้เฉพาะหรือเฉพาะ ฮาร์ดแวร์.

ก่อนอื่น มาจำไว้ว่า Shader คืออะไร

ตัวอย่าง funcionamiento shader

ในซอฟต์แวร์เราเรียกขานว่าโปรแกรม shader ที่ทำงานบนแกนกลางของ GPUซึ่งมีชื่อแตกต่างกันไปขึ้นอยู่กับผู้ผลิต ดังนั้น เอเอ็มดี เรียกฮาร์ดแวร์ชิ้นนี้ว่า Computer Units ใน Radeon NVIDIA เรียกพวกเขาว่า Stream Multiprocessors หรือ SM ใน GeForce และ อินเทล ให้ชื่อ ARC หน่วยเหล่านี้ว่า Xe Core

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

แล้วทำไมไม่ใช้ซีพียู? เนื่องจากมีปัญหาที่ GPU ซึ่งได้รับการออกแบบให้ทำงานแบบคู่ขนานนั้นทำงานได้ดีกว่ามากเมื่อแก้ไขบริบทบางอย่างมากกว่าที่ CPU ทำ และในลักษณะเดียวกับที่เกิดขึ้นในกรณีของ GPU

Microsoft, DirectX Ray Tracing และเฉดสี

การติดตามเรย์ Microsoft DirectX 12

เมื่อ Redmond พูดเกี่ยวกับการนำ Ray Tracing ไปใช้ในงาน Games Developer Conference ในปี 2018 นั้น เหลือเวลาอีกไม่กี่เดือนก่อนการเปิดตัว NVIDIA RTX 20 และในขณะนั้นยังไม่เป็นที่ทราบแน่ชัด อย่างน้อยก็ต่อสาธารณะถึงมีหน่วยเร่งความเร็ว Ray Tracing เช่น RT Cores ของ NVIDIA และ Ray Acceleration Units ของ AMD

คืออะไร ไมโครซอฟท์ข้อเสนอเพื่อขยาย API มัลติมีเดียหรือไม่ เพิ่มชุดของสเตจเพิ่มเติม ซึ่งกำหนดไว้ในไดอะแกรมต่อไปนี้:

อีทาพาส DXR

การทำความเข้าใจไดอะแกรมนั้นง่าย:

  • บล็อคสีน้ำเงินคือโปรแกรม shader ที่ทำงานที่ระดับ GPU
  • บล็อกสีเขียวจะดำเนินการใน CPU ไดรเวอร์ ควบคู่กับ GPU
  • เพชรสีเทาเป็นสภาวะที่สามารถเกิดขึ้นได้เมื่อฟ้าแลบผ่านฉาก

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

โครงสร้างข้อมูลเพื่อเพิ่มความเร็วในการติดตามรังสี

อาร์โบล BVH

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

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

หากคุณมีความรอบรู้ คุณจะเห็นว่าในแผนภาพของส่วนก่อนหน้า ในบรรดาประเภทของ shader เรามีสี่แยก แต่ไม่ใช่ผู้ที่รับผิดชอบในการสำรวจต้นไม้ BVH นั่นคือการข้ามแม้ว่าจะเป็น เข้าใจว่างานนี้ดำเนินการโดยหน่วยเชดเดอร์แม้ว่าจะไม่มีเชดเดอร์ประเภทใดโดยเฉพาะ

Traversal Shaders มันคืออะไรและมีที่มาอย่างไร?

ในเอกสารประกอบ DirectX Ray Tracing เราสามารถพบสิ่งที่เรียกว่า Traversal Shaders ในอนาคตซึ่งจะถูกเพิ่มในอนาคตภายในท่อส่งสำหรับ Ray Tracing ใน Microsoft API รุ่นที่ใหม่กว่า แต่สิ่งที่ดีที่สุดคือการใส่ตัวเอง ในสถานการณ์

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

และสิ่งนี้นำประโยชน์อะไรมาสู่ประสิทธิภาพการทำงาน? ประเด็นหลักคือเราสามารถกำหนดสถานการณ์ที่รังสีหนึ่งตัวหรือมากกว่าถูกทิ้งก่อนที่จะทำการตัดกัน ซึ่งไม่สามารถทำได้ในขณะนี้ ตัวอย่างที่ชัดเจนมากคือการหันหน้าเข้าหาวัตถุที่อยู่ไกลจากกล้องมาก ซึ่งรายละเอียดแสงไม่สามารถชื่นชมได้เท่ากับในระยะใกล้ ต้องคำนึงว่าในเวอร์ชันปัจจุบันของ Redmond API เราสามารถกำหนดเกี่ยวกับแสงทางอ้อมไม่ว่าวัตถุจะปล่อยรังสีหรือไม่ผ่าน Ray Generation Shader แต่เราไม่สามารถสร้างสถานการณ์ที่เราสามารถแยกแยะรังสีโดยการบิน โดยเฉพาะกับระยะทาง

Traversal Shaders เพื่อสร้างโครงสร้างข้อมูลเชิงพื้นที่

ทราเวอร์ซัล เชเดอร์ส

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

สิ่งแรกที่โดดเด่นคือ Lazy Build ซึ่งเราสามารถแปลได้ว่าได้รับการศึกษาเป็นงานสร้างโดยใช้ความพยายามเพียงเล็กน้อย และประกอบด้วยอะไรบ้าง? สิ่งที่เทคนิคนี้ต้องการก็คือเวลาในการสร้างโครงสร้างข้อมูลจะลดลง สำหรับสิ่งนี้ มันขึ้นอยู่กับข้อมูลก่อนหน้าจากเฟรมก่อนหน้าที่เพิ่มไปยังอัลกอริธึมการมองเห็น และหากสิ่งนี้ดูน่าสับสน ให้เรากำหนดความหมายของการมองเห็นเมื่อเราพูดถึงการเรนเดอร์ 3 มิติ

ความชัดเจน

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

ในการเรนเดอร์แบบไฮบริดที่รวมการแรสเตอร์ไลเซชั่นกับการติดตามเรย์ ซึ่งตอนนี้ทุกเกมใช้ การมองเห็นของกล้องไม่ได้คำนวณจากอัลกอริธึมดังกล่าว แต่ใช้อัลกอริธึมแรสเตอร์ แนวคิดในอนาคตคือการมองเห็นที่สัมพันธ์กับกล้องนั้นสร้างขึ้นจาก Ray Tracing ดังนั้นด้วยข้อมูลนี้ GPU จึงจบลงด้วยการสร้างโครงสร้างข้อมูลของฉากทั้งหมดผ่าน Traversal Shaders