เล่นกับแสง ตอนที่ 1 – High Dynamic Range Rendering

อืม…. จริงๆเรื่องนี้อยากจะเขียนมานานแล้ว ตั้งแต่ demo ตัวแรกที่ทำ technic นี้เขียนเป็น C++, D3D แต่ครั้งนี้ถือโอกาสดีที่ FX Composer 2.0 ของ Nvidia ได้ออกมาลืมตาดูโลก เลยลองใช้มันทำงานดู ถือโอกาสทวน HDR ไปในตัว

FX Composer คือ Tool ที่ช่วยให้เราสามารถพัฒนา shader ได้โดยที่ไม่ต้องเขียน program จริงๆ คือมันจะเป็น Framework ที่สามารถรัน Shader ของเราได้ เนื่องจากเคยใช้มันใน version 1 และก็ไม่เคยใช้มันกับ shader ที่เป็นพวก multi-pass rendering ครั้งนี้เลยเสียเวลาพอตัวกว่าจะทำเสร็จ ถ้าใช้ C++ คงเสร็จไปนานแล้ว(รึเปล่า?)

High Dynamic Range Rendering (HDR Rendering)
Dynamic Range คือช่วงของแสง (ไม่รู้จะอธิบายว่ายังไงดี) ถ้าจะให้ยกตัวอย่างง่ายๆก็ เช่น หน้าจอคอมพิวเตอร์ทั่วไปนี้สามารถแสดงแสงสีแดงได้ในช่วง 0-255 ค่า ซึ่งค่า 255 คือสีแดงสด หรือสีแดงที่สว่างที่สุดเท่าที่จะสามารถแสดงได้ นั่นคือมี Contrast Ratio 256:1 แต่แสงในธรรมาชาติในตอนกลางวันนั้นมีค่า Contrast Ratio ถึง 50000:1 นั่นคือหน้าจอคอมพิวเตอร์นั้นสามารถแสดงผลได้ในช่วงแสงหนึ่งเท่านั้น เป็นผลให้ระบบการคำนวนแสงในสมัยก่อนจนถึงเมื่อสิบปีที่แล้วได้ใช้การคำนวนในช่วง 0-255 เท่านั้น แต่เมื่อ Hardware มีความสามารถสูงขึ้น การคำนวนก็ย่อมทำได้มากขึ้น HDR คือช่วงแสงที่กว้างขึ้น นั่นคือการคำนวนแสงไม่จำกัดในช่วง 0-255 อีกต่อไป หากแต่ว่าเป็นช่วง 0 – … หลายๆล้านเลยทีเดียว

ความสามารถในการคำนวน HDR ช่วยให้ภาพดูดีขึ้นได้ยังไง อธิบายไปก็คงยากอีกลงดูภาพตัวอย่างข้างล่าง

ภาพนี้เป็นทรงกลม(อาจจะดูไม่ค่อยออก เพราะไม่ได้ใช้แสงภายนอก เลยไม่มีเงา) สีเขียวที่เห็นนั้นมีค่า ~187 ส่วนสีที่เห็นเป็นสีดำบนทรงกลมมีค่าสีเขียวเท่ากับ 3 (เกือบดำ) ลองนึกดูว่าถ้าภาพนี้สว่างขึ้น + 200 ถ้าเป็น LDR (Low Dynamic Range) 0-255 ส่วนที่เป็นสีเขียวจะสว่างขึ้นไปสูงสุดที่ 255 ไม่ใช่ 187 + 200 = 387 เพราะว่า LDR มีช่วงแค่เพียง 0-255 เท่านั้น ในขณะเดียวกันส่วนสีดำจะมีค่าเท่ากับ 3 + 187 = 200

ภาพข้างล่างนี้ใช้ Photoshop เพิ่มแสงเข้าไปเพิ่อจำลอง effect ที่ว่ามา (ภาพจำลอง ไม่ได้เกิดจากภาพแรก + ความสว่าง 200)

จะเห็นว่าสว่างขึ้นทั้งหมด แต่สีเขียวจะหยุดอยู่ที่ 255 ไม่สามารภมีค่ามาไปกว่านี้ นั่นคือยิ่งเพิ่มค่าความสว่าง ส่วนที่สว่างอยู่แล้วจะหยุดอยู่กับที่ ส่วนที่มืดจะสว่างขึ้น ช่วงความต่างจะน้อยลง แต่ถ้าเป็น HDR ในตัวอย่างภาพแรก การเพิ่มความสว่างของภาพสามารถที่ได้โดยการคำนวนภาพใน แล้วแสดงผลออกมา ซึ่งการคำนวนภาพนี้จะทำที่ช่วงที่กว้างกว่า 0-255 ทำให้ช่วงความต่างของส่วนที่สว่างและส่วนที่มืดยังคงอยู่ในระดับใกล้เคียงกับระดับเดิม การคำนวนนี้อาจเรียกได้ว่า Exposure Timing ซึ่งเหมือนกับการเปิดหน้ากล้องถ่ายรูปค้างไว้นานๆ ยิ่งนานเท่าไรแสงยิ่งเข้ามามาก ทำให้ภาพมีความสว่างมากขึ้น ภาพแรกนั้นใช้ Exposure = 0 ส่วนภาพข้างล่างนี้เป็น Exposure = 0.5

Exposure = 1.0

Exposure = 2.0

*แอบเพิ่ม blur filter + glow แบบมักง่าย เข้าไป ให้มันดูดีขึ้นมาหน่อย

..ครั้งหน้าจะมาพร้อม HDR Image เผื่อจะดูดีกว่านี้…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: