เชเดอร์
| กราฟิกคอมพิวเตอร์สามมิติ (3D) |
|---|
| หลักการพื้นฐาน |
| การใช้งานหลัก |
| หัวข้อที่เกี่ยวข้อง |

ในกราฟิกคอมพิวเตอร์เชเดอร์คือ การดำเนินการ ที่ตั้งโปรแกรมได้ซึ่งนำไปใช้กับข้อมูลขณะที่เคลื่อนที่ผ่านไปป์ไลน์การเรนเดอร์ [ 1 ] [ 2 ] เชเดอร์ทำงานกับข้อมูล เช่นจุดยอดและรูปทรงพื้นฐาน สร้างหรือปรับเปลี่ยนรูปทรงเรขาคณิตและส่วนย่อยและคำนวณสีในภาพที่เรนเดอร์[ 2 ]
เชเดอร์สามารถดำเนินการได้หลากหลายรูปแบบ ในกราฟิกคอมพิวเตอร์แบบเรียลไทม์สมัยใหม่เชเดอร์จะทำงานบนหน่วยประมวลผลกราฟิก (GPU) ซึ่งเป็นฮาร์ดแวร์เฉพาะที่ให้การประมวลผลแบบขนานของโปรแกรม เนื่องจากปัญหาการเรนเดอร์ภาพเป็น ปัญหา แบบขนานที่น่าอึดอัดใจ (มีดัชนีของ Amdahlเท่ากับหนึ่ง) เชเดอร์จึงได้รับประโยชน์อย่างมากจากการประมวลผลแบบขนานเช่น ฮาร์ดแวร์ SIMD แรงผลักดันในการเร นเดอร์ที่เร็วขึ้นได้สร้างโปรเซสเซอร์แบบขนานสูง เช่น GPU ซึ่งปัจจุบันใช้สำหรับการประมวลผลทั่วไป[ 3 ] [ 4 ] เชเดอร์ที่ใช้เพื่อวัตถุประสงค์ทั่วไปมักเรียกว่าคอมพิวต์เชเดอร์
ประวัติศาสตร์
คำว่า "shader" ได้รับการนำเสนอต่อสาธารณชนเป็นครั้งแรกโดยPixarในเวอร์ชัน 3.0 ของข้อกำหนดอินเทอร์เฟซ RenderManซึ่งเผยแพร่ครั้งแรกในเดือนพฤษภาคม พ.ศ. 2531 [ 5 ]
เมื่อหน่วยประมวลผลกราฟิกพัฒนาขึ้นไลบรารีซอฟต์แวร์ กราฟิกหลักๆ เช่นOpenGLและDirect3Dก็เริ่มรองรับเชเดอร์ GPU รุ่นแรกๆ ที่รองรับเชเดอร์นั้นรองรับเฉพาะการแรเงาพิกเซล เท่านั้น แต่เชเดอร์เวอร์เท็กซ์ก็ถูกนำมาใช้ในไม่ช้าเมื่อนักพัฒนาตระหนักถึงพลังของเชเดอร์ การ์ดแสดงผลตัวแรกที่มีเชเดอร์พิกเซลที่ตั้งโปรแกรมได้คือ Nvidia GeForce 3 (NV20) ซึ่งวางจำหน่ายในปี 2544 [ 6 ]เชเดอร์เรขาคณิตถูกนำมาใช้กับ Direct3D 10 และ OpenGL 3.2 ฮาร์ดแวร์กราฟิกพัฒนาไปสู่โมเดลเชเดอร์แบบรวมทำให้เชเดอร์ทั้งหมดมีความเท่าเทียมกัน
เชเดอร์กราฟิก
โดยทั่วไปแล้ว เชเดอร์ (shader) จะถูกใช้เพื่อประมวลผลข้อมูลในไปป์ไลน์กราฟิกเพื่อควบคุมการแสดงผลภาพ เชเดอร์กราฟิกจะถูกจำแนกตามตำแหน่งในไปป์ไลน์ ข้อมูลที่ถูกประมวลผล และ API กราฟิกที่ใช้
เชเดอร์เวอร์เท็กซ์
เชเดอร์เวอร์เท็กซ์จะทำงานหนึ่งครั้งสำหรับแต่ละจุดยอด 3 มิติ ที่ส่งไปยังโปรเซสเซอร์กราฟิก จุดประสงค์คือเพื่อแปลงตำแหน่ง 3 มิติของแต่ละจุดยอดในพื้นที่เสมือนเป็นพิกัด 2 มิติที่ปรากฏบนหน้าจอ (รวมถึงค่าความลึกสำหรับบัฟเฟอร์ Z ด้วย) [ 7 ]เชเดอร์เวอร์เท็กซ์สามารถจัดการคุณสมบัติต่างๆ เช่น ตำแหน่ง สี และพิกัดพื้นผิวได้ แต่ไม่สามารถสร้างจุดยอดใหม่ได้ เอาต์พุตของเชเดอร์เวอร์เท็กซ์จะไปยังขั้นตอนถัดไปในไปป์ไลน์ ซึ่งอาจเป็นเชเดอร์เรขาคณิตหากมีอยู่ หรือตัวแรสเตอร์ ไรเซอร์ เชเดอร์เวอร์เท็กซ์ช่วยให้สามารถควบคุมรายละเอียดของตำแหน่ง การเคลื่อนไหว แสง และสีในฉากใดๆ ที่เกี่ยวข้องกับ โมเดล 3 มิติได้อย่างมีประสิทธิภาพ
เชเดอร์เรขาคณิต
เชเดอร์เรขาคณิตได้รับการแนะนำใน Direct3D 10 และ OpenGL 3.2 ซึ่งก่อนหน้านี้มีให้ใช้งานใน OpenGL 2.0+ โดยใช้ส่วนขยาย[ 8 ]เชเดอร์ประเภทนี้สามารถสร้างกราฟิกพื้นฐาน ใหม่ เช่น จุด เส้น และสามเหลี่ยม จากกราฟิกพื้นฐานที่ส่งไปยังจุดเริ่มต้นของไปป์ไลน์กราฟิก[ 9 ]
โปรแกรม Geometry shader จะทำงานหลังจาก Vertex shader โดยรับข้อมูลเข้าเป็นรูปทรงเรขาคณิตทั้งรูป ซึ่งอาจรวมถึงข้อมูลความสัมพันธ์ระหว่างจุดยอดด้วย ตัวอย่างเช่น เมื่อทำงานกับรูปสามเหลี่ยม จุดยอดทั้งสามจุดจะเป็นข้อมูลเข้าของ Geometry shader จากนั้น shader สามารถสร้างรูปทรงเรขาคณิตได้ตั้งแต่ศูนย์รูปขึ้นไป ซึ่งจะถูกแปลงเป็นภาพแรสเตอร์ และส่วนประกอบย่อยของภาพจะถูกส่งต่อไปยังPixel shader ในที่สุด
การใช้งานทั่วไปของ Geometry Shader ได้แก่ การสร้างจุดสไปรท์ การแบ่ง รูปทรง เรขาคณิต การสร้าง เงาแบบสามมิติและการเรนเดอร์แบบครั้งเดียวลงบนแผนที่ลูกบาศก์ตัวอย่างในโลกแห่งความเป็นจริงที่แสดงให้เห็นถึงประโยชน์ของ Geometry Shader คือ การปรับเปลี่ยนความซับซ้อนของตาข่ายโดยอัตโนมัติ โดยจะส่งแถบเส้นที่แสดงถึงจุดควบคุมสำหรับเส้นโค้งไปยัง Geometry Shader และขึ้นอยู่กับความซับซ้อนที่ต้องการ Shader สามารถสร้างเส้นเพิ่มเติมโดยอัตโนมัติ ซึ่งแต่ละเส้นจะให้ค่าประมาณของเส้นโค้งที่ดีขึ้น
เชเดอร์แฟรกเมนต์
เชเดอร์แฟรกเมนต์ หรือที่รู้จักกันในชื่อเชเดอร์พิกเซลคำนวณสีและคุณลักษณะอื่นๆ ของแต่ละ "แฟรกเมนต์" ซึ่งเป็นหน่วยของงานเรนเดอร์ที่มีผลต่อพิกเซลเอาต์พุตเพียงพิกเซล เดียวเท่านั้น เชเดอร์พิกเซลแบบง่ายที่สุดจะส่งออกพิกเซลหน้าจอหนึ่งพิกเซลเป็นค่าสี เชเดอร์ที่ซับซ้อนกว่าที่มีอินพุต/เอาต์พุตหลายตัวก็เป็นไปได้เช่นกัน[ 10 ]เชเดอร์พิกเซลมีตั้งแต่การส่งออกสีเดียวกันเสมอ ไปจนถึงการใช้ ค่า แสงการทำแผนที่นูนเงาไฮไลท์แบบสะท้อนแสงความโปร่งใสและปรากฏการณ์อื่นๆ พวกมันสามารถเปลี่ยนความลึกของแฟรกเมนต์ (สำหรับการทำZ-buffering ) หรือส่งออกสีมากกว่าหนึ่งสีหาก มี เป้าหมายการเรนเดอร์ หลาย เป้าหมายที่ใช้งานอยู่ ในกราฟิก 3 มิติ เชเดอร์พิกเซลเพียงอย่างเดียวไม่สามารถสร้างเอฟเฟกต์ที่ซับซ้อนบางอย่างได้ เนื่องจากมันทำงานกับแฟรกเมนต์เดียวเท่านั้น โดยไม่ทราบเรขาคณิตของฉาก (เช่น ข้อมูลจุดยอด) อย่างไรก็ตาม พิกเซลเชเดอร์มีความรู้เกี่ยวกับพิกเซลพิกัดหน้าจอที่กำลังวาด และสามารถสุ่มตัวอย่างหน้าจอและพิกเซลใกล้เคียงได้ หากมีการส่งเนื้อหาของหน้าจอทั้งหมดเป็นเท็กซ์เจอร์ไปยังเชเดอร์ เทคนิคนี้ช่วยให้สามารถสร้าง เอฟเฟกต์ การประมวลผลภาพสองมิติได้หลากหลาย เช่นการเบลอหรือ การตรวจจับ /เพิ่มความคมชัดของขอบ สำหรับ เชเดอร์การ์ตูน/เซลล์พิกเซลเชเดอร์ยังสามารถนำไปใช้ใน ขั้นตอน กลางกับภาพสองมิติใดๆ ก็ได้ ไม่ ว่าจะเป็น สไปรท์หรือเท็กซ์เจอร์ในไปป์ไลน์ในขณะที่เวอร์เท็กซ์เชเดอร์ต้องการฉากสามมิติเสมอ ตัวอย่างเช่น พิกเซลเชเดอร์เป็นเชเดอร์ชนิดเดียวที่สามารถทำหน้าที่เป็นตัวประมวลผลหรือตัวกรองสำหรับสตรีมวิดีโอหลังจากที่ได้ทำการแรสเตอร์ไลซ์แล้ว
เชเดอร์เทสเซลเลชัน
OpenGL 4.0 และ Direct3D 11 ได้แนะนำคลาสเชเดอร์ใหม่ที่เรียกว่า เทสเซลเลชันเชเดอร์ (tessellation shader) โดยเพิ่มขั้นตอนเชเดอร์ใหม่สองขั้นตอนให้กับโมเดลแบบดั้งเดิม ได้แก่ เทสเซลเลชันคอนโทรลเชเดอร์ (หรือที่เรียกว่า ฮัลล์เชเดอร์) และเทสเซลเลชันเอเลเมนต์เชเดอร์ (หรือที่เรียกว่าโดเมนเชเดอร์ ) ซึ่งเมื่อรวมกันแล้วจะช่วยให้สามารถแบ่งเมชที่เรียบง่ายออกเป็นเมชที่ละเอียดขึ้นได้ในระหว่างการทำงานตามฟังก์ชันทางคณิตศาสตร์ ฟังก์ชันนี้สามารถเชื่อมโยงกับตัวแปรต่างๆ ได้ โดยเฉพาะอย่างยิ่งระยะห่างจากกล้องที่ใช้มอง เพื่อให้สามารถ ปรับ ขนาดรายละเอียด ได้อย่างมีประสิทธิภาพこれによりวัตถุที่อยู่ใกล้กล้องจะมีรายละเอียดที่ละเอียด ในขณะที่วัตถุที่อยู่ไกลออกไปจะมีเมชที่หยาบกว่า แต่ยังคงดูมีคุณภาพใกล้เคียงกัน นอกจากนี้ยังสามารถลดแบนด์วิดท์ของเมชที่ต้องการได้อย่างมาก โดยอนุญาตให้ปรับแต่งเมชภายในหน่วยเชเดอร์แทนที่จะลดขนาดเมชที่ซับซ้อนมากจากหน่วยความจำ อัลกอริทึมบางตัวสามารถเพิ่มความละเอียดของตาข่ายใดๆ ก็ได้ ในขณะที่อัลกอริทึมอื่นๆ อนุญาตให้ "กำหนดลักษณะเฉพาะ" ในตาข่ายเพื่อระบุจุดยอดและขอบที่มีลักษณะเด่นที่สุด
เชเดอร์แบบดั้งเดิมและแบบตาข่าย
ประมาณปี 2017 สถาปัตยกรรมไมโครAMD Vega ได้เพิ่มการรองรับขั้นตอน shader ใหม่—primitive shaders—ซึ่งคล้ายกับ compute shaders ที่สามารถเข้าถึงข้อมูลที่จำเป็นในการประมวลผลเรขาคณิต[ 11 ] [ 12 ]
Nvidia ได้แนะนำ mesh และ task shaders ด้วยสถาปัตยกรรมไมโคร Turingในปี 2018 ซึ่งจำลองมาจาก compute shaders [ 13 ] [ 14 ] Nvidia Turing เป็นสถาปัตยกรรมไมโคร GPU แรกของโลกที่รองรับ mesh shading ผ่าน API DirectX 12 Ultimate หลายเดือนก่อนที่ซีรี่ส์ Ampere RTX 30 จะวางจำหน่าย[ 15 ]
ในปี 2020 AMD และ Nvidia ได้เปิด ตัวสถาปัตยกรรมไมโคร RDNA 2และAmpereซึ่งทั้งสองรองรับการแรเงาแบบตาข่ายผ่านDirectX 12 Ultimate [ 16 ] เชเดอร์แบบตาข่ายเหล่านี้ช่วยให้ GPU สามารถจัดการอัลกอริทึมที่ซับซ้อนมากขึ้น ถ่ายโอนงานจาก CPU ไปยัง GPU ได้มากขึ้น และในการเรนเดอร์ที่ต้องใช้อัลกอริทึมอย่างหนัก จะช่วยเพิ่มอัตราเฟรมหรือจำนวนสามเหลี่ยมในฉากได้หลายเท่า[ 17 ] Intel ประกาศว่า GPU Intel Arc Alchemist ที่จัดส่งในไตรมาสที่ 1 ปี 2022 จะรองรับเชเดอร์แบบตาข่าย[ 18 ]
เชเดอร์เรย์เทรซซิ่ง
Microsoftรองรับเชเดอร์การติดตามรังสีผ่านDirectX Raytracing , Khronos Group รองรับ ผ่านVulkan , GLSLและSPIR-V [ 19 ] และ Apple รองรับผ่านMetal NvidiaและAMD เรียกส่วนของฮาร์ดแวร์ที่รับผิดชอบในการ ประมวลผลเชเดอร์เหล่านี้ว่า "แกนการติดตามรังสี" [ 20 ]
เคอร์เนลการคำนวณ
เคอร์เนลการคำนวณคือรูทีนที่คอมไพล์สำหรับตัวเร่งความเร็ว ที่มีปริมาณงานสูง (เช่นหน่วยประมวลผลกราฟิก (GPU), ตัวประมวลผลสัญญาณดิจิทัล (DSP) หรืออาร์เรย์เกตที่ตั้งโปรแกรมได้ (FPGA)) ซึ่งแยกจากแต่ถูกใช้งานโดยโปรแกรมหลัก (โดยทั่วไปทำงานบนหน่วยประมวลผลกลาง ) อาจระบุโดยภาษาการเขียนโปรแกรม แยกต่างหาก เช่น " OpenCL C " เป็น "เชเดอร์การคำนวณ" ที่เขียนในภาษาเชดดิ้งหรือฝังโดยตรงในโค้ดแอปพลิเคชันที่เขียนในภาษาระดับสูง[ 21 ] [ 22 ]เคอร์เนลการคำนวณโดยคร่าวๆ จะสอดคล้องกับลูปภายใน เมื่อใช้งานอั ลกอริทึมในภาษาดั้งเดิม (ยกเว้นไม่มีการดำเนินการตามลำดับโดยนัย) หรือโค้ดที่ส่งผ่านไปยังตัววนซ้ำภายใน Microsoft สนับสนุนสิ่งนี้ในชื่อDirectCompute
รูปแบบการเขียนโปรแกรมแบบโปรแกรมเดียวหลายข้อมูล นี้เหมาะสมกับโปรเซสเซอร์เวกเตอร์ เป็นอย่างดี เนื่องจากมีข้อสันนิษฐานว่าการเรียกใช้เคอร์เนลแต่ละครั้งภายในชุดคำสั่งนั้นเป็นอิสระต่อกัน ทำให้สามารถ ประมวลผล แบบขนานข้อมูลได้ อย่างไรก็ตาม ในบาง ครั้งอาจใช้การดำเนินการแบบอะตอมิก เพื่อ การซิงโครไนซ์ระหว่างองค์ประกอบ (สำหรับงานที่ต้องพึ่งพาซึ่งกันและกัน) ในบางสถานการณ์ การเรียกใช้แต่ละครั้งจะได้รับดัชนี (ในมิติเดียวหรือมากกว่า) ซึ่งสามารถเข้าถึงข้อมูลบัฟเฟอร์ได้ตามต้องการ (รวมถึง การดำเนินการ แบบกระจายและรวบรวม ) ตราบใดที่ยังคงรักษาข้อสันนิษฐานเรื่องการไม่ทับซ้อนกันไว้
Vulkan APIให้ การแสดงผลแบบ SPIR-V ระดับกลาง เพื่ออธิบายทั้งเชเดอร์กราฟิกและเคอร์เนลการคำนวณใน ลักษณะ ที่ไม่ขึ้นกับภาษาและเครื่องคอมพิวเตอร์จุดประสงค์คือเพื่ออำนวยความสะดวกในการพัฒนาภาษาและให้ความสามารถที่เป็นธรรมชาติมากขึ้นในการใช้ประโยชน์จากความสามารถในการคำนวณของ GPU สอดคล้องกับการพัฒนาฮาร์ดแวร์ เช่นสถาปัตยกรรมหน่วยความจำแบบรวม (Unified Memory Architecture)และสถาปัตยกรรมระบบแบบผสมผสาน (Heterogeneous System Architecture ) ซึ่งจะช่วยให้ CPU และ GPU ทำงานร่วมกันได้ดียิ่งขึ้น
มีการทำงานมากมายในด้านการสร้างเคอร์เนลผ่าน LLM เป็นวิธีการปรับปรุงโค้ดให้เหมาะสม KernelBench [ 23 ]ซึ่งสร้างโดย Scaling Intelligence Lab ที่Stanfordเป็นกรอบการทำงานสำหรับการประเมินความสามารถของ LLM ในการสร้างเคอร์เนล GPU ที่มีประสิทธิภาพCognitionได้สร้าง Kevin 32-B เพื่อสร้างเคอร์เนล CUDA ที่มีประสิทธิภาพ ซึ่ง ณ เดือนพฤษภาคม 2025 เป็นโมเดลที่มีประสิทธิภาพสูงสุดบน KernelBench [ 24 ]
เชเดอร์คำนวณ
เชเดอร์ประมวลผล (Compute shaders)หมายถึง เคอร์เนลประมวลผลที่เขียนด้วยภาษาเชเดอร์เชเดอร์เหล่านี้ใช้หน่วยประมวลผล ร่วม กับเชเดอร์เวอร์เท็กซ์ (Vertex shaders)และ เชเดอร์ พิกเซล (Pixel shaders) บน GPU ซึ่งเป็นตัวอย่างของ การทำงานแบบ GPGPUอาจใช้ในไปป์ไลน์กราฟิกเพื่อวัตถุประสงค์ต่างๆ เช่น ขั้นตอนเพิ่มเติมในอัลกอริธึมการสร้างแอนิเมชั่นหรือแสง (เช่นการเรนเดอร์แบบเรียงต่อกัน ) หรือใช้เพื่อวัตถุประสงค์ที่ไม่เกี่ยวข้องกับกราฟิกโดยตรง API การเรนเดอร์บางตัวอนุญาตให้เชเดอร์ประมวลผลแชร์ทรัพยากรข้อมูลกับไปป์ไลน์กราฟิกได้อย่างง่ายดาย ซึ่งช่วยให้การผสานรวมกราฟิกและการประมวลผลง่ายขึ้น
เชเดอร์เทนเซอร์
เทนเซอร์เชเดอร์เป็นโปรแกรมเร่งความเร็วที่จัดการกับการดำเนินการเมทริกซ์บนอาร์เรย์ขนาดใหญ่ซึ่งเป็นการดำเนินการประเภทหนึ่งที่ใช้กันทั่วไปใน AI ที่ใช้ โครงข่ายประสาทเทียมอาจทำงานบนNPUหรือGPUเทนเซอร์เชเดอร์ได้รับการสนับสนุนโดยMicrosoftผ่านDirectMLโดยKhronos Groupผ่านOpenVXโดยAppleผ่านCore MLโดยGoogleผ่านTensorFlowและโดยLinux Foundationผ่านONNX [ 25 ] NvidiaและAMDเรียกส่วนของฮาร์ดแวร์ที่รับผิดชอบในการดำเนินการเชเดอร์เหล่านี้ว่า "เทนเซอร์คอร์" [ 26 ]
การเขียนโปรแกรม
มีภาษาโปรแกรมหลายภาษาที่ใช้สำหรับเขียนเชเดอร์โดยเฉพาะ และการเลือกใช้ภาษาใดนั้นขึ้นอยู่กับสภาพแวดล้อมเป้าหมาย ภาษาสำหรับเขียนเชเดอร์ใน OpenGL คือGLSLและ Direct3D ใช้HLSL ส่วนเฟรมเวิร์ก Metalที่ใช้ในอุปกรณ์ของ Apple มีภาษาสำหรับเขียนเชเดอร์เป็นของตัวเองเรียกว่าMetal Shading Language
ใน API กราฟิกสมัยใหม่ เชเดอร์จะถูกคอมไพล์เป็นSPIR-Vซึ่งเป็นภาษาตัวกลางก่อนที่จะแจกจ่ายให้กับผู้ใช้ปลายทาง มาตรฐานนี้ช่วยให้สามารถเลือกภาษาการแรเงาได้อย่างยืดหยุ่นมากขึ้น โดยไม่คำนึงถึงแพลตฟอร์มเป้าหมาย[ 27 ] SPIR-V ได้รับการสนับสนุนครั้งแรกโดย Vulkan และ OpenGL และกำลังถูกนำไปใช้โดย Direct3D ด้วย[ 28 ]
โปรแกรมแก้ไขเชเดอร์ GUI
แพลตฟอร์มการพัฒนา เกมสมัยใหม่เช่นUnity , Unreal EngineและGodotมีตัวแก้ไขแบบโหนดที่สามารถสร้างเชเดอร์ได้โดยไม่ต้องเขียนโค้ด ผู้ใช้จะได้รับกราฟแบบมีทิศทางของโหนดที่เชื่อมต่อกัน ซึ่งช่วยให้ผู้ใช้กำหนดทิศทางของพื้นผิว แผนที่ และฟังก์ชันทางคณิตศาสตร์ต่างๆ ไปเป็นค่าเอาต์พุต เช่น สีแบบกระจาย สีและความเข้มของแสงสะท้อน ความหยาบ/ความเป็นโลหะ ความสูง ค่าปกติ และอื่นๆ จากนั้นกราฟจะถูกคอมไพล์เป็นเชเดอร์
ในบริบทของการพัฒนาเว็บ เครื่องมือสร้างเชเดอร์แบบภาพและแบบส่วนประกอบก็ปรากฏขึ้นเช่นกัน แพลตฟอร์มอย่าง shaders.com ให้การประกอบเชเดอร์แบบขับเคลื่อนด้วยส่วนประกอบเพื่อการรวมเข้ากับเฟรมเวิร์กฟรอนต์เอนด์ เช่นVue , ReactและSvelteในขณะที่เครื่องมืออย่างShadertoyและ FragCoord.xyz มุ่งเน้นไปที่การสร้างและการดีบักเชเดอร์ในระดับล่าง
ดูเพิ่มเติม
อ่านเพิ่มเติม
- Upstill, Steve (1990). The RenderMan Companion: A Programmer's Guide to Realistic Computer Graphics . Addison-Wesley. ISBN 0-201-50868-0.
- Ebert, David S ; Musgrave, F. Kenton ; Peachey, Darwyn ; Perlin, Ken ; Worley, Steven (1994). การสร้างพื้นผิวและการสร้างแบบจำลอง: แนวทางเชิงกระบวนการ . AP Professional. ISBN 0-12-228730-4.
- เฟอร์นันโด, แรนดิมา ; คิลการ์ด, มาร์ค (2003). คู่มือ CG: คู่มือฉบับสมบูรณ์สำหรับกราฟิกแบบเรียลไทม์ที่ตั้งโปรแกรมได้ . แอดดิสัน-เวสลีย์ โปรเฟสชันแนล. ISBN 0-321-19496-9.
- Rost, Randi J (2004). OpenGL Shading Language . Addison-Wesley Professional. ISBN 0-321-19789-5.
ลิงก์ภายนอก
- ส่วนขยาย Geometry Shader ของ OpenGL
- บทเรียน DirectX และ HLSL ของ Riemer : บทเรียน HLSL โดยใช้ DirectX พร้อมตัวอย่างโค้ดมากมาย
- ขั้นตอนการประมวลผลข้อมูล (Direct3D 10)