Radiance HDR 图像 (.hdr)
Radiance มาตรฐานRadiance RGBE (HDR) คือรูปแบบภาพ High Dynamic Range พื้นฐานที่พัฒนาขึ้นสำหรับระบบสร้างภาพสังเคราะห์ Radiance โดยจัดเก็บค่าความสว่างที่แม่นยำตามหลักโฟโตเมทรีโดยใช้ตัวเลขยกกำลังร่วมกันขนาด 8-bit (shared exponent)
ตรวจสอบและดู Metadata
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ HDR โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวในระดับไบต์ (Magic Bytes)
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ HDR โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
23 3F 52 41 44 49 41 4E 43 45 0Aการแสดงผลรูปแบบ ASCII: #?RADIANCE\n
มาตรฐาน: Radiance Synthetic Imaging System Standard
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | ASCII header ending with empty line followed by resolution string and binary RLE scanlines |
| การบีบอัด | Adaptive adaptive run-length encoding (RLE) applied per-channel scanline |
| การจัดลำดับไบต์ (Byte Endianness) | Big-Endian / Network byte order |
| พื้นที่สี | Linear Rec.709 RGB with CIE chromaticity coordinates |
| ช่องสัญญาณและโครงสร้าง | RGBE: Red, Green, Blue (8-bit mantissas) + shared 8-bit Exponent |
| ขนาดสูงสุด | Practically unlimited (32-bit unsigned resolution strings) |
| ความโปร่งใส | None (physical radiant luminance measurements) |
| การสตรีมและแบบโปรเกรสซีฟ | Sequential scanline-by-scanline streaming playback |
ตารางเปรียบเทียบทางเทคนิค: HDR กับคู่แข่ง
| คุณลักษณะทางเทคนิค | HDR (ปัจจุบัน) | EXR | TIFF | JPEG |
|---|---|---|---|---|
| การเข้ารหัสพิกเซล | 32-bit RGBE (shared 8-bit exponent) | 16-bit half / 32-bit float per channel | จำนวนเต็ม 8/16-บิต หรือทศนิยม 32-บิต | 8-bit gamma-encoded integer |
| กรณีการใช้งานหลัก | แสงสภาพแวดล้อม 360 องศา (IBL) | การซ้อนภาพหลายผ่านสำหรับ VFX | การถ่ายภาพและการเตรียมพิมพ์ | กราฟิกเว็บมาตรฐาน |
| ขอบเขตช่วงไดนามิก | 76 อันดับของขนาด (10^-38 ถึง 10^38) | ช่วงทศนิยมที่กว้างเกือบอนันต์ | แตกต่างกันไปตามความลึกบิต | ช่วง SDR 8-บิตที่จำกัด |
| ช่องสัญญาณที่รองรับ | เฉพาะ RGB | ช่องสัญญาณตามอำเภอใจไม่จำกัด | ช่องสัญญาณตามอำเภอใจหลายช่อง | RGB / CMYK |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
ภาพแสดงแถบเส้นแนวนอนพาดผ่านความกว้างของเฟรมทั้งหมด
สาเหตุหลัก: ไบต์นับความยาวสตรีม (run-length count) เสียหายระหว่างการคลายการบีบอัด scanline RLE
การกู้คืน: ซ่อมแซมเครื่องหมาย scanline ที่เสียหายด้วย File2File 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 ปลายทาง
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน:
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- ใช้หน่วยความจำกะทัดรัดเพียง 32-bit ต่อพิกเซล แต่ครอบคลุมช่วงความสว่างของแสงจริงถึง 76 ลำดับความสว่าง
- รองรับสากลในโปรแกรมเรนเดอร์ 3D ส่วนใหญ่ (Blender, Unreal Engine, Unity, Cinema 4D) สำหรับภาพแผนที่สภาพแวดล้อมรอบทิศทาง 360 องศา
- โครงสร้างไฟล์มีความเรียบง่ายและแข็งแกร่ง สามารถนำไปใช้งานบนแพลตฟอร์มซอฟต์แวร์ต่างๆ ได้อย่างง่ายดาย
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- อาจเกิดอาการแถบสีแตก (banding) ในบริเวณที่มืดสนิท เนื่องจากข้อจำกัดของการเข้ารหัสด้วยเลขยกกำลังร่วม 8-bit
- ช่องสัญญาณ RGB ไม่สามารถจัดเก็บค่าติดลบหรือเลเยอร์พาสหลายเลเยอร์แบบอิสระได้
- ถูกแทนที่ด้วย OpenEXR เป็นส่วนใหญ่ในกระบวนการผลิตงานเทคนิคพิเศษแบบหลายพาส
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- ไฟล์ Radiance HDR ทุกไฟล์จะเริ่มต้นด้วยข้อความส่วนหัว '#?RADIANCE' หรือ '#?RGBE'
- รูปแบบนี้ถูกสร้างขึ้นมาเพื่อจำลองแสงสว่างทางกายภาพในการออกแบบอาคารก่อนที่จะมีการก่อสร้างจริง
- บทความวิจัยอันโด่งดังเมื่อปี 1997 ของ Paul Debevec ในงาน SIGGRAPH เรื่อง 'Recovering High Dynamic Range Radiance Maps from Photographs' ได้ใช้รูปแบบนี้เพื่อปฏิวัติการจัดแสงในงาน CGI
คำถามทางเทคนิคที่พบบ่อย
ไฟล์ .hdr ต่างจากไฟล์รูปภาพ JPEG ทั่วไปอย่างไร?
ไฟล์ .hdr เก็บค่าแสงสว่างทางกายภาพที่แท้จริง ไม่ใช่แค่ค่าพิกเซลสำหรับแสดงผลบนจอภาพ ทำให้เหมาะสำหรับใช้เป็นสภาพแวดล้อมแสงในงาน 3D
ฉันสามารถนำไฟล์ HDR ไปใช้ทำอะไรได้บ้าง?
นิยมนำไปใช้เป็นไฟล์ภาพพาโนรามา 360 องศาเพื่อจำลองแสงเงา (Environment Lighting) ในโปรแกรมเรนเดอร์ 3D
ทำไมภาพ HDR ถึงดูมืดหรือซีดเมื่อเปิดในโปรแกรมดูภาพทั่วไป?
เนื่องจากภาพ HDR เก็บช่วงไดนามิกที่กว้างมาก หน้าจอทั่วไปไม่สามารถแสดงผลช่วงแสงทั้งหมดได้ จึงต้องผ่านกระบวนการปรับโทนสี (tone mapping)