ภาพ Radiance HDR (.hdr)
Radiance มาตรฐานRadiance RGBE (HDR) คือรูปแบบภาพ High Dynamic Range พื้นฐานที่พัฒนาขึ้นสำหรับระบบสร้างภาพสังเคราะห์ Radiance โดยจัดเก็บค่าความสว่างที่แม่นยำตามหลักโฟโตเมทรีโดยใช้ตัวเลขยกกำลังร่วมกันขนาด 8-bit (shared exponent)
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ HDR โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ HDR โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
23 3F 52 41 44 49 41 4E 43 45 0Aการแสดงผลรูปแบบ ASCII: #?RADIANCE\n
มาตรฐาน: Radiance Synthetic Imaging System Standard
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | ส่วนหัว ASCII ที่ลงท้ายด้วยบรรทัดว่าง ตามด้วยสตริงความละเอียดและสแกนไลน์ RLE แบบไบนารี |
| การบีบอัด | ใช้การเข้ารหัส RLE แบบปรับตามข้อมูลกับแต่ละบรรทัดสแกนของแต่ละช่อง |
| การจัดลำดับไบต์ | Big-Endian / ลำดับไบต์เครือข่าย |
| พื้นที่สี | RGB แบบ Linear Rec.709 พร้อมพิกัดโครมาติซิตี CIE |
| ช่องสัญญาณและโครงสร้าง | RGBE: แดง เขียว น้ำเงิน (แมนทิสซา 8 บิต) + เลขชี้กำลัง 8 บิตที่ใช้ร่วมกัน |
| ขนาดสูงสุด | แทบไม่จำกัด (สตริงความละเอียดแบบจำนวนเต็มไม่มีเครื่องหมาย 32 บิต) |
| ความโปร่งใส | ไม่มี (การวัดความส่องสว่างเชิงรังสีทางกายภาพ) |
| การสตรีมและแบบโปรเกรสซีฟ | เล่นสตรีมมิงตามลำดับทีละสแกนไลน์ |
ตารางเปรียบเทียบทางเทคนิค: HDR กับคู่แข่ง
| คุณลักษณะทางเทคนิค | HDR (ปัจจุบัน) | EXR | TIFF | JPEG |
|---|---|---|---|---|
| การเข้ารหัสพิกเซล | RGBE 32 บิต (เลขชี้กำลัง 8 บิตที่ใช้ร่วมกัน) | half 16 บิต / float 32 บิตต่อแชนเนล | จำนวนเต็ม 8/16-บิต หรือทศนิยม 32-บิต | จำนวนเต็ม 8 บิตที่เข้ารหัสแกมมา |
| กรณีการใช้งานหลัก | แสงสภาพแวดล้อม 360 องศา (IBL) | การซ้อนภาพหลายผ่านสำหรับ VFX | การถ่ายภาพและการเตรียมพิมพ์ | กราฟิกเว็บมาตรฐาน |
| ขอบเขตช่วงไดนามิก | ช่วงขนาด 76 ลำดับขั้น (10^-38 ถึง 10^38) | ช่วงทศนิยมที่กว้างเกือบอนันต์ | แตกต่างกันไปตามความลึกบิต | ช่วง SDR 8-บิตที่จำกัด |
| ช่องสัญญาณที่รองรับ | เฉพาะ RGB | ช่องสัญญาณตามอำเภอใจไม่จำกัด | ช่องสัญญาณตามอำเภอใจหลายช่อง | RGB / CMYK |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
ภาพแสดงแถบเส้นแนวนอนพาดผ่านความกว้างของเฟรมทั้งหมด
สาเหตุหลัก: ไบต์นับความยาวสตรีม (run-length count) เสียหายระหว่างการคลายการบีบอัด scanline RLE
การกู้คืน: ซ่อมแซมเครื่องหมาย scanline ที่เสียหายด้วย File2File.app HDR Repair หรือแปลงเป็นรูปแบบ EXR
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
โปรแกรมถอดรหัส Radiance HDR มักจะแยกวิเคราะห์บรรทัดส่วนหัวแบบ ASCII โดยใช้ฟังก์ชันสตริงที่ไม่มีการจำกัดขนาด ซึ่งอาจกระตุ้นให้เกิดช่องโหว่ stack buffer overflow
เวกเตอร์การโจมตีที่ทราบ
- การเรียกใช้คำสั่ง sprintf/sscanf แบบไม่จำกัดขนาดเมื่ออ่านส่วนหัวสตริงความละเอียด ('-Y %d +X %d')
- เกิดข้อผิดพลาด Heap out-of-bounds write ระหว่างการถอดรหัส scanline แบบ RLE ที่ผิดรูป
- เกิดภาวะ Integer overflow เมื่อจัดสรรหน่วยความจำสำหรับบัฟเฟอร์เลขทศนิยม 32-bit ปลายทาง
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ตรวจสอบความถูกต้องของความยาวส่วนหัว ASCII และขนาดบรรทัดสแกนก่อนจัดสรรบัฟเฟอร์ภาพ
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- ใช้หน่วยความจำเพียง 32 บิตต่อพิกเซล แต่ครอบคลุมช่วงความสว่างของแสงจริงที่ต่างกันได้ถึง 76 ลำดับขั้นของขนาด
- รองรับโดยแพ็กเกจเรนเดอร์ 3 มิติหลายตัวสำหรับแผนที่สภาพแวดล้อม ทั้งนี้ขึ้นอยู่กับแอปพลิเคชัน
- โครงสร้างไฟล์ค่อนข้างกะทัดรัด ซึ่งซอฟต์แวร์ที่รองรับ Radiance HDR สามารถนำไปใช้ได้
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- อาจเกิดอาการแถบสีแตก (banding) ในบริเวณที่มืดสนิท เนื่องจากข้อจำกัดของการเข้ารหัสด้วยเลขยกกำลังร่วม 8-bit
- ช่องสัญญาณ RGB ไม่สามารถจัดเก็บค่าติดลบหรือเลเยอร์พาสหลายเลเยอร์แบบอิสระได้
- ถูกแทนที่ด้วย OpenEXR เป็นส่วนใหญ่ในกระบวนการผลิตงานเทคนิคพิเศษแบบหลายพาส
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- ไฟล์ Radiance HDR ทุกไฟล์จะเริ่มต้นด้วยข้อความส่วนหัว '#?RADIANCE' หรือ '#?RGBE'
- รูปแบบนี้ถูกสร้างขึ้นมาเพื่อจำลองแสงสว่างทางกายภาพในการออกแบบอาคารก่อนที่จะมีการก่อสร้างจริง
- บทความวิจัยอันโด่งดังเมื่อปี 1997 ของ Paul Debevec ในงาน SIGGRAPH เรื่อง 'Recovering High Dynamic Range Radiance Maps from Photographs' ได้ใช้รูปแบบนี้เพื่อปฏิวัติการจัดแสงในงาน CGI
คำถามทางเทคนิคที่พบบ่อย
HDRI ใช้ในงาน 3D อย่างไร
ไฟล์ HDRI (.hdr) ใช้เป็นแผนที่สภาพแวดล้อมพาโนรามา 360 องศา เพื่อให้แสง เงา และภาพสะท้อนจากโลกจริงบนวัตถุ 3D ดูสมจริง
การเข้ารหัส RGBE 32-bit ทำงานอย่างไร?
แทนที่จะจัดเก็บตัวเลข floating-point แยกกันสามค่า RGBE ใช้ 8 บิตต่อสีแดง สีเขียว และสีน้ำเงิน พร้อมเลขชี้กำลัง 8-bit ที่ใช้ร่วมกัน ทำให้บรรจุช่วงไดนามิก HDR เต็มรูปแบบได้ในเพียง 4 bytes ต่อพิกเซล
ฉันจะแปลงไฟล์ HDR เป็น JPG ได้อย่างไร
File2File.app สามารถปรับโทนสีและแปลงไฟล์ Radiance HDR 32 บิตเป็นภาพ JPG หรือ PNG มาตรฐานได้โดยตรงในเบราว์เซอร์