ภาพ HDR แบบ 16 บิตครึ่งลอยเป็นพื้นผิว (กระจาย / อัลเบโด้)?


10

ดังนั้นฉันจึงคิดถึงเรื่องนี้ซักพักหนึ่งแล้วลอง google เพื่อหาคำตอบ แต่ก็ไม่ประสบความสำเร็จ

หากพื้นผิวทั้งหมดของคุณเป็นภาพ 8 บิต LDR เช่น JPEG ไม่สามารถทำให้เกิดความขัดแย้งกับการควบคุมการเปิดรับแสง / การทำแผนที่โทนเมื่อแสดงผล นั่นคือถ้าคุณปรับการแสดงผลการรับแสงของภาพของคุณที่ควรเปิดเผยรายละเอียดในพื้นผิวที่ไม่ได้มีจริงเพราะพวกเขาถูกยึดโดยช่วงไดนามิกต่ำ ดังนั้นจึงไม่มีเหตุผลที่จะมีพื้นผิวเป็นภาพ HDR ที่บันทึกเป็น. exr ในพื้นที่สีเชิงเส้นด้วย 16 บิตครึ่งลอยเพื่อให้ได้สีที่ดี (32 บิต "เต็ม" ลอยอาจเกินหรือไม่) เพื่อให้มีรายละเอียดและค่าสีที่ถูกต้องฉันอาจคิดว่ามีผลกระทบต่อ GI และคำนวณการตกเลือดของสีอย่างไร

หรือมันไม่จำเป็นเพียงเพราะผลลัพธ์สุดท้ายของการเรนเดอร์ที่เราต้องการนั้นอาจจะคล้ายกับระดับการเปิดรับแสงของพื้นผิวเมื่อถ่ายภาพด้วยวิธีใด? และเนื่องจากกล้องส่วนใหญ่ถ่ายภาพที่ 12-14 บิตคุณจะต้องใช้การเปิดรับแสงหลาย ๆ พื้นผิวและทำงานพิเศษทั้งหมดเพื่อรวมเข้าด้วยกันเป็นหนึ่ง HDRI

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

คำตอบ:


8

ในการผลิตภาพยนตร์เราแทบจะไม่เคยใช้พื้นผิว 8 บิตสำหรับสี / อัลเบโดเนื่องจากแถบ ฯลฯ (JPEG เป็นปัญหาโดยเฉพาะอย่างยิ่งเนื่องจากข้อมูลจำเพาะมันเป็น sRGB มากกว่าค่าเชิงเส้น) เราใช้ 'ครึ่ง' (16 บิตลอย) ) หรือค่าจำนวนเต็ม 16 บิตที่ไม่ได้ลงชื่อสำหรับพื้นผิวสี / albedo


1
ว้าวขอบคุณ @ LarryGritz! เมื่อพิจารณาว่าคุณทำงานให้กับ Sony Pictures Imageworks ฉันจะพาคุณไปเป็นแหล่งข้อมูลที่น่าเชื่อถือมาก! :) แต่คุณจะจับพื้นผิวเหล่านี้ได้อย่างไร? กล้องส่วนใหญ่ถ่ายในไฟล์ RAW 14 บิตคุณมีกล้องพิเศษที่มีเซ็นเซอร์เชิงเส้น 16 บิตหรือไม่ หรือคุณใช้การสัมผัสหลายครั้งสำหรับพื้นผิวเช่นเดียวกับการถ่ายภาพด้วยแสงตาม HDRI? หรือคุณเพียงแค่จับด้วยกล้อง RAW 14 บิตและบันทึกเป็น "16 บิต" คุณใช้รูปแบบไฟล์อะไรบ้าง. tiff (.tx, .tex) หรือ. exr ขอบคุณอีกครั้งสำหรับข้อมูลของคุณ !! :)
Kristoffer Helander

1
@KristofferHelander: การแปลงจากการจับ 14 บิตเป็นตัวแทน 16 บิตของช่วง 0-1 นั้นสามารถทำได้ง่ายโดยการคูณ แต่พื้นผิวส่วนใหญ่ของเราถูกทาสีไม่ใช่ถ่ายภาพ - บางครั้งพวกเขาจะทาสีโดยตรงในรูปแบบ 16 บิตบางครั้งพวกเขาจะทาสีใน sRGB แล้วแปลงเป็น 16 บิตเมื่อ "เชิงเส้น" เพื่อใช้เป็นพื้นผิว ไม่จำเป็นต้องใช้ HDR สำหรับพื้นผิว albedo
Larry Gritz

1
@KristofferHelander: สำหรับพื้นผิว albedo เรามักจะใช้ TIFF กับข้อมูลจำนวนเต็ม 16 บิต (สิ่งที่เราเรียกว่า. tx เป็นเพียงรูปแบบ TIFF แต่มีการเรียงตัวกันและ MIP-map multiresolution ถูกเก็บไว้เป็นหลาย subimages ภายในไฟล์ TIFF) สำหรับข้อมูล HDR ที่แท้จริงเช่นสภาพแวดล้อมเราใช้ OpenEXR เอาต์พุต Renderer มีแนวโน้มที่จะเป็น OpenEXR
Larry Gritz

8

ใช่เป็นไปได้ในบางกรณีสำหรับการให้แสง HDR และการทำแผนที่เพื่อแสดงปัญหาแถบสีในพื้นผิวสี ในกรณีเหล่านั้นการมีความลึกของบิตที่สูงขึ้นสำหรับพื้นผิวอาจมีประโยชน์ อย่างไรก็ตามจากประสบการณ์ของฉันวัสดุส่วนใหญ่และสถานการณ์แสงทั่วไปไม่แสดงปัญหานี้และพื้นผิวส่วนใหญ่ในเกมทั่วไปนั้นใช้งานได้ดีในแบบ 8 บิต (หรือแม้แต่น้อยกว่า - เกมมักใช้การบีบอัด BC1 ซึ่งช่วยลดพวกเขาได้ 5- 6-5 บิต)

ผู้คนใช้เป้าหมายการเรนเดอร์ HDR เพราะฉากเดียวสามารถมีขนาดความสว่างที่แตกต่างกันอย่างมากมายเช่นห้องมืดที่คุณสามารถมองทะลุผ่านหน้าต่างไปยังด้านนอกที่มีแสงแดดส่องสว่าง 10–100 เท่าของห้อง อย่างไรก็ตามพื้นผิวสีนั้นมีขนาดไม่ใหญ่นัก พวกเขาเป็นตัวแทนของการสะท้อนซึ่งโดยเนื้อแท้ในช่วง [0, 1] และในทางปฏิบัติวัสดุในชีวิตประจำวันน้อยกว่าการสะท้อนประมาณ 2-5% ดังนั้นภาพ 8 บิต (ที่มีการเข้ารหัสแกมม่า) จึงสามารถแสดงสีแบบกระจายและแบบ specular ที่มีความแม่นยำเพียงพอ

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

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

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


combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frameความเข้าใจที่ดีมาก แต่เราอาจสังเกตว่าการเข้ารหัสแกมม่าอยู่ที่นี่อย่างแม่นยำเพื่อลดจุดนี้ หากเขามีปัญหาทำไมไม่ลองเลขชี้กำลังแกมมาที่เหนือกว่า? ที่จะยับยั้งการใช้งานฮาร์ดแวร์ sRGB samplers
v.oddou

ขอบคุณสำหรับข้อมูลของคุณ แต่เพื่อความกระจ่างฉันส่วนใหญ่สนใจในเรื่องนี้จากมุมมองการเรนเดอร์ภาพถ่ายจริงด้วยเรย์เรนเดอร์เรกเกอร์ (เช่นเรย์จิต, V-Ray, อาร์โนลด์ ฯลฯ ) ด้วยการจำลองแสงเต็มรูปแบบและการส่องสว่างทั่วโลก เอ็นจิ้นเกมเวลา
Kristoffer Helander

@KristofferHelander รู้ดี แต่ฉันคิดว่าสิ่งที่ฉันเขียนอาจใช้เช่นเดียวกับการเรนเดอร์ออฟไลน์ แต่ฉันยอมรับว่าฉันไม่มีประสบการณ์ตรงมากในพื้นที่นั้น
นาธานรีด

@NathanReed ใช่คุณทำมากที่สุดอย่างแน่นอนบางจุดที่ดีจริงๆมี :)
Kristoffer Helander

5

ฉันต้องการเชิญผู้อ่านให้อ่านบทความนี้เกี่ยวกับเทคโนโลยี rasterization เครื่องยนต์ Quake 2 ที่อธิบายในรายละเอียดหากพวกเขามีเวลา

หาก TLDR โปรดใส่ใจกับภาพนี้: ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่เราเห็นคือช่องสัญญาณAlbedoนั่นคือสิ่งที่คุณต้องการเข้ารหัสใน 16 บิตถ้าฉันเข้าใจคำถามของคุณอย่างถูกต้อง
ฉันจะไม่พูดว่า " ถ้าหากสามารถเข้ารหัสได้ 256 สีสำหรับเกมในอดีตทำไมเราต้องใช้ 281474976710656 (นั่นคือ 281 ล้านล้านดอลลาร์) ในเกมใหม่ " แม้ว่าฉันต้องการ แต่ดูเหมือนว่าคนพิลึกของพิกซาร์จาก ขึ้น เพิ่มเติมสร้างสรรค์ถ้าคุณสังเกตเห็นในภาพนี้ทุกอย่างอยู่ที่ระดับแสงเดียวกัน ยิ่งความเข้มสูงสุดเป็นไปได้ที่จะรักษาความอิ่มตัวที่ต้องการ (ความหมายในพื้นที่ HSV, V ถูก maxed out)

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


ขอบคุณสำหรับข้อมูลของคุณ แต่เพื่อความกระจ่างฉันส่วนใหญ่สนใจในเรื่องนี้จากมุมมองการเรนเดอร์ภาพถ่ายจริงด้วยเรย์เรนเดอร์เรกเกอร์ (เช่นเรย์จิต, V-Ray, อาร์โนลด์ ฯลฯ ) ด้วยการจำลองแสงเต็มรูปแบบและการส่องสว่างทั่วโลก เอ็นจิ้นเกมเวลา ฉันได้อัปเดตโพสต์ดั้งเดิมของฉันแล้ว
Kristoffer Helander
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.