# การให้แสงเงา
การให้แสงเงา (shading) เป็นเทคนิคการแสดงแสงและเงาในสามมิติโดยการตัดแสงและความมืดในคอมพิวเตอร์กราฟิกส์สามมิติ หรือการวาดภาพประกอบ สำหรับในทางจิตรกรรม อาจเรียกอีกอย่างว่า การแรเงา (shadowing)

 เทคนิคการวาดภาพ 
right|thumb|150x150px| ตัวอย่างการให้แสงเงา
ในการวาดภาพบนกระดาษ การให้แสงเงาเมื่อวาดแสดงภาพสามมิติทำโดยใช้วัสดุสีเข้มสำหรับพื้นที่มืดและวัสดุสีอ่อนสำหรับพื้นที่สว่าง เทคนิคการให้แสงเงาประกอบด้วยการแรเส้นเงา โดยวาดเส้นจำนวนมากที่ตัดกันเป็นมุมฉากในช่วงต่าง ๆ กันเพื่อแสดงเงา พื้นที่ที่ช่วงระหว่างเส้นแคบกว่าจะกลายเป็นพื้นที่เงาเข้ม ในทำนองเดียวกัน ส่วนที่มีระยะห่างระหว่างเส้นกว้างจะกลายเป็นส่วนที่สว่าง

การวาดภาพโดยคำนึงถึงการให้แสงเงาทำให้สามารถวาดภาพที่มองดูแล้วมีความลึกลงบนกระดาษได้

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

 ตัวอย่างง่าย ๆ 
การให้แสงเงาจะเปลี่ยนสีพื้นผิวของแบบจำลอง 3 มิติตามมุมที่ลำแสงตัดกับพื้นผิวนั้น

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

 แหล่งกำเนิดแสง 
right|frame| การให้แสงเงาจากแหล่งกำเนิดแสงแบบจุด
การให้แสงเงาในคอมพิวเตอร์กราฟิกส์สามมิติจะใช้แหล่งกำเนิดแสงชนิดต่าง ๆ กันไป เช่น:

 แอมเบียนต์ไลต์ (ambient light) - เป็นแสงที่ให้แสงสว่างแก่วัตถุทั้งหมดในฉากอย่างเท่าเทียมกัน ไม่มีการให้แสงเงาเนื่องจากไม่ได้ระบุตำแหน่งของแหล่งกำเนิดแสงและความสว่างจะเท่ากันตลอด
 ไดเรกชันนัลไลต์ (directional light) - เป็นการฉายลำแสงแบบขนานและสม่ำเสมอจากทิศทางที่กำหนด สมมติว่าเป็นแหล่งกำเนิดแสงที่อยู่ไกลมาก เช่น แสงแดด จะมีการให้แสงเงา แต่จะไม่เกิดการการลดทอนตามระยะทางขึ้น
 พอยต์ไลต์ (point light) - เป็นแสงที่เกิดจากจุดเดียวและกระจายออกไปยังทุกทิศทาง
 สปอตไลต์ (spot light) - เป็นแสงที่ถูกสร้างขึ้นจากจุดเดียวและกระจายออกไปยังมุมตันส่วนหนึ่งเป็นรูปกรวย
 แอเรียไลต์ (area light) - เป็นแสงที่ออกจากระนาบหนึ่งและแผ่กระจายไปยังด้านหนึ่ง
 วอลุมไลต์ (volume light) - เป็นแหล่งกำเนิดแสงที่ส่องสว่างแค่ภายในขอบเขตที่กำหนดเท่านั้น

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

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

ภาพด้านล่างแสดงการให้แสงเงาของทรงสี่เหลี่ยมสองลูกที่ส่องสว่างจากแหล่งกำเนิดแสงที่แตกต่างกัน ในภาพด้านซ้าย ทรงสี่เหลี่ยมทั้งสองมีสีในแต่ละด้านเหมือนกัน ในภาพด้านขวา ด้านหน้าของทรงสี่เหลี่ยมด้านหน้าจะสว่างกว่าเล็กน้อย ส่วนความสว่างบนพื้นนั้น ยิ่งใกล้มากเท่าไหร่ก็ยิ่งสว่างมากขึ้นเท่านั้น แหล่งกำเนิดแสงในภาพด้านขวาถูกตั้งค่าเพื่อให้ลำแสงอ่อนลงเมื่อระยะห่างจากแหล่งกำเนิดแสงเพิ่มขึ้น สิ่งนี้เรียกว่า "การลดทอนตามระยะทาง" (distance falloff หรือ distance attenuation) และส่งผลให้ได้ภาพที่สมจริงยิ่งขึ้นโดยไม่ต้องเพิ่มแหล่งกำเนิดแสง
center|thumb|260x260px| กล่อง 2 ใบแสดงผลด้วยตัวเร็นเดอร์ OpenGL แม้ว่าระยะทางจากจุดสังเกตจะต่างกัน แต่ก็วาดด้วยสีเดียวกันcenter|thumb|282x282px| การวาดแบบจำลองเดียวกันใน ARRIS CAD โดยมีการลดทอนของแสง พื้นผิวใกล้กับจุดสังเกตจะสว่างกว่า
มีหลายวิธีในการคำนวณการลดทอนของแสงตามระยะทาง

 เชิงเส้น (กำลัง 1) - ลดปริมาณแสงที่ส่องไปยังแหล่งกำเนิดแสงตามสัดส่วนของ x โดยที่ x คือระยะทางไปยังแหล่งกำเนิดแสง
  กำลัง 2 - ความสว่างจะแปรตาม 1/x2 ป็นรูปแบบที่ใกล้เคียงกับคุณสมบัติของแสงในโลกแห่งความเป็นจริง คือเมื่อระยะห่างจากแหล่งกำเนิดแสงเพิ่มขึ้นเป็นสองเท่า ปริมาณแสงที่ไปถึงก็จะลดลงเป็นสี่เท่า
 กำลัง n - ความสว่างจะแปรตาม 1/xn
 นอกจากนี้ยังสามารถใช้ฟังก์ชัน อื่น ๆ อีก

 การให้แสงเงาแบบเรียบ 
thumb|300x300px| ตัวอย่างการแก้ไขการให้แสงเงาแบบแบน
การให้แสงเงาแบบเรียบ (flat shading) เป็นเทคนิคการจัดแสงแบบหนึ่งในคอมพิวเตอร์กราฟิกส์สามมิติ การให้แสงเงาจะทำกับแต่ละพื้นผิวตามมุมระหว่างเวกเตอร์แนวฉากของโพลีกอนที่ประกอบกันเป็นวัตถุและทิศทางของแหล่งกำเนิดแสง และสีจะถูกกำหนดตามความเข้มของแสงที่ส่องสว่างพื้นผิวโพลีกอน วิธีนี้มักใช้เมื่อต้องการทำการเร็นเดอร์ด้วยความเร็วสูง เช่น ระบบประมวลผลแบบเรียลไทม์ ซึ่งไม่เหมาะจะใช้เทคนิคการให้แสงเงาขั้นสูงกว่านี้ อย่างไรก็ตาม เมื่อเทคโนโลยีหน่วยประมวลผลกราฟิกส์ได้พัฒนาขึ้น จึงสามารถทำการให้แสงเงาอย่างรวดเร็วและราบรื่นแม้ในผลิตภัณฑ์ระดับล่างและอุปกรณ์เคลื่อนที่ การนำเทคนิคให้แสงเงาแบบเรียบมาใช้เพื่อเหตุผลด้านประสิทธิภาพจึงลดน้อยลงไป

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