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

เทคนิคการวาดภาพ
---------------

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

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

คอมพิวเตอร์กราฟิกส์
-------------------

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

### ตัวอย่างง่าย ๆ

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

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

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

### แหล่งกำเนิดแสง

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

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

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

### การลดทอนตามระยะทาง

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

ภาพด้านล่างแสดงการให้แสงเงาของทรงสี่เหลี่ยมสองลูกที่ส่องสว่างจากแหล่งกำเนิดแสงที่แตกต่างกัน ในภาพด้านซ้าย ทรงสี่เหลี่ยมทั้งสองมีสีในแต่ละด้านเหมือนกัน ในภาพด้านขวา ด้านหน้าของทรงสี่เหลี่ยมด้านหน้าจะสว่างกว่าเล็กน้อย ส่วนความสว่างบนพื้นนั้น ยิ่งใกล้มากเท่าไหร่ก็ยิ่งสว่างมากขึ้นเท่านั้น แหล่งกำเนิดแสงในภาพด้านขวาถูกตั้งค่าเพื่อให้ลำแสงอ่อนลงเมื่อระยะห่างจากแหล่งกำเนิดแสงเพิ่มขึ้น สิ่งนี้เรียกว่า "การลดทอนตามระยะทาง" (distance falloff หรือ distance attenuation) และส่งผลให้ได้ภาพที่สมจริงยิ่งขึ้นโดยไม่ต้องเพิ่มแหล่งกำเนิดแสง

|  |  |
| --- | --- |
|  กล่อง 2 ใบแสดงผลด้วยตัวเร็นเดอร์ OpenGL แม้ว่าระยะทางจากจุดสังเกตจะต่างกัน แต่ก็วาดด้วยสีเดียวกัน |  การวาดแบบจำลองเดียวกันใน ARRIS CAD โดยมีการลดทอนของแสง พื้นผิวใกล้กับจุดสังเกตจะสว่างกว่า |

มีหลายวิธีในการคำนวณการลดทอนของแสงตามระยะทาง

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

### การให้แสงเงาแบบเรียบ

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

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

ดูเพิ่ม
-------

* คอมพิวเตอร์กราฟิกส์สามมิติ
* ตัวให้แสงเงา
* ภาษาการให้แสงเงา
* การสะท้อนแบบลัมแบร์ท