การนำเทคโนโลยี Spectral Ray Tracing มาใช้
(larswander.com)- Spectral ray tracing เป็นวิธีที่สร้าง การกระจายกำลังสเปกตรัม (SPD) ของแต่ละพิกเซล โดยแทนที่จะใช้รังสีที่บรรทุกค่า RGB อย่างเดียว จะพิจารณาทั้งความยาวคลื่นและเฟสด้วย
- ray tracing ทั่วไปเพื่อประสิทธิภาพจะติดตามย้อนจากกล้องไปยังทิศทางแหล่งกำเนิดแสง และลดทอนรังสีให้เป็นอนุภาคอย่างง่ายที่มี เวกเตอร์ RGB
- ดวงตามนุษย์สร้างสีจากการตอบสนองของเซลล์รูปกรวยสามชนิดที่ไวต่อความยาวคลื่นสั้น กลาง และยาว และแม้เป็นสีเดียวกันก็อาจเกิดจาก SPD ที่ต่างกันได้
- ในฉากที่ความยาวคลื่นส่งผลต่อเส้นทางและสีของแสง เช่น การกระจายแสง หรือการแทรกสอดของฟิล์มบาง การประมาณแบบ RGB อย่างเดียวอาจไม่เพียงพอ
- spectral ray tracer แบบไม่มี dependency ที่สร้างด้วย JavaScript และ GLSL ถูกใช้เป็นเครื่องมือสำหรับสร้างสีสันและการเคลื่อนไหวเหนือจริงในงานคอมพิวเตอร์อาร์ตที่จงใจเปลี่ยนกฎของแสง
กล้องที่สร้างด้วยโค้ดและ ray tracing
- ในคอมพิวเตอร์อาร์ต ทั้งฉากและกล้องสามารถสร้างขึ้นด้วยโค้ดทั้งหมด แล้วแปลงผลการเรนเดอร์เป็น อาร์เรย์ของค่า RGB
- ray tracing ทำงานโดยสะท้อนรังสีไปมาระหว่างวัตถุเสมือน และจำลองเส้นทางของแสงที่เดินทางระหว่างกล้องจำลองกับแหล่งกำเนิดแสง
- เพราะข้อจำกัดด้านประสิทธิภาพ จึงไม่ได้ติดตามการเคลื่อนที่ของแสงจริงทั้งหมดตรง ๆ แต่ใช้การลดรูปหลายแบบ
- เนื่องจากรังสีส่วนใหญ่จากแหล่งกำเนิดแสงจะไปไม่ถึงกล้อง จึงไม่เริ่มจากแหล่งกำเนิดแสง แต่ ติดตามย้อนกลับจากมุมมองของกล้อง
- การติดตามย้อนกลับนี้สมเหตุสมผลทางฟิสิกส์ภายใต้สมมติฐาน T-symmetry ที่ว่ากฎการส่งผ่านแสงสมมาตรตามทิศทางของเวลา
- การลดรูปที่ใหญ่กว่านั้นคือการปฏิบัติต่อรังสีไม่ใช่คลื่น แต่เป็นอนุภาคที่มี เวกเตอร์สี RGB
- แม้จะละเลยธรรมชาติแบบคลื่นของแสง แต่ในหลายฉากก็ยังให้ผลที่ดูสมจริงทางฟิสิกส์
- การประมาณนี้เป็นไปได้เพราะดวงตามนุษย์มีเซลล์รับรู้สีสามชนิดที่ไวต่อความยาวคลื่นสั้น กลาง และยาว
ดวงตาไม่ได้ตอบสนองต่อ RGB แต่ตอบสนองต่อสเปกตรัม
- แสงในโลกจริงโดยทั่วไปไม่ได้มีเพียงความยาวคลื่นเดียว แต่ประกอบด้วย การกระจายกำลังสเปกตรัม (SPD) ที่เป็นการผสมของหลายความยาวคลื่น
- สีหนึ่งสีที่มนุษย์มองเห็นอาจสอดคล้องกับ SPD ได้จำนวนมาก ปรากฏการณ์นี้เรียกว่า metamerism
- ตัวอย่างเช่น สีเหลืองอาจมองเห็นได้จากความยาวคลื่นเดี่ยวแถวประมาณ 580nm
- ในอุปกรณ์ที่ใช้แค่ RGB อย่างจอคอมพิวเตอร์ ก็สามารถสร้างสีเหลืองด้วยการผสมแสงสีแดงกับสีเขียว
- ยังมี สีที่ไม่ใช่สีสเปกตรัม ซึ่งไม่สามารถสร้างจากความยาวคลื่นเดี่ยวได้ เช่น สี magenta
- magenta ไม่มีตำแหน่งเดี่ยวบนสเปกตรัม
- ต้องอาศัยการผสมของความยาวคลื่นต่ำและสูง หรือก็คือแสงสีน้ำเงินกับสีแดง
- กระบวนการแปลง SPD ให้เป็นสีสามารถจัดการได้ด้วยคณิตศาสตร์
- มีความเชื่อมโยงเชิงปริมาณระหว่างฟิสิกส์ สรีรวิทยา และประสบการณ์สีเชิงอัตวิสัย
- ความเชื่อมโยงนี้ถูกรวบรวมไว้ใน CIE 1931 color spaces ที่จัดทำขึ้นในปี 1931
- หากต้องการลงมือเขียนเองโดยตรง สามารถอ้างอิง บทเกี่ยวกับสีใน Physically Based Rendering
ฉากที่ความยาวคลื่นเปลี่ยนผลลัพธ์
- ใน ray tracing ไม่จำเป็นต้องพิจารณาทั้งสเปกตรัมทั้งหมดหรือ ความยาวคลื่น ของรังสีแต่ละเส้นเสมอไป
- อย่างไรก็ตาม ในบางฉาก คุณสมบัติแบบคลื่นของแสงส่งผลโดยตรงต่อเส้นทางการเดินทาง และทำให้สีที่เห็นเปลี่ยนไปด้วย
- ตัวอย่างที่เด่นชัดคือ การกระจายแสง
- เส้นทางการเดินทางของแสงโค้งงอต่างกันตามความยาวคลื่น
- ปรากฏการณ์ที่ปริซึมแยกแสงขาวออกเป็นความถี่องค์ประกอบก็อยู่ในกรณีนี้
- อีกตัวอย่างหนึ่งคือ การแทรกสอดของฟิล์มบาง (thin film interference)
- ใช้อธิบายลวดลายคล้ายรุ้งที่เห็นบนฟองสบู่
- แสงที่สะท้อนจากชั้นบนและชั้นล่างของขอบเขตสบู่จะเกิดการแทรกสอดแบบเสริมและหักล้างกัน
- กระบวนการนี้ไม่ได้แยกสเปกตรัมออกเป็นความยาวคลื่นเดี่ยว แต่เพิ่มหรือลดส่วนร่วมของบางช่วงในสเปกตรัม
- ผลลัพธ์คือมักเกิดสีที่ไม่ใช่สีสเปกตรัม เช่น cyan, teal, magenta และน้ำตาล
สิ่งที่ spectral ray tracing จัดการ
- spectral ray tracing คือ ray tracing ที่คำนึงถึง คุณสมบัติแบบคลื่น ของแสง
- แทนที่จะคำนวณโลกด้วยสี RGB เท่านั้น มันจะสร้าง การกระจายกำลังสเปกตรัม สำหรับแต่ละพิกเซลของฉาก
- โดยใช้ทั้งความยาวคลื่นและเฟสของรังสี จึงประเมินสีได้ดีขึ้นในสถานการณ์ที่ข้อมูลนี้มีความสำคัญ
- มีประโยชน์เป็นพิเศษเมื่อความยาวคลื่นและเฟสเป็นตัวเปลี่ยนสีผลลัพธ์ เช่น ในการกระจายแสงหรือการแทรกสอดของฟิล์มบาง
การนำไปใช้ในคอมพิวเตอร์อาร์ต
- ในงานช่วงหลัง มีการใช้วิธีจงใจทำลายกฎการเคลื่อนที่ของแสง และสร้างกล้องของจักรวาลที่ต่างจากความจริงเล็กน้อยด้วยโค้ด
- ทำให้สามารถจัดการกับความอุดมสมบูรณ์ของสเปกตรัมแสงทั้งหมด พร้อมกับเปลี่ยนกฎการส่งผ่านแสงให้เหนือจริงได้
- ผลงานที่เผยแพร่ถูกสร้างด้วย spectral ray tracer แบบไม่มี dependency ที่เขียนด้วย JavaScript และ GLSL
- ตัวอย่างงานมีดังนี้
- Light Doesn't Bend That Way #1, 2023
- สร้างขึ้นโดยทำให้มุมสะท้อนเป็นฟังก์ชันของความยาวคลื่น
- กระบวนการนี้ดูเหมือนจะสร้างเฉพาะสีสเปกตรัม
- Untitled, 2023
- เป็นงานที่กำลังพัฒนาสำหรับซีรีส์ FULL_SPECTRUM และเปิดเผยในโตเกียวเมื่อปี 2023
- Untitled, 2023
- เผยแพร่เป็น Video 3
- กระบวนการทำให้งานเคลื่อนไหวในระบบนี้ถูกให้ความสำคัญเป็นพิเศษ
- Untitled, 2024
- Light Doesn't Bend That Way #1, 2023
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ถ้าอยากลองทำเอง อีบุ๊กฟรี Ray Tracing Gems II 1 ครอบคลุม GPU ray tracing แบบเรียลไทม์บนพื้นฐาน API ล่าสุดและการเร่งความเร็วด้วยฮาร์ดแวร์ และยังมีบทเกี่ยวกับ spectral rendering ด้วย
โดยเฉพาะบทที่ 42 “Efficient spectral rendering on the GPU for predictive rendering” ที่เกี่ยวข้องโดยตรง
1 https://www.realtimerendering.com/raytracinggems/rtg2/
ถ้าต้องการเริ่มต้นแบบรวดเร็วมาก ก็ขอแนะนำ Ray Tracing in One Weekend 1 และถ้าหลังจากนั้นอยากเจาะลึก Physically Based Rendering [2] ก็เป็นตัวเลือกที่ดี
1 https://raytracing.github.io/
[2] https://pbrt.org/
แม้จะไม่มีเวลาลงมือเล่น ray tracing เอง แต่พอเปิดดูช่วงต้นของหนังสือแล้วพบว่า alias sampling เป็นเทคนิคที่สง่างามและดีมาก
มันมีประโยชน์ในบริบทที่กว้างกว่างานกราฟิกมาก เลยคิดว่าน่าจะดีถ้าได้รู้จักเร็วกว่านี้
ตัวอย่างของ spectral ray tracer มีอยู่หลายตัว
Mitsuba เป็นเรนเดอร์เรอร์โอเพนซอร์สสำหรับงานวิจัยที่มีฟีเจอร์เจ๋ง ๆ มากมาย เช่น differentiable rendering https://www.mitsuba-renderer.org/
Maxwell มีโหมด spectral สองแบบที่มีความแม่นยำต่างกัน และวิธีที่ซับซ้อนกว่านั้นมักใช้กันบ่อยในสายออปติก https://maxwellrender.com/
Manuka ของ Wētā FX เป็นเรนเดอร์เรอร์แบบ spectral และถูกใช้ในภาพยนตร์ขนาดยาวหลายเรื่อง https://dl.acm.org/doi/10.1145/3182161 และ https://www.wetafx.co.nz/research-and-tech/technology/manuka
ถ้าอยากดูโครงสร้างภายใน แต่ระบบสำหรับโปรดักชันขนาดใหญ่ซับซ้อนเกินไป แนะนำให้ลองดู implementation นี้
เป็นตัวอย่างที่ยอดเยี่ยมซึ่งใกล้เคียงกับองค์ประกอบขั้นต่ำของ spectral path tracer https://github.com/TomCrypto/Lambda
ยังมี Indigo Renderer และ LuxRender แบบโอเพนซอร์สด้วย
https://indigorenderer.com
https://luxcorerender.org
ในความเห็นของผม spectral rendering เป็นตัวอย่างที่ดีว่า ray tracing เองไม่ใช่จุดหมายปลายทางของการเรนเดอร์ แต่ใกล้เคียงกับจุดเริ่มต้นมากกว่า
บางครั้งเห็นบรรยากาศเหมือนปัญหาการเรนเดอร์ถูกแก้แล้วด้วย ray tracing แบบเรียลไทม์ แต่ผมคิดว่ามันห่างไกลจากความจริงมาก
เท่าที่ผมรู้ ระบบ spectral rendering ส่วนใหญ่ไม่ได้จัดการ thin-film interference หรือเอฟเฟกต์อื่น ๆ ที่อิงคลื่น ดังนั้นด้านนั้นก็เป็นพรมแดนใหม่อีกแห่ง
ในโลกจริงมีรายละเอียดมากมายจนน่าทึ่ง
ยิ่งการเรนเดอร์เข้าใกล้ หลักการทางฟิสิกส์ ที่เป็นพื้นฐานมากขึ้น เกมเอนจินก็จะยิ่งกลายเป็นเอนจินจำลองโลกมากขึ้น
องค์ประกอบหลายส่วนของเอนจินที่ทุกวันนี้มักแยกกัน อาจค่อย ๆ บรรจบไปสู่จุดร่วม เช่น เส้นแบ่งระหว่างเลเยอร์ฟิสิกส์กับเลเยอร์เรนเดอร์อาจลดลง
ผมสงสัยว่าแนวโน้มแบบนี้พอจะสังเกตเห็นได้ในระดับหนึ่งแล้วหรือยัง
เมื่อพลังคำนวณเพิ่มขึ้นอีกหลายลำดับขั้น abstraction ในปัจจุบันก็คงดูเหมือนรูปแบบที่เกิดจากข้อจำกัดทางเทคนิคในอดีต เหมือนที่เรามองเทคโนโลยีล้ำสมัยเมื่อ 30 ปีก่อน
มันเหมือนแฟรกทัล ยิ่งมองเข้าไปใกล้ ก็ยิ่งเผยรายละเอียดที่ส่งผลต่อสิ่งที่เราเห็นมากขึ้น
เรากำลังค่อย ๆ เข้าใกล้ การเรนเดอร์ที่ถูกต้องตามฟิสิกส์ 100% แต่คงไม่มีวันถึง 100% และน่าจะค่อย ๆ เพิ่มสัดส่วนเล็ก ๆ เหล่านั้นต่อไป
นอกจากคำกล่าวที่ว่าในโลกจริงมีรายละเอียดมากมายจนน่าทึ่งแล้ว ยังมี โพลาไรเซชันของแสง1 ซึ่งมีคน implement ไม่มากนัก แต่ให้เอฟเฟกต์ที่ค่อนข้างสังเกตเห็นได้ในบางฉาก
มี LuxRender เป็นเอนจิน spectral ray tracing ที่ยอดเยี่ยม: https://luxcorerender.org/
อย่างไรก็ตาม นั่นอิงจากเวอร์ชันเก่า ส่วนเรนเดอร์เรอร์ LuxCore รุ่นล่าสุดยังไม่รองรับ spectral อย่างสมบูรณ์
นอกจากเอฟเฟกต์ที่กล่าวถึงที่นี่แล้ว spectral rendering ยังมีข้อดีอื่นอีก
ถ้า implement ด้วยวิธี tracing แสง ภายหลังจะสามารถเปลี่ยนสี สเปกตรัม และความเข้มของแหล่งกำเนิดแสงได้ และในหลายฉาก indirect lighting ก็จะแม่นยำขึ้นมาก
ถ้าอยากลองเล่นกับการทำ Ray Tracing การเขียนเองนั้นง่ายกว่าที่คิด
มีหนังสือฟรีดี ๆ (https://raytracing.github.io/books/RayTracingInOneWeekend.ht...) และถ้ารู้ Unity อยู่บ้าง บทเรียนแบบใช้ GPU (https://medium.com/@jcowles/gpu-ray-tracing-in-one-weekend-3...) ก็เหมาะมาก
เวอร์ชัน Unity มี GUI ที่ช่วยให้พรีวิวฉากและขยับกล้องได้ง่าย จึงลองปรับเล่นได้สะดวกกว่า
ถ้าไม่อยากเขียนตั้งแต่ศูนย์ก็มี implementation ที่อิงจากแหล่งข้อมูลเหล่านี้อยู่มาก แต่การลองทำเองนั้นคุ้มค่าแน่นอน
ผมเคยลองเล่นกับ implementation พื้นฐาน โดยทำให้ลำแสงเคลื่อนที่เหมือนอนุภาค ทำให้เส้นทางโค้งเข้าหาวัตถุหรือโค้งออกจากวัตถุ หรือจำมุมสะท้อนครั้งสุดท้ายไว้ใช้ตอนชนกับวัสดุถัดไป
ผลลัพธ์ส่วนใหญ่ไม่ค่อยดีนัก แต่ทำให้เกิดสัญชาตญาณต่อสิ่งที่กำลังดูอยู่ และการลองขยับกล้องนิดหน่อยก็ช่วยได้มาก
เป็นโปรเจกต์เขียนโปรแกรมงานอดิเรกขนาดเล็กที่สนุกจริง ๆ
อย่างไรก็ตาม วิธีคือเมื่อมีการตัดกับวัตถุ ก็จะตั้งค่าความยาวสูงสุดของลำแสงให้เล็ก แล้วปล่อยลำแสงหลายเส้นออกไปรอบ ๆ จากจุดนั้น จากนั้นใช้สิ่งที่คล้ายสมการแรงโน้มถ่วงกับการชนแต่ละครั้ง
แน่นอนว่าช้าและเป็นเพียงการประมาณ แต่ทำได้ง่าย และยังสามารถทำสิ่งอย่าง วัตถุหลุมดำ ที่ทำให้แสงในฉากโค้งงอได้ด้วย
ตอนเขียน ray tracer ตัวแรก ไม่ได้ใช้เวลาทั้งสุดสัปดาห์ และเป็นโค้ด C ราวสี่หน้าที่เขียนเสร็จในคืนเดียว
http://canonical.org/~kragen/sw/aspmisc/my-very-first-raytra...
หลังจากนั้นผมทำ ray tracer ด้วย Clojure และ Lua และทำ ray marcher ด้วย JavaScript ซึ่งทั้งหมดสามารถเล็กและเรียบง่ายมากได้
เมื่อคืนผมดู Spongy ของ mentor/TBC https://www.pouet.net/prod.php?which=53871 ซึ่งเป็น ray tracer สำหรับอนิเมชันแฟร็กทัลที่มีหมอก โดยมี คำสั่งภาษาเครื่อง 65 คำสั่ง และไฟล์รันบน MS-DOS มีขนาด 128 ไบต์
ภาพจาก ray tracing มักสวยมากจนทำให้รู้สึกกดดันว่าอัลกอริทึมและโครงสร้างข้อมูลที่สร้างมันขึ้นมาต้องยากมาก แต่ถ้ารู้จักเวกเตอร์สามมิติอยู่แล้ว จริง ๆ แล้วค่อนข้างเรียบง่าย
ผมรู้สึกว่า SDF ray marching เรียบง่ายกว่า ray tracer แบบ Whitted ดั้งเดิม เพราะมันแทนที่คณิตศาสตร์ซับซ้อนส่วนใหญ่ที่ใช้แก้หาจุดตัดที่แม่นยำกับเรขาคณิตของฉาก ด้วยอัลกอริทึมการประมาณแบบวนทีละขั้นที่เรียบง่ายมาก
ray tracer ที่เล็กสุดขีดอย่าง Spongy หรือ bootsector raytracer ของ Oscar Toledo G. https://github.com/nanochess/RayTracer มักเข้าใจยากกว่า implementation ที่ใหญ่กว่านิดหน่อยด้วยซ้ำ
เพราะการทำให้เล็กขนาดนั้นต้องใช้ทริกจำนวนมาก และทริกเหล่านั้นเข้าใจยากกว่าโค้ดที่ตรงไปตรงมา
ถ้าจะไปให้สุด ไม่ใช่แค่ ความยาวคลื่น ของลำแสงแต่ละเส้นเท่านั้น แต่ต้องติดตามโพลาไรเซชันและเฟสด้วย
คุณสมบัติเหล่านี้ส่งผลต่อการรับรู้ของมนุษย์จริง ๆ ในบางกรณีที่พบไม่บ่อย เช่น ฟิล์มบางหรือเกรตติงเลี้ยวเบน แต่มีอยู่จริงแน่นอน
เห็นความงามของคณิตศาสตร์และฟิสิกส์ที่ทำงานได้จริง
สงสัยว่าการปรับแต่งบางอย่างที่ใส่เข้าไปเพื่อความสวยงาม อาจมีประโยชน์กับวิธี visualization แบบอื่นด้วยหรือไม่
ยังทำให้นึกถึงตอนที่คัดโค้ดจากหนังสือเพื่อทำเพลงหลายเสียงบน Apple II
พอลองรัน เห็นได้ชัดว่ามีบางอย่างผิดพลาด แต่แทนที่จะเป็นเสียงรบกวนหยาบ ๆ กลับได้แพตเทิร์นเสียงที่งดงามอย่างประหลาด และความผิดพลาดโดยบังเอิญนั้นก็น่าหลงใหลทีเดียว
คิดว่าน่าจะสร้างภาพที่มีช่องสัญญาณมากกว่า 3 ช่องได้มาก เช่น ภาพไฮเปอร์สเปกตรัม
เคยลองดูเพื่อใช้เน้นสเปกตรัมในการสอนเด็ก ๆ เรื่องสีให้ดีขึ้น
เช่น ถ้าเอาเมาส์ชี้บนพิกเซลในภาพ1 ก็จะแสดงสเปกตรัม เพื่อเสริมความเชื่อมโยงระหว่างสีและสเปกตรัม
แต่ภาพไฮเปอร์สเปกตรัมนั้นหาได้ยาก และโดยทั่วไปกล้อง[2] ก็มีราคาแพง
ถ้าอย่างนั้นภาพไฮเปอร์สเปกตรัมสังเคราะห์ล่ะ?
renderer บนเบราว์เซอร์ที่ความละเอียดต่ำมากอาจเร็วพอให้ลองเล่นแบบโต้ตอบกับแสงและวัสดุได้
นอกจากนี้ยังน่าจะลองทำมุมมองของภาวะการเห็นสีผิดปกติ, มนุษย์ที่ “มองเห็น UV ได้หลังผ่าตัดเอาเลนส์ต้อกระจกออก”, สัตว์เลี้ยงลูกด้วยนมที่ไม่ใช่ไพรเมตแบบ dichromat (หนู/สุนัข), และปลาม้าลายแบบ tetrachromat ได้ด้วย
1 http://www.ok.sc.e.titech.ac.jp/res/MSI/MSIdata31.html
[2] กล้องมัลติสเปกตรัมราคาถูกที่ใช้แสงแถบแคบแบบ time-multiplexed: https://ubicomplab.cs.washington.edu/publications/hypercam/
ค่าสุดท้ายของภาพคือค่าที่แปลงจาก contribution ของแหล่งกำเนิดแสงแต่ละแหล่ง และเมื่อรู้สเปกตรัมของแหล่งกำเนิดแสงแล้ว ก็สามารถมีสเปกตรัมของพิกเซลได้ด้วย
เพียงแต่ถ้าเจอ dispersion หรือเอฟเฟกต์ฟิล์มบางที่มีนัยสำคัญ ก็ต้องสุ่มตัวอย่างความยาวคลื่นในแต่ละ path ทำให้กลายเป็นวิธีที่เป็นการประมาณมากขึ้น
ผมกำลังคิดว่าจะลองทำการหักเหแสงใน distribution ray tracer ของตัวเอง
เป็นวิธีเชิงความน่าจะเป็น ไม่ใช่วิธีแบบขนาน https://en.m.wikipedia.org/wiki/Distributed_ray_tracing
น่าจะสุ่มสุ่มตัวอย่างความถี่ คำนวณสีนั้น แล้วนำไปใช้ปรับสีของรังสีได้
ถ้าต้องการชดเชยให้สีจากการหักเหล้วน ๆ ที่มีความสว่างเหลือ 1/3 ก็ต้องคูณผลลัพธ์ด้วย 3
เท่าที่จำได้ เป็นคำที่มาจากหนึ่งในเปเปอร์ SIGGRAPH ของ Rob Cook
ในฐานะแนวคิดที่ทั่วไปและรวมศูนย์มากกว่า ควรขยับไปทาง path tracing จะดีกว่า และเวลาค้นหาหรือศึกษาก็หาเคล็ดลับกับเทคนิคได้ง่ายกว่า
เมื่อผสาน spectral rendering กับการหักเหแสง ก็ถูกต้องแล้วที่ต้องสุ่มตัวอย่างจากการกระจายเพื่อเลือกความถี่
โดยทั่วไปอาจค่อนข้างยาก จึงควรค่อย ๆ สร้างทีละขั้น
การสะท้อนก็เช่นเดียวกัน แต่ในทั้งสองกรณี การจะใช้วัสดุที่ขึ้นกับความถี่หรือไม่นั้นขึ้นอยู่กับการเลือก
แม้จะใช้วัสดุแบบทำให้ง่ายขึ้น ก็ยังมีเหตุผลที่จะใช้แนวทางแบบสเปกตรัมอยู่ดี